From b1a5c57a7e472c5d874e10ba2686960c2fd217d0 Mon Sep 17 00:00:00 2001 From: alin104n Date: Tue, 14 Feb 2017 06:48:31 +0200 Subject: [PATCH 1/4] SQL fields length increase --- .../mysql/create_tariffplan_tables.sql | 26 +++++++++---------- .../postgres/create_tariffplan_tables.sql | 26 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/data/storage/mysql/create_tariffplan_tables.sql b/data/storage/mysql/create_tariffplan_tables.sql index 945ce4106..b4cff66dd 100644 --- a/data/storage/mysql/create_tariffplan_tables.sql +++ b/data/storage/mysql/create_tariffplan_tables.sql @@ -288,21 +288,21 @@ CREATE TABLE tp_derived_chargers ( `destination_ids` varchar(64) NOT NULL, `runid` varchar(24) NOT NULL, `run_filters` varchar(256) NOT NULL, - `req_type_field` varchar(24) NOT NULL, - `direction_field` varchar(24) NOT NULL, - `tenant_field` varchar(24) NOT NULL, - `category_field` varchar(24) NOT NULL, + `req_type_field` varchar(64) NOT NULL, + `direction_field` varchar(64) NOT NULL, + `tenant_field` varchar(64) NOT NULL, + `category_field` varchar(64) NOT NULL, `account_field` varchar(64) NOT NULL, `subject_field` varchar(64) NOT NULL, - `destination_field` varchar(24) NOT NULL, - `setup_time_field` varchar(24) NOT NULL, - `pdd_field` varchar(24) NOT NULL, - `answer_time_field` varchar(24) NOT NULL, - `usage_field` varchar(24) NOT NULL, - `supplier_field` varchar(24) NOT NULL, - `disconnect_cause_field` varchar(24) NOT NULL, - `rated_field` varchar(24) NOT NULL, - `cost_field` varchar(24) NOT NULL, + `destination_field` varchar(64) NOT NULL, + `setup_time_field` varchar(64) NOT NULL, + `pdd_field` varchar(64) NOT NULL, + `answer_time_field` varchar(64) NOT NULL, + `usage_field` varchar(64) NOT NULL, + `supplier_field` varchar(64) NOT NULL, + `disconnect_cause_field` varchar(64) NOT NULL, + `rated_field` varchar(64) NOT NULL, + `cost_field` varchar(64) NOT NULL, `created_at` TIMESTAMP, PRIMARY KEY (`id`), KEY `tpid` (`tpid`) diff --git a/data/storage/postgres/create_tariffplan_tables.sql b/data/storage/postgres/create_tariffplan_tables.sql index bb633d863..04ea57b87 100644 --- a/data/storage/postgres/create_tariffplan_tables.sql +++ b/data/storage/postgres/create_tariffplan_tables.sql @@ -283,21 +283,21 @@ CREATE TABLE tp_derived_chargers ( destination_ids VARCHAR(64) NOT NULL, runid VARCHAR(24) NOT NULL, run_filters VARCHAR(256) NOT NULL, - req_type_field VARCHAR(24) NOT NULL, - direction_field VARCHAR(24) NOT NULL, - tenant_field VARCHAR(24) NOT NULL, - category_field VARCHAR(24) NOT NULL, + req_type_field VARCHAR(64) NOT NULL, + direction_field VARCHAR(64) NOT NULL, + tenant_field VARCHAR(64) NOT NULL, + category_field VARCHAR(64) NOT NULL, account_field VARCHAR(64) NOT NULL, subject_field VARCHAR(64) NOT NULL, - destination_field VARCHAR(24) NOT NULL, - setup_time_field VARCHAR(24) NOT NULL, - pdd_field VARCHAR(24) NOT NULL, - answer_time_field VARCHAR(24) NOT NULL, - usage_field VARCHAR(24) NOT NULL, - supplier_field VARCHAR(24) NOT NULL, - disconnect_cause_field VARCHAR(24) NOT NULL, - rated_field VARCHAR(24) NOT NULL, - cost_field VARCHAR(24) NOT NULL, + destination_field VARCHAR(64) NOT NULL, + setup_time_field VARCHAR(64) NOT NULL, + pdd_field VARCHAR(64) NOT NULL, + answer_time_field VARCHAR(64) NOT NULL, + usage_field VARCHAR(64) NOT NULL, + supplier_field VARCHAR(64) NOT NULL, + disconnect_cause_field VARCHAR(64) NOT NULL, + rated_field VARCHAR(64) NOT NULL, + cost_field VARCHAR(64) NOT NULL, created_at TIMESTAMP ); CREATE INDEX tpderivedchargers_tpid_idx ON tp_derived_chargers (tpid); From 6e88ae409d3db3439611243a8325f88b67f15155 Mon Sep 17 00:00:00 2001 From: alin104n Date: Tue, 14 Feb 2017 08:57:54 +0200 Subject: [PATCH 2/4] StorDB interface tests --- engine/stordb_it_test.go | 1343 +++++++++++++++++++++++++++++++++++++- 1 file changed, 1342 insertions(+), 1 deletion(-) diff --git a/engine/stordb_it_test.go b/engine/stordb_it_test.go index fb90a1225..9561684a5 100644 --- a/engine/stordb_it_test.go +++ b/engine/stordb_it_test.go @@ -22,6 +22,8 @@ package engine import ( "path" "reflect" + "runtime" + "strings" "testing" "github.com/cgrates/cgrates/config" @@ -37,6 +39,21 @@ var ( var sTestsStorDBit = []func(t *testing.T){ testStorDBitFlush, testStorDBitCRUDVersions, + testStorDBitCRUDTpTimings, + testStorDBitCRUDTpDestinations, + testStorDBitCRUDTpRates, + testStorDBitCRUDTpDestinationRates, + testStorDBitCRUDTpRatingPlans, + testStorDBitCRUDTpRatingProfiles, + testStorDBitCRUDTpSharedGroups, + testStorDBitCRUDTpActions, + testStorDBitCRUDTpActionPlans, + testStorDBitCRUDTpActionTriggers, + testStorDBitCRUDTpAccountActions, + testStorDBitCRUDTpLCRs, + testStorDBitCRUDTpDerivedChargers, + testStorDBitCRUDTpCdrStats, + testStorDBitCRUDTpUsers, } func TestStorDBitMySQL(t *testing.T) { @@ -48,10 +65,1334 @@ func TestStorDBitMySQL(t *testing.T) { t.Fatal(err) } for _, stest := range sTestsStorDBit { - t.Run("TestStorDBitMySQL", stest) + stestFullName := runtime.FuncForPC(reflect.ValueOf(stest).Pointer()).Name() + split := strings.Split(stestFullName, ".") + stestName := split[len(split)-1] + t.Run(stestName, stest) } } +func testStorDBitCRUDTpTimings(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if rcv, err := storDB.GetTpTimings("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err, rcv) + // } + // WRITE + var snd = []TpTiming{ + TpTiming{ + Tpid: "testTPid", + Tag: "testTag1", + Years: "*any", + Months: "*any", + MonthDays: "*any", + WeekDays: "1;2;3;4;5", + Time: "01:00:00", + }, + TpTiming{ + Tpid: "testTPid", + Tag: "testTag2", + Years: "*any", + Months: "*any", + MonthDays: "*any", + WeekDays: "1;2;3;4;5", + Time: "01:00:00", + }, + } + if err := storDB.SetTpTimings(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpTimings("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Time = "02:00:00" + snd[1].Time = "02:00:00" + if err := storDB.SetTpTimings(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpTimings("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpTimings("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpDestinations(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTPDestinations("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + snd := []*utils.TPDestination{ + &utils.TPDestination{ + TPid: "testTPid", + Tag: "testTag1", + Prefixes: []string{`0256`, `0257`, `0723`, `+49`}, + }, + &utils.TPDestination{ + TPid: "testTPid", + Tag: "testTag2", + Prefixes: []string{`0256`, `0257`, `0723`, `+49`}, + }, + } + if err := storDB.SetTPDestinations(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTPDestinations("testTPid", ""); err != nil { + t.Error(err) + } else { + //Fixme: Ensure the order of elements returned by GetTPDestinations + if !((reflect.DeepEqual(*(snd[0]), *(rcv[0])) && reflect.DeepEqual(*(snd[1]), *(rcv[1]))) || (reflect.DeepEqual(*(snd[0]), *(rcv[1])) && reflect.DeepEqual(*(snd[1]), *(rcv[0])))) { + t.Errorf("Expecting: %+v, received: %+v", *(snd[0]), *(rcv[0])) + } + } + // UPDATE + snd[0].Prefixes = []string{`9999`, `0257`, `0723`, `+49`} + snd[1].Prefixes = []string{`9999`, `0257`, `0723`, `+49`} + if err := storDB.SetTPDestinations(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTPDestinations("testTPid", ""); err != nil { + t.Error(err) + } else { + //Fixme: Ensure the order of elements returned by GetTPDestinations + if !((reflect.DeepEqual(*(snd[0]), *(rcv[0])) && reflect.DeepEqual(*(snd[1]), *(rcv[1]))) || (reflect.DeepEqual(*(snd[0]), *(rcv[1])) && reflect.DeepEqual(*(snd[1]), *(rcv[0])))) { + t.Errorf("Expecting: %+v, received: %+v", *(snd[0]), *(rcv[0])) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTPDestinations("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpRates(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpRates("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpRate{ + TpRate{ + Tpid: "testTPid", + Tag: "testTag1", + ConnectFee: 0.0, + Rate: 0.0, + RateUnit: "60s", + RateIncrement: "60s", + GroupIntervalStart: "0s", + }, + TpRate{ + Tpid: "testTPid", + Tag: "testTag2", + ConnectFee: 0.0, + Rate: 0.0, + RateUnit: "60s", + RateIncrement: "60s", + GroupIntervalStart: "0s", + }, + } + if err := storDB.SetTpRates(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpRates("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].GroupIntervalStart = "1s" + snd[1].GroupIntervalStart = "1s" + if err := storDB.SetTpRates(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpRates("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpRates("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpDestinationRates(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpDestinationRates("testTPid", "", nil); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpDestinationRate{ + TpDestinationRate{ + Tpid: "testTPid", + Tag: "testTag1", + DestinationsTag: "GERMANY", + RatesTag: "RT_1CENT", + RoundingMethod: "*up", + RoundingDecimals: 0, + MaxCost: 0.0, + MaxCostStrategy: "", + }, + TpDestinationRate{ + Tpid: "testTPid", + Tag: "testTag2", + DestinationsTag: "GERMANY", + RatesTag: "RT_1CENT", + RoundingMethod: "*up", + RoundingDecimals: 0, + MaxCost: 0.0, + MaxCostStrategy: "", + }, + } + if err := storDB.SetTpDestinationRates(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpDestinationRates("testTPid", "", nil); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].MaxCostStrategy = "test" + snd[1].MaxCostStrategy = "test" + if err := storDB.SetTpDestinationRates(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpDestinationRates("testTPid", "", nil); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpDestinationRates("testTPid", "", nil); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpRatingPlans(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpRatingPlans("testTPid", "", nil); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpRatingPlan{ + TpRatingPlan{ + Tpid: "testTPid", + Tag: "testTag1", + DestratesTag: "", + TimingTag: "ALWAYS", + Weight: 0.0, + }, + TpRatingPlan{ + Tpid: "testTPid", + Tag: "testTag2", + DestratesTag: "", + TimingTag: "ALWAYS", + Weight: 0.0, + }, + } + if err := storDB.SetTpRatingPlans(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpRatingPlans("testTPid", "", nil); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].TimingTag = "test" + snd[1].TimingTag = "test" + if err := storDB.SetTpRatingPlans(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpRatingPlans("testTPid", "", nil); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpRatingPlans("testTPid", "", nil); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpRatingProfiles(t *testing.T) { + // READ + var filter = TpRatingProfile{ + Tpid: "testTPid", + Loadid: "", + Direction: "", + Tenant: "", + Category: "", + Subject: "", + ActivationTime: "", + RatingPlanTag: "", + FallbackSubjects: "", + CdrStatQueueIds: "", + } + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpRatingProfiles(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpRatingProfile{ + TpRatingProfile{ + Tpid: "testTPid", + Loadid: "TEST_LOADID", + Direction: "*out", + Tenant: "cgrates.org", + Category: "call", + Subject: "test", + ActivationTime: "2014-07-29T15:00:00Z", + RatingPlanTag: "test", + FallbackSubjects: "", + CdrStatQueueIds: "", + }, + TpRatingProfile{ + Tpid: "testTPid", + Loadid: "TEST_LOADID2", + Direction: "*out", + Tenant: "cgrates.org", + Category: "call", + Subject: "test", + ActivationTime: "2014-07-29T15:00:00Z", + RatingPlanTag: "test", + FallbackSubjects: "", + CdrStatQueueIds: "", + }, + } + if err := storDB.SetTpRatingProfiles(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpRatingProfiles(&filter); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].CdrStatQueueIds = "test" + snd[1].CdrStatQueueIds = "test" + if err := storDB.SetTpRatingProfiles(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpRatingProfiles(&filter); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpRatingProfiles(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpSharedGroups(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpSharedGroups("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpSharedGroup{ + TpSharedGroup{ + Tpid: "testTPid", + Tag: "testTag1", + Account: "test", + Strategy: "*lowest_cost", + RatingSubject: "test", + }, + TpSharedGroup{ + Tpid: "testTPid", + Tag: "testTag2", + Account: "test", + Strategy: "*lowest_cost", + RatingSubject: "test", + }, + } + if err := storDB.SetTpSharedGroups(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpSharedGroups("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Strategy = "test" + snd[1].Strategy = "test" + if err := storDB.SetTpSharedGroups(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpSharedGroups("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpSharedGroups("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpActions(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpActions("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpAction{ + TpAction{ + Tpid: "testTPid", + Tag: "testTag1", + Action: "*topup_reset", + ExtraParameters: "", + Filter: "", + BalanceTag: "", + BalanceType: "*monetary", + Directions: "*out", + Categories: "", + DestinationTags: "DST_ON_NET", + RatingSubject: "", + SharedGroups: "", + ExpiryTime: "*unlimited", + TimingTags: "", + Units: "10", + BalanceWeight: "10", + BalanceBlocker: "false", + BalanceDisabled: "false", + Weight: 11.0, + }, + TpAction{ + Tpid: "testTPid", + Tag: "testTag2", + Action: "*topup_reset", + ExtraParameters: "", + Filter: "", + BalanceTag: "", + BalanceType: "*monetary", + Directions: "*out", + Categories: "", + DestinationTags: "DST_ON_NET", + RatingSubject: "", + SharedGroups: "", + ExpiryTime: "*unlimited", + TimingTags: "", + Units: "10", + BalanceWeight: "10", + BalanceBlocker: "false", + BalanceDisabled: "false", + Weight: 11.0, + }, + } + if err := storDB.SetTpActions(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpActions("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Weight = 12.1 + snd[1].Weight = 12.1 + if err := storDB.SetTpActions(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpActions("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpActions("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpActionPlans(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpActionPlans("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpActionPlan{ + TpActionPlan{ + Tpid: "testTPid", + Tag: "testTag1", + ActionsTag: "test", + TimingTag: "", + Weight: 0.0, + }, + TpActionPlan{ + Tpid: "testTPid", + Tag: "testTag2", + ActionsTag: "test", + TimingTag: "", + Weight: 0.0, + }, + } + if err := storDB.SetTpActionPlans(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpActionPlans("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Tag = "testTag1b" + snd[1].Tag = "testTag2b" + if err := storDB.SetTpActionPlans(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpActionPlans("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpActionPlans("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpActionTriggers(t *testing.T) { + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpActionTriggers("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpActionTrigger{ + TpActionTrigger{ + Tpid: "testTPid", + Tag: "testTag1", + UniqueId: "", + ThresholdType: "", + ThresholdValue: 0.0, + Recurrent: true, + MinSleep: "0", + ExpiryTime: "2014-07-29T15:00:00Z", + ActivationTime: "2014-07-29T15:00:00Z", + BalanceTag: "test", + BalanceType: "*monetary", + BalanceDirections: "*out", + BalanceCategories: "call", + BalanceDestinationTags: "", + BalanceRatingSubject: "test", + BalanceSharedGroups: "SHARED_1", + BalanceExpiryTime: "2014-07-29T15:00:00Z", + BalanceTimingTags: "T1", + BalanceWeight: "0.0", + BalanceBlocker: "false", + BalanceDisabled: "false", + MinQueuedItems: 0, + ActionsTag: "test", + Weight: 0.0, + }, + TpActionTrigger{ + Tpid: "testTPid", + Tag: "testTag2", + UniqueId: "", + ThresholdType: "", + ThresholdValue: 0.0, + Recurrent: true, + MinSleep: "0", + ExpiryTime: "2014-07-29T15:00:00Z", + ActivationTime: "2014-07-29T15:00:00Z", + BalanceTag: "test", + BalanceType: "*monetary", + BalanceDirections: "*out", + BalanceCategories: "call", + BalanceDestinationTags: "", + BalanceRatingSubject: "test", + BalanceSharedGroups: "SHARED_1", + BalanceExpiryTime: "2014-07-29T15:00:00Z", + BalanceTimingTags: "T1", + BalanceWeight: "0.0", + BalanceBlocker: "false", + BalanceDisabled: "false", + MinQueuedItems: 0, + ActionsTag: "test", + Weight: 0.0, + }, + } + if err := storDB.SetTpActionTriggers(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpActionTriggers("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].MinQueuedItems = 2 + snd[1].MinQueuedItems = 2 + if err := storDB.SetTpActionTriggers(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpActionTriggers("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpActionTriggers("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpAccountActions(t *testing.T) { + // READ + var filter = TpAccountAction{ + Tpid: "testTPid", + Loadid: "", + Tenant: "", + Account: "", + ActionPlanTag: "", + ActionTriggersTag: "", + AllowNegative: true, + Disabled: true, + } + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpAccountActions(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpAccountAction{ + TpAccountAction{ + Tpid: "testTPid", + Loadid: "TEST_LOADID", + Tenant: "cgrates.org", + Account: "1001", + ActionPlanTag: "PACKAGE_10_SHARED_A_5", + ActionTriggersTag: "STANDARD_TRIGGERS", + AllowNegative: true, + Disabled: true, + }, + TpAccountAction{ + Tpid: "testTPid", + Loadid: "TEST_LOADID", + Tenant: "cgrates.org", + Account: "1002", + ActionPlanTag: "PACKAGE_10_SHARED_A_5", + ActionTriggersTag: "STANDARD_TRIGGERS", + AllowNegative: true, + Disabled: true, + }, + } + if err := storDB.SetTpAccountActions(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpAccountActions(&filter); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Disabled = false + snd[1].Disabled = false + if err := storDB.SetTpAccountActions(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpAccountActions(&filter); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpAccountActions(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpLCRs(t *testing.T) { + // READ + var filter = TpLcrRule{ + Tpid: "testTPid", + Direction: "", + Tenant: "", + Category: "", + Account: "", + Subject: "", + DestinationTag: "", + RpCategory: "", + Strategy: "", + StrategyParams: "", + ActivationTime: "", + Weight: 0.0, + } + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpLCRs(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpLcrRule{ + TpLcrRule{ + Tpid: "testTPid", + Direction: "*in", + Tenant: "cgrates.org", + Category: "LCR_STANDARD", + Account: "1000", + Subject: "test", + DestinationTag: "", + RpCategory: "LCR_STANDARD", + Strategy: "*lowest_cost", + StrategyParams: "", + ActivationTime: "2012-01-01T00:00:00Z", + Weight: 0.0, + }, + TpLcrRule{ + Tpid: "testTPid", + Direction: "*in", + Tenant: "cgrates.org", + Category: "LCR_STANDARD", + Account: "1000", + Subject: "test", + DestinationTag: "", + RpCategory: "LCR_STANDARD", + Strategy: "*lowest_cost", + StrategyParams: "", + ActivationTime: "2012-01-01T00:00:00Z", + Weight: 0.0, + }, + } + if err := storDB.SetTpLCRs(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpLCRs(&filter); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].StrategyParams = "test" + snd[1].StrategyParams = "test" + if err := storDB.SetTpLCRs(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpLCRs(&filter); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpLCRs(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpDerivedChargers(t *testing.T) { + // READ + var filter = TpDerivedCharger{ + Tpid: "testTPid", + Loadid: "", + Direction: "", + Tenant: "", + Category: "", + Account: "", + Subject: "", + DestinationIds: "", + Runid: "", + RunFilters: "", + ReqTypeField: "", + DirectionField: "", + TenantField: "", + CategoryField: "", + AccountField: "", + SubjectField: "", + DestinationField: "", + SetupTimeField: "", + PddField: "", + AnswerTimeField: "", + UsageField: "", + SupplierField: "", + DisconnectCauseField: "", + RatedField: "", + CostField: "", + } + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpDerivedChargers(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpDerivedCharger{ + TpDerivedCharger{ + Tpid: "testTPid", + Loadid: "TEST_LOADID", + Direction: "*out", + Tenant: "cgrates.org", + Category: "call", + Account: "1000", + Subject: "test", + DestinationIds: "", + Runid: "default", + RunFilters: "", + ReqTypeField: "test", + DirectionField: "test", + TenantField: "test", + CategoryField: "test", + AccountField: "test", + SubjectField: "test", + DestinationField: "^+49151708707", + SetupTimeField: "test", + PddField: "~pdd:s/sip:(.+)/$1/", + AnswerTimeField: "~answertime2:s/sip:(.+)/$1/", + UsageField: "test", + SupplierField: "~supplier2:s/(.+)/$1/", + DisconnectCauseField: "test", + RatedField: "test", + CostField: "0", + }, + TpDerivedCharger{ + Tpid: "testTPid", + Loadid: "TEST_LOADID2", + Direction: "*out", + Tenant: "cgrates.org", + Category: "call", + Account: "1000", + Subject: "test", + DestinationIds: "", + Runid: "default", + RunFilters: "", + ReqTypeField: "test", + DirectionField: "test", + TenantField: "test", + CategoryField: "test", + AccountField: "test", + SubjectField: "test", + DestinationField: "^+49151708707", + SetupTimeField: "test", + PddField: "~pdd:s/sip:(.+)/$1/", + AnswerTimeField: "~answertime2:s/sip:(.+)/$1/", + UsageField: "test", + SupplierField: "~supplier2:s/(.+)/$1/", + DisconnectCauseField: "test", + RatedField: "test", + CostField: "0", + }, + } + if err := storDB.SetTpDerivedChargers(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpDerivedChargers(&filter); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].CostField = "test" + snd[1].CostField = "test" + if err := storDB.SetTpDerivedChargers(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpDerivedChargers(&filter); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpDerivedChargers(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpCdrStats(t *testing.T) { + // Fixme: Implement ErrNotfound in called method + // READ + // if _, err := storDB.GetTpCdrStats("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpCdrstat{ + TpCdrstat{ + Tpid: "testTPid", + Tag: "testTag1", + QueueLength: 0, + TimeWindow: "10m", + SaveInterval: "10s", + Metrics: "ACD", + SetupInterval: "", + Tors: "", + CdrHosts: "", + CdrSources: "", + ReqTypes: "", + Directions: "", + Tenants: "test", + Categories: "", + Accounts: "", + Subjects: "1001", + DestinationIds: "1003", + PddInterval: "", + UsageInterval: "", + Suppliers: "suppl2", + DisconnectCauses: "", + MediationRunids: "*default", + RatedAccounts: "", + RatedSubjects: "", + CostInterval: "", + ActionTriggers: "CDRST1001_WARN", + }, + TpCdrstat{ + Tpid: "testTPid", + Tag: "testTag2", + QueueLength: 0, + TimeWindow: "10m", + SaveInterval: "10s", + Metrics: "ACD", + SetupInterval: "", + Tors: "", + CdrHosts: "", + CdrSources: "", + ReqTypes: "", + Directions: "", + Tenants: "test", + Categories: "", + Accounts: "", + Subjects: "1001", + DestinationIds: "1003", + PddInterval: "", + UsageInterval: "", + Suppliers: "suppl2", + DisconnectCauses: "", + MediationRunids: "*default", + RatedAccounts: "", + RatedSubjects: "", + CostInterval: "", + ActionTriggers: "CDRST1001_WARN", + }, + } + if err := storDB.SetTpCdrStats(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpCdrStats("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Categories = "test" + snd[1].Categories = "test" + if err := storDB.SetTpCdrStats(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpCdrStats("testTPid", ""); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpCdrStats("testTPid", ""); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpUsers(t *testing.T) { + // READ + var filter = TpUser{ + Tpid: "testTPid", + Tenant: "", + UserName: "", + Masked: true, + AttributeName: "", + AttributeValue: "", + Weight: 0.0, + } + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpUsers(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpUser{ + TpUser{ + Tpid: "testTPid", + Tenant: "cgrates.org", + UserName: "1001", + Masked: true, + AttributeName: "Account", + AttributeValue: "1001", + Weight: 0.0, + }, + TpUser{ + Tpid: "testTPid", + Tenant: "cgrates2.org", + UserName: "1001", + Masked: true, + AttributeName: "Account", + AttributeValue: "1001", + Weight: 0.0, + }, + } + if err := storDB.SetTpUsers(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpUsers(&filter); err != nil { + t.Error(err) + } else { + snd[0].Id = rcv[0].Id + snd[1].Id = rcv[1].Id + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // UPDATE + snd[0].Masked = false + snd[1].Masked = false + if err := storDB.SetTpUsers(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpUsers(&filter); err != nil { + t.Error(err) + } else { + snd[0].CreatedAt = rcv[0].CreatedAt + snd[1].CreatedAt = rcv[1].CreatedAt + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpUsers(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } +} + +func testStorDBitCRUDTpAliases(t *testing.T) { + // READ + var filter = TpAlias{ + Tpid: "testTPid", + Direction: "", + Tenant: "", + Category: "", + Account: "", + Subject: "", + DestinationId: "", + Context: "", + Target: "", + Original: "", + Alias: "", + Weight: 0.0, + } + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpAliases(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } + // WRITE + var snd = []TpAlias{ + TpAlias{ + Tpid: "testTPid", + Direction: "*out", + Tenant: "cgrates.org", + Category: "call", + Account: "1006", + Subject: "1006", + DestinationId: "*any", + Context: "*rating", + Target: "Subject", + Original: "1006", + Alias: "1001", + Weight: 10.0, + }, + TpAlias{ + Tpid: "testTPid", + Direction: "*out", + Tenant: "cgrates.org", + Category: "call", + Account: "1006", + Subject: "1006", + DestinationId: "*any", + Context: "*rating", + Target: "Subject", + Original: "1006", + Alias: "1001", + Weight: 10.0, + }, + } + if err := storDB.SetTpAliases(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpAliases(&filter); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(snd, rcv) { + // Fixme: TpAlias missing CreatedAt field + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + // UPDATE + snd[0].Target = "test" + snd[1].Target = "test" + if err := storDB.SetTpAliases(snd); err != nil { + t.Error(err) + } + // READ + if rcv, err := storDB.GetTpAliases(&filter); err != nil { + t.Error(err) + } else { + if !reflect.DeepEqual(snd, rcv) { + t.Errorf("Expecting: %+v, received: %+v", snd, rcv) + } + } + // REMOVE + if err := storDB.RemTpData("", "testTPid", nil); err != nil { + t.Error(err) + } + // READ + // Fixme: Implement ErrNotfound in called method + // if _, err := storDB.GetTpAliases(&filter); err != utils.ErrNotFound { + // t.Error(err) + // } +} + func testStorDBitFlush(t *testing.T) { if err := storDB.Flush(path.Join(cfg.DataFolderPath, "storage", cfg.StorDBType)); err != nil { t.Error(err) From b95835392ce2a5abec2d858c3403b779a8f62c8a Mon Sep 17 00:00:00 2001 From: alin104n Date: Tue, 14 Feb 2017 12:26:22 +0200 Subject: [PATCH 3/4] Redundant pointer parentheses removed --- engine/stordb_it_test.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/engine/stordb_it_test.go b/engine/stordb_it_test.go index 9561684a5..4a14701c4 100644 --- a/engine/stordb_it_test.go +++ b/engine/stordb_it_test.go @@ -167,9 +167,8 @@ func testStorDBitCRUDTpDestinations(t *testing.T) { if rcv, err := storDB.GetTPDestinations("testTPid", ""); err != nil { t.Error(err) } else { - //Fixme: Ensure the order of elements returned by GetTPDestinations - if !((reflect.DeepEqual(*(snd[0]), *(rcv[0])) && reflect.DeepEqual(*(snd[1]), *(rcv[1]))) || (reflect.DeepEqual(*(snd[0]), *(rcv[1])) && reflect.DeepEqual(*(snd[1]), *(rcv[0])))) { - t.Errorf("Expecting: %+v, received: %+v", *(snd[0]), *(rcv[0])) + if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { + t.Errorf("Expecting: %+v, received: %+v", snd[0], rcv[0]) } } // UPDATE @@ -182,9 +181,8 @@ func testStorDBitCRUDTpDestinations(t *testing.T) { if rcv, err := storDB.GetTPDestinations("testTPid", ""); err != nil { t.Error(err) } else { - //Fixme: Ensure the order of elements returned by GetTPDestinations - if !((reflect.DeepEqual(*(snd[0]), *(rcv[0])) && reflect.DeepEqual(*(snd[1]), *(rcv[1]))) || (reflect.DeepEqual(*(snd[0]), *(rcv[1])) && reflect.DeepEqual(*(snd[1]), *(rcv[0])))) { - t.Errorf("Expecting: %+v, received: %+v", *(snd[0]), *(rcv[0])) + if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { + t.Errorf("Expecting: %+v, received: %+v", snd[0], rcv[0]) } } // REMOVE From e11c2a5d72a725583601172da5d60b14c2f97131 Mon Sep 17 00:00:00 2001 From: Alin Ioanovici Date: Tue, 14 Feb 2017 10:48:01 +0200 Subject: [PATCH 4/4] Update CONTRIBUTORS.md --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 2a843a718..860b59727 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -54,6 +54,7 @@ information, please see the [`CONTRIBUTING.md`](CONTRIBUTING.md) file. | @KuikenArjan | Arjan Kuiken | | @Dobby16 | Arjan Kuiken | | @pauls1024 | Paul Smith | +| @alin104n | Alin Ioanovici |