mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add test move for account
This commit is contained in:
committed by
Dan Christian Bogos
parent
1c40e7bb4a
commit
e7a84463df
@@ -51,6 +51,9 @@ func (m *Migrator) migrateCurrentAccounts() (err error) {
|
||||
if err := m.dmOut.DataDB().SetAccount(acc); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := m.dmIN.DataDB().RemoveAccount(idg); err != nil {
|
||||
return err
|
||||
}
|
||||
m.stats[utils.Accounts] += 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ package migrator
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"path"
|
||||
"reflect"
|
||||
@@ -33,3 +32,227 @@ import (
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
accPathIn string
|
||||
accPathOut string
|
||||
accCfgIn *config.CGRConfig
|
||||
accCfgOut *config.CGRConfig
|
||||
accMigrator *Migrator
|
||||
accAction string
|
||||
dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here")
|
||||
loadHistorySize = flag.Int("load_history_size", config.CgrConfig().LoadHistorySize, "Limit the number of records in the load history")
|
||||
)
|
||||
|
||||
var sTestsAccIT = []func(t *testing.T){
|
||||
testAccITFlush,
|
||||
testAccITMigrateAndMove,
|
||||
}
|
||||
|
||||
func TestAccountITaccMigratorrateRedisConnection(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestAccountITaccMigratorrateRedis(t *testing.T) {
|
||||
accAction = utils.Migrate
|
||||
for _, stest := range sTestsAccIT {
|
||||
t.Run("TestAccountITMigrateRedis", stest)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestAccountITMongoConnection(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestAccountITMongo(t *testing.T) {
|
||||
accAction = utils.Migrate
|
||||
for _, stest := range sTestsAccIT {
|
||||
t.Run("TestAccountITMigrateMongo", stest)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountITMoveConnection(t *testing.T) {
|
||||
accPathIn := path.Join(*dataDir, "conf", "samples", "tutmongo")
|
||||
accCfgIn, err := config.NewCGRConfigFromFolder(accPathIn)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
accPathOut := path.Join(*dataDir, "conf", "samples", "tutmysql")
|
||||
accCfgOut, err := config.NewCGRConfigFromFolder(accPathOut)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dataDB, err := engine.ConfigureDataStorage(accCfgIn.DataDbType,
|
||||
accCfgIn.DataDbHost, accCfgIn.DataDbPort, accCfgIn.DataDbName,
|
||||
accCfgIn.DataDbUser, accCfgIn.DataDbPass, accCfgIn.DBDataEncoding,
|
||||
config.CgrConfig().CacheCfg(), *loadHistorySize)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
dataDB2, err := engine.ConfigureDataStorage(accCfgOut.DataDbType,
|
||||
accCfgOut.DataDbHost, accCfgOut.DataDbPort, accCfgOut.DataDbName,
|
||||
accCfgOut.DataDbUser, accCfgOut.DataDbPass, accCfgOut.DBDataEncoding,
|
||||
config.CgrConfig().CacheCfg(), *loadHistorySize)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
oldDataDB, err := ConfigureV1DataStorage(accCfgOut.DataDbType,
|
||||
accCfgOut.DataDbHost, accCfgOut.DataDbPort, accCfgOut.DataDbName,
|
||||
accCfgOut.DataDbUser, accCfgOut.DataDbPass, accCfgOut.DBDataEncoding)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
accMigrator, err = NewMigrator(dataDB2, dataDB, accCfgIn.DataDbType,
|
||||
accCfgIn.DBDataEncoding, nil, nil, accCfgIn.StorDBType, oldDataDB,
|
||||
accCfgIn.DataDbType, accCfgIn.DBDataEncoding, nil, accCfgIn.StorDBType,
|
||||
false, false, false, false, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountITMove(t *testing.T) {
|
||||
accAction = utils.Move
|
||||
for _, stest := range sTestsAccIT {
|
||||
t.Run("TestAccountITMove", stest)
|
||||
}
|
||||
}
|
||||
|
||||
func testAccITFlush(t *testing.T) {
|
||||
accMigrator.dmOut.DataDB().Flush("")
|
||||
if err := engine.SetDBVersions(accMigrator.dmOut.DataDB()); err != nil {
|
||||
t.Error("Error ", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func testAccITMigrateAndMove(t *testing.T) {
|
||||
timingSlice := []*engine.RITiming{
|
||||
&engine.RITiming{
|
||||
Years: utils.Years{},
|
||||
Months: utils.Months{},
|
||||
MonthDays: utils.MonthDays{},
|
||||
WeekDays: utils.WeekDays{},
|
||||
},
|
||||
}
|
||||
v1b := &v1Balance{
|
||||
Value: 100000,
|
||||
Weight: 10,
|
||||
DestinationIds: "NAT",
|
||||
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
|
||||
Timings: timingSlice,
|
||||
}
|
||||
v1Acc := &v1Account{
|
||||
Id: "*OUT:CUSTOMER_1:rif",
|
||||
BalanceMap: map[string]v1BalanceChain{
|
||||
utils.DATA: v1BalanceChain{v1b},
|
||||
utils.VOICE: v1BalanceChain{v1b},
|
||||
utils.MONETARY: v1BalanceChain{
|
||||
&v1Balance{Value: 21,
|
||||
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
|
||||
Timings: timingSlice}}}}
|
||||
|
||||
v2d := &engine.Balance{
|
||||
Uuid: "", ID: "",
|
||||
Value: 100000,
|
||||
Directions: utils.StringMap{"*OUT": true},
|
||||
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
|
||||
Weight: 10,
|
||||
DestinationIDs: utils.StringMap{"NAT": true},
|
||||
RatingSubject: "",
|
||||
Categories: utils.NewStringMap(),
|
||||
SharedGroups: utils.NewStringMap(),
|
||||
Timings: timingSlice,
|
||||
TimingIDs: utils.NewStringMap(""),
|
||||
Factor: engine.ValueFactor{}}
|
||||
v2b := &engine.Balance{
|
||||
Uuid: "", ID: "",
|
||||
Value: 0.0001,
|
||||
Directions: utils.StringMap{"*OUT": true},
|
||||
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
|
||||
Weight: 10,
|
||||
DestinationIDs: utils.StringMap{"NAT": true},
|
||||
RatingSubject: "",
|
||||
Categories: utils.NewStringMap(),
|
||||
SharedGroups: utils.NewStringMap(),
|
||||
Timings: timingSlice,
|
||||
TimingIDs: utils.NewStringMap(""),
|
||||
Factor: engine.ValueFactor{}}
|
||||
m2 := &engine.Balance{
|
||||
Uuid: "",
|
||||
ID: "",
|
||||
Value: 21,
|
||||
Directions: utils.StringMap{"*OUT": true},
|
||||
ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC),
|
||||
DestinationIDs: utils.NewStringMap(""),
|
||||
RatingSubject: "",
|
||||
Categories: utils.NewStringMap(),
|
||||
SharedGroups: utils.NewStringMap(),
|
||||
Timings: timingSlice,
|
||||
TimingIDs: utils.NewStringMap(""),
|
||||
Factor: engine.ValueFactor{}}
|
||||
testAccount := &engine.Account{
|
||||
ID: "CUSTOMER_1:rif",
|
||||
BalanceMap: map[string]engine.Balances{
|
||||
utils.DATA: engine.Balances{v2d},
|
||||
utils.VOICE: engine.Balances{v2b},
|
||||
utils.MONETARY: engine.Balances{m2}},
|
||||
UnitCounters: engine.UnitCounters{},
|
||||
ActionTriggers: engine.ActionTriggers{}}
|
||||
switch accAction {
|
||||
case utils.Migrate:
|
||||
err := accMigrator.oldDataDB.setV1Account(v1Acc)
|
||||
if err != nil {
|
||||
t.Error("Error when setting v1 Accounts ", err.Error())
|
||||
}
|
||||
currentVersion := engine.Versions{utils.StatS: 2,
|
||||
utils.Thresholds: 2,
|
||||
utils.Accounts: 1,
|
||||
utils.Actions: 2,
|
||||
utils.ActionTriggers: 2,
|
||||
utils.ActionPlans: 2,
|
||||
utils.SharedGroups: 2}
|
||||
err = accMigrator.dmOut.DataDB().SetVersions(currentVersion, false)
|
||||
if err != nil {
|
||||
t.Error("Error when setting version for Accounts ", err.Error())
|
||||
}
|
||||
err, _ = accMigrator.Migrate([]string{utils.MetaAccounts})
|
||||
if err != nil {
|
||||
t.Error("Error when migrating Accounts ", err.Error())
|
||||
}
|
||||
result, err := accMigrator.dmOut.DataDB().GetAccount(testAccount.ID)
|
||||
if err != nil {
|
||||
t.Error("Error when getting Accounts ", err.Error())
|
||||
}
|
||||
if !reflect.DeepEqual(testAccount.BalanceMap["*voice"][0], result.BalanceMap["*voice"][0]) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", testAccount.BalanceMap["*voice"][0], result.BalanceMap["*voice"][0])
|
||||
} else if !reflect.DeepEqual(testAccount, result) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", testAccount, result)
|
||||
}
|
||||
case utils.Move:
|
||||
if err := accMigrator.dmIN.DataDB().SetAccount(testAccount); err != nil {
|
||||
log.Print("GOT ERR DMIN", err)
|
||||
}
|
||||
currentVersion := engine.CurrentDataDBVersions()
|
||||
err := accMigrator.dmOut.DataDB().SetVersions(currentVersion, false)
|
||||
if err != nil {
|
||||
t.Error("Error when setting version for Accounts ", err.Error())
|
||||
}
|
||||
err, _ = accMigrator.Migrate([]string{utils.MetaAccounts})
|
||||
if err != nil {
|
||||
t.Error("Error when accMigratorrating Accounts ", err.Error())
|
||||
}
|
||||
result, err := accMigrator.dmOut.DataDB().GetAccount(testAccount.ID)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if !reflect.DeepEqual(testAccount, result) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", testAccount, result)
|
||||
}
|
||||
result, err = accMigrator.dmIN.DataDB().GetAccount(testAccount.ID)
|
||||
if err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package migrator
|
||||
|
||||
/*
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
@@ -39,8 +40,7 @@ var (
|
||||
Move = "move"
|
||||
action string
|
||||
mig *Migrator
|
||||
dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here")
|
||||
loadHistorySize = flag.Int("load_history_size", config.CgrConfig().LoadHistorySize, "Limit the number of records in the load history")
|
||||
|
||||
)
|
||||
|
||||
// subtests to be executed for each migrator
|
||||
@@ -2948,3 +2948,4 @@ func testMigratorTpAliases(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -537,6 +537,12 @@ const (
|
||||
Opensips = "opensips"
|
||||
)
|
||||
|
||||
// Migrator Action
|
||||
const (
|
||||
Move = "move"
|
||||
Migrate = "migrate"
|
||||
)
|
||||
|
||||
// MetaMetrics
|
||||
const (
|
||||
MetaASR = "*asr"
|
||||
|
||||
Reference in New Issue
Block a user