From ab946cd637e5f48650b400ec29a74a2df81f563d Mon Sep 17 00:00:00 2001 From: DanB Date: Sat, 14 Mar 2015 21:01:52 +0100 Subject: [PATCH] Automated call testing for FS prepaid calling --- .../freeswitch/etc/freeswitch_conf.tar.gz | Bin 27378 -> 27450 bytes engine/libtest.go | 5 +- general_tests/tutorial_fs_calls_test.go | 71 +++++++++++++++++- 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/data/tutorials/fs_evsock/freeswitch/etc/freeswitch_conf.tar.gz b/data/tutorials/fs_evsock/freeswitch/etc/freeswitch_conf.tar.gz index 9d46377988a35e8c82e08bebe5b8648e3dfdd272..1c45c6e410c762105b1000ce3743c04759e962a7 100644 GIT binary patch delta 27225 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 delta 27180 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 diff --git a/engine/libtest.go b/engine/libtest.go index 2eea6d2d5..c843ea949 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -139,9 +139,10 @@ func StartPjsuaListener(acnts []*PjsuaAccount, waitMs int) (*os.File, error) { return fPty, nil } -func PjsuaCallUri(acnt *PjsuaAccount, dstUri string, callDur time.Duration, localPort int) error { +func PjsuaCallUri(acnt *PjsuaAccount, dstUri, outboundUri string, callDur time.Duration, localPort int) error { cmdArgs := []string{"--null-audio", "--app-log-level=0", fmt.Sprintf("--local-port=%d", localPort), fmt.Sprintf("--duration=%d", int(callDur.Seconds())), - "--id=" + acnt.Id, "--username=" + acnt.Username, "--password=" + acnt.Password, "--realm=" + acnt.Realm, dstUri} + "--outbound=" + outboundUri, "--id=" + acnt.Id, "--username=" + acnt.Username, "--password=" + acnt.Password, "--realm=" + acnt.Realm, dstUri} + pjsuaPath, err := exec.LookPath("pjsua") if err != nil { return err diff --git a/general_tests/tutorial_fs_calls_test.go b/general_tests/tutorial_fs_calls_test.go index a13148341..54418c9bb 100644 --- a/general_tests/tutorial_fs_calls_test.go +++ b/general_tests/tutorial_fs_calls_test.go @@ -51,6 +51,7 @@ func TestTutFsCallsInitCfg(t *testing.T) { config.SetCgrConfig(tutFsCallsCfg) } +// Wipe out the cdr database func TestTutFsCallsResetDb(t *testing.T) { if !*testCalls { return @@ -60,6 +61,7 @@ func TestTutFsCallsResetDb(t *testing.T) { } } +// Remove data in both rating and accounting db func TestTutFsCallsResetDataDb(t *testing.T) { if !*testCalls { return @@ -69,6 +71,7 @@ func TestTutFsCallsResetDataDb(t *testing.T) { } } +// start FS server func TestTutFsCallsStartFS(t *testing.T) { if !*testCalls { return @@ -78,6 +81,7 @@ func TestTutFsCallsStartFS(t *testing.T) { } } +// Start CGR Engine func TestTutFsCallsStartEngine(t *testing.T) { if !*testCalls { return @@ -99,6 +103,7 @@ func TestTutFsCallsRpcConn(t *testing.T) { } } +// Load the tariff plan, creating accounts and their balances func TestTutFsCallsLoadTariffPlanFromFolder(t *testing.T) { if !*testCalls { return @@ -113,33 +118,91 @@ func TestTutFsCallsLoadTariffPlanFromFolder(t *testing.T) { time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups } +// Start Pjsua as listener and register it to receive calls func TestTutFsCallsStartPjsuaListener(t *testing.T) { if !*testCalls { return } var err error acnts := []*engine.PjsuaAccount{ - &engine.PjsuaAccount{Id: "sip:1001@10.10.10.102", Username: "1001", Password: "1234", Realm: "*", Registrar: "sip:10.10.10.102:5060"}, - &engine.PjsuaAccount{Id: "sip:1002@10.10.10.102", Username: "1002", Password: "1234", Realm: "*", Registrar: "sip:10.10.10.102:5060"}} + &engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:25060"}, + &engine.PjsuaAccount{Id: "sip:1002@127.0.0.1", Username: "1002", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:25060"}} if tutFsCallsPjSuaListener, err = engine.StartPjsuaListener(acnts, *waitRater); err != nil { t.Fatal(err) } } +// Call from 1001 (prepaid) to 1002 func TestTutFsCallsCall1001To1002(t *testing.T) { if !*testCalls { return } - if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1001@10.10.10.102", Username: "1001", Password: "1234", Realm: "*"}, "sip:1002@10.10.10.102", time.Duration(35)*time.Second, 5071); err != nil { + if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "1234", Realm: "*"}, "sip:1002@127.0.0.1", + "sip:127.0.0.1:25060", time.Duration(67)*time.Second, 5071); err != nil { t.Fatal(err) } - time.Sleep(time.Duration(40) * time.Second) +} + +// Make sure account was debited properly +func TestTutFsCallsAccount1001(t *testing.T) { + if !*testCalls { + return + } + time.Sleep(time.Duration(70) * time.Second) // Allow calls to finish before start querying the results + var reply *engine.Account + attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001", Direction: "*out"} + if err := tutFsCallsRpc.Call("ApierV1.GetAccount", attrs, &reply); err != nil { + t.Error("Got error on ApierV1.GetAccount: ", err.Error()) + } else if reply.BalanceMap[engine.CREDIT+attrs.Direction].GetTotalValue() == 10.0 { // Make sure we debitted + t.Errorf("Calling ApierV1.GetBalance expected: 11.5, received: %f", reply.BalanceMap[engine.CREDIT+attrs.Direction].GetTotalValue()) + } +} + +// Make sure account was debited properly +func TestTutFsCallsCdrs1001(t *testing.T) { + if !*testCalls { + return + } + var reply []*utils.CgrCdrOut + req := utils.RpcCdrsFilter{Accounts: []string{"1001"}, RunIds: []string{utils.META_DEFAULT}} + if err := tutFsCallsRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil { + t.Error("Unexpected error: ", err.Error()) + } else if len(reply) != 1 { + t.Error("Unexpected number of CDRs returned: ", len(reply)) + } else { + if reply[0].CdrSource != "FS_CHANNEL_HANGUP_COMPLETE" { + t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0]) + } + if reply[0].ReqType != utils.PREPAID { + t.Errorf("Unexpected ReqType for CDR: %+v", reply[0]) + } + if reply[0].Usage != 67.0 { // Usage as seconds + t.Errorf("Unexpected Usage for CDR: %+v", reply[0]) + } + if reply[0].Cost != 0.0159 { + t.Errorf("Unexpected Cost for CDR: %+v", reply[0]) + } + } + req = utils.RpcCdrsFilter{Accounts: []string{"1001"}, RunIds: []string{"derived_run1"}} + if err := tutFsCallsRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil { + t.Error("Unexpected error: ", err.Error()) + } else if len(reply) != 1 { + t.Error("Unexpected number of CDRs returned: ", len(reply)) + } else { + if reply[0].ReqType != utils.RATED { + t.Errorf("Unexpected ReqType for CDR: %+v", reply[0]) + } + if reply[0].Cost != 0.3059 { + t.Errorf("Unexpected Cost for CDR: %+v", reply[0]) + } + } } func TestTutFsCallsStopPjsuaListener(t *testing.T) { if !*testCalls { return } + tutFsCallsPjSuaListener.Write([]byte("q\n")) // Close pjsua time.Sleep(time.Duration(1) * time.Second) // Allow pjsua to finish it's tasks, eg un-REGISTER }