From 916a78f21b2718163386c8ef3a34b93cd2d7f19c Mon Sep 17 00:00:00 2001 From: TeoV Date: Wed, 30 Aug 2017 10:50:05 -0400 Subject: [PATCH] Refactory resourcesv1_it_test.go with subtests --- apier/v1/resourcesv1_it_test.go | 173 ++++++++++++++------- data/conf/samples/tutmongo/cgrates.json | 9 ++ data/conf/samples/tutmysql/cgrates.json | 9 ++ data/conf/samples/tutpostgres/cgrates.json | 9 ++ 4 files changed, 140 insertions(+), 60 deletions(-) diff --git a/apier/v1/resourcesv1_it_test.go b/apier/v1/resourcesv1_it_test.go index 1956c705c..7bf28e929 100644 --- a/apier/v1/resourcesv1_it_test.go +++ b/apier/v1/resourcesv1_it_test.go @@ -36,29 +36,88 @@ var ( rlsV1CfgPath string rlsV1Cfg *config.CGRConfig rlsV1Rpc *rpc.Client + rlsV1ConfDIR string //run tests for specific configuration + rlsConfig *engine.ResourceCfg + delay int ) -func TestRLsV1LoadConfig(t *testing.T) { - var err error - rlsV1CfgPath = path.Join(*dataDir, "conf", "samples", "reslimiter") - if rlsV1Cfg, err = config.NewCGRConfigFromFolder(rlsV1CfgPath); err != nil { - t.Error(err) +var sTestsRLSV1 = []func(t *testing.T){ + testV1RLSLoadConfig, + testV1RLSInitDataDb, + testV1RLSResetStorDb, + testV1RLSStartEngine, + testV1RLSRpcConn, + testV1RLSFromFolder, + testV1RLSGetResourcesFromEvent, + testV1RLSAllocateResource, + testV1RLSAllowUsage, + testV1RLSReleaseResource, + testV1RLSGetResourceConfigBeforeSet, + testV1RLSSetResourceConfig, + testV1RLSGetResourceConfigAfterSet, + testV1RLSUpdateResourceConfig, + testV1RLSGetResourceConfigAfterUpdate, + testV1RLSRemResourceCOnfig, + testV1RLSGetResourceConfigAfterDelete, + testV1RLSStopEngine, +} + +//Test start here +func TestRLSV1ITMySQL(t *testing.T) { + rlsV1ConfDIR = "tutmysql" + for _, stest := range sTestsRLSV1 { + t.Run(rlsV1ConfDIR, stest) } } -func TestRLsV1InitDataDb(t *testing.T) { +func TestRLSV1ITpg(t *testing.T) { + rlsV1ConfDIR = "tutpostgres" + for _, stest := range sTestsRLSV1 { + t.Run(rlsV1ConfDIR, stest) + } +} + +func TestRLSV1ITMongo(t *testing.T) { + rlsV1ConfDIR = "tutmongo" + for _, stest := range sTestsRLSV1 { + t.Run(rlsV1ConfDIR, stest) + } +} + +func testV1RLSLoadConfig(t *testing.T) { + var err error + rlsV1CfgPath = path.Join(*dataDir, "conf", "samples", rlsV1ConfDIR) + if rlsV1Cfg, err = config.NewCGRConfigFromFolder(rlsV1CfgPath); err != nil { + t.Error(err) + } + switch rlsV1ConfDIR { + case "tutmongo": // Mongo needs more time to reset db, need to investigate + delay = 4000 + default: + delay = 1000 + } +} + +func testV1RLSInitDataDb(t *testing.T) { if err := engine.InitDataDb(rlsV1Cfg); err != nil { t.Fatal(err) } } -func TestRLsV1StartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(rlsV1CfgPath, 1000); err != nil { +// Wipe out the cdr database +func testV1RLSResetStorDb(t *testing.T) { + if err := engine.InitStorDb(rlsV1Cfg); err != nil { t.Fatal(err) } } -func TestRLsV1RpcConn(t *testing.T) { +func testV1RLSStartEngine(t *testing.T) { + if _, err := engine.StopStartEngine(rlsV1CfgPath, delay); err != nil { + t.Fatal(err) + } +} + +func testV1RLSRpcConn(t *testing.T) { var err error rlsV1Rpc, err = jsonrpc.Dial("tcp", rlsV1Cfg.RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed if err != nil { @@ -66,7 +125,7 @@ func TestRLsV1RpcConn(t *testing.T) { } } -func TestRLsV1TPFromFolder(t *testing.T) { +func testV1RLSFromFolder(t *testing.T) { var reply string time.Sleep(time.Duration(2000) * time.Millisecond) attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "tutorial")} @@ -76,7 +135,7 @@ func TestRLsV1TPFromFolder(t *testing.T) { time.Sleep(time.Duration(1000) * time.Millisecond) } -func TestRLsV1GetResourcesForEvent(t *testing.T) { +func testV1RLSGetResourcesFromEvent(t *testing.T) { var reply *[]*engine.ResourceCfg ev := map[string]interface{}{"Unknown": "unknown"} if err := rlsV1Rpc.Call("ResourceSV1.GetResourcesForEvent", ev, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { @@ -118,7 +177,7 @@ func TestRLsV1GetResourcesForEvent(t *testing.T) { } } -func TestRLsV1AllocateResource(t *testing.T) { +func testV1RLSAllocateResource(t *testing.T) { var reply string attrRU := utils.AttrRLsResourceUsage{ @@ -163,7 +222,7 @@ func TestRLsV1AllocateResource(t *testing.T) { } -func TestRLsV1AllowUsage(t *testing.T) { +func testV1RLSAllowUsage(t *testing.T) { var reply bool attrRU := utils.AttrRLsResourceUsage{ UsageID: "651a8db2-4f67-4cf8-b622-169e8a482e51", @@ -186,7 +245,7 @@ func TestRLsV1AllowUsage(t *testing.T) { } } -func TestRLsV1ReleaseResource(t *testing.T) { +func testV1RLSReleaseResource(t *testing.T) { var reply interface{} attrRU := utils.AttrRLsResourceUsage{ @@ -212,56 +271,55 @@ func TestRLsV1ReleaseResource(t *testing.T) { } -var resConfig = &engine.ResourceCfg{ - ID: "RCFG1", - Filters: []*engine.RequestFilter{ - &engine.RequestFilter{ - Type: "type", - FieldName: "Name", - Values: []string{"FilterValue1", "FilterValue2"}, - }, - }, - 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), - }, - UsageTTL: time.Duration(10) * time.Microsecond, - Limit: 10, - AllocationMessage: "MessageAllocation", - Blocker: true, - Stored: true, - Weight: 20, - Thresholds: []string{"Val1", "Val2"}, -} - -func TestRLsV1GetResourceConfigBeforeSet(t *testing.T) { +func testV1RLSGetResourceConfigBeforeSet(t *testing.T) { var reply *string if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: "RCFG1"}, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } } -func TestRLsV1SetResourceConfig(t *testing.T) { +func testV1RLSSetResourceConfig(t *testing.T) { + rlsConfig = &engine.ResourceCfg{ + ID: "RCFG1", + Filters: []*engine.RequestFilter{ + &engine.RequestFilter{ + Type: "type", + FieldName: "Name", + Values: []string{"FilterValue1", "FilterValue2"}, + }, + }, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(), + }, + UsageTTL: time.Duration(10) * time.Microsecond, + Limit: 10, + AllocationMessage: "MessageAllocation", + Blocker: true, + Stored: true, + Weight: 20, + Thresholds: []string{"Val1", "Val2"}, + } var result string - if err := rlsV1Rpc.Call("ApierV1.SetResourceConfig", resConfig, &result); err != nil { + if err := rlsV1Rpc.Call("ApierV1.SetResourceConfig", rlsConfig, &result); err != nil { t.Error(err) } else if result != utils.OK { t.Error("Unexpected reply returned", result) } } -func TestRLsV1GetResourceConfigAfterSet(t *testing.T) { +func testV1RLSGetResourceConfigAfterSet(t *testing.T) { var reply *engine.ResourceCfg - if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: "RCFG1"}, &reply); err != nil { + if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: rlsConfig.ID}, &reply); err != nil { t.Error(err) - } else if !reflect.DeepEqual(reply, resConfig) { - t.Errorf("Expecting: %+v, received: %+v", resConfig, reply) + } else if !reflect.DeepEqual(reply, rlsConfig) { + t.Errorf("Expecting: %+v, received: %+v", rlsConfig, reply) } } -func TestRLsV1UpdateResourceConfig(t *testing.T) { +func testV1RLSUpdateResourceConfig(t *testing.T) { var result string - resConfig.Filters = []*engine.RequestFilter{ + rlsConfig.Filters = []*engine.RequestFilter{ &engine.RequestFilter{ Type: "type", FieldName: "Name", @@ -272,45 +330,40 @@ func TestRLsV1UpdateResourceConfig(t *testing.T) { FieldName: "Accout", Values: []string{"1001", "1002"}, }, - &engine.RequestFilter{ - Type: "*string_prefix", - FieldName: "Destination", - Values: []string{"10", "20"}, - }, } - if err := rlsV1Rpc.Call("ApierV1.SetResourceConfig", resConfig, &result); err != nil { + if err := rlsV1Rpc.Call("ApierV1.SetResourceConfig", rlsConfig, &result); err != nil { t.Error(err) } else if result != utils.OK { t.Error("Unexpected reply returned", result) } } -func TestRLsV1GetResourceConfigAfterUpdate(t *testing.T) { +func testV1RLSGetResourceConfigAfterUpdate(t *testing.T) { var reply *engine.ResourceCfg - if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: "RCFG1"}, &reply); err != nil { + if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: rlsConfig.ID}, &reply); err != nil { t.Error(err) - } else if !reflect.DeepEqual(reply, resConfig) { - t.Errorf("Expecting: %+v, received: %+v", resConfig, reply) + } else if !reflect.DeepEqual(reply, rlsConfig) { + t.Errorf("Expecting: %+v, received: %+v", rlsConfig, reply) } } -func TestRLsV1RemResourceCOnfig(t *testing.T) { +func testV1RLSRemResourceCOnfig(t *testing.T) { var resp string - if err := rlsV1Rpc.Call("ApierV1.RemResourceConfig", &AttrGetResCfg{ID: resConfig.ID}, &resp); err != nil { + if err := rlsV1Rpc.Call("ApierV1.RemResourceConfig", &AttrGetResCfg{ID: rlsConfig.ID}, &resp); err != nil { t.Error(err) } else if resp != utils.OK { t.Error("Unexpected reply returned", resp) } } -func TestRLsV1GetResourceConfigAfterDelete(t *testing.T) { +func testV1RLSGetResourceConfigAfterDelete(t *testing.T) { var reply *string - if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: resConfig.ID}, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { + if err := rlsV1Rpc.Call("ApierV1.GetResourceConfig", &AttrGetResCfg{ID: "RCFG1"}, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } } -func TestRLsV1StopEngine(t *testing.T) { +func testV1RLSStopEngine(t *testing.T) { if err := engine.KillEngine(100); err != nil { t.Error(err) } diff --git a/data/conf/samples/tutmongo/cgrates.json b/data/conf/samples/tutmongo/cgrates.json index 8ec932ecb..8577d2817 100644 --- a/data/conf/samples/tutmongo/cgrates.json +++ b/data/conf/samples/tutmongo/cgrates.json @@ -69,6 +69,15 @@ "enabled": true, }, +"resources": { + "enabled": true, + "stats_conns": [ + //{"address": "*internal"} + ], + "cache_dump_interval": "0s", + "usage_ttl": "3h", +}, + "sm_generic": { "enabled": true, }, diff --git a/data/conf/samples/tutmysql/cgrates.json b/data/conf/samples/tutmysql/cgrates.json index 0e263938b..0314c805c 100644 --- a/data/conf/samples/tutmysql/cgrates.json +++ b/data/conf/samples/tutmysql/cgrates.json @@ -109,6 +109,15 @@ "usage_ttl": "3h", // expire usage records if older than this duration <""|*never|dur> }, +"resources": { + "enabled": true, + "stats_conns": [ + //{"address": "*internal"} + ], + "cache_dump_interval": "0s", + "usage_ttl": "3h", +}, + "historys": { "enabled": true, }, diff --git a/data/conf/samples/tutpostgres/cgrates.json b/data/conf/samples/tutpostgres/cgrates.json index 26584eccd..c4d6d690f 100644 --- a/data/conf/samples/tutpostgres/cgrates.json +++ b/data/conf/samples/tutpostgres/cgrates.json @@ -61,6 +61,15 @@ "enabled": true, // starts Aliases service: . }, +"resources": { + "enabled": true, + "stats_conns": [ + //{"address": "*internal"} + ], + "cache_dump_interval": "0s", + "usage_ttl": "3h", +}, + "sm_generic": { "enabled": true, },