From c4487efc7988fc252faf3fb2b7d1c2b9b4516dcb Mon Sep 17 00:00:00 2001 From: Trial97 Date: Thu, 7 Mar 2019 15:25:48 +0200 Subject: [PATCH] Updated migrator tests --- migrator/accounts.go | 100 +- migrator/action.go | 63 +- migrator/action_plan.go | 64 +- migrator/action_trigger.go | 61 +- migrator/alias.go | 77 -- migrator/alias_it_test.go | 175 +-- migrator/attributes.go | 132 +- migrator/cdrs.go | 42 +- migrator/chargers.go | 18 +- migrator/costdetails.go | 216 ---- migrator/costdetails_test.go | 49 - migrator/derived_chargers.go | 55 - migrator/derived_chargers_it_test.go | 201 ++- migrator/destinations.go | 57 +- migrator/dispatchers.go | 26 +- migrator/dispatchers_it_test.go | 5 +- migrator/migrator.go | 2 - migrator/migrator_it_test.go | 1761 -------------------------- migrator/rating_plan.go | 18 +- migrator/rating_profile.go | 18 +- migrator/resource.go | 18 +- migrator/session_costs.go | 64 +- migrator/sharedgroup.go | 36 +- migrator/suppliers.go | 18 +- migrator/thresholds.go | 112 +- migrator/timings.go | 18 +- migrator/user.go | 46 - migrator/user_it_test.go | 164 +-- 28 files changed, 589 insertions(+), 3027 deletions(-) delete mode 100644 migrator/costdetails.go delete mode 100644 migrator/costdetails_test.go delete mode 100644 migrator/migrator_it_test.go diff --git a/migrator/accounts.go b/migrator/accounts.go index 55ed3fc8f..697624542 100755 --- a/migrator/accounts.go +++ b/migrator/accounts.go @@ -46,17 +46,16 @@ func (m *Migrator) migrateCurrentAccounts() (err error) { if err != nil { return err } - if acc != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().DataDB().SetAccount(acc); err != nil { - return err - } - if err := m.dmIN.DataManager().DataDB().RemoveAccount(idg); err != nil { - return err - } - m.stats[utils.Accounts] += 1 - } + if acc == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().DataDB().SetAccount(acc); err != nil { + return err + } + if err := m.dmIN.DataManager().DataDB().RemoveAccount(idg); err != nil { + return err + } + m.stats[utils.Accounts] += 1 } return } @@ -71,28 +70,28 @@ func (m *Migrator) migrateV1Accounts() (err error) { if err == utils.ErrNoMoreData { break } - if v1Acnt != nil { - acnt := v1Acnt.V1toV3Account() - if m.dryRun != true { - if err = m.dmOut.DataManager().DataDB().SetAccount(acnt); err != nil { - return err - } - if err = m.dmIN.remV1Account(v1Acnt.Id); err != nil { - return err - } - m.stats[utils.Accounts] += 1 - } + if v1Acnt == nil || m.dryRun { + continue } + acnt := v1Acnt.V1toV3Account() + if err = m.dmOut.DataManager().DataDB().SetAccount(acnt); err != nil { + return err + } + if err = m.dmIN.remV1Account(v1Acnt.Id); err != nil { + return err + } + m.stats[utils.Accounts] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.Accounts: engine.CurrentDataDBVersions()[utils.Accounts]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Accounts version into StorDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Accounts: engine.CurrentDataDBVersions()[utils.Accounts]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Accounts version into StorDB", err.Error())) } return } @@ -107,28 +106,28 @@ func (m *Migrator) migrateV2Accounts() (err error) { if err == utils.ErrNoMoreData { break } - if v2Acnt != nil { - acnt := v2Acnt.V2toV3Account() - if m.dryRun != true { - if err = m.dmOut.DataManager().DataDB().SetAccount(acnt); err != nil { - return err - } - if err = m.dmIN.remV2Account(v2Acnt.ID); err != nil { - return err - } - m.stats[utils.Accounts] += 1 - } + if v2Acnt == nil || m.dryRun { + continue } + acnt := v2Acnt.V2toV3Account() + if err = m.dmOut.DataManager().DataDB().SetAccount(acnt); err != nil { + return err + } + if err = m.dmIN.remV2Account(v2Acnt.ID); err != nil { + return err + } + m.stats[utils.Accounts] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.Accounts: engine.CurrentDataDBVersions()[utils.Accounts]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Accounts version into StorDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Accounts: engine.CurrentDataDBVersions()[utils.Accounts]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Accounts version into StorDB", err.Error())) } return } @@ -149,7 +148,6 @@ func (m *Migrator) migrateAccounts() (err error) { } current := engine.CurrentDataDBVersions() switch vrs[utils.Accounts] { - case 1: return m.migrateV1Accounts() case 2: diff --git a/migrator/action.go b/migrator/action.go index c418fc431..95552d684 100644 --- a/migrator/action.go +++ b/migrator/action.go @@ -51,14 +51,13 @@ func (m *Migrator) migrateCurrentActions() (err error) { if err != nil { return err } - if acts != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetActions(idg, acts, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.Actions] += 1 - } + if acts == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetActions(idg, acts, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.Actions] += 1 } return } @@ -74,29 +73,29 @@ func (m *Migrator) migrateV1Actions() (err error) { if err == utils.ErrNoMoreData { break } - if *v1ACs != nil { - for _, v1ac := range *v1ACs { - act := v1ac.AsAction() - acts = append(acts, act) + if *v1ACs == nil || m.dryRun { + continue + } + for _, v1ac := range *v1ACs { + act := v1ac.AsAction() + acts = append(acts, act) - } - if !m.dryRun { - if err := m.dmOut.DataManager().SetActions(acts[0].Id, acts, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.Actions] += 1 - } } + if err := m.dmOut.DataManager().SetActions(acts[0].Id, acts, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.Actions] += 1 } - if !m.dryRun { - // All done, update version wtih current one - vrs := engine.Versions{utils.Actions: engine.CurrentStorDBVersions()[utils.Actions]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Actions version into dataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Actions: engine.CurrentStorDBVersions()[utils.Actions]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Actions version into dataDB", err.Error())) } return } @@ -121,15 +120,9 @@ func (m *Migrator) migrateActions() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentActions(); err != nil { - return err - } - return - + return m.migrateCurrentActions() case 1: - if err := m.migrateV1Actions(); err != nil { - return err - } + return m.migrateV1Actions() } return } diff --git a/migrator/action_plan.go b/migrator/action_plan.go index a44b459f9..3e79aca70 100644 --- a/migrator/action_plan.go +++ b/migrator/action_plan.go @@ -59,17 +59,16 @@ func (m *Migrator) migrateCurrentActionPlans() (err error) { if err != nil { return err } - if acts != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().DataDB().SetActionPlan(idg, acts, true, utils.NonTransactional); err != nil { - return err - } - if err := m.dmIN.DataManager().DataDB().RemoveActionPlan(idg, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.ActionPlans] += 1 - } + if acts == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().DataDB().SetActionPlan(idg, acts, true, utils.NonTransactional); err != nil { + return err + } + if err := m.dmIN.DataManager().DataDB().RemoveActionPlan(idg, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.ActionPlans] += 1 } return } @@ -84,27 +83,27 @@ func (m *Migrator) migrateV1ActionPlans() (err error) { if err == utils.ErrNoMoreData { break } - if *v1APs != nil { - for _, v1ap := range *v1APs { - ap := v1ap.AsActionPlan() - if m.dryRun != true { - if err = m.dmOut.DataManager().DataDB().SetActionPlan(ap.Id, ap, true, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.ActionPlans] += 1 - } + if *v1APs == nil || m.dryRun { + continue + } + for _, v1ap := range *v1APs { + ap := v1ap.AsActionPlan() + if err = m.dmOut.DataManager().DataDB().SetActionPlan(ap.Id, ap, true, utils.NonTransactional); err != nil { + return err } + m.stats[utils.ActionPlans] += 1 } } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.ActionPlans: engine.CurrentDataDBVersions()[utils.ActionPlans]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating ActionPlans version into dataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.ActionPlans: engine.CurrentDataDBVersions()[utils.ActionPlans]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating ActionPlans version into dataDB", err.Error())) } return } @@ -129,14 +128,9 @@ func (m *Migrator) migrateActionPlans() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentActionPlans(); err != nil { - return err - } - return + return m.migrateCurrentActionPlans() case 1: - if err := m.migrateV1ActionPlans(); err != nil { - return err - } + return m.migrateV1ActionPlans() } return } diff --git a/migrator/action_trigger.go b/migrator/action_trigger.go index 67fafc074..7e64486f7 100644 --- a/migrator/action_trigger.go +++ b/migrator/action_trigger.go @@ -64,12 +64,11 @@ func (m *Migrator) migrateCurrentActionTrigger() (err error) { if err != nil { return err } - if acts != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetActionTriggers(idg, acts, utils.NonTransactional); err != nil { - return err - } - } + if acts == nil || m.dryRun { + continue + } + if err := m.dmOut.DataManager().SetActionTriggers(idg, acts, utils.NonTransactional); err != nil { + return err } } return @@ -86,29 +85,29 @@ func (m *Migrator) migrateV1ActionTrigger() (err error) { if err == utils.ErrNoMoreData { break } - if *v1ACTs != nil { - for _, v1ac := range *v1ACTs { - act := v1ac.AsActionTrigger() - acts = append(acts, act) + if *v1ACTs == nil || m.dryRun { + continue + } + for _, v1ac := range *v1ACTs { + act := v1ac.AsActionTrigger() + acts = append(acts, act) - } - if !m.dryRun { - if err := m.dmOut.DataManager().SetActionTriggers(acts[0].ID, acts, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.ActionTriggers] += 1 - } } + if err := m.dmOut.DataManager().SetActionTriggers(acts[0].ID, acts, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.ActionTriggers] += 1 } - if !m.dryRun { - // All done, update version wtih current one - vrs := engine.Versions{utils.ActionTriggers: engine.CurrentDataDBVersions()[utils.ActionTriggers]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating ActionTriggers version into DataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.ActionTriggers: engine.CurrentDataDBVersions()[utils.ActionTriggers]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating ActionTriggers version into DataDB", err.Error())) } return } @@ -133,15 +132,9 @@ func (m *Migrator) migrateActionTriggers() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentActionTrigger(); err != nil { - return err - } - return - + return m.migrateCurrentActionTrigger() case 1: - if err := m.migrateV1ActionTrigger(); err != nil { - return err - } + return m.migrateV1ActionTrigger() } return } diff --git a/migrator/alias.go b/migrator/alias.go index e9d61b52d..b467e752b 100644 --- a/migrator/alias.go +++ b/migrator/alias.go @@ -182,83 +182,6 @@ func (m *Migrator) migrateAlias2Attributes() (err error) { return } -// func (m *Migrator) migrateV1Alias() (err error) { -// var ids []string -// ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(ALIASES_PREFIX) -// if err != nil { -// return err -// } -// for _, id := range ids { -// idg := strings.TrimPrefix(id, ALIASES_PREFIX) -// usr, err := m.dmIN.DataManager().DataDB().GetAlias(idg, true, utils.NonTransactional) -// if err != nil { -// return err -// } -// if usr == nil || m.dryRun { -// continue -// } -// if err := m.dmOut.DataManager().DataDB().SetAlias(usr, utils.NonTransactional); err != nil { -// return err -// } -// m.stats[utils.Alias] += 1 -// } -// return -// } - func (m *Migrator) migrateAlias() (err error) { return m.migrateAlias2Attributes() - /* - var vrs engine.Versions - current := engine.CurrentDataDBVersions() - vrs, err = m.dmIN.DataManager().DataDB().GetVersions("") - if err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when querying oldDataDB for versions", err.Error())) - } else if len(vrs) == 0 { - return utils.NewCGRError(utils.Migrator, - utils.MandatoryIEMissingCaps, - utils.UndefinedVersion, - "version number is not defined for ActionTriggers model") - } - switch vrs[Alias] { - case current[Alias]: - if m.sameDataDB { - return - } - return utils.ErrNotImplemented - case 1: - return m.migrateAlias2Attributes() - } - return - */ -} - -func (m *Migrator) migrateReverseAlias() (err error) { - // var vrs engine.Versions - // current := engine.CurrentDataDBVersions() - // vrs, err = m.dmOut.DataDB().GetVersions("") - // if err != nil { - // return utils.NewCGRError(utils.Migrator, - // utils.ServerErrorCaps, - // err.Error(), - // fmt.Sprintf("error: <%s> when querying oldDataDB for versions", err.Error())) - // } else if len(vrs) == 0 { - // return utils.NewCGRError(utils.Migrator, - // utils.MandatoryIEMissingCaps, - // utils.UndefinedVersion, - // "version number is not defined for ActionTriggers model") - // } - // switch vrs[utils.ReverseAlias] { - // case current[utils.ReverseAlias]: - // if m.sameDataDB { - // return - // } - // if err := m.migrateCurrentReverseAlias(); err != nil { - // return err - // } - // return - // } - return } diff --git a/migrator/alias_it_test.go b/migrator/alias_it_test.go index 7b8d15a70..0d8549c09 100644 --- a/migrator/alias_it_test.go +++ b/migrator/alias_it_test.go @@ -36,7 +36,6 @@ var ( alsCfgIn *config.CGRConfig alsCfgOut *config.CGRConfig alsMigrator *Migrator - alsAction string ) var sTestsAlsIT = []func(t *testing.T){ @@ -47,41 +46,22 @@ var sTestsAlsIT = []func(t *testing.T){ func TestAliasMigrateITRedis(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testStart("TestAliasMigrateITRedis", inPath, inPath, utils.Migrate, t) + testStart("TestAliasMigrateITRedis", inPath, inPath, t) } func TestAliasMigrateITMongo(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - testStart("TestAliasMigrateITMongo", inPath, inPath, utils.Migrate, t) -} - -func TestAliasITMove(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - outPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testStart("TestAliasITMove", inPath, outPath, utils.Move, t) + testStart("TestAliasMigrateITMongo", inPath, inPath, t) } func TestAliasITMigrateMongo2Redis(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") outPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testStart("TestAliasITMigrateMongo2Redis", inPath, outPath, utils.Migrate, t) + testStart("TestAliasITMigrateMongo2Redis", inPath, outPath, t) } -func TestAliasITMoveEncoding(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - outPath := path.Join(*dataDir, "conf", "samples", "tutmongojson") - testStart("TestAliasITMoveEncoding", inPath, outPath, utils.Move, t) -} - -func TestAliasITMoveEncoding2(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - outPath := path.Join(*dataDir, "conf", "samples", "tutmysqljson") - testStart("TestAliasITMoveEncoding2", inPath, outPath, utils.Move, t) -} - -func testStart(testName, inPath, outPath, action string, t *testing.T) { +func testStart(testName, inPath, outPath string, t *testing.T) { var err error - alsAction = action if alsCfgIn, err = config.NewCGRConfigFromFolder(inPath); err != nil { t.Fatal(err) } @@ -176,96 +156,65 @@ func testAlsITMigrateAndMove(t *testing.T) { Weight: 20, } attrProf.Compile() - switch alsAction { - case utils.Migrate: - err := alsMigrator.dmIN.setV1Alias(alias) - if err != nil { - t.Error("Error when setting v1 Alias ", err.Error()) - } - currentVersion := engine.Versions{Alias: 1} - err = alsMigrator.dmIN.DataManager().DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Alias ", err.Error()) - } - //check if version was set correctly - if vrs, err := alsMigrator.dmIN.DataManager().DataDB().GetVersions(""); err != nil { - t.Error(err) - } else if vrs[Alias] != 1 { - t.Errorf("Unexpected version returned: %d", vrs[Alias]) - } - //migrate alias - err, _ = alsMigrator.Migrate([]string{MetaAliases}) - if err != nil { - t.Error("Error when migrating Alias ", err.Error()) - } - //check if version was updated - if vrs, err := alsMigrator.dmOut.DataManager().DataDB().GetVersions(""); err != nil { - t.Error(err) - } else if vrs[Alias] != 0 { - t.Errorf("Unexpected version returned: %d", vrs[Alias]) - } - //check if alias was migrate correctly - result, err := alsMigrator.dmOut.DataManager().DataDB().GetAttributeProfileDrv("cgrates.org", alias.GetId()) - if err != nil { - t.Fatalf("Error when getting Attributes %v", err.Error()) - } - result.Compile() - sort.Slice(result.Attributes, func(i, j int) bool { - if result.Attributes[i].FieldName == result.Attributes[j].FieldName { - return result.Attributes[i].FilterIDs[0] < result.Attributes[j].FilterIDs[0] - } - return result.Attributes[i].FieldName < result.Attributes[j].FieldName - }) // only for test; map returns random keys - if !reflect.DeepEqual(*attrProf, *result) { - t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(attrProf), utils.ToJSON(result)) - } - //check if old account was deleted - if _, err = alsMigrator.dmIN.getV1Alias(); err != utils.ErrNoMoreData { - t.Error("Error should be not found : ", err) - } - expAlsIdx := map[string]utils.StringMap{ - "*string:~Account:1001": utils.StringMap{ - "*out:*any:*any:1001:call_1001:*rated": true, - }, - "*string:~Subject:call_1001": utils.StringMap{ - "*out:*any:*any:1001:call_1001:*rated": true, - }, + err := alsMigrator.dmIN.setV1Alias(alias) + if err != nil { + t.Error("Error when setting v1 Alias ", err.Error()) + } + currentVersion := engine.Versions{Alias: 1} + err = alsMigrator.dmIN.DataManager().DataDB().SetVersions(currentVersion, false) + if err != nil { + t.Error("Error when setting version for Alias ", err.Error()) + } + //check if version was set correctly + if vrs, err := alsMigrator.dmIN.DataManager().DataDB().GetVersions(""); err != nil { + t.Error(err) + } else if vrs[Alias] != 1 { + t.Errorf("Unexpected version returned: %d", vrs[Alias]) + } + //migrate alias + err, _ = alsMigrator.Migrate([]string{MetaAliases}) + if err != nil { + t.Error("Error when migrating Alias ", err.Error()) + } + //check if version was updated + if vrs, err := alsMigrator.dmOut.DataManager().DataDB().GetVersions(""); err != nil { + t.Error(err) + } else if vrs[Alias] != 0 { + t.Errorf("Unexpected version returned: %d", vrs[Alias]) + } + //check if alias was migrate correctly + result, err := alsMigrator.dmOut.DataManager().DataDB().GetAttributeProfileDrv("cgrates.org", alias.GetId()) + if err != nil { + t.Fatalf("Error when getting Attributes %v", err.Error()) + } + result.Compile() + sort.Slice(result.Attributes, func(i, j int) bool { + if result.Attributes[i].FieldName == result.Attributes[j].FieldName { + return result.Attributes[i].FilterIDs[0] < result.Attributes[j].FilterIDs[0] } - if alsidx, err := alsMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.AttributeProfilePrefix], - utils.ConcatenatedKey("cgrates.org", utils.META_ANY), utils.MetaString, nil); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(expAlsIdx, alsidx) { - t.Errorf("Expected %v, recived: %v", utils.ToJSON(expAlsIdx), utils.ToJSON(alsidx)) - } - case utils.Move: - /* // No Move tests - if err := alsMigrator.dmIN.DataManager().DataDB().SetAlias(alias, utils.NonTransactional); err != nil { - t.Error(err) - } - currentVersion := engine.CurrentDataDBVersions() - err := alsMigrator.dmOut.DataManager().DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Alias ", err.Error()) - } - //migrate accounts - err, _ = alsMigrator.Migrate([]string{MetaAliases}) - if err != nil { - t.Error("Error when alsMigratorrating Alias ", err.Error()) - } - //check if account was migrate correctly - result, err := alsMigrator.dmOut.DataManager().DataDB().GetAlias(alias.GetId(), false) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(alias, result) { - t.Errorf("Expecting: %+v, received: %+v", alias, result) - } - //check if old account was deleted - result, err = alsMigrator.dmIN.DataManager().DataDB().GetAlias(alias.GetId(), false) - if err != utils.ErrNotFound { - t.Error(err) - } - // */ + return result.Attributes[i].FieldName < result.Attributes[j].FieldName + }) // only for test; map returns random keys + if !reflect.DeepEqual(*attrProf, *result) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(attrProf), utils.ToJSON(result)) + } + //check if old account was deleted + if _, err = alsMigrator.dmIN.getV1Alias(); err != utils.ErrNoMoreData { + t.Error("Error should be not found : ", err) + } + + expAlsIdx := map[string]utils.StringMap{ + "*string:~Account:1001": utils.StringMap{ + "*out:*any:*any:1001:call_1001:*rated": true, + }, + "*string:~Subject:call_1001": utils.StringMap{ + "*out:*any:*any:1001:call_1001:*rated": true, + }, + } + if alsidx, err := alsMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.AttributeProfilePrefix], + utils.ConcatenatedKey("cgrates.org", utils.META_ANY), utils.MetaString, nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expAlsIdx, alsidx) { + t.Errorf("Expected %v, recived: %v", utils.ToJSON(expAlsIdx), utils.ToJSON(alsidx)) } } diff --git a/migrator/attributes.go b/migrator/attributes.go index e129a7d7b..30bf6da4a 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -57,18 +57,17 @@ func (m *Migrator) migrateCurrentAttributeProfile() (err error) { if err != nil { return err } - if attrPrf != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { - return err - } - if err := m.dmIN.DataManager().RemoveAttributeProfile(tenant, - idg, utils.NonTransactional, false); err != nil { - return err - } - m.stats[utils.Attributes] += 1 - } + if attrPrf == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { + return err + } + if err := m.dmIN.DataManager().RemoveAttributeProfile(tenant, + idg, utils.NonTransactional, false); err != nil { + return err + } + m.stats[utils.Attributes] += 1 } return } @@ -83,31 +82,34 @@ func (m *Migrator) migrateV1Attributes() (err error) { if err == utils.ErrNoMoreData { break } - if v1Attr != nil { - attrPrf, err := v1Attr.AsAttributeProfile() - if err != nil { - return err - } - if m.dryRun != true { - if err := m.dmOut.DataManager().DataDB().SetAttributeProfileDrv(attrPrf); err != nil { - return err - } - if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { - return err - } - m.stats[utils.Attributes] += 1 - } + if v1Attr == nil { + continue } + attrPrf, err := v1Attr.AsAttributeProfile() + if err != nil { + return err + } + if m.dryRun { + continue + } + if err := m.dmOut.DataManager().DataDB().SetAttributeProfileDrv(attrPrf); err != nil { + return err + } + if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { + return err + } + m.stats[utils.Attributes] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.Attributes: engine.CurrentDataDBVersions()[utils.Attributes]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Attributes: engine.CurrentDataDBVersions()[utils.Attributes]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) } return } @@ -122,31 +124,34 @@ func (m *Migrator) migrateV2Attributes() (err error) { if err == utils.ErrNoMoreData { break } - if v2Attr != nil { - attrPrf, err := v2Attr.AsAttributeProfile() - if err != nil { - return err - } - if m.dryRun != true { - if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { - return err - } - if err := m.dmIN.remV2AttributeProfile(v2Attr.Tenant, v2Attr.ID); err != nil { - return err - } - m.stats[utils.Attributes] += 1 - } + if v2Attr == nil { + continue } + attrPrf, err := v2Attr.AsAttributeProfile() + if err != nil { + return err + } + if m.dryRun { + continue + } + if err := m.dmOut.DataManager().SetAttributeProfile(attrPrf, true); err != nil { + return err + } + if err := m.dmIN.remV2AttributeProfile(v2Attr.Tenant, v2Attr.ID); err != nil { + return err + } + m.stats[utils.Attributes] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.Attributes: engine.CurrentDataDBVersions()[utils.Attributes]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Attributes: engine.CurrentDataDBVersions()[utils.Attributes]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) } return } @@ -171,18 +176,11 @@ func (m *Migrator) migrateAttributeProfile() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentAttributeProfile(); err != nil { - return err - } - return + return m.migrateCurrentAttributeProfile() case 1: - if err := m.migrateV1Attributes(); err != nil { - return err - } + return m.migrateV1Attributes() case 2: - if err := m.migrateV2Attributes(); err != nil { - return err - } + return m.migrateV2Attributes() } return } diff --git a/migrator/cdrs.go b/migrator/cdrs.go index 98ed6f871..4ca178c45 100755 --- a/migrator/cdrs.go +++ b/migrator/cdrs.go @@ -60,13 +60,9 @@ func (m *Migrator) migrateCDRs() (err error) { } switch vrs[utils.CDRs] { case 1: - if err := m.migrateV1CDRs(); err != nil { - return err - } + return m.migrateV1CDRs() case current[utils.CDRs]: - if err := m.migrateCurrentCDRs(); err != nil { - return err - } + return m.migrateCurrentCDRs() } return } @@ -81,25 +77,25 @@ func (m *Migrator) migrateV1CDRs() (err error) { if err == utils.ErrNoMoreData { break } - if v1CDR != nil { - cdr := v1CDR.V1toV2Cdr() - if m.dryRun != true { - if err = m.storDBOut.StorDB().SetCDR(cdr, true); err != nil { - return err - } - m.stats[utils.CDRs] += 1 - } + if v1CDR == nil || m.dryRun { + continue } + cdr := v1CDR.V1toV2Cdr() + if err = m.storDBOut.StorDB().SetCDR(cdr, true); err != nil { + return err + } + m.stats[utils.CDRs] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.CDRs: engine.CurrentStorDBVersions()[utils.CDRs]} - if err = m.storDBOut.StorDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating CDRs version into StorDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.CDRs: engine.CurrentStorDBVersions()[utils.CDRs]} + if err = m.storDBOut.StorDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating CDRs version into StorDB", err.Error())) } return } diff --git a/migrator/chargers.go b/migrator/chargers.go index dd6423e62..cebd6a551 100755 --- a/migrator/chargers.go +++ b/migrator/chargers.go @@ -40,14 +40,13 @@ func (m *Migrator) migrateCurrentCharger() (err error) { if err != nil { return err } - if cpp != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetChargerProfile(cpp, true); err != nil { - return err - } - m.stats[utils.Chargers] += 1 - } + if cpp == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetChargerProfile(cpp, true); err != nil { + return err + } + m.stats[utils.Chargers] += 1 } return } @@ -72,10 +71,7 @@ func (m *Migrator) migrateChargers() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentCharger(); err != nil { - return err - } - return + return m.migrateCurrentCharger() } return } diff --git a/migrator/costdetails.go b/migrator/costdetails.go deleted file mode 100644 index c157f9e78..000000000 --- a/migrator/costdetails.go +++ /dev/null @@ -1,216 +0,0 @@ -/* -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 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ - -package migrator - -/* -import ( - "database/sql" - "encoding/json" - "fmt" - "log" - "time" - - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) - -func (m *Migrator) migrateCostDetails() (err error) { - if m.storDBOut == nil { - return utils.NewCGRError(utils.Migrator, - utils.MandatoryIEMissingCaps, - utils.NoStorDBConnection, - "no connection to StorDB") - } - vrs, err := m.storDBOut.StorDB().GetVersions(utils.COST_DETAILS) - if err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when querying storDB for versions", err.Error())) - } else if len(vrs) == 0 { - return utils.NewCGRError(utils.Migrator, - utils.MandatoryIEMissingCaps, - utils.UndefinedVersion, - "version number is not defined for CostDetails model") - } - if vrs[utils.COST_DETAILS] != 1 { // Right now we only support migrating from version 1 - log.Print("Wrong version") - return - } - var storSQL *sql.DB - switch m.storDBType { - case utils.MYSQL: - storSQL = m.storDBOut.(*engine.SQLStorage).Db - case utils.POSTGRES: - storSQL = m.storDBOut.(*engine.SQLStorage).Db - default: - return utils.NewCGRError(utils.Migrator, - utils.MandatoryIEMissingCaps, - utils.UnsupportedDB, - fmt.Sprintf("unsupported database type: <%s>", m.storDBType)) - } - rows, err := storSQL.Query("SELECT id, tor, direction, tenant, category, account, subject, destination, cost, cost_details FROM cdrs") - if err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when querying storDB for cdrs", err.Error())) - } - - defer rows.Close() - - for cnt := 0; rows.Next(); cnt++ { - var id int64 - var ccDirection, ccCategory, ccTenant, ccSubject, ccAccount, ccDestination, ccTor sql.NullString - var ccCost sql.NullFloat64 - var tts []byte - - if err := rows.Scan(&id, &ccTor, &ccDirection, &ccTenant, &ccCategory, &ccAccount, &ccSubject, &ccDestination, &ccCost, &tts); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when scanning at count: <%d>", err.Error(), cnt)) - } - var v1tmsps v1TimeSpans - if err := json.Unmarshal(tts, &v1tmsps); err != nil { - utils.Logger.Warning( - fmt.Sprintf(" Unmarshalling timespans at CDR with id: <%d>, error: <%s>", id, err.Error())) - continue - } - v1CC := &v1CallCost{Direction: ccDirection.String, Category: ccCategory.String, Tenant: ccTenant.String, - Subject: ccSubject.String, Account: ccAccount.String, Destination: ccDestination.String, TOR: ccTor.String, - Cost: ccCost.Float64, Timespans: v1tmsps} - - cc := v1CC.AsCallCost() - if cc == nil { - utils.Logger.Warning( - fmt.Sprintf(" Error: <%s> when converting into CallCost CDR with id: <%d>", err.Error(), id)) - continue - } - if m.dryRun != true { - if _, err := storSQL.Exec(fmt.Sprintf("UPDATE cdrs SET cost_details='%s' WHERE id=%d", cc.AsJSON(), id)); err != nil { - utils.Logger.Warning( - fmt.Sprintf(" Error: <%s> updating CDR with id <%d> into StorDB", err.Error(), id)) - continue - } - - m.stats[utils.COST_DETAILS] += 1 - // All done, update version wtih current one - vrs = engine.Versions{utils.COST_DETAILS: engine.CurrentStorDBVersions()[utils.COST_DETAILS]} - if err := m.storDBOut.SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating CostDetails version into StorDB", err.Error())) - } - } - } - return -} - -type v1CallCost struct { - Direction, Category, Tenant, Subject, Account, Destination, TOR string - Cost float64 - Timespans v1TimeSpans -} - -type v1TimeSpans []*v1TimeSpan - -type v1TimeSpan struct { - TimeStart, TimeEnd time.Time - Cost float64 - RateInterval *engine.RateInterval - DurationIndex time.Duration - Increments v1Increments - MatchedSubject, MatchedPrefix, MatchedDestId, RatingPlanId string -} - -type v1Increments []*v1Increment - -type v1Increment struct { - Duration time.Duration - Cost float64 - BalanceRateInterval *engine.RateInterval - BalanceInfo *v1BalanceInfo - UnitInfo *v1UnitInfo - CompressFactor int -} - -type v1BalanceInfo struct { - UnitBalanceUuid string - MoneyBalanceUuid string - AccountId string // used when debited from shared balance -} - -type v1UnitInfo struct { - DestinationId string - Quantity float64 - TOR string -} - -func (v1cc *v1CallCost) AsCallCost() (cc *engine.CallCost) { - cc = new(engine.CallCost) - cc.Direction = v1cc.Direction - cc.Category = v1cc.Category - cc.Tenant = v1cc.Tenant - cc.Account = v1cc.Account - cc.Subject = v1cc.Subject - cc.Destination = v1cc.Destination - cc.TOR = v1cc.TOR - cc.Cost = v1cc.Cost - cc.Timespans = make(engine.TimeSpans, len(v1cc.Timespans)) - for i, v1ts := range v1cc.Timespans { - cc.Timespans[i] = &engine.TimeSpan{TimeStart: v1ts.TimeStart, - TimeEnd: v1ts.TimeEnd, - Cost: v1ts.Cost, - RateInterval: v1ts.RateInterval, - DurationIndex: v1ts.DurationIndex, - Increments: make(engine.Increments, len(v1ts.Increments)), - MatchedSubject: v1ts.MatchedSubject, - MatchedPrefix: v1ts.MatchedPrefix, - MatchedDestId: v1ts.MatchedDestId, - RatingPlanId: v1ts.RatingPlanId, - } - for j, v1Incrm := range v1ts.Increments { - cc.Timespans[i].Increments[j] = &engine.Increment{ - Duration: v1Incrm.Duration, - Cost: v1Incrm.Cost, - CompressFactor: v1Incrm.CompressFactor, - BalanceInfo: &engine.DebitInfo{ - AccountID: v1Incrm.BalanceInfo.AccountId, - }, - } - if v1Incrm.BalanceInfo.UnitBalanceUuid != "" { - cc.Timespans[i].Increments[j].BalanceInfo.Unit = &engine.UnitInfo{ - UUID: v1Incrm.BalanceInfo.UnitBalanceUuid, - Value: v1Incrm.UnitInfo.Quantity, - DestinationID: v1Incrm.UnitInfo.DestinationId, - TOR: v1Incrm.UnitInfo.TOR, - } - } else if v1Incrm.BalanceInfo.MoneyBalanceUuid != "" { - cc.Timespans[i].Increments[j].BalanceInfo.Monetary = &engine.MonetaryInfo{ - UUID: v1Incrm.BalanceInfo.MoneyBalanceUuid, - //Value: v1Incrm.UnitInfo.Quantity, - } - } - } - } - return -} -*/ diff --git a/migrator/costdetails_test.go b/migrator/costdetails_test.go deleted file mode 100644 index a2f05853a..000000000 --- a/migrator/costdetails_test.go +++ /dev/null @@ -1,49 +0,0 @@ -/* -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 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ -package migrator - -/* -import ( - "encoding/json" - "testing" -) - -var v1TmspsStr1 = `[{"TimeStart":"2016-07-28T02:18:49+02:00","TimeEnd":"2016-07-28T02:19:28+02:00","Cost":0.0117,"RateInterval":{"Timing":{"Years":[],"Months":[],"MonthDays":[],"WeekDays":[],"StartTime":"00:00:00","EndTime":""},"Rating":{"ConnectFee":0.0564,"RoundingMethod":"*middle","RoundingDecimals":4,"MaxCost":0,"MaxCostStrategy":"","Rates":[{"GroupIntervalStart":0,"Value":0.0198,"RateIncrement":1000000000,"RateUnit":60000000000}]},"Weight":10},"DurationIndex":39000000000,"Increments":[{"Duration":1000000000,"Cost":0.0003,"BalanceInfo":{"UnitBalanceUuid":"","MoneyBalanceUuid":"c50c201c405defc3807347444efc62da","AccountId":"cgrates.org:dan"},"BalanceRateInterval":null,"UnitInfo":null,"CompressFactor":39}],"MatchedSubject":"*out:cgrates.org:call:dan","MatchedPrefix":"+311","MatchedDestId":"CST_491_DE001","RatingPlanId":"V_RET_1490_01_V"}]` -var v1TmspsStr2 = `[{"TimeStart":"2016-07-28T01:12:19+02:00","TimeEnd":"2016-07-28T01:12:27+02:00","Cost":0.00046875,"RateInterval":{"Timing":{"Years":[],"Months":[],"MonthDays":[],"WeekDays":[],"StartTime":"00:00:00","EndTime":""},"Rating":{"ConnectFee":0,"RoundingMethod":"*middle","RoundingDecimals":4,"MaxCost":0,"MaxCostStrategy":"","Rates":[{"GroupIntervalStart":0,"Value":0.06,"RateIncrement":1000000000,"RateUnit":1024000000000}]},"Weight":10},"DurationIndex":8000000000,"Increments":null,"MatchedSubject":"*out:cgrates.org:data:danb","MatchedPrefix":"+4900","MatchedDestId":"CST_data_DAT01","RatingPlanId":"M_RET_1409_01_D"}]` - -func TestV1CostDetailsAsCostDetails1(t *testing.T) { - var v1tmsps v1TimeSpans - if err := json.Unmarshal([]byte(v1TmspsStr1), &v1tmsps); err != nil { - t.Error(err) - } - v1CC := &v1CallCost{Timespans: v1tmsps} - _ = v1CC.AsCallCost() - // ToDo: Test here the content - -} - -func TestV1CostDetailsAsCostDetails2(t *testing.T) { - var v1tmsps v1TimeSpans - if err := json.Unmarshal([]byte(v1TmspsStr2), &v1tmsps); err != nil { - t.Error(err) - } - v1CC := &v1CallCost{Timespans: v1tmsps} - _ = v1CC.AsCallCost() - -} -*/ diff --git a/migrator/derived_chargers.go b/migrator/derived_chargers.go index 89d99abd9..ce314876f 100644 --- a/migrator/derived_chargers.go +++ b/migrator/derived_chargers.go @@ -212,61 +212,6 @@ func (m *Migrator) migrateV1DerivedChargers() (err error) { return } -/* -func (m *Migrator) migrateCurrentDerivedChargers() (err error) { - var ids []string - ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.DERIVEDCHARGERS_PREFIX) - if err != nil { - return err - } - for _, id := range ids { - idg := strings.TrimPrefix(id, utils.DERIVEDCHARGERS_PREFIX) - drc, err := m.dmIN.DataManager().GetDerivedChargers(idg, true, utils.NonTransactional) - if err != nil { - return err - } - if drc != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().DataDB().SetDerivedChargers(idg, drc, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.DerivedChargersV] += 1 - } - } - } - return -} -*/ - func (m *Migrator) migrateDerivedChargers() (err error) { return m.migrateV1DerivedChargers() - /* - var vrs engine.Versions - current := engine.CurrentDataDBVersions() - vrs, err = m.dmIN.DataManager().DataDB().GetVersions("") - if err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when querying oldDataDB for versions", err.Error())) - } else if len(vrs) == 0 { - return utils.NewCGRError(utils.Migrator, - utils.MandatoryIEMissingCaps, - utils.UndefinedVersion, - "version number is not defined for DerivedChargers model") - } - - switch vrs[utils.DerivedChargersV] { - case 1: - case current[utils.DerivedChargersV]: - if m.sameDataDB { - return - } - if err := m.migrateCurrentDerivedChargers(); err != nil { - return err - } - return - } - return - */ } diff --git a/migrator/derived_chargers_it_test.go b/migrator/derived_chargers_it_test.go index 12073086a..29acf94d9 100644 --- a/migrator/derived_chargers_it_test.go +++ b/migrator/derived_chargers_it_test.go @@ -37,7 +37,6 @@ var ( dcCfgIn *config.CGRConfig dcCfgOut *config.CGRConfig dcMigrator *Migrator - dcAction string ) var sTestsDCIT = []func(t *testing.T){ @@ -48,41 +47,22 @@ var sTestsDCIT = []func(t *testing.T){ func TestDerivedChargersVMigrateITRedis(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testStartDC("TestDerivedChargersVMigrateITRedis", inPath, inPath, utils.Migrate, t) + testStartDC("TestDerivedChargersVMigrateITRedis", inPath, inPath, t) } func TestDerivedChargersVMigrateITMongo(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - testStartDC("TestDerivedChargersVMigrateITMongo", inPath, inPath, utils.Migrate, t) -} - -func TestDerivedChargersVITMove(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - outPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testStartDC("TestDerivedChargersVITMove", inPath, outPath, utils.Move, t) + testStartDC("TestDerivedChargersVMigrateITMongo", inPath, inPath, t) } func TestDerivedChargersVITMigrateMongo2Redis(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") outPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testStartDC("TestDerivedChargersVITMigrateMongo2Redis", inPath, outPath, utils.Migrate, t) + testStartDC("TestDerivedChargersVITMigrateMongo2Redis", inPath, outPath, t) } -func TestDerivedChargersVITMoveEncoding(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - outPath := path.Join(*dataDir, "conf", "samples", "tutmongojson") - testStartDC("TestDerivedChargersVITMoveEncoding", inPath, outPath, utils.Move, t) -} - -func TestDerivedChargersVITMoveEncoding2(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - outPath := path.Join(*dataDir, "conf", "samples", "tutmysqljson") - testStartDC("TestDerivedChargersVITMoveEncoding2", inPath, outPath, utils.Move, t) -} - -func testStartDC(testName, inPath, outPath, action string, t *testing.T) { +func testStartDC(testName, inPath, outPath string, t *testing.T) { var err error - dcAction = action if dcCfgIn, err = config.NewCGRConfigFromFolder(inPath); err != nil { t.Fatal(err) } @@ -193,108 +173,77 @@ func testDCITMigrateAndMove(t *testing.T) { AttributeIDs: []string{attrProf.ID}, Weight: 10, } - switch dcAction { - case utils.Migrate: - err := dcMigrator.dmIN.setV1DerivedChargers(derivch) - if err != nil { - t.Error("Error when setting v1 DerivedChargersV ", err.Error()) - } - currentVersion := engine.Versions{utils.DerivedChargersV: 1} - err = dcMigrator.dmIN.DataManager().DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for DerivedChargersV ", err.Error()) - } - //check if version was set correctly - if vrs, err := dcMigrator.dmIN.DataManager().DataDB().GetVersions(""); err != nil { - t.Error(err) - } else if vrs[utils.DerivedChargersV] != 1 { - t.Errorf("Unexpected version returned: %d", vrs[utils.DerivedChargersV]) - } - //migrate derivch - err, _ = dcMigrator.Migrate([]string{utils.MetaDerivedChargersV}) - if err != nil { - t.Error("Error when migrating DerivedChargersV ", err.Error()) - } - //check if version was updated - if vrs, err := dcMigrator.dmOut.DataManager().DataDB().GetVersions(""); err != nil { - t.Error(err) - } else if vrs[utils.DerivedChargersV] != 0 { - t.Errorf("Unexpected version returned: %d", vrs[utils.DerivedChargersV]) - } - //check if derivch was migrate correctly - result, err := dcMigrator.dmOut.DataManager().DataDB().GetAttributeProfileDrv(defaultTenant, attrProf.ID) - if err != nil { - t.Fatalf("Error when getting Attributes %v", err.Error()) - } - result.Compile() - sort.Slice(result.Attributes, func(i, j int) bool { - return result.Attributes[i].FieldName < result.Attributes[j].FieldName - }) // only for test; map returns random keys - if !reflect.DeepEqual(*attrProf, *result) { - t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(attrProf), utils.ToJSON(result)) - } - result2, err := dcMigrator.dmOut.DataManager().DataDB().GetChargerProfileDrv(defaultTenant, charger.ID) - if err != nil { - t.Fatalf("Error when getting Attributes %v", err.Error()) - } - if !reflect.DeepEqual(*charger, *result2) { - t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(charger), utils.ToJSON(result2)) - } - //check if old account was deleted - if _, err = dcMigrator.dmIN.getV1DerivedChargers(); err != utils.ErrNoMoreData { - t.Error("Error should be not found : ", err) - } - expDcIdx := map[string]utils.StringMap{ - "*string:~Account:1003": utils.StringMap{ - "*out:cgrates.org:*any:1003:*any_0": true, - }, - } - if dcidx, err := dcMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.AttributeProfilePrefix], - utils.ConcatenatedKey("cgrates.org", utils.MetaChargers), utils.MetaString, nil); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(expDcIdx, dcidx) { - t.Errorf("Expected %v, recived: %v", utils.ToJSON(expDcIdx), utils.ToJSON(dcidx)) - } - expDcIdx = map[string]utils.StringMap{ - "*string:~Account:1003": utils.StringMap{ - "*out:cgrates.org:*any:1003:*any_0": true, - }, - } - if dcidx, err := dcMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.ChargerProfilePrefix], - utils.ConcatenatedKey("cgrates.org", utils.MetaChargers), - utils.MetaString, nil); err == nil || err.Error() != utils.ErrNotFound.Error() { - t.Errorf("Expected error %v, recived: %v with reply: %v", utils.ErrNotFound, err, utils.ToJSON(dcidx)) - } - - case utils.Move: - /* // No Move tests - if err := dcMigrator.dmIN.DataManager().DataDB().SetDerivedChargersV(derivch, utils.NonTransactional); err != nil { - t.Error(err) - } - currentVersion := engine.CurrentDataDBVersions() - err := dcMigrator.dmOut.DataManager().DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for DerivedChargersV ", err.Error()) - } - //migrate accounts - err, _ = dcMigrator.Migrate([]string{utils.MetaDerivedChargersV}) - if err != nil { - t.Error("Error when dcMigratorrating DerivedChargersV ", err.Error()) - } - //check if account was migrate correctly - result, err := dcMigrator.dmOut.DataManager().DataDB().GetDerivedChargersV(derivch.GetId(), false) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(derivch, result) { - t.Errorf("Expecting: %+v, received: %+v", derivch, result) - } - //check if old account was deleted - result, err = dcMigrator.dmIN.DataManager().DataDB().GetDerivedChargersV(derivch.GetId(), false) - if err != utils.ErrNotFound { - t.Error(err) - } - // */ + err := dcMigrator.dmIN.setV1DerivedChargers(derivch) + if err != nil { + t.Error("Error when setting v1 DerivedChargersV ", err.Error()) } + currentVersion := engine.Versions{utils.DerivedChargersV: 1} + err = dcMigrator.dmIN.DataManager().DataDB().SetVersions(currentVersion, false) + if err != nil { + t.Error("Error when setting version for DerivedChargersV ", err.Error()) + } + //check if version was set correctly + if vrs, err := dcMigrator.dmIN.DataManager().DataDB().GetVersions(""); err != nil { + t.Error(err) + } else if vrs[utils.DerivedChargersV] != 1 { + t.Errorf("Unexpected version returned: %d", vrs[utils.DerivedChargersV]) + } + //migrate derivch + err, _ = dcMigrator.Migrate([]string{utils.MetaDerivedChargersV}) + if err != nil { + t.Error("Error when migrating DerivedChargersV ", err.Error()) + } + //check if version was updated + if vrs, err := dcMigrator.dmOut.DataManager().DataDB().GetVersions(""); err != nil { + t.Error(err) + } else if vrs[utils.DerivedChargersV] != 0 { + t.Errorf("Unexpected version returned: %d", vrs[utils.DerivedChargersV]) + } + //check if derivch was migrate correctly + result, err := dcMigrator.dmOut.DataManager().DataDB().GetAttributeProfileDrv(defaultTenant, attrProf.ID) + if err != nil { + t.Fatalf("Error when getting Attributes %v", err.Error()) + } + result.Compile() + sort.Slice(result.Attributes, func(i, j int) bool { + return result.Attributes[i].FieldName < result.Attributes[j].FieldName + }) // only for test; map returns random keys + if !reflect.DeepEqual(*attrProf, *result) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(attrProf), utils.ToJSON(result)) + } + result2, err := dcMigrator.dmOut.DataManager().DataDB().GetChargerProfileDrv(defaultTenant, charger.ID) + if err != nil { + t.Fatalf("Error when getting Attributes %v", err.Error()) + } + if !reflect.DeepEqual(*charger, *result2) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(charger), utils.ToJSON(result2)) + } + + //check if old account was deleted + if _, err = dcMigrator.dmIN.getV1DerivedChargers(); err != utils.ErrNoMoreData { + t.Error("Error should be not found : ", err) + } + expDcIdx := map[string]utils.StringMap{ + "*string:~Account:1003": utils.StringMap{ + "*out:cgrates.org:*any:1003:*any_0": true, + }, + } + if dcidx, err := dcMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.AttributeProfilePrefix], + utils.ConcatenatedKey("cgrates.org", utils.META_ANY), utils.MetaString, nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expDcIdx, dcidx) { + t.Errorf("Expected %v, recived: %v", utils.ToJSON(expDcIdx), utils.ToJSON(dcidx)) + } + expDcIdx = map[string]utils.StringMap{ + "*string:~Account:1003": utils.StringMap{ + "*out:cgrates.org:*any:1003:*any_0": true, + }, + } + if dcidx, err := dcMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.ChargerProfilePrefix], + utils.ConcatenatedKey("cgrates.org", utils.META_ANY), + utils.MetaString, nil); err == nil || err.Error() != utils.ErrNotFound.Error() { + t.Errorf("Expected error %v, recived: %v with reply: %v", utils.ErrNotFound, err, utils.ToJSON(dcidx)) + } + } diff --git a/migrator/destinations.go b/migrator/destinations.go index fc31461aa..146d51650 100644 --- a/migrator/destinations.go +++ b/migrator/destinations.go @@ -38,14 +38,13 @@ func (m *Migrator) migrateCurrentDestinations() (err error) { if err != nil { return err } - if dst != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().DataDB().SetDestination(dst, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.Destinations] += 1 - } + if dst == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().DataDB().SetDestination(dst, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.Destinations] += 1 } return } @@ -70,10 +69,7 @@ func (m *Migrator) migrateDestinations() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentDestinations(); err != nil { - return err - } - return + return m.migrateCurrentDestinations() } return } @@ -90,24 +86,24 @@ func (m *Migrator) migrateCurrentReverseDestinations() (err error) { if err != nil { return err } - if rdst != nil { - for _, rdid := range rdst { - rdstn, err := m.dmIN.DataManager().DataDB().GetDestination(rdid, true, utils.NonTransactional) - if err != nil { - return err - } - if rdstn != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().DataDB().SetDestination(rdstn, utils.NonTransactional); err != nil { - return err - } - if err := m.dmOut.DataManager().DataDB().SetReverseDestination(rdstn, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.ReverseDestinations] += 1 - } - } + if rdst == nil { + continue + } + for _, rdid := range rdst { + rdstn, err := m.dmIN.DataManager().DataDB().GetDestination(rdid, true, utils.NonTransactional) + if err != nil { + return err } + if rdstn == nil || m.dryRun { + continue + } + if err := m.dmOut.DataManager().DataDB().SetDestination(rdstn, utils.NonTransactional); err != nil { + return err + } + if err := m.dmOut.DataManager().DataDB().SetReverseDestination(rdstn, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.ReverseDestinations] += 1 } } return @@ -133,10 +129,7 @@ func (m *Migrator) migrateReverseDestinations() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentReverseDestinations(); err != nil { - return err - } - return + return m.migrateCurrentReverseDestinations() } return } diff --git a/migrator/dispatchers.go b/migrator/dispatchers.go index e0da36d74..a73e3dde6 100644 --- a/migrator/dispatchers.go +++ b/migrator/dispatchers.go @@ -40,18 +40,17 @@ func (m *Migrator) migrateCurrentDispatcher() (err error) { if err != nil { return err } - if dpp != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetDispatcherProfile(dpp, true); err != nil { - return err - } - if err := m.dmIN.DataManager().RemoveDispatcherProfile(tenant, - idg, utils.NonTransactional, false); err != nil { - return err - } - m.stats[utils.Dispatchers] += 1 - } + if dpp == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetDispatcherProfile(dpp, true); err != nil { + return err + } + if err := m.dmIN.DataManager().RemoveDispatcherProfile(tenant, + idg, utils.NonTransactional, false); err != nil { + return err + } + m.stats[utils.Dispatchers] += 1 } return } @@ -76,10 +75,7 @@ func (m *Migrator) migrateDispatchers() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentDispatcher(); err != nil { - return err - } - return + return m.migrateCurrentDispatcher() } return } diff --git a/migrator/dispatchers_it_test.go b/migrator/dispatchers_it_test.go index fac7e94f1..5e17291d9 100644 --- a/migrator/dispatchers_it_test.go +++ b/migrator/dispatchers_it_test.go @@ -173,14 +173,13 @@ func testDspITMigrateAndMove(t *testing.T) { dspPrf := &engine.DispatcherProfile{ Tenant: "cgrates.org", ID: "Dsp1", - FilterIDs: []string{"*string:Accont:1001"}, + FilterIDs: []string{"*string:~Accont:1001"}, ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Strategy: utils.MetaRandom, - // Hosts: []string{"localhost", "192.168.56.203"}, - Weight: 20, + Weight: 20, } if err := dspMigrator.dmIN.DataManager().SetDispatcherProfile(dspPrf, false); err != nil { t.Error(err) diff --git a/migrator/migrator.go b/migrator/migrator.go index d9f3799e4..e3eeba90e 100755 --- a/migrator/migrator.go +++ b/migrator/migrator.go @@ -92,8 +92,6 @@ func (m *Migrator) Migrate(taskIDs []string) (err error, stats map[string]int) { err = m.migrateCDRs() case utils.MetaSessionsCosts: err = m.migrateSessionSCosts() - // case utils.MetaCostDetails: - // err = m.migrateCostDetails() case utils.MetaAccounts: err = m.migrateAccounts() case utils.MetaActionPlans: diff --git a/migrator/migrator_it_test.go b/migrator/migrator_it_test.go deleted file mode 100644 index 499be7d7d..000000000 --- a/migrator/migrator_it_test.go +++ /dev/null @@ -1,1761 +0,0 @@ -// +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 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 General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ -package migrator - -/* -import ( - "flag" - "fmt" - "log" - "path" - "reflect" - "testing" - "time" - - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) - -var ( - isPostgres bool - path_in string - path_out string - cfg_in *config.CGRConfig - cfg_out *config.CGRConfig - Move = "move" - action string - mig *Migrator - -) - -// subtests to be executed for each migrator -var sTestsITMigrator = []func(t *testing.T){ - testFlush, - testMigratorAccounts, // Done - testMigratorActionPlans, - testMigratorActionTriggers, - testMigratorActions, - testMigratorSharedGroups, - testMigratorStats, - testMigratorSessionsCosts, // Done - testFlush, - testMigratorAlias, - //FIXME testMigratorReverseAlias, - testMigratorCdrStats, - testMigratorDerivedChargers, - testMigratorDestinations, - testMigratorReverseDestinations, - testMigratorLCR, - testMigratorRatingPlan, - testMigratorRatingProfile, - testMigratorRQF, - testMigratorResource, - testMigratorSubscribers, - testMigratorTimings, - testMigratorThreshold, - testMigratorAttributeProfile, - testFlush, -} - -func TestMigratorITPostgresConnect(t *testing.T) { - path_in := path.Join(*dataDir, "conf", "samples", "tutpostgres") - cfg_in, err := config.NewCGRConfigFromFolder(path_in) - if err != nil { - t.Fatal(err) - } - dataDB, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, cfg_in.DataDbUser, - cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - dataDB2, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, cfg_in.DataDbUser, - cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - oldDataDB, err := ConfigureV1DataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, cfg_in.DataDbUser, - cfg_in.DataDbPass, cfg_in.DBDataEncoding) - if err != nil { - log.Fatal(err) - } - storDB, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - oldstorDB, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - mig, err = NewMigrator(dataDB, dataDB2, cfg_in.DataDbType, cfg_in.DBDataEncoding, storDB, cfg_in.StorDBType, oldDataDB, - cfg_in.DataDbType, cfg_in.DBDataEncoding, oldstorDB, cfg_in.StorDBType, false, true, true, false, false) - if err != nil { - log.Fatal(err) - } -} - -func TestMigratorITPostgres(t *testing.T) { - action = utils.REDIS - isPostgres = true - for _, stest := range sTestsITMigrator { - t.Run("TestITMigratorOnPostgres", stest) - } -} - -func TestMigratorITRedisConnect(t *testing.T) { - path_in := path.Join(*dataDir, "conf", "samples", "tutmysql") - cfg_in, err := config.NewCGRConfigFromFolder(path_in) - if err != nil { - t.Fatal(err) - } - dataDB, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - dataDB2, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - oldDataDB, err := ConfigureV1DataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding) - if err != nil { - log.Fatal(err) - } - storDB, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - oldstorDB, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - mig, err = NewMigrator(dataDB, dataDB2, cfg_in.DataDbType, cfg_in.DBDataEncoding, storDB, cfg_in.StorDBType, oldDataDB, - cfg_in.DataDbType, cfg_in.DBDataEncoding, oldstorDB, cfg_in.StorDBType, false, true, true, false, false) - if err != nil { - log.Fatal(err) - } -} - -func TestMigratorITRedis(t *testing.T) { - action = utils.REDIS - isPostgres = false - for _, stest := range sTestsITMigrator { - t.Run("TestITMigratorOnRedis", stest) - } -} - -func TestMigratorITMongoConnect(t *testing.T) { - path_in := path.Join(*dataDir, "conf", "samples", "tutmongo") - cfg_in, err := config.NewCGRConfigFromFolder(path_in) - if err != nil { - t.Fatal(err) - } - dataDB, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - dataDB2, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - oldDataDB, err := ConfigureV1DataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding) - if err != nil { - log.Fatal(err) - } - storDB, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - oldstorDB, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - mig, err = NewMigrator(dataDB, dataDB2, cfg_in.DataDbType, cfg_in.DBDataEncoding, storDB, cfg_in.StorDBType, oldDataDB, - cfg_in.DataDbType, cfg_in.DBDataEncoding, oldstorDB, cfg_in.StorDBType, false, true, true, false, false) - if err != nil { - log.Fatal(err) - } -} - -func TestMigratorITMongo(t *testing.T) { - action = utils.MONGO - for _, stest := range sTestsITMigrator { - t.Run("TestITMigratorOnMongo", stest) - } -} - -func TestMigratorITMoveConnect(t *testing.T) { - path_in := path.Join(*dataDir, "conf", "samples", "tutmongo") - cfg_in, err := config.NewCGRConfigFromFolder(path_in) - if err != nil { - t.Fatal(err) - } - path_out := path.Join(*dataDir, "conf", "samples", "tutmysql") - cfg_out, err := config.NewCGRConfigFromFolder(path_out) - if err != nil { - t.Fatal(err) - } - dataDB, err := engine.ConfigureDataStorage(cfg_in.DataDbType, cfg_in.DataDbHost, cfg_in.DataDbPort, cfg_in.DataDbName, - cfg_in.DataDbUser, cfg_in.DataDbPass, cfg_in.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - dataDB2, err := engine.ConfigureDataStorage(cfg_out.DataDbType, cfg_out.DataDbHost, cfg_out.DataDbPort, cfg_out.DataDbName, - cfg_out.DataDbUser, cfg_out.DataDbPass, cfg_out.DBDataEncoding, config.CgrConfig().CacheCfg(), *loadHistorySize) - if err != nil { - log.Fatal(err) - } - oldDataDB, err := ConfigureV1DataStorage(cfg_out.DataDbType, cfg_out.DataDbHost, cfg_out.DataDbPort, cfg_out.DataDbName, - cfg_out.DataDbUser, cfg_out.DataDbPass, cfg_out.DBDataEncoding) - if err != nil { - log.Fatal(err) - } - storDBIn, err := engine.ConfigureStorDB(cfg_in.StorDBType, cfg_in.StorDBHost, cfg_in.StorDBPort, cfg_in.StorDBName, - cfg_in.StorDBUser, cfg_in.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - storDBOut, err := engine.ConfigureStorDB(cfg_out.StorDBType, cfg_out.StorDBHost, cfg_out.StorDBPort, cfg_out.StorDBName, - cfg_out.StorDBUser, cfg_out.StorDBPass, - config.CgrConfig().StorDBMaxOpenConns, config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime, config.CgrConfig().StorDBCDRSIndexes) - if err != nil { - log.Fatal(err) - } - oldstorDB, err := ConfigureV1StorDB(cfg_out.StorDBType, cfg_out.StorDBHost, cfg_out.StorDBPort, cfg_out.StorDBName, - cfg_out.StorDBUser, cfg_out.StorDBPass) - if err != nil { - log.Fatal(err) - } - mig, err = NewMigrator(dataDB2, dataDB, cfg_in.DataDbType, cfg_in.DBDataEncoding, storDBOut, storDBIn, cfg_in.StorDBType, oldDataDB, - cfg_in.DataDbType, cfg_in.DBDataEncoding, oldstorDB, cfg_in.StorDBType, false, false, false, false, false) - if err != nil { - log.Fatal(err) - } -} - -func TestMigratorITMove(t *testing.T) { - action = Move - for _, stest := range sTestsITMigrator { - t.Run("TestITMigratorOnMongo", stest) - } -} - -func testFlush(t *testing.T) { - mig.dmOut.DataDB().Flush("") - if err := engine.SetDBVersions(mig.dmOut.DataDB()); err != nil { - t.Error("Error ", err.Error()) - } - if path_out != "" { - if err := mig.storDBIn.Flush(path.Join(cfg_in.DataFolderPath, "storage", cfg_in.StorDBType)); err != nil { - t.Error(err) - } - } - if path_out != "" { - if err := mig.storDBOut.Flush(path.Join(cfg_out.DataFolderPath, "storage", cfg_out.StorDBType)); err != nil { - t.Error(err) - } - } -} - -func testMigratorActionPlans(t *testing.T) { - v1ap := &v1ActionPlans{&v1ActionPlan{Id: "test", AccountIds: []string{"one"}, Timing: &engine.RateInterval{Timing: &engine.RITiming{Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, WeekDays: utils.WeekDays{}}}}} - ap := &engine.ActionPlan{Id: "test", AccountIDs: utils.StringMap{"one": true}, ActionTimings: []*engine.ActionTiming{&engine.ActionTiming{Timing: &engine.RateInterval{Timing: &engine.RITiming{Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, WeekDays: utils.WeekDays{}}}}}} - switch action { - case utils.REDIS, utils.Mongo: - err := mig.oldDataDB.setV1ActionPlans(v1ap) - if err != nil { - t.Error("Error when setting v1 ActionPlan ", err.Error()) - } - currentVersion := engine.Versions{utils.StatS: 2, utils.Thresholds: 2, utils.Accounts: 2, utils.Actions: 2, utils.ActionTriggers: 2, utils.ActionPlans: 1, utils.SharedGroups: 2} - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for ActionPlan ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaActionPlans}) - if err != nil { - t.Error("Error when migrating ActionPlans ", err.Error()) - } - result, err := mig.dmOut.DataDB().GetActionPlan(ap.Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting ActionPlan ", err.Error()) - } - if ap.Id != result.Id || !reflect.DeepEqual(ap.AccountIDs, result.AccountIDs) { - t.Errorf("Expecting: %+v, received: %+v", *ap, result) - } else if !reflect.DeepEqual(ap.ActionTimings[0].Timing, result.ActionTimings[0].Timing) { - t.Errorf("Expecting: %+v, received: %+v", ap.ActionTimings[0].Timing, result.ActionTimings[0].Timing) - } else if ap.ActionTimings[0].Weight != result.ActionTimings[0].Weight || ap.ActionTimings[0].ActionsID != result.ActionTimings[0].ActionsID { - t.Errorf("Expecting: %+v, received: %+v", ap.ActionTimings[0].Weight, result.ActionTimings[0].Weight) - } - case Move: - if err := mig.dmIN.DataDB().SetActionPlan(ap.Id, ap, true, utils.NonTransactional); err != nil { - t.Error("Error when setting ActionPlan ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err := mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for ActionPlan ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaActionPlans}) - if err != nil { - t.Error("Error when migrating ActionPlans ", err.Error()) - } - result, err := mig.dmOut.DataDB().GetActionPlan(ap.Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting ActionPlan ", err.Error()) - } - if ap.Id != result.Id || !reflect.DeepEqual(ap.AccountIDs, result.AccountIDs) { - t.Errorf("Expecting: %+v, received: %+v", *ap, result) - } else if !reflect.DeepEqual(ap.ActionTimings[0].Timing, result.ActionTimings[0].Timing) { - t.Errorf("Expecting: %+v, received: %+v", ap.ActionTimings[0].Timing, result.ActionTimings[0].Timing) - } else if ap.ActionTimings[0].Weight != result.ActionTimings[0].Weight || ap.ActionTimings[0].ActionsID != result.ActionTimings[0].ActionsID { - t.Errorf("Expecting: %+v, received: %+v", ap.ActionTimings[0].Weight, result.ActionTimings[0].Weight) - } - } -} - -func testMigratorActionTriggers(t *testing.T) { - tim := time.Date(2012, time.February, 27, 23, 59, 59, 0, time.UTC) - v1atrs := &v1ActionTriggers{ - &v1ActionTrigger{ - Id: "Test", - BalanceType: "*monetary", - BalanceDirection: "*out", - ThresholdType: "*max_balance", - ThresholdValue: 2, - ActionsId: "TEST_ACTIONS", - Executed: true, - BalanceExpirationDate: tim, - }, - } - atrs := engine.ActionTriggers{ - &engine.ActionTrigger{ - ID: "Test", - Balance: &engine.BalanceFilter{ - Timings: []*engine.RITiming{}, - ExpirationDate: utils.TimePointer(tim), - Type: utils.StringPointer(utils.MONETARY), - Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), - }, - ExpirationDate: tim, - LastExecutionTime: tim, - ActivationDate: tim, - ThresholdType: utils.TRIGGER_MAX_BALANCE, - ThresholdValue: 2, - ActionsID: "TEST_ACTIONS", - Executed: true, - }, - } - switch action { - case utils.REDIS, utils.MONGO: - err := mig.oldDataDB.setV1ActionTriggers(v1atrs) - if err != nil { - t.Error("Error when setting v1 ActionTriggers ", err.Error()) - } - currentVersion := engine.Versions{utils.StatS: 2, utils.Thresholds: 2, utils.Accounts: 2, utils.Actions: 2, utils.ActionTriggers: 1, utils.ActionPlans: 2, utils.SharedGroups: 2} - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for ActionTriggers ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaActionTriggers}) - if err != nil { - t.Error("Error when migrating ActionTriggers ", err.Error()) - } - result, err := mig.dmOut.GetActionTriggers((*v1atrs)[0].Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting ActionTriggers ", err.Error()) - } - if !reflect.DeepEqual(atrs[0].ID, result[0].ID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ID, result[0].ID) - } else if !reflect.DeepEqual(atrs[0].UniqueID, result[0].UniqueID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].UniqueID, result[0].UniqueID) - } else if !reflect.DeepEqual(atrs[0].ThresholdType, result[0].ThresholdType) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ThresholdType, result[0].ThresholdType) - } else if !reflect.DeepEqual(atrs[0].ThresholdValue, result[0].ThresholdValue) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ThresholdValue, result[0].ThresholdValue) - } else if !reflect.DeepEqual(atrs[0].Recurrent, result[0].Recurrent) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Recurrent, result[0].Recurrent) - } else if !reflect.DeepEqual(atrs[0].MinSleep, result[0].MinSleep) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].MinSleep, result[0].MinSleep) - } else if !reflect.DeepEqual(atrs[0].ExpirationDate, result[0].ExpirationDate) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ExpirationDate, result[0].ExpirationDate) - } else if !reflect.DeepEqual(atrs[0].ActivationDate, result[0].ActivationDate) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ActivationDate, result[0].ActivationDate) - } else if !reflect.DeepEqual(atrs[0].Balance.Type, result[0].Balance.Type) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Type, result[0].Balance.Type) - } else if !reflect.DeepEqual(atrs[0].Weight, result[0].Weight) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Weight, result[0].Weight) - } else if !reflect.DeepEqual(atrs[0].ActionsID, result[0].ActionsID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ActionsID, result[0].ActionsID) - } else if !reflect.DeepEqual(atrs[0].MinQueuedItems, result[0].MinQueuedItems) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].MinQueuedItems, result[0].MinQueuedItems) - } else if !reflect.DeepEqual(atrs[0].Executed, result[0].Executed) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Executed, result[0].Executed) - } else if !reflect.DeepEqual(atrs[0].LastExecutionTime, result[0].LastExecutionTime) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].LastExecutionTime, result[0].LastExecutionTime) - } - //Testing each field of balance - if !reflect.DeepEqual(atrs[0].Balance.Uuid, result[0].Balance.Uuid) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Uuid, result[0].Balance.Uuid) - } else if !reflect.DeepEqual(atrs[0].Balance.ID, result[0].Balance.ID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.ID, result[0].Balance.ID) - } else if !reflect.DeepEqual(atrs[0].Balance.Type, result[0].Balance.Type) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Type, result[0].Balance.Type) - } else if !reflect.DeepEqual(atrs[0].Balance.Value, result[0].Balance.Value) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Value, result[0].Balance.Value) - } else if !reflect.DeepEqual(atrs[0].Balance.Directions, result[0].Balance.Directions) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Directions, result[0].Balance.Directions) - } else if !reflect.DeepEqual(atrs[0].Balance.ExpirationDate, result[0].Balance.ExpirationDate) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.ExpirationDate, result[0].Balance.ExpirationDate) - } else if !reflect.DeepEqual(atrs[0].Balance.Weight, result[0].Balance.Weight) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Weight, result[0].Balance.Weight) - } else if !reflect.DeepEqual(atrs[0].Balance.DestinationIDs, result[0].Balance.DestinationIDs) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.DestinationIDs, result[0].Balance.DestinationIDs) - } else if !reflect.DeepEqual(atrs[0].Balance.RatingSubject, result[0].Balance.RatingSubject) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.RatingSubject, result[0].Balance.RatingSubject) - } else if !reflect.DeepEqual(atrs[0].Balance.Categories, result[0].Balance.Categories) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Categories, result[0].Balance.Categories) - } else if !reflect.DeepEqual(atrs[0].Balance.SharedGroups, result[0].Balance.SharedGroups) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.SharedGroups, result[0].Balance.SharedGroups) - } else if !reflect.DeepEqual(atrs[0].Balance.TimingIDs, result[0].Balance.TimingIDs) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.TimingIDs, result[0].Balance.TimingIDs) - } else if !reflect.DeepEqual(atrs[0].Balance.TimingIDs, result[0].Balance.TimingIDs) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Timings, result[0].Balance.Timings) - } else if !reflect.DeepEqual(atrs[0].Balance.Disabled, result[0].Balance.Disabled) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Disabled, result[0].Balance.Disabled) - } else if !reflect.DeepEqual(atrs[0].Balance.Factor, result[0].Balance.Factor) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Factor, result[0].Balance.Factor) - } else if !reflect.DeepEqual(atrs[0].Balance.Blocker, result[0].Balance.Blocker) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Blocker, result[0].Balance.Blocker) - } - case Move: - if err := mig.dmIN.SetActionTriggers(atrs[0].ID, atrs, utils.NonTransactional); err != nil { - t.Error("Error when setting ActionPlan ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err := mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for ActionTriggers ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaActionTriggers}) - if err != nil { - t.Error("Error when migrating ActionTriggers ", err.Error()) - } - result, err := mig.dmOut.GetActionTriggers(atrs[0].ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting ActionTriggers ", err.Error()) - } - if !reflect.DeepEqual(atrs[0].ID, result[0].ID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ID, result[0].ID) - } else if !reflect.DeepEqual(atrs[0].UniqueID, result[0].UniqueID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].UniqueID, result[0].UniqueID) - } else if !reflect.DeepEqual(atrs[0].ThresholdType, result[0].ThresholdType) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ThresholdType, result[0].ThresholdType) - } else if !reflect.DeepEqual(atrs[0].ThresholdValue, result[0].ThresholdValue) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ThresholdValue, result[0].ThresholdValue) - } else if !reflect.DeepEqual(atrs[0].Recurrent, result[0].Recurrent) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Recurrent, result[0].Recurrent) - } else if !reflect.DeepEqual(atrs[0].MinSleep, result[0].MinSleep) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].MinSleep, result[0].MinSleep) - } else if !reflect.DeepEqual(atrs[0].ExpirationDate, result[0].ExpirationDate) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ExpirationDate, result[0].ExpirationDate) - } else if !reflect.DeepEqual(atrs[0].ActivationDate, result[0].ActivationDate) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ActivationDate, result[0].ActivationDate) - } else if !reflect.DeepEqual(atrs[0].Balance.Type, result[0].Balance.Type) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Type, result[0].Balance.Type) - } else if !reflect.DeepEqual(atrs[0].Weight, result[0].Weight) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Weight, result[0].Weight) - } else if !reflect.DeepEqual(atrs[0].ActionsID, result[0].ActionsID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].ActionsID, result[0].ActionsID) - } else if !reflect.DeepEqual(atrs[0].MinQueuedItems, result[0].MinQueuedItems) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].MinQueuedItems, result[0].MinQueuedItems) - } else if !reflect.DeepEqual(atrs[0].Executed, result[0].Executed) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Executed, result[0].Executed) - } else if !reflect.DeepEqual(atrs[0].LastExecutionTime, result[0].LastExecutionTime) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].LastExecutionTime, result[0].LastExecutionTime) - } - //Testing each field of balance - if !reflect.DeepEqual(atrs[0].Balance.Uuid, result[0].Balance.Uuid) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Uuid, result[0].Balance.Uuid) - } else if !reflect.DeepEqual(atrs[0].Balance.ID, result[0].Balance.ID) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.ID, result[0].Balance.ID) - } else if !reflect.DeepEqual(atrs[0].Balance.Type, result[0].Balance.Type) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Type, result[0].Balance.Type) - } else if !reflect.DeepEqual(atrs[0].Balance.Value, result[0].Balance.Value) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Value, result[0].Balance.Value) - } else if !reflect.DeepEqual(atrs[0].Balance.Directions, result[0].Balance.Directions) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Directions, result[0].Balance.Directions) - } else if !reflect.DeepEqual(atrs[0].Balance.ExpirationDate, result[0].Balance.ExpirationDate) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.ExpirationDate, result[0].Balance.ExpirationDate) - } else if !reflect.DeepEqual(atrs[0].Balance.Weight, result[0].Balance.Weight) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Weight, result[0].Balance.Weight) - } else if !reflect.DeepEqual(atrs[0].Balance.DestinationIDs, result[0].Balance.DestinationIDs) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.DestinationIDs, result[0].Balance.DestinationIDs) - } else if !reflect.DeepEqual(atrs[0].Balance.RatingSubject, result[0].Balance.RatingSubject) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.RatingSubject, result[0].Balance.RatingSubject) - } else if !reflect.DeepEqual(atrs[0].Balance.Categories, result[0].Balance.Categories) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Categories, result[0].Balance.Categories) - } else if !reflect.DeepEqual(atrs[0].Balance.SharedGroups, result[0].Balance.SharedGroups) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.SharedGroups, result[0].Balance.SharedGroups) - } else if !reflect.DeepEqual(atrs[0].Balance.TimingIDs, result[0].Balance.TimingIDs) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.TimingIDs, result[0].Balance.TimingIDs) - } else if !reflect.DeepEqual(atrs[0].Balance.TimingIDs, result[0].Balance.TimingIDs) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Timings, result[0].Balance.Timings) - } else if !reflect.DeepEqual(atrs[0].Balance.Disabled, result[0].Balance.Disabled) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Disabled, result[0].Balance.Disabled) - } else if !reflect.DeepEqual(atrs[0].Balance.Factor, result[0].Balance.Factor) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Factor, result[0].Balance.Factor) - } else if !reflect.DeepEqual(atrs[0].Balance.Blocker, result[0].Balance.Blocker) { - t.Errorf("Expecting: %+v, received: %+v", atrs[0].Balance.Blocker, result[0].Balance.Blocker) - } - } -} - -func testMigratorActions(t *testing.T) { - v1act := &v1Actions{ - &v1Action{ - Id: "test", - ActionType: "", - BalanceType: "", - Direction: "INBOUND", - ExtraParameters: "", - ExpirationString: "", - Balance: &v1Balance{ - Timings: []*engine.RITiming{ - &engine.RITiming{ - Years: utils.Years{}, - Months: utils.Months{}, - MonthDays: utils.MonthDays{}, - WeekDays: utils.WeekDays{}, - }, - }, - }, - }, - } - act := &engine.Actions{ - &engine.Action{ - Id: "test", - ActionType: "", - ExtraParameters: "", - ExpirationString: "", - Weight: 0.00, - Balance: &engine.BalanceFilter{ - Timings: []*engine.RITiming{ - &engine.RITiming{ - Years: utils.Years{}, - Months: utils.Months{}, - MonthDays: utils.MonthDays{}, - WeekDays: utils.WeekDays{}, - }, - }, - }, - }, - } - switch action { - case utils.REDIS, utils.MONGO: - err := mig.oldDataDB.setV1Actions(v1act) - if err != nil { - t.Error("Error when setting v1 Actions ", err.Error()) - } - currentVersion := engine.Versions{utils.StatS: 2, utils.Thresholds: 2, utils.Accounts: 2, utils.Actions: 1, utils.ActionTriggers: 2, utils.ActionPlans: 2, utils.SharedGroups: 2} - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Actions ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaActions}) - if err != nil { - t.Error("Error when migrating Actions ", err.Error()) - } - result, err := mig.dmOut.GetActions((*v1act)[0].Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Actions ", err.Error()) - } - if !reflect.DeepEqual(*act, result) { - t.Errorf("Expecting: %+v, received: %+v", *act, result) - } - case Move: - if err := mig.dmIN.SetActions((*v1act)[0].Id, *act, utils.NonTransactional); err != nil { - t.Error("Error when setting ActionPlan ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err := mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Actions ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaActions}) - if err != nil { - t.Error("Error when migrating Actions ", err.Error()) - } - result, err := mig.dmOut.GetActions((*v1act)[0].Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Actions ", err.Error()) - } - if !reflect.DeepEqual(*act, result) { - t.Errorf("Expecting: %+v, received: %+v", *act, result) - } - } -} - -func testMigratorSharedGroups(t *testing.T) { - v1sqp := &v1SharedGroup{ - Id: "Test", - AccountParameters: map[string]*engine.SharingParameters{ - "test": &engine.SharingParameters{Strategy: "*highest"}, - }, - MemberIds: []string{"1", "2", "3"}, - } - sqp := &engine.SharedGroup{ - Id: "Test", - AccountParameters: map[string]*engine.SharingParameters{ - "test": &engine.SharingParameters{Strategy: "*highest"}, - }, - MemberIds: utils.NewStringMap("1", "2", "3"), - } - switch action { - case utils.REDIS, utils.MONGO: - err := mig.oldDataDB.setV1SharedGroup(v1sqp) - if err != nil { - t.Error("Error when setting v1 SharedGroup ", err.Error()) - } - currentVersion := engine.Versions{utils.StatS: 2, utils.Thresholds: 2, utils.Accounts: 2, utils.Actions: 2, utils.ActionTriggers: 2, utils.ActionPlans: 2, utils.SharedGroups: 1} - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for SharedGroup ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaSharedGroups}) - if err != nil { - t.Error("Error when migrating SharedGroup ", err.Error()) - } - result, err := mig.dmOut.GetSharedGroup(v1sqp.Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting SharedGroup ", err.Error()) - } - if !reflect.DeepEqual(sqp, result) { - t.Errorf("Expecting: %+v, received: %+v", sqp, result) - } - case Move: - if err := mig.dmIN.SetSharedGroup(sqp, utils.NonTransactional); err != nil { - t.Error("Error when setting SharedGroup ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err := mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for SharedGroup ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaSharedGroups}) - if err != nil { - t.Error("Error when migrating SharedGroup ", err.Error()) - } - result, err := mig.dmOut.GetSharedGroup(sqp.Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting SharedGroup ", err.Error()) - } - if !reflect.DeepEqual(sqp, result) { - t.Errorf("Expecting: %+v, received: %+v", sqp, result) - } - } -} - -func testMigratorStats(t *testing.T) { - tim := time.Date(2012, time.February, 27, 23, 59, 59, 0, time.UTC) - var filters []*engine.FilterRule - v1Sts := &v1Stat{ - Id: "test", // Config id, unique per config instance - QueueLength: 10, // Number of items in the stats buffer - TimeWindow: time.Duration(1) * time.Second, // Will only keep the CDRs who's call setup time is not older than time.Now()-TimeWindow - SaveInterval: time.Duration(1) * time.Second, - Metrics: []string{"ASR", "ACD", "ACC"}, - SetupInterval: []time.Time{time.Now()}, - TOR: []string{}, - CdrHost: []string{}, - CdrSource: []string{}, - ReqType: []string{}, - Direction: []string{}, - Tenant: []string{}, - Category: []string{}, - Account: []string{}, - Subject: []string{}, - DestinationIds: []string{}, - UsageInterval: []time.Duration{1 * time.Second}, - PddInterval: []time.Duration{1 * time.Second}, - Supplier: []string{}, - DisconnectCause: []string{}, - MediationRunIds: []string{}, - RatedAccount: []string{}, - RatedSubject: []string{}, - CostInterval: []float64{}, - Triggers: engine.ActionTriggers{ - &engine.ActionTrigger{ - ID: "Test", - Balance: &engine.BalanceFilter{ - ID: utils.StringPointer("TESTB"), - Timings: []*engine.RITiming{}, - ExpirationDate: utils.TimePointer(tim), - Type: utils.StringPointer(utils.MONETARY), - Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), - }, - ExpirationDate: tim, - LastExecutionTime: tim, - ActivationDate: tim, - ThresholdType: utils.TRIGGER_MAX_BALANCE, - ThresholdValue: 2, - ActionsID: "TEST_ACTIONS", - Executed: true, - }, - }, - } - - x, _ := engine.NewFilterRule(engine.MetaGreaterOrEqual, "SetupInterval", []string{v1Sts.SetupInterval[0].String()}) - filters = append(filters, x) - x, _ = engine.NewFilterRule(engine.MetaGreaterOrEqual, "UsageInterval", []string{v1Sts.UsageInterval[0].String()}) - filters = append(filters, x) - x, _ = engine.NewFilterRule(engine.MetaGreaterOrEqual, "PddInterval", []string{v1Sts.PddInterval[0].String()}) - filters = append(filters, x) - - filter := &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: v1Sts.Id, Rules: filters} - - sqp := &engine.StatQueueProfile{ - Tenant: "cgrates.org", - ID: "test", - FilterIDs: []string{v1Sts.Id}, - QueueLength: 10, - TTL: time.Duration(0) * time.Second, - Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{MetricID: "*asr", Parameters: ""}, - &utils.MetricWithParams{MetricID: "*acd", Parameters: ""}, - &utils.MetricWithParams{MetricID: "*acc", Parameters: ""}, - }, - ThresholdIDs: []string{"Test"}, - Blocker: false, - Stored: true, - Weight: float64(0), - MinItems: 0, - } - sq := &engine.StatQueue{Tenant: config.CgrConfig().DefaultTenant, - ID: v1Sts.Id, - SQMetrics: make(map[string]engine.StatMetric), - } - for _, metricwparam := range sqp.Metrics { - if metric, err := engine.NewStatMetric(metricwparam.MetricID, 0, metricwparam.Parameters); err != nil { - t.Error("Error when creating newstatMETRIc ", err.Error()) - } else { - if _, has := sq.SQMetrics[metricwparam.MetricID]; !has { - sq.SQMetrics[metricwparam.MetricID] = metric - } - } - } - switch action { - case utils.REDIS, utils.MONGO: - err := mig.oldDataDB.setV1Stats(v1Sts) - if err != nil { - t.Error("Error when setting v1Stat ", err.Error()) - } - currentVersion := engine.Versions{utils.StatS: 1, utils.Thresholds: 2, utils.Accounts: 2, utils.Actions: 2, utils.ActionTriggers: 2, utils.ActionPlans: 2, utils.SharedGroups: 2} - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for stats ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaStats}) - if err != nil { - t.Error("Error when migrating Stats ", err.Error()) - } - result, err := mig.dmOut.GetStatQueueProfile("cgrates.org", v1Sts.Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Stats ", err.Error()) - } - if !reflect.DeepEqual(sqp.Tenant, result.Tenant) { - t.Errorf("Expecting: %+v, received: %+v", sqp.Tenant, result.Tenant) - } - if !reflect.DeepEqual(sqp.ID, result.ID) { - t.Errorf("Expecting: %+v, received: %+v", sqp.ID, result.ID) - } - if !reflect.DeepEqual(sqp.FilterIDs, result.FilterIDs) { - t.Errorf("Expecting: %+v, received: %+v", sqp.FilterIDs, result.FilterIDs) - } - if !reflect.DeepEqual(sqp.QueueLength, result.QueueLength) { - t.Errorf("Expecting: %+v, received: %+v", sqp.QueueLength, result.QueueLength) - } - if !reflect.DeepEqual(sqp.TTL, result.TTL) { - t.Errorf("Expecting: %+v, received: %+v", sqp.TTL, result.TTL) - } - if !reflect.DeepEqual(sqp.Metrics, result.Metrics) { - t.Errorf("Expecting: %+v, received: %+v", sqp.Metrics, result.Metrics) - } - if !reflect.DeepEqual(sqp.ThresholdIDs, result.ThresholdIDs) { - t.Errorf("Expecting: %+v, received: %+v", sqp.ThresholdIDs, result.ThresholdIDs) - } - if !reflect.DeepEqual(sqp.Blocker, result.Blocker) { - t.Errorf("Expecting: %+v, received: %+v", sqp.Blocker, result.Blocker) - } - if !reflect.DeepEqual(sqp.Stored, result.Stored) { - t.Errorf("Expecting: %+v, received: %+v", sqp.Stored, result.Stored) - } - if !reflect.DeepEqual(sqp.Weight, result.Weight) { - t.Errorf("Expecting: %+v, received: %+v", sqp.Weight, result.Weight) - } - if !reflect.DeepEqual(sqp, result) { - t.Errorf("Expecting: %+v, received: %+v", sqp, result) - } - result1, err := mig.dmOut.GetFilter("cgrates.org", v1Sts.Id, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Stats ", err.Error()) - } - if !reflect.DeepEqual(filter.ActivationInterval, result1.ActivationInterval) { - t.Errorf("Expecting: %+v, received: %+v", filter.ActivationInterval, result1.ActivationInterval) - } - if !reflect.DeepEqual(filter.Tenant, result1.Tenant) { - t.Errorf("Expecting: %+v, received: %+v", filter.Tenant, result1.Tenant) - } - - result2, err := mig.dmOut.GetStatQueue("cgrates.org", sq.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Stats ", err.Error()) - } - if !reflect.DeepEqual(sq.ID, result2.ID) { - t.Errorf("Expecting: %+v, received: %+v", sq.ID, result2.ID) - } - case Move: - if err := mig.dmIN.SetStatQueueProfile(sqp, true); err != nil { - t.Error("Error when setting Stats ", err.Error()) - } - if err := mig.dmIN.SetStatQueue(sq); err != nil { - t.Error("Error when setting Stats ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err := mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for stats ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaStats}) - if err != nil { - t.Error("Error when migrating Stats ", err.Error()) - } - result, err := mig.dmOut.GetStatQueueProfile(sqp.Tenant, sqp.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Stats ", err.Error()) - } - result1, err := mig.dmOut.GetStatQueue(sq.Tenant, sq.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Stats ", err.Error()) - } - if !reflect.DeepEqual(sqp, result) { - t.Errorf("Expecting: %+v, received: %+v", sqp, result) - } - if !reflect.DeepEqual(sq.ID, result1.ID) { - t.Errorf("Expecting: %+v, received: %+v", sq.ID, result1.ID) - } - } -} - -func testMigratorSessionsCosts(t *testing.T) { - switch action { - case utils.REDIS: - currentVersion := engine.CurrentStorDBVersions() - currentVersion[utils.SessionSCosts] = 1 - err := mig.OutStorDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for SessionsCosts ", err.Error()) - } - if vrs, err := mig.OutStorDB().GetVersions(utils.SessionSCosts); err != nil { - t.Error(err) - } else if vrs[utils.SessionSCosts] != 1 { - t.Errorf("Expecting: 1, received: %+v", vrs[utils.SessionSCosts]) - } - var qry string - if isPostgres { - qry = ` - CREATE TABLE sm_costs ( - id SERIAL PRIMARY KEY, - cgrid VARCHAR(40) NOT NULL, - run_id VARCHAR(64) NOT NULL, - origin_host VARCHAR(64) NOT NULL, - origin_id VARCHAR(128) NOT NULL, - cost_source VARCHAR(64) NOT NULL, - usage BIGINT NOT NULL, - cost_details jsonb, - created_at TIMESTAMP WITH TIME ZONE, - deleted_at TIMESTAMP WITH TIME ZONE NULL, - UNIQUE (cgrid, run_id) - ); - ` - } else { - qry = fmt.Sprint("CREATE TABLE sm_costs ( id int(11) NOT NULL AUTO_INCREMENT, cgrid varchar(40) NOT NULL, run_id varchar(64) NOT NULL, origin_host varchar(64) NOT NULL, origin_id varchar(128) NOT NULL, cost_source varchar(64) NOT NULL, `usage` BIGINT NOT NULL, cost_details MEDIUMTEXT, created_at TIMESTAMP NULL,deleted_at TIMESTAMP NULL, PRIMARY KEY (`id`),UNIQUE KEY costid (cgrid, run_id),KEY origin_idx (origin_host, origin_id),KEY run_origin_idx (run_id, origin_id),KEY deleted_at_idx (deleted_at));") - } - if _, err := mig.OutStorDB().(*engine.SQLStorage).Db.Exec("DROP TABLE IF EXISTS sessions_costs;"); err != nil { - t.Error(err) - } - if _, err := mig.OutStorDB().(*engine.SQLStorage).Db.Exec("DROP TABLE IF EXISTS sm_costs;"); err != nil { - t.Error(err) - } - if _, err := mig.OutStorDB().(*engine.SQLStorage).Db.Exec(qry); err != nil { - t.Error(err) - } - err, _ = mig.Migrate([]string{utils.MetaSessionsCosts}) - if vrs, err := mig.OutStorDB().GetVersions(utils.SessionSCosts); err != nil { - t.Error(err) - } else if vrs[utils.SessionSCosts] != 3 { - t.Errorf("Expecting: 3, received: %+v", vrs[utils.SessionSCosts]) - } - } -} - -func testMigratorThreshold(t *testing.T) { - tim := time.Date(2012, time.February, 27, 23, 59, 59, 0, time.UTC) - tenant := config.CgrConfig().DefaultTenant - var filters []*engine.FilterRule - threshold := &v2ActionTrigger{ - ID: "test2", // original csv tag - UniqueID: "testUUID", // individual id - ThresholdType: "*min_event_counter", //*min_event_counter, *max_event_counter, *min_balance_counter, *max_balance_counter, *min_balance, *max_balance, *balance_expired - ThresholdValue: 5.32, - Recurrent: false, // reset excuted flag each run - MinSleep: time.Duration(5) * time.Second, // Minimum duration between two executions in case of recurrent triggers - ExpirationDate: time.Now(), - ActivationDate: time.Now(), - Balance: &engine.BalanceFilter{ - ID: utils.StringPointer("TESTZ"), - Timings: []*engine.RITiming{}, - ExpirationDate: utils.TimePointer(tim), - Type: utils.StringPointer(utils.MONETARY), - Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), - }, - Weight: 0, - ActionsID: "Action1", - MinQueuedItems: 10, // Trigger actions only if this number is hit (stats only) - Executed: false, - LastExecutionTime: time.Now(), - } - x, err := engine.NewFilterRule(engine.MetaRSR, "Directions", threshold.Balance.Directions.Slice()) - if err != nil { - t.Error("Error when creating new NewFilterRule", err.Error()) - } - filters = append(filters, x) - - filter := &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: *threshold.Balance.ID, Rules: filters} - - thp := &engine.ThresholdProfile{ - ID: threshold.ID, - Tenant: config.CgrConfig().DefaultTenant, - FilterIDs: []string{filter.ID}, - Blocker: false, - Weight: threshold.Weight, - ActivationInterval: &utils.ActivationInterval{threshold.ExpirationDate, threshold.ActivationDate}, - MinSleep: threshold.MinSleep, - } - th := &engine.Threshold{ - Tenant: config.CgrConfig().DefaultTenant, - ID: threshold.ID, - } - - switch { - case action == utils.REDIS: - if err := mig.dmIN.SetFilter(filter); err != nil { - t.Error("Error when setting Filter ", err.Error()) - } - if err := mig.dmIN.SetThresholdProfile(thp, true); err != nil { - t.Error("Error when setting threshold ", err.Error()) - } - if err := mig.dmIN.SetThreshold(th); err != nil { - t.Error("Error when setting threshold ", err.Error()) - } - err := mig.oldDataDB.setV2ActionTrigger(threshold) - if err != nil { - t.Error("Error when setting threshold ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - currentVersion[utils.Thresholds] = 1 - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for threshold ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaThresholds}) - if err != nil { - t.Error("Error when migrating threshold ", err.Error()) - } - result, err := mig.dmOut.GetThreshold("cgrates.org", threshold.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting threshold ", err.Error()) - } - if !reflect.DeepEqual(th, result) { - t.Errorf("Expecting: %+v, received: %+v", th, result) - } - thpr, err := mig.dmOut.GetThresholdProfile(thp.Tenant, thp.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting thresholdProfile ", err.Error()) - } - if !reflect.DeepEqual(thp.ID, thpr.ID) { - t.Errorf("Expecting: %+v, received: %+v", thp.ID, thpr.ID) - } - case action == utils.MONGO: - if err := mig.dmIN.SetFilter(filter); err != nil { - t.Error("Error when setting Filter ", err.Error()) - } - if err := mig.dmIN.SetThresholdProfile(thp, true); err != nil { - t.Error("Error when setting Threshold ", err.Error()) - } - if err := mig.dmIN.SetThreshold(th); err != nil { - t.Error("Error when setting Threshold ", err.Error()) - } - err := mig.oldDataDB.setV2ActionTrigger(threshold) - if err != nil { - t.Error("Error when setting Threshold ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - currentVersion[utils.Thresholds] = 1 - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Threshold ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaThresholds}) - if err != nil { - t.Error("Error when migrating Threshold ", err.Error()) - } - result, err := mig.dmOut.GetThreshold("cgrates.org", threshold.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Threshold ", err.Error()) - } - if !reflect.DeepEqual(th, result) { - t.Errorf("Expecting: %+v, received: %+v", th, result) - } - thpr, err := mig.dmOut.GetThresholdProfile(thp.Tenant, thp.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting thresholdProfile ", err.Error()) - } - if !reflect.DeepEqual(thp.ID, thpr.ID) { - t.Errorf("Expecting: %+v, received: %+v", thp.ID, thpr.ID) - } - case action == Move: - if err := mig.dmIN.SetFilter(filter); err != nil { - t.Error("Error when setting Filter ", err.Error()) - } - if err := mig.dmIN.SetThresholdProfile(thp, true); err != nil { - t.Error("Error when setting Threshold ", err.Error()) - } - if err := mig.dmIN.SetThreshold(th); err != nil { - t.Error("Error when setting Threshold ", err.Error()) - } - err := mig.oldDataDB.setV2ActionTrigger(threshold) - if err != nil { - t.Error("Error when setting Threshold ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err = mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Threshold ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaThresholds}) - if err != nil { - t.Error("Error when migrating Threshold ", err.Error()) - } - result, err := mig.dmOut.GetThreshold(tenant, threshold.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Threshold ", err.Error()) - } - if !reflect.DeepEqual(th, result) { - t.Errorf("Expecting: %+v, received: %+v", th, result) - } - thpr, err := mig.dmOut.GetThresholdProfile(thp.Tenant, thp.ID, true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting ThresholdProfile ", err.Error()) - } - if !reflect.DeepEqual(thp.ID, thpr.ID) { - t.Errorf("Expecting: %+v, received: %+v", thp.ID, thpr.ID) - } - } -} - -func testMigratorAlias(t *testing.T) { - alias := &engine.Alias{ - Direction: "*out", - Tenant: "cgrates.org", - Category: "call", - Account: "dan", - Subject: "dan", - Context: "*rating", - Values: engine.AliasValues{ - &engine.AliasValue{ - DestinationId: "EU_LANDLINE", - Pairs: engine.AliasPairs{ - "Subject": map[string]string{ - "dan": "dan1", - "rif": "rif1", - }, - "Cli": map[string]string{ - "0723": "0724", - }, - }, - Weight: 10, - }, - - &engine.AliasValue{ - DestinationId: "GLOBAL1", - Pairs: engine.AliasPairs{"Subject": map[string]string{"dan": "dan2"}}, - Weight: 20, - }, - }, - } - switch action { - case Move: - if err := mig.dmIN.DataDB().SetAlias(alias, utils.NonTransactional); err != nil { - t.Error("Error when setting Alias ", err.Error()) - } - currentVersion := engine.CurrentDataDBVersions() - err := mig.dmOut.DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for Alias ", err.Error()) - } - err, _ = mig.Migrate([]string{utils.MetaAlias}) - if err != nil { - t.Error("Error when migrating Alias ", err.Error()) - } - result, err := mig.dmOut.DataDB().GetAlias(alias.GetId(), true, utils.NonTransactional) - if err != nil { - t.Error("Error when getting Alias ", err.Error()) - } - if !reflect.DeepEqual(alias, result) { - t.Errorf("Expecting: %+v, received: %+v", alias, result) - } - } -} - -func testMigratorCdrStats(t *testing.T) { - cdrs := &engine.CdrStats{ - Id: "", - QueueLength: 10, // Number of items in the stats buffer - TimeWindow: time.Duration(1) * time.Second, // Will only keep the CDRs who's call setup time is not older than time.Now()-TimeWindow - SaveInterval: time.Duration(1) * time.Second, - Metrics: []string{engine.ASR, engine.PDD, engine.ACD, engine.TCD, engine.ACC, engine.TCC, engine.DDC}, - SetupInterval: []time.Time{time.Date(2012, time.February, 27, 23, 59, 59, 0, time.UTC)}, // CDRFieldFilter on SetupInterval, 2 or less items (>= start interval,< stop_interval) - TOR: []string{""}, // CDRFieldFilter on TORs - CdrHost: []string{""}, // CDRFieldFilter on CdrHosts - CdrSource: []string{""}, // CDRFieldFilter on CdrSources - ReqType: []string{""}, // CDRFieldFilter on RequestTypes - Direction: []string{""}, // CDRFieldFilter on Directions - Tenant: []string{""}, // CDRFieldFilter on Tenants - Category: []string{""}, // CDRFieldFilter on Categories - Account: []string{""}, // CDRFieldFilter on Accounts - Subject: []string{""}, // CDRFieldFilter on Subjects - DestinationIds: []string{""}, // CDRFieldFilter on DestinationPrefixes - UsageInterval: []time.Duration{time.Duration(1) * time.Second}, // CDRFieldFilter on UsageInterval, 2 or less items (>= Usage, = Pdd, =Cost, when updating SessionSCosts version into StorDB", err.Error())) - } + if m.dryRun { + return + } + vrs := engine.Versions{utils.SessionSCosts: 2} + if err = m.storDBOut.StorDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating SessionSCosts version into StorDB", err.Error())) } return } @@ -104,29 +99,28 @@ func (m *Migrator) migrateV2SessionSCosts() (err error) { if err == utils.ErrNoMoreData { break } - if v2Cost == nil { + if v2Cost == nil || m.dryRun { continue } smCost := v2Cost.V2toV3Cost() - if m.dryRun != true { - if err = m.storDBOut.StorDB().SetSMCost(smCost); err != nil { - return err - } - if err = m.storDBIn.remV2SMCost(v2Cost); err != nil { - return err - } - m.stats[utils.SessionSCosts] += 1 + if err = m.storDBOut.StorDB().SetSMCost(smCost); err != nil { + return err } + if err = m.storDBIn.remV2SMCost(v2Cost); err != nil { + return err + } + m.stats[utils.SessionSCosts] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.SessionSCosts: engine.CurrentStorDBVersions()[utils.SessionSCosts]} - if err = m.storDBOut.StorDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating SessionSCosts version into StorDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.SessionSCosts: engine.CurrentStorDBVersions()[utils.SessionSCosts]} + if err = m.storDBOut.StorDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating SessionSCosts version into StorDB", err.Error())) } return } diff --git a/migrator/sharedgroup.go b/migrator/sharedgroup.go index 361c6a13c..36407adc9 100644 --- a/migrator/sharedgroup.go +++ b/migrator/sharedgroup.go @@ -44,12 +44,11 @@ func (m *Migrator) migrateCurrentSharedGroups() (err error) { if err != nil { return err } - if sgs != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetSharedGroup(sgs, utils.NonTransactional); err != nil { - return err - } - } + if sgs == nil || m.dryRun { + continue + } + if err := m.dmOut.DataManager().SetSharedGroup(sgs, utils.NonTransactional); err != nil { + return err } } return @@ -65,15 +64,14 @@ func (m *Migrator) migrateV1SharedGroups() (err error) { if err == utils.ErrNoMoreData { break } - if v1SG != nil { - acnt := v1SG.AsSharedGroup() - if m.dryRun != true { - if err = m.dmOut.DataManager().SetSharedGroup(acnt, utils.NonTransactional); err != nil { - return err - } - m.stats[utils.SharedGroups] += 1 - } + if v1SG == nil || m.dryRun { + continue } + acnt := v1SG.AsSharedGroup() + if err = m.dmOut.DataManager().SetSharedGroup(acnt, utils.NonTransactional); err != nil { + return err + } + m.stats[utils.SharedGroups] += 1 } // All done, update version wtih current one vrs := engine.Versions{utils.SharedGroups: engine.CurrentStorDBVersions()[utils.SharedGroups]} @@ -106,15 +104,9 @@ func (m *Migrator) migrateSharedGroups() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentSharedGroups(); err != nil { - return err - } - return - + return m.migrateCurrentSharedGroups() case 1: - if err := m.migrateV1SharedGroups(); err != nil { - return err - } + return m.migrateV1SharedGroups() } return } diff --git a/migrator/suppliers.go b/migrator/suppliers.go index 85b1523de..1e66b513c 100644 --- a/migrator/suppliers.go +++ b/migrator/suppliers.go @@ -40,14 +40,13 @@ func (m *Migrator) migrateCurrentSupplierProfile() (err error) { if err != nil { return err } - if splp != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetSupplierProfile(splp, true); err != nil { - return err - } - m.stats[utils.Suppliers] += 1 - } + if splp == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetSupplierProfile(splp, true); err != nil { + return err + } + m.stats[utils.Suppliers] += 1 } return } @@ -72,10 +71,7 @@ func (m *Migrator) migrateSupplierProfiles() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentSupplierProfile(); err != nil { - return err - } - return + return m.migrateCurrentSupplierProfile() } return } diff --git a/migrator/thresholds.go b/migrator/thresholds.go index 3135b11a6..90d4121f7 100644 --- a/migrator/thresholds.go +++ b/migrator/thresholds.go @@ -61,14 +61,13 @@ func (m *Migrator) migrateCurrentThresholds() (err error) { if err != nil { return err } - if ths != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetThreshold(ths); err != nil { - return err - } - m.stats[utils.Thresholds] += 1 - } + if ths == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetThreshold(ths); err != nil { + return err + } + m.stats[utils.Thresholds] += 1 } //ThresholdProfiles ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdProfilePrefix) @@ -81,12 +80,11 @@ func (m *Migrator) migrateCurrentThresholds() (err error) { if err != nil { return err } - if ths != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetThresholdProfile(ths, true); err != nil { - return err - } - } + if ths == nil || m.dryRun { + continue + } + if err := m.dmOut.DataManager().SetThresholdProfile(ths, true); err != nil { + return err } } return @@ -107,29 +105,31 @@ func (m *Migrator) migrateV2ActionTriggers() (err error) { if err != nil { return err } - if m.dryRun != true { - if err := m.dmOut.DataManager().SetFilter(filter); err != nil { - return err - } - if err := m.dmOut.DataManager().SetThreshold(th); err != nil { - return err - } - if err := m.dmOut.DataManager().SetThresholdProfile(thp, true); err != nil { - return err - } - m.stats[utils.Thresholds] += 1 + if m.dryRun { + continue } + if err := m.dmOut.DataManager().SetFilter(filter); err != nil { + return err + } + if err := m.dmOut.DataManager().SetThreshold(th); err != nil { + return err + } + if err := m.dmOut.DataManager().SetThresholdProfile(thp, true); err != nil { + return err + } + m.stats[utils.Thresholds] += 1 } } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.Thresholds: engine.CurrentStorDBVersions()[utils.Thresholds]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Thresholds: engine.CurrentStorDBVersions()[utils.Thresholds]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) } return } @@ -144,28 +144,29 @@ func (m *Migrator) migrateV2Thresholds() (err error) { if err == utils.ErrNoMoreData { break } - if v2T != nil { - th := v2T.V2toV3Threshold() - if m.dryRun != true { - if err = m.dmIN.remV2ThresholdProfile(v2T.Tenant, v2T.ID); err != nil { - return err - } - if err = m.dmOut.DataManager().SetThresholdProfile(th, true); err != nil { - return err - } - m.stats[utils.Thresholds] += 1 - } + if v2T == nil || m.dryRun { + continue } + th := v2T.V2toV3Threshold() + + if err = m.dmIN.remV2ThresholdProfile(v2T.Tenant, v2T.ID); err != nil { + return err + } + if err = m.dmOut.DataManager().SetThresholdProfile(th, true); err != nil { + return err + } + m.stats[utils.Thresholds] += 1 } - if m.dryRun != true { - // All done, update version wtih current one - vrs := engine.Versions{utils.Thresholds: engine.CurrentDataDBVersions()[utils.Thresholds]} - if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { - return utils.NewCGRError(utils.Migrator, - utils.ServerErrorCaps, - err.Error(), - fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) - } + if m.dryRun { + return + } + // All done, update version wtih current one + vrs := engine.Versions{utils.Thresholds: engine.CurrentDataDBVersions()[utils.Thresholds]} + if err = m.dmOut.DataManager().DataDB().SetVersions(vrs, false); err != nil { + return utils.NewCGRError(utils.Migrator, + utils.ServerErrorCaps, + err.Error(), + fmt.Sprintf("error: <%s> when updating Thresholds version into dataDB", err.Error())) } return } @@ -404,10 +405,9 @@ func (v2T v2Threshold) V2toV3Threshold() (th *engine.ThresholdProfile) { ActionIDs: v2T.ActionIDs, Async: v2T.Async, } - if v2T.Recurrent == true { + th.MaxHits = 1 + if v2T.Recurrent { th.MaxHits = -1 - } else { - th.MaxHits = 1 } return } diff --git a/migrator/timings.go b/migrator/timings.go index c9ba0377f..720fd8627 100644 --- a/migrator/timings.go +++ b/migrator/timings.go @@ -38,14 +38,13 @@ func (m *Migrator) migrateCurrentTiming() (err error) { if err != nil { return err } - if tm != nil { - if m.dryRun != true { - if err := m.dmOut.DataManager().SetTiming(tm); err != nil { - return err - } - m.stats[utils.Timing] += 1 - } + if tm == nil || m.dryRun { + continue } + if err := m.dmOut.DataManager().SetTiming(tm); err != nil { + return err + } + m.stats[utils.Timing] += 1 } return } @@ -70,10 +69,7 @@ func (m *Migrator) migrateTimings() (err error) { if m.sameDataDB { return } - if err := m.migrateCurrentTiming(); err != nil { - return err - } - return + return m.migrateCurrentTiming() } return } diff --git a/migrator/user.go b/migrator/user.go index a73bc8044..81d2c9d19 100644 --- a/migrator/user.go +++ b/migrator/user.go @@ -121,52 +121,6 @@ func (m *Migrator) migrateV1User2AttributeProfile() (err error) { return } -// func (m *Migrator) migrateCurrentUser() (err error) { -// var ids []string -// ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.USERS_PREFIX) -// if err != nil { -// return err -// } -// for _, id := range ids { -// idg := strings.TrimPrefix(id, utils.USERS_PREFIX) -// usr, err := m.dmIN.DataManager().GetUser(idg) -// if err != nil { -// return err -// } -// if usr != nil { -// if m.dryRun != true { -// if err := m.dmOut.DataManager().SetUser(usr); err != nil { -// return err -// } -// m.stats[utils.User] += 1 -// } -// } -// } -// return -// } - func (m *Migrator) migrateUser() (err error) { return m.migrateV1User2AttributeProfile() - /* - var vrs engine.Versions - current := engine.CurrentDataDBVersions() - vrs, err = m.dmIN.DataManager().DataDB().GetVersions("") - if err != nil { - return utils.NewCGRError(utils.Migrator, utils.ServerErrorCaps, - err.Error(), fmt.Sprintf("error: <%s> when querying oldDataDB for versions", err.Error())) - } else if len(vrs) == 0 { - return utils.NewCGRError(utils.Migrator, utils.MandatoryIEMissingCaps, - utils.UndefinedVersion, "version number is not defined for Users model") - } - switch vrs[utils.User] { - case 1: - return m.migrateV1User2AttributeProfile() - case current[utils.User]: - if !m.sameStorDB { - return utils.ErrNotImplemented - // return m.migrateCurrentUser() - } - } - return - */ } diff --git a/migrator/user_it_test.go b/migrator/user_it_test.go index a83ce08df..1e18dc16e 100644 --- a/migrator/user_it_test.go +++ b/migrator/user_it_test.go @@ -36,7 +36,6 @@ var ( usrCfgIn *config.CGRConfig usrCfgOut *config.CGRConfig usrMigrator *Migrator - usrAction string ) var sTestsUsrIT = []func(t *testing.T){ @@ -47,41 +46,22 @@ var sTestsUsrIT = []func(t *testing.T){ func TestUserMigrateITRedis(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testUsrStart("TestUserMigrateITRedis", inPath, inPath, utils.Migrate, t) + testUsrStart("TestUserMigrateITRedis", inPath, inPath, t) } func TestUserMigrateITMongo(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - testUsrStart("TestUserMigrateITMongo", inPath, inPath, utils.Migrate, t) -} - -func TestUserITMove(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - outPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testUsrStart("TestUserITMove", inPath, outPath, utils.Move, t) + testUsrStart("TestUserMigrateITMongo", inPath, inPath, t) } func TestUserITMigrateMongo2Redis(t *testing.T) { inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") outPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - testUsrStart("TestUserITMigrateMongo2Redis", inPath, outPath, utils.Migrate, t) + testUsrStart("TestUserITMigrateMongo2Redis", inPath, outPath, t) } -func TestUserITMoveEncoding(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmongo") - outPath := path.Join(*dataDir, "conf", "samples", "tutmongojson") - testUsrStart("TestUserITMoveEncoding", inPath, outPath, utils.Move, t) -} - -func TestUserITMoveEncoding2(t *testing.T) { - inPath := path.Join(*dataDir, "conf", "samples", "tutmysql") - outPath := path.Join(*dataDir, "conf", "samples", "tutmysqljson") - testUsrStart("TestUserITMoveEncoding2", inPath, outPath, utils.Move, t) -} - -func testUsrStart(testName, inPath, outPath, action string, t *testing.T) { +func testUsrStart(testName, inPath, outPath string, t *testing.T) { var err error - usrAction = action if usrCfgIn, err = config.NewCGRConfigFromFolder(inPath); err != nil { t.Fatal(err) } @@ -165,91 +145,59 @@ func testUsrITMigrateAndMove(t *testing.T) { Weight: 10, } attrProf.Compile() - switch usrAction { - case utils.Migrate: - err := usrMigrator.dmIN.setV1User(user) - if err != nil { - t.Error("Error when setting v1 User ", err.Error()) - } - currentVersion := engine.Versions{utils.User: 1} - err = usrMigrator.dmIN.DataManager().DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for User ", err.Error()) - } - //check if version was set correctly - if vrs, err := usrMigrator.dmIN.DataManager().DataDB().GetVersions(""); err != nil { - t.Error(err) - } else if vrs[utils.User] != 1 { - t.Errorf("Unexpected version returned: %d", vrs[utils.User]) - } - //migrate user - err, _ = usrMigrator.Migrate([]string{utils.MetaUsers}) - if err != nil { - t.Error("Error when migrating User ", err.Error()) - } - //check if version was updated - if vrs, err := usrMigrator.dmOut.DataManager().DataDB().GetVersions(""); err != nil { - t.Error(err) - } else if vrs[utils.User] != 0 { - t.Errorf("Unexpected version returned: %d", vrs[utils.User]) - } - //check if user was migrate correctly - result, err := usrMigrator.dmOut.DataManager().DataDB().GetAttributeProfileDrv(defaultTenant, user.UserName) - if err != nil { - t.Fatalf("Error when getting Attributes %v", err.Error()) - } - result.Compile() - sort.Slice(result.Attributes, func(i, j int) bool { - return result.Attributes[i].FieldName < result.Attributes[j].FieldName - }) // only for test; map returns random keys - if !reflect.DeepEqual(*attrProf, *result) { - t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(attrProf), utils.ToJSON(result)) - } - //check if old account was deleted - if _, err = usrMigrator.dmIN.getV1Alias(); err != utils.ErrNoMoreData { - t.Error("Error should be not found : ", err) - } - expUsrIdx := map[string]utils.StringMap{ - "*string:~Account:1002": utils.StringMap{ - "1001": true, - }, - } - if usridx, err := usrMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.AttributeProfilePrefix], - utils.ConcatenatedKey("cgrates.org", utils.META_ANY), utils.MetaString, nil); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(expUsrIdx, usridx) { - t.Errorf("Expected %v, recived: %v", utils.ToJSON(expUsrIdx), utils.ToJSON(usridx)) - } + err := usrMigrator.dmIN.setV1User(user) + if err != nil { + t.Error("Error when setting v1 User ", err.Error()) + } + currentVersion := engine.Versions{utils.User: 1} + err = usrMigrator.dmIN.DataManager().DataDB().SetVersions(currentVersion, false) + if err != nil { + t.Error("Error when setting version for User ", err.Error()) + } + //check if version was set correctly + if vrs, err := usrMigrator.dmIN.DataManager().DataDB().GetVersions(""); err != nil { + t.Error(err) + } else if vrs[utils.User] != 1 { + t.Errorf("Unexpected version returned: %d", vrs[utils.User]) + } + //migrate user + err, _ = usrMigrator.Migrate([]string{utils.MetaUsers}) + if err != nil { + t.Error("Error when migrating User ", err.Error()) + } + //check if version was updated + if vrs, err := usrMigrator.dmOut.DataManager().DataDB().GetVersions(""); err != nil { + t.Error(err) + } else if vrs[utils.User] != 0 { + t.Errorf("Unexpected version returned: %d", vrs[utils.User]) + } + //check if user was migrate correctly + result, err := usrMigrator.dmOut.DataManager().DataDB().GetAttributeProfileDrv(defaultTenant, user.UserName) + if err != nil { + t.Fatalf("Error when getting Attributes %v", err.Error()) + } + result.Compile() + sort.Slice(result.Attributes, func(i, j int) bool { + return result.Attributes[i].FieldName < result.Attributes[j].FieldName + }) // only for test; map returns random keys + if !reflect.DeepEqual(*attrProf, *result) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(attrProf), utils.ToJSON(result)) + } + //check if old account was deleted + if _, err = usrMigrator.dmIN.getV1Alias(); err != utils.ErrNoMoreData { + t.Error("Error should be not found : ", err) + } - case utils.Move: - /* // No Move tests - if err := usrMigrator.dmIN.DataManager().DataDB().SetUserDrv(user); err != nil { - t.Error(err) - } - currentVersion := engine.CurrentDataDBVersions() - err := usrMigrator.dmOut.DataManager().DataDB().SetVersions(currentVersion, false) - if err != nil { - t.Error("Error when setting version for User ", err.Error()) - } - //migrate accounts - err, _ = usrMigrator.Migrate([]string{utils.MetaUsers}) - if err != nil { - t.Error("Error when usrMigratorrating User ", err.Error()) - } - //check if account was migrate correctly - result, err := usrMigrator.dmOut.DataManager().DataDB().GetUserDrv(user.GetId(), false) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(user, result) { - t.Errorf("Expecting: %+v, received: %+v", user, result) - } - //check if old account was deleted - result, err = usrMigrator.dmIN.DataManager().DataDB().GetUserDrv(user.GetId(), false) - if err != utils.ErrNotFound { - t.Error(err) - } - // */ + expUsrIdx := map[string]utils.StringMap{ + "*string:~Account:1002": utils.StringMap{ + "1001": true, + }, + } + if usridx, err := usrMigrator.dmOut.DataManager().GetFilterIndexes(utils.PrefixToIndexCache[utils.AttributeProfilePrefix], + utils.ConcatenatedKey("cgrates.org", utils.META_ANY), utils.MetaString, nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expUsrIdx, usridx) { + t.Errorf("Expected %v, recived: %v", utils.ToJSON(expUsrIdx), utils.ToJSON(usridx)) } }