From 4d02ede7df090dcc299f4787d10398fa57855de5 Mon Sep 17 00:00:00 2001 From: DanB Date: Thu, 20 Mar 2014 10:39:04 +0100 Subject: [PATCH] Shared balance local tests improvements --- apier/apier_local_test.go | 8 +- apier/tutfsjson_local_test.go | 167 ++++++++++++++++++++++++++-------- 2 files changed, 134 insertions(+), 41 deletions(-) diff --git a/apier/apier_local_test.go b/apier/apier_local_test.go index 9e488dd9a..bd23e5466 100644 --- a/apier/apier_local_test.go +++ b/apier/apier_local_test.go @@ -19,6 +19,7 @@ along with this program. If not, see package apier import ( + "encoding/json" "flag" "fmt" "net/http" @@ -32,7 +33,6 @@ import ( "strings" "testing" "time" - "encoding/json" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" @@ -62,7 +62,7 @@ var rater *rpc.Client var testLocal = flag.Bool("local", false, "Perform the tests only on local test environment, not by default.") // This flag will be passed here via "go test -local" args var dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here") var storDbType = flag.String("stordb_type", "mysql", "The type of the storDb database ") -var waitRater = flag.Int("wait_rater", 300, "Number of miliseconds to wait for rater to start and cache") +var waitRater = flag.Int("wait_rater", 500, "Number of miliseconds to wait for rater to start and cache") func init() { cfgPath = path.Join(*dataDir, "conf", "samples", "apier_local_test.cfg") @@ -910,11 +910,11 @@ func TestApierGetRatingPlan(t *testing.T) { } } */ - riRate := &engine.RIRate{Id:"RT_FS_USERS", ConnectFee: 0, RoundingMethod: "*up", RoundingDecimals: 0, Rates: []*engine.Rate{ + riRate := &engine.RIRate{Id: "RT_FS_USERS", ConnectFee: 0, RoundingMethod: "*up", RoundingDecimals: 0, Rates: []*engine.Rate{ &engine.Rate{GroupIntervalStart: 0, Value: 0, RateIncrement: time.Duration(60) * time.Second, RateUnit: time.Duration(60) * time.Second}, }} for _, rating := range reply.Ratings { - riRateJsson,_ := json.Marshal(rating) + riRateJsson, _ := json.Marshal(rating) if !reflect.DeepEqual(rating, riRate) { t.Errorf("Unexpected riRate received: %s", riRateJsson) // {"Id":"RT_FS_USERS","ConnectFee":0,"Rates":[{"GroupIntervalStart":0,"Value":0,"RateIncrement":60000000000,"RateUnit":60000000000}],"RoundingMethod":"*up","RoundingDecimals":0} diff --git a/apier/tutfsjson_local_test.go b/apier/tutfsjson_local_test.go index 8cc52961f..3d280e83a 100644 --- a/apier/tutfsjson_local_test.go +++ b/apier/tutfsjson_local_test.go @@ -109,7 +109,7 @@ func TestFsJsonStartFs(t *testing.T) { } exec.Command("pkill", "freeswitch").Run() // Just to make sure another one is not running, bit brutal maybe we can fine tune it go func() { - fs := exec.Command("sudo", "/usr/share/cgrates/tutorials/fs_json/freeswitch/etc/init.d/freeswitch", "start") + fs := exec.Command("/usr/share/cgrates/tutorials/fs_json/freeswitch/etc/init.d/freeswitch", "start") out, _ := fs.CombinedOutput() engine.Logger.Info(fmt.Sprintf("CgrEngine-TestFsJson: %s", out)) }() @@ -123,7 +123,7 @@ func TestFsJsonStartEngine(t *testing.T) { } exec.Command("pkill", "cgr-engine").Run() // Just to make sure another one is not running, bit brutal maybe we can fine tune it go func() { - eng := exec.Command("sudo", "/usr/share/cgrates/tutorials/fs_json/cgrates/etc/init.d/cgrates", "start") + eng := exec.Command("/usr/share/cgrates/tutorials/fs_json/cgrates/etc/init.d/cgrates", "start") out, _ := eng.CombinedOutput() engine.Logger.Info(fmt.Sprintf("CgrEngine-TestFsJson: %s", out)) }() @@ -169,7 +169,7 @@ func TestFsJsonLoadTariffPlans(t *testing.T) { } else if reply != "OK" { t.Error("Calling ApierV1.LoadTariffPlanFromFolder got reply: ", reply) } - time.Sleep(100 * time.Millisecond) // Give time for scheduler to execute topups + time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups var rcvStats *utils.CacheStats expectedStats := &utils.CacheStats{Destinations: 3, RatingPlans: 2, RatingProfiles: 2, Actions: 5} var args utils.AttrCacheStats @@ -180,44 +180,127 @@ func TestFsJsonLoadTariffPlans(t *testing.T) { } } -func TestFsJsonGetAccount(t *testing.T) { +func TestFsJsonGetAccount1001(t *testing.T) { if !*testLocal { return } - var reply *engine.Account + var acnt *engine.Account attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1001", BalanceType: "*monetary", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccount", attrs, &reply); err != nil { + if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err != nil { t.Error("Got error on ApierV1.GetAccount: ", err.Error()) - } else if reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { - t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) } - attrs = &AttrGetAccount{Tenant: "cgrates.org", Account: "1002", BalanceType: "*monetary", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccount", attrs, &reply); err != nil { + if acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { + t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) + } + if len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction]) != 2 { + t.Errorf("Unexpected number of balances found: %d", len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction])) + } + blncLst := acnt.BalanceMap[attrs.BalanceType+attrs.Direction] + for _, blnc := range blncLst { + if len(blnc.SharedGroup) == 0 && blnc.Value != 5 { + t.Errorf("Unexpected value for general balance: %f", blnc.Value) + } else if blnc.SharedGroup == "SHARED_A" && blnc.Value != 5 { + t.Errorf("Unexpected value for shared balance: %f", blnc.Value) + } + } +} + +func TestFsJsonGetAccount1002(t *testing.T) { + if !*testLocal { + return + } + var acnt *engine.Account + attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1002", BalanceType: "*monetary", Direction: "*out"} + if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err != nil { t.Error("Got error on ApierV1.GetAccount: ", err.Error()) - } else if reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { - t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) } - attrs = &AttrGetAccount{Tenant: "cgrates.org", Account: "1003", BalanceType: "*monetary", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccount", attrs, &reply); err != nil { + if acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { + t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) + } + if len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction]) != 1 { + t.Errorf("Unexpected number of balances found: %d", len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction])) + } + blnc := acnt.BalanceMap[attrs.BalanceType+attrs.Direction][0] + if blnc.Value != 10 { + t.Errorf("Unexpected value for general balance: %f", blnc.Value) + } +} + +func TestFsJsonGetAccount1003(t *testing.T) { + if !*testLocal { + return + } + var acnt *engine.Account + attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1003", BalanceType: "*monetary", Direction: "*out"} + if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err != nil { t.Error("Got error on ApierV1.GetAccount: ", err.Error()) - } else if reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { - t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) } - attrs = &AttrGetAccount{Tenant: "cgrates.org", Account: "1004", BalanceType: "*monetary", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccount", attrs, &reply); err != nil { + if acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { + t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) + } + if len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction]) != 1 { + t.Errorf("Unexpected number of balances found: %d", len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction])) + } + blnc := acnt.BalanceMap[attrs.BalanceType+attrs.Direction][0] + if blnc.Value != 10 { + t.Errorf("Unexpected value for general balance: %f", blnc.Value) + } +} + +func TestFsJsonGetAccount1004(t *testing.T) { + if !*testLocal { + return + } + var acnt *engine.Account + attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1004", BalanceType: "*monetary", Direction: "*out"} + if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err != nil { t.Error("Got error on ApierV1.GetAccount: ", err.Error()) - } else if reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { - t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) } - attrs = &AttrGetAccount{Tenant: "cgrates.org", Account: "1006", BalanceType: "*monetary", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccount", attrs, &reply); err == nil { - t.Error("Account not created and not returning error") + if acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 10.0 { + t.Errorf("Calling ApierV1.GetBalance expected: 10.0, received: %f", acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) } - attrs = &AttrGetAccount{Tenant: "cgrates.org", Account: "1007", BalanceType: "*monetary", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccount", attrs, &reply); err != nil { + if len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction]) != 1 { + t.Errorf("Unexpected number of balances found: %d", len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction])) + } + blnc := acnt.BalanceMap[attrs.BalanceType+attrs.Direction][0] + if blnc.Value != 10 { + t.Errorf("Unexpected value for general balance: %f", blnc.Value) + } +} + +func TestFsJsonGetAccount1006(t *testing.T) { + if !*testLocal { + return + } + var acnt *engine.Account + attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1006", BalanceType: "*monetary", Direction: "*out"} + if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err == nil { + t.Error("Got no error when querying unexisting balance") + } +} + +func TestFsJsonGetAccount1007(t *testing.T) { + if !*testLocal { + return + } + var acnt *engine.Account + attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1007", BalanceType: "*monetary", Direction: "*out"} + if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err != nil { t.Error("Got error on ApierV1.GetAccount: ", err.Error()) - } else if reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 0.0 { - t.Errorf("Calling ApierV1.GetBalance expected: 0, received: %f", reply.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) + } + if acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 0 { + t.Errorf("Calling ApierV1.GetBalance expected: 0, received: %f", acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) + } + if len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction]) != 2 { + t.Errorf("Unexpected number of balances found: %d", len(acnt.BalanceMap[attrs.BalanceType+attrs.Direction])) + } + blncLst := acnt.BalanceMap[attrs.BalanceType+attrs.Direction] + for _, blnc := range blncLst { + if len(blnc.SharedGroup) == 0 && blnc.Value != 0 { // General balance + t.Errorf("Unexpected value for general balance: %f", blnc.Value) + } else if blnc.SharedGroup == "SHARED_A" && blnc.Value != 0 { + t.Errorf("Unexpected value for shared balance: %f", blnc.Value) + } } } @@ -240,8 +323,8 @@ func TestMaxCallDuration(t *testing.T) { t.Error(err) } else { remainingDuration := time.Duration(remainingDurationFloat) - if remainingDuration < time.Duration(3)*time.Hour { - t.Errorf("Expecting maxSessionTime around 3hs, received as: %v", remainingDuration) + if remainingDuration < time.Duration(90)*time.Minute { + t.Errorf("Expecting maxSessionTime around 1h30m, received as: %v", remainingDuration) } } cd = engine.CallDescriptor{ @@ -258,8 +341,8 @@ func TestMaxCallDuration(t *testing.T) { t.Error(err) } else { remainingDuration := time.Duration(remainingDurationFloat) - if remainingDuration < time.Duration(3)*time.Hour { - t.Errorf("Expecting maxSessionTime around 3hs, received as: %v", remainingDuration) + if remainingDuration < time.Duration(45)*time.Minute { + t.Errorf("Expecting maxSessionTime around 45m, received as: %v", remainingDuration) } } cd = engine.CallDescriptor{ @@ -276,8 +359,8 @@ func TestMaxCallDuration(t *testing.T) { t.Error(err) } else { remainingDuration := time.Duration(remainingDurationFloat) - if remainingDuration < time.Duration(3)*time.Hour { - t.Errorf("Expecting maxSessionTime around 3hs, received as: %v", remainingDuration) + if remainingDuration < time.Duration(45)*time.Minute { + t.Errorf("Expecting maxSessionTime around 45m, received as: %v", remainingDuration) } } // 1007 should use the 1001 balance when doing maxSessionTime @@ -295,8 +378,8 @@ func TestMaxCallDuration(t *testing.T) { t.Error(err) } else { remainingDuration := time.Duration(remainingDurationFloat) - if remainingDuration < time.Duration(3)*time.Hour { - t.Errorf("Expecting maxSessionTime around 3hs, received as: %v", remainingDuration) + if remainingDuration < time.Duration(90)*time.Minute { + t.Errorf("Expecting maxSessionTime around 1h30m, received as: %v", remainingDuration) } } } @@ -322,8 +405,18 @@ func TestMaxDebit(t *testing.T) { attrs := &AttrGetAccount{Tenant: "cgrates.org", Account: "1001", BalanceType: "*monetary", Direction: "*out"} if err := rater.Call("ApierV1.GetAccount", attrs, &acnt); err != nil { t.Error("Got error on ApierV1.GetAccount: ", err.Error()) - } else if acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue() != 9.6 { - t.Errorf("Calling ApierV1.GetBalance expected: 9.6, received: %f", acnt.BalanceMap[attrs.BalanceType+attrs.Direction].GetTotalValue()) + } else { + if len(acnt.BalanceMap["*monetary*out"]) != 2 { + t.Errorf("Unexpected number of balances found: %d", len(acnt.BalanceMap["*monetary*out"])) + } + blncLst := acnt.BalanceMap["*monetary*out"] + for _, blnc := range blncLst { + if blnc.SharedGroup == "SHARED_A" && blnc.Value != 5 { + t.Errorf("Unexpected value for shared balance: %f", blnc.Value) + } else if blnc.SharedGroup == "" && blnc.Value != 4.6 { + t.Errorf("Unexpected value for general balance: %f", blnc.Value) + } + } } }