Files
cgrates/migrator/tp_rating_profiles_it_test.go
2025-10-29 19:42:40 +01:00

160 lines
4.9 KiB
Go

//go:build integration
// +build integration
/*
Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
Copyright (C) ITsysCOM GmbH
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>
*/
package migrator
import (
"log"
"path"
"reflect"
"testing"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
)
var (
tpRatPrfPathIn string
tpRatPrfPathOut string
tpRatPrfCfgIn *config.CGRConfig
tpRatPrfCfgOut *config.CGRConfig
tpRatPrfMigrator *Migrator
tpRatingProfile []*utils.TPRatingProfile
)
var sTestsTpRatPrfIT = []func(t *testing.T){
testTpRatPrfITConnect,
testTpRatPrfITFlush,
testTpRatPrfITPopulate,
testTpRatPrfITMove,
testTpRatPrfITCheckData,
}
func TestTpRatPrfMove(t *testing.T) {
for _, stest := range sTestsTpRatPrfIT {
t.Run("testTpRatPrfMove", stest)
}
tpRatPrfMigrator.Close()
}
func testTpRatPrfITConnect(t *testing.T) {
var err error
tpRatPrfPathIn = path.Join(*utils.DataDir, "conf", "samples", "tutmongo")
tpRatPrfCfgIn, err = config.NewCGRConfigFromPath(tpRatPrfPathIn)
if err != nil {
t.Fatal(err)
}
tpRatPrfPathOut = path.Join(*utils.DataDir, "conf", "samples", "tutmysql")
tpRatPrfCfgOut, err = config.NewCGRConfigFromPath(tpRatPrfPathOut)
if err != nil {
t.Fatal(err)
}
storDBIn, err := NewMigratorStorDB(tpRatPrfCfgIn.StorDbCfg().Type,
tpRatPrfCfgIn.StorDbCfg().Host, tpRatPrfCfgIn.StorDbCfg().Port,
tpRatPrfCfgIn.StorDbCfg().Name, tpRatPrfCfgIn.StorDbCfg().User,
tpRatPrfCfgIn.StorDbCfg().Password, tpRatPrfCfgIn.GeneralCfg().DBDataEncoding,
tpRatPrfCfgIn.StorDbCfg().StringIndexedFields, tpRatPrfCfgIn.StorDbCfg().PrefixIndexedFields,
tpRatPrfCfgIn.StorDbCfg().Opts, nil)
if err != nil {
log.Fatal(err)
}
storDBOut, err := NewMigratorStorDB(tpRatPrfCfgOut.StorDbCfg().Type,
tpRatPrfCfgOut.StorDbCfg().Host, tpRatPrfCfgOut.StorDbCfg().Port,
tpRatPrfCfgOut.StorDbCfg().Name, tpRatPrfCfgOut.StorDbCfg().User,
tpRatPrfCfgOut.StorDbCfg().Password, tpRatPrfCfgOut.GeneralCfg().DBDataEncoding,
tpRatPrfCfgIn.StorDbCfg().StringIndexedFields, tpRatPrfCfgIn.StorDbCfg().PrefixIndexedFields,
tpRatPrfCfgOut.StorDbCfg().Opts, nil)
if err != nil {
log.Fatal(err)
}
tpRatPrfMigrator, err = NewMigrator(nil, nil, storDBIn, storDBOut, false, false, false, false)
if err != nil {
log.Fatal(err)
}
}
func testTpRatPrfITFlush(t *testing.T) {
if err := tpRatPrfMigrator.storDBIn.StorDB().Flush(
path.Join(tpRatPrfCfgIn.DataFolderPath, "storage", dbPath(tpRatPrfCfgIn.StorDbCfg().Type))); err != nil {
t.Error(err)
}
if err := tpRatPrfMigrator.storDBOut.StorDB().Flush(
path.Join(tpRatPrfCfgOut.DataFolderPath, "storage", dbPath(tpRatPrfCfgOut.StorDbCfg().Type))); err != nil {
t.Error(err)
}
}
func testTpRatPrfITPopulate(t *testing.T) {
tpRatingProfile = []*utils.TPRatingProfile{
{
TPid: "TPRProf1",
LoadId: "RPrf",
Tenant: "Tenant1",
Category: "Category",
Subject: "Subject",
RatingPlanActivations: []*utils.TPRatingActivation{
{
ActivationTime: "2014-07-29T15:00:00Z",
RatingPlanId: "PlanOne",
FallbackSubjects: "FallBack",
},
{
ActivationTime: "2015-07-29T10:00:00Z",
RatingPlanId: "PlanTwo",
FallbackSubjects: "FallOut",
},
},
},
}
if err := tpRatPrfMigrator.storDBIn.StorDB().SetTPRatingProfiles(tpRatingProfile); err != nil {
t.Error("Error when setting TpRatingProfiles ", err.Error())
}
currentVersion := engine.CurrentStorDBVersions()
err := tpRatPrfMigrator.storDBIn.StorDB().SetVersions(currentVersion, false)
if err != nil {
t.Error("Error when setting version for TpRatingProfiles ", err.Error())
}
}
func testTpRatPrfITMove(t *testing.T) {
_, err := tpRatPrfMigrator.Migrate([]string{utils.MetaTpRatingProfiles})
if err != nil {
t.Error("Error when migrating TpRatingProfiles ", err.Error())
}
}
func testTpRatPrfITCheckData(t *testing.T) {
filter := &utils.TPRatingProfile{TPid: tpRatingProfile[0].TPid, LoadId: tpRatingProfile[0].LoadId}
result, err := tpRatPrfMigrator.storDBOut.StorDB().GetTPRatingProfiles(filter)
if err != nil {
t.Error("Error when getting TpRatingProfiles ", err.Error())
}
if !reflect.DeepEqual(tpRatingProfile[0], result[0]) {
t.Errorf("Expecting: %+v, received: %+v", tpRatingProfile[0], result[0])
}
result, err = tpRatPrfMigrator.storDBIn.StorDB().GetTPRatingProfiles(filter)
if err != utils.ErrNotFound {
t.Error(err)
}
}