From e7a84463dfe9afd91d9cc658866733ef922276b2 Mon Sep 17 00:00:00 2001 From: TeoV Date: Thu, 3 May 2018 05:38:47 -0400 Subject: [PATCH] Add test move for account --- migrator/accounts.go | 3 + migrator/accounts_it_test.go | 225 ++++++++++++++++++++++++++++++++++- migrator/migrator_it_test.go | 5 +- utils/consts.go | 6 + 4 files changed, 236 insertions(+), 3 deletions(-) diff --git a/migrator/accounts.go b/migrator/accounts.go index e741fc9af..f5807691f 100755 --- a/migrator/accounts.go +++ b/migrator/accounts.go @@ -51,6 +51,9 @@ func (m *Migrator) migrateCurrentAccounts() (err error) { if err := m.dmOut.DataDB().SetAccount(acc); err != nil { return err } + if err := m.dmIN.DataDB().RemoveAccount(idg); err != nil { + return err + } m.stats[utils.Accounts] += 1 } } diff --git a/migrator/accounts_it_test.go b/migrator/accounts_it_test.go index 0625031ec..38ae0f348 100755 --- a/migrator/accounts_it_test.go +++ b/migrator/accounts_it_test.go @@ -22,7 +22,6 @@ package migrator import ( "flag" - "fmt" "log" "path" "reflect" @@ -33,3 +32,227 @@ import ( "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) + +var ( + accPathIn string + accPathOut string + accCfgIn *config.CGRConfig + accCfgOut *config.CGRConfig + accMigrator *Migrator + accAction string + dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here") + loadHistorySize = flag.Int("load_history_size", config.CgrConfig().LoadHistorySize, "Limit the number of records in the load history") +) + +var sTestsAccIT = []func(t *testing.T){ + testAccITFlush, + testAccITMigrateAndMove, +} + +func TestAccountITaccMigratorrateRedisConnection(t *testing.T) { + +} + +func TestAccountITaccMigratorrateRedis(t *testing.T) { + accAction = utils.Migrate + for _, stest := range sTestsAccIT { + t.Run("TestAccountITMigrateRedis", stest) + } + +} + +func TestAccountITMongoConnection(t *testing.T) { + +} + +func TestAccountITMongo(t *testing.T) { + accAction = utils.Migrate + for _, stest := range sTestsAccIT { + t.Run("TestAccountITMigrateMongo", stest) + } +} + +func TestAccountITMoveConnection(t *testing.T) { + accPathIn := path.Join(*dataDir, "conf", "samples", "tutmongo") + accCfgIn, err := config.NewCGRConfigFromFolder(accPathIn) + if err != nil { + t.Fatal(err) + } + accPathOut := path.Join(*dataDir, "conf", "samples", "tutmysql") + accCfgOut, err := config.NewCGRConfigFromFolder(accPathOut) + if err != nil { + t.Fatal(err) + } + dataDB, err := engine.ConfigureDataStorage(accCfgIn.DataDbType, + accCfgIn.DataDbHost, accCfgIn.DataDbPort, accCfgIn.DataDbName, + accCfgIn.DataDbUser, accCfgIn.DataDbPass, accCfgIn.DBDataEncoding, + config.CgrConfig().CacheCfg(), *loadHistorySize) + if err != nil { + log.Fatal(err) + } + dataDB2, err := engine.ConfigureDataStorage(accCfgOut.DataDbType, + accCfgOut.DataDbHost, accCfgOut.DataDbPort, accCfgOut.DataDbName, + accCfgOut.DataDbUser, accCfgOut.DataDbPass, accCfgOut.DBDataEncoding, + config.CgrConfig().CacheCfg(), *loadHistorySize) + if err != nil { + log.Fatal(err) + } + oldDataDB, err := ConfigureV1DataStorage(accCfgOut.DataDbType, + accCfgOut.DataDbHost, accCfgOut.DataDbPort, accCfgOut.DataDbName, + accCfgOut.DataDbUser, accCfgOut.DataDbPass, accCfgOut.DBDataEncoding) + if err != nil { + log.Fatal(err) + } + accMigrator, err = NewMigrator(dataDB2, dataDB, accCfgIn.DataDbType, + accCfgIn.DBDataEncoding, nil, nil, accCfgIn.StorDBType, oldDataDB, + accCfgIn.DataDbType, accCfgIn.DBDataEncoding, nil, accCfgIn.StorDBType, + false, false, false, false, false) + if err != nil { + log.Fatal(err) + } +} + +func TestAccountITMove(t *testing.T) { + accAction = utils.Move + for _, stest := range sTestsAccIT { + t.Run("TestAccountITMove", stest) + } +} + +func testAccITFlush(t *testing.T) { + accMigrator.dmOut.DataDB().Flush("") + if err := engine.SetDBVersions(accMigrator.dmOut.DataDB()); err != nil { + t.Error("Error ", err.Error()) + } +} + +func testAccITMigrateAndMove(t *testing.T) { + timingSlice := []*engine.RITiming{ + &engine.RITiming{ + Years: utils.Years{}, + Months: utils.Months{}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{}, + }, + } + v1b := &v1Balance{ + Value: 100000, + Weight: 10, + DestinationIds: "NAT", + ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + Timings: timingSlice, + } + v1Acc := &v1Account{ + Id: "*OUT:CUSTOMER_1:rif", + BalanceMap: map[string]v1BalanceChain{ + utils.DATA: v1BalanceChain{v1b}, + utils.VOICE: v1BalanceChain{v1b}, + utils.MONETARY: v1BalanceChain{ + &v1Balance{Value: 21, + ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + Timings: timingSlice}}}} + + v2d := &engine.Balance{ + Uuid: "", ID: "", + Value: 100000, + Directions: utils.StringMap{"*OUT": true}, + ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + Weight: 10, + DestinationIDs: utils.StringMap{"NAT": true}, + RatingSubject: "", + Categories: utils.NewStringMap(), + SharedGroups: utils.NewStringMap(), + Timings: timingSlice, + TimingIDs: utils.NewStringMap(""), + Factor: engine.ValueFactor{}} + v2b := &engine.Balance{ + Uuid: "", ID: "", + Value: 0.0001, + Directions: utils.StringMap{"*OUT": true}, + ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + Weight: 10, + DestinationIDs: utils.StringMap{"NAT": true}, + RatingSubject: "", + Categories: utils.NewStringMap(), + SharedGroups: utils.NewStringMap(), + Timings: timingSlice, + TimingIDs: utils.NewStringMap(""), + Factor: engine.ValueFactor{}} + m2 := &engine.Balance{ + Uuid: "", + ID: "", + Value: 21, + Directions: utils.StringMap{"*OUT": true}, + ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + DestinationIDs: utils.NewStringMap(""), + RatingSubject: "", + Categories: utils.NewStringMap(), + SharedGroups: utils.NewStringMap(), + Timings: timingSlice, + TimingIDs: utils.NewStringMap(""), + Factor: engine.ValueFactor{}} + testAccount := &engine.Account{ + ID: "CUSTOMER_1:rif", + BalanceMap: map[string]engine.Balances{ + utils.DATA: engine.Balances{v2d}, + utils.VOICE: engine.Balances{v2b}, + utils.MONETARY: engine.Balances{m2}}, + UnitCounters: engine.UnitCounters{}, + ActionTriggers: engine.ActionTriggers{}} + switch accAction { + case utils.Migrate: + err := accMigrator.oldDataDB.setV1Account(v1Acc) + if err != nil { + t.Error("Error when setting v1 Accounts ", err.Error()) + } + currentVersion := engine.Versions{utils.StatS: 2, + utils.Thresholds: 2, + utils.Accounts: 1, + utils.Actions: 2, + utils.ActionTriggers: 2, + utils.ActionPlans: 2, + utils.SharedGroups: 2} + err = accMigrator.dmOut.DataDB().SetVersions(currentVersion, false) + if err != nil { + t.Error("Error when setting version for Accounts ", err.Error()) + } + err, _ = accMigrator.Migrate([]string{utils.MetaAccounts}) + if err != nil { + t.Error("Error when migrating Accounts ", err.Error()) + } + result, err := accMigrator.dmOut.DataDB().GetAccount(testAccount.ID) + if err != nil { + t.Error("Error when getting Accounts ", err.Error()) + } + if !reflect.DeepEqual(testAccount.BalanceMap["*voice"][0], result.BalanceMap["*voice"][0]) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.BalanceMap["*voice"][0], result.BalanceMap["*voice"][0]) + } else if !reflect.DeepEqual(testAccount, result) { + t.Errorf("Expecting: %+v, received: %+v", testAccount, result) + } + case utils.Move: + if err := accMigrator.dmIN.DataDB().SetAccount(testAccount); err != nil { + log.Print("GOT ERR DMIN", err) + } + currentVersion := engine.CurrentDataDBVersions() + err := accMigrator.dmOut.DataDB().SetVersions(currentVersion, false) + if err != nil { + t.Error("Error when setting version for Accounts ", err.Error()) + } + err, _ = accMigrator.Migrate([]string{utils.MetaAccounts}) + if err != nil { + t.Error("Error when accMigratorrating Accounts ", err.Error()) + } + result, err := accMigrator.dmOut.DataDB().GetAccount(testAccount.ID) + if err != nil { + t.Error(err) + } + if !reflect.DeepEqual(testAccount, result) { + t.Errorf("Expecting: %+v, received: %+v", testAccount, result) + } + result, err = accMigrator.dmIN.DataDB().GetAccount(testAccount.ID) + if err != utils.ErrNotFound { + t.Error(err) + } + } + +} diff --git a/migrator/migrator_it_test.go b/migrator/migrator_it_test.go index aeb71d2af..83c7162f8 100644 --- a/migrator/migrator_it_test.go +++ b/migrator/migrator_it_test.go @@ -16,6 +16,7 @@ along with this program. If not, see */ package migrator +/* import ( "flag" "fmt" @@ -39,8 +40,7 @@ var ( Move = "move" action string mig *Migrator - dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here") - loadHistorySize = flag.Int("load_history_size", config.CgrConfig().LoadHistorySize, "Limit the number of records in the load history") + ) // subtests to be executed for each migrator @@ -2948,3 +2948,4 @@ func testMigratorTpAliases(t *testing.T) { } } } +*/ diff --git a/utils/consts.go b/utils/consts.go index f19ecb97d..b49fb551c 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -537,6 +537,12 @@ const ( Opensips = "opensips" ) +// Migrator Action +const ( + Move = "move" + Migrate = "migrate" +) + // MetaMetrics const ( MetaASR = "*asr"