mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
New kamailio tutorial in docs, various doc improvements, fixes in local calls
This commit is contained in:
Binary file not shown.
@@ -60,7 +60,7 @@ loadmodule "jsonrpc-s.so"
|
||||
# ----------------- setting module-specific parameters ---------------
|
||||
|
||||
# ----- mi_fifo params -----
|
||||
modparam("mi_fifo", "fifo_name", "/tmp/cgr_kamevapi/kamailio/run/kamailio_fifo")
|
||||
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
|
||||
|
||||
# ----- tm params -----
|
||||
modparam("tm", "failure_reply_mode", 3)
|
||||
|
||||
@@ -45,18 +45,20 @@ Database setup
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
For it's operation CGRateS uses more database types, depending on it's nature, install and configuration being further necessary.
|
||||
|
||||
At present we support the following databases:
|
||||
|
||||
As DataDB types (rating and accounting subsystems):
|
||||
|
||||
|
||||
- Redis_
|
||||
|
||||
As StorDB (persistent storage for CDRs and tariff plan versions).
|
||||
|
||||
Used as DataDb, optimized for real-time information access.
|
||||
Once installed there should be no special requirements in terms of setup since no schema is necessary.
|
||||
|
||||
|
||||
- MySQL_
|
||||
|
||||
Used as StorDb, optimized for CDR archiving and offline Tariff Plan versioning.
|
||||
Once database is installed, CGRateS database needs to be set-up out of provided scripts (example for the paths set-up by debian package)
|
||||
|
||||
::
|
||||
@@ -66,12 +68,13 @@ Once database is installed, CGRateS database needs to be set-up out of provided
|
||||
|
||||
- PostgreSQL_
|
||||
|
||||
Used as StorDb, optimized for CDR archiving and offline Tariff Plan versioning.
|
||||
Once database is installed, CGRateS database needs to be set-up out of provided scripts (example for the paths set-up by debian package)
|
||||
|
||||
::
|
||||
|
||||
cd /usr/share/cgrates/storage/postgres/
|
||||
./setup_cgr_db.sh root CGRateS.org localhost
|
||||
./setup_cgr_db.sh
|
||||
|
||||
.. _Redis: http://redis.io/
|
||||
.. _MySQL: http://www.mysql.org/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
sFreeSWITCH Integration Tutorials
|
||||
FreeSWITCH Integration Tutorials
|
||||
================================
|
||||
|
||||
In these tutorials we exemplify few cases of integration between FreeSWITCH_ and **CGRateS**. We start with common steps, installation and postinstall processes then we dive into particular configurations, depending on the case we run.
|
||||
In these tutorials we exemplify few cases of integration between FreeSWITCH_ and **CGRateS**. We start with common steps, installation and postinstall processes then we dive into particular configurations.
|
||||
|
||||
|
||||
.. toctree::
|
||||
@@ -10,7 +10,6 @@ In these tutorials we exemplify few cases of integration between FreeSWITCH_ and
|
||||
tut_freeswitch_installs
|
||||
tut_cgrates_installs
|
||||
tut_jitsi_installs
|
||||
tut_freeswitch_csv
|
||||
tut_freeswitch_json
|
||||
tut_cgrates_usage
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ FreeSWITCH_ generating *http-json* CDRs
|
||||
Scenario
|
||||
--------
|
||||
|
||||
- FreeSWITCH with *vanilla* configuration, replacing *mod_cdr_csv* with *mod_json_cdr*.
|
||||
- FreeSWITCH with *vanilla* configuration adding *mod_json_cdr* for CDR generation.
|
||||
|
||||
- Modified following users (with configs in *etc/freeswitch/directory/default*): 1001-prepaid, 1002-postpaid, 1003-pseudoprepaid, 1004-rated, 1006-prepaid, 1007-rated.
|
||||
- Have added inside default dialplan CGR own extensions just before routing towards users (*etc/freeswitch/dialplan/default.xml*).
|
||||
@@ -13,8 +13,8 @@ Scenario
|
||||
- **CGRateS** with following components:
|
||||
|
||||
- CGR-SM started as prepaid controller, with debits taking place at 5s intervals.
|
||||
- CGR-Mediator component attaching costs to the raw CDRs from FreeSWITCH_ inside CGR StorDB.
|
||||
- CGR-CDRE exporting mediated CDRs from CGR StorDB (export path: */tmp*).
|
||||
- CGR-CDRS component receiving raw CDRs from FreeSWITCH, storing them and attaching costs inside CGR StorDB.
|
||||
- CGR-CDRE exporting processed CDRs from CGR StorDB (export path: */tmp*).
|
||||
- CGR-History component keeping the archive of the rates modifications (path browsable with git client at */tmp/cgr_history*).
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ Starting FreeSWITCH_ with custom configuration
|
||||
|
||||
::
|
||||
|
||||
/usr/share/cgrates/tutorials/fs_json/freeswitch/etc/init.d/freeswitch start
|
||||
/usr/share/cgrates/tutorials/fs_evsock/freeswitch/etc/init.d/freeswitch start
|
||||
|
||||
To verify that FreeSWITCH_ is running we run the console command:
|
||||
|
||||
@@ -37,7 +37,7 @@ Starting **CGRateS** with custom configuration
|
||||
|
||||
::
|
||||
|
||||
/usr/share/cgrates/tutorials/fs_json/cgrates/etc/init.d/cgrates start
|
||||
/usr/share/cgrates/tutorials/fs_evsock/cgrates/etc/init.d/cgrates start
|
||||
|
||||
Check that cgrates is running
|
||||
|
||||
@@ -49,7 +49,7 @@ Check that cgrates is running
|
||||
CDR processing
|
||||
--------------
|
||||
|
||||
At the end of each call FreeSWITCH_ will issue a http post with the CDR. This will reach inside **CGRateS** through the *CDRS* component (close to real-time). Once in-there it will be instantly mediated and it is ready to be exported:
|
||||
At the end of each call FreeSWITCH_ will issue a http post with the CDR. This will reach inside **CGRateS** through the *CDRS* component (close to real-time). Once in-there it will be instantly rated and it is ready to be exported:
|
||||
|
||||
::
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ Scenario
|
||||
- **CGRateS** with following components:
|
||||
|
||||
- CGR-SM started as translator between OpenSIPS_ and **cgr-rater** for both authorization events (pseudoprepaid) as well as CDR ones.
|
||||
- CGR-Mediator component attaching costs to the raw CDRs from OpenSIPS_ inside CGR StorDB.
|
||||
- CGR-CDRE exporting mediated CDRs from CGR StorDB (export path: */tmp*).
|
||||
- CGR-CDRS component processing raw CDRs from CGR-SM component and storing them inside CGR StorDB.
|
||||
- CGR-CDRE exporting rated CDRs from CGR StorDB (export path: */tmp*).
|
||||
- CGR-History component keeping the archive of the rates modifications (path browsable with git client at */tmp/cgr_history*).
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ Starting OpenSIPS_ with custom configuration
|
||||
|
||||
::
|
||||
|
||||
/usr/share/cgrates/tutorials/osips_event/opensips/etc/init.d/opensips start
|
||||
/usr/share/cgrates/tutorials/osips_async/opensips/etc/init.d/opensips start
|
||||
|
||||
To verify that OpenSIPS_ is running we run the console command:
|
||||
|
||||
@@ -36,9 +36,9 @@ Starting **CGRateS** with custom configuration
|
||||
|
||||
::
|
||||
|
||||
/usr/share/cgrates/tutorials/osips_event/cgrates/etc/init.d/cgrates start
|
||||
/usr/share/cgrates/tutorials/osips_async/cgrates/etc/init.d/cgrates start
|
||||
|
||||
Check that cgrates is running
|
||||
Make sure that cgrates is running
|
||||
|
||||
::
|
||||
|
||||
@@ -48,7 +48,7 @@ Check that cgrates is running
|
||||
CDR processing
|
||||
--------------
|
||||
|
||||
At the end of each call OpenSIPS_ will generate an CDR event and due to automatic handler registration built in **CGRateS-SM** component, this will be directed towards the port configured inside *cgrates.cfg*. This event will reach inside **CGRateS** through the *SM* component (close to real-time). Once in-there it will be instantly mediated and it is ready to be exported.
|
||||
At the end of each call OpenSIPS_ will generate an CDR event and due to automatic handler registration built in **CGRateS-SM** component, this will be directed towards the port configured inside *cgrates.json*. This event will reach inside **CGRateS** through the *SM* component (close to real-time). Once in-there it will be instantly rated and be ready for export.
|
||||
|
||||
|
||||
**CGRateS** Usage
|
||||
|
||||
@@ -12,9 +12,9 @@ We got OpenSIPS_ installed via following commands:
|
||||
wget http://apt.opensips.org/key.asc
|
||||
apt-key add key.asc
|
||||
cd /etc/apt/sources.list.d/
|
||||
wget http://apt.itsyscom.com/conf/opensips.apt.list
|
||||
wget http://apt.itsyscom.com/conf/opensips.wheezy.apt.list
|
||||
apt-get update
|
||||
apt-get install
|
||||
apt-get install opensips opensips-json-module opensips-restclient-module
|
||||
|
||||
Once installed we proceed with loading the configuration out of specific tutorial cases bellow.
|
||||
|
||||
|
||||
@@ -5,4 +5,5 @@
|
||||
:maxdepth: 2
|
||||
|
||||
tut_freeswitch
|
||||
tut_kamailio
|
||||
tut_opensips
|
||||
|
||||
@@ -99,8 +99,7 @@ func TestTutFsCallsRestartFS(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("freeswitch", 5000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "freeswitch", "etc", "init.d", "freeswitch"), "start", 3000); err != nil {
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "freeswitch", "etc", "init.d", "freeswitch"), "start", 5000); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func TestTutKamCallsInitCfg(t *testing.T) {
|
||||
}
|
||||
// Init config first
|
||||
var err error
|
||||
tutKamCallsCfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "tutorials", "fs_evsock", "cgrates", "etc", "cgrates"))
|
||||
tutKamCallsCfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "tutorials", "kamevapi", "cgrates", "etc", "cgrates"))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -73,12 +73,12 @@ func TestTutKamCallsResetStorDb(t *testing.T) {
|
||||
}
|
||||
|
||||
// start FS server
|
||||
func TestTutKamCallsStartFS(t *testing.T) {
|
||||
func TestTutKamCallsStartKamailio(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("freeswitch", 5000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "freeswitch", "etc", "init.d", "freeswitch"), "start", 3000); err != nil {
|
||||
engine.KillProcName("kamailio", 3000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "kamevapi", "kamailio", "etc", "init.d", "kamailio"), "start", 2000); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -89,18 +89,17 @@ func TestTutKamCallsStartEngine(t *testing.T) {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("cgr-engine", *waitRater)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "cgrates", "etc", "init.d", "cgrates"), "start", 100); err != nil {
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "kamevapi", "cgrates", "etc", "init.d", "cgrates"), "start", 100); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// Restart FS so we make sure reconnects are working
|
||||
func TestTutKamCallsRestartFS(t *testing.T) {
|
||||
func TestTutKamCallsRestartKamailio(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("freeswitch", 5000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "freeswitch", "etc", "init.d", "freeswitch"), "start", 3000); err != nil {
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "kamevapi", "kamailio", "etc", "init.d", "kamailio"), "restart", 3000); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -226,12 +225,12 @@ func TestTutKamCallsStartPjsuaListener(t *testing.T) {
|
||||
}
|
||||
var err error
|
||||
acnts := []*engine.PjsuaAccount{
|
||||
&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1002@127.0.0.1", Username: "1002", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1003@127.0.0.1", Username: "1003", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1004@127.0.0.1", Username: "1004", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1006@127.0.0.1", Username: "1006", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1007@127.0.0.1", Username: "1007", Password: "1234", Realm: "*", Registrar: "sip:127.0.0.1:5060"}}
|
||||
&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "CGRateS.org", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1002@127.0.0.1", Username: "1002", Password: "CGRateS.org", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1003@127.0.0.1", Username: "1003", Password: "CGRateS.org", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1004@127.0.0.1", Username: "1004", Password: "CGRateS.org", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1006@127.0.0.1", Username: "1006", Password: "CGRateS.org", Realm: "*", Registrar: "sip:127.0.0.1:5060"},
|
||||
&engine.PjsuaAccount{Id: "sip:1007@127.0.0.1", Username: "1007", Password: "CGRateS.org", Realm: "*", Registrar: "sip:127.0.0.1:5060"}}
|
||||
if tutKamCallsPjSuaListener, err = engine.StartPjsuaListener(acnts, 5070, *waitRater); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -242,7 +241,7 @@ func TestTutKamCallsCall1001To1002(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "1234", Realm: "*"}, "sip:1002@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "CGRateS.org", Realm: "*"}, "sip:1002@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(67)*time.Second, 5071); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -253,7 +252,7 @@ func TestTutKamCallsCall1001To1003(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "1234", Realm: "*"}, "sip:1003@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1001@127.0.0.1", Username: "1001", Password: "CGRateS.org", Realm: "*"}, "sip:1003@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(65)*time.Second, 5072); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -263,7 +262,7 @@ func TestTutKamCallsCall1002To1001(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1002@127.0.0.1", Username: "1002", Password: "1234", Realm: "*"}, "sip:1001@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1002@127.0.0.1", Username: "1002", Password: "CGRateS.org", Realm: "*"}, "sip:1001@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(61)*time.Second, 5073); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -273,7 +272,7 @@ func TestTutKamCallsCall1003To1001(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1003@127.0.0.1", Username: "1003", Password: "1234", Realm: "*"}, "sip:1001@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1003@127.0.0.1", Username: "1003", Password: "CGRateS.org", Realm: "*"}, "sip:1001@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(63)*time.Second, 5074); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -283,7 +282,7 @@ func TestTutKamCallsCall1004To1001(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1004@127.0.0.1", Username: "1004", Password: "1234", Realm: "*"}, "sip:1001@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1004@127.0.0.1", Username: "1004", Password: "CGRateS.org", Realm: "*"}, "sip:1001@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(62)*time.Second, 5075); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -293,7 +292,7 @@ func TestTutKamCallsCall1006To1002(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1006@127.0.0.1", Username: "1006", Password: "1234", Realm: "*"}, "sip:1002@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1006@127.0.0.1", Username: "1006", Password: "CGRateS.org", Realm: "*"}, "sip:1002@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(64)*time.Second, 5076); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -303,7 +302,7 @@ func TestTutKamCallsCall1007To1002(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1007@127.0.0.1", Username: "1007", Password: "1234", Realm: "*"}, "sip:1002@127.0.0.1",
|
||||
if err := engine.PjsuaCallUri(&engine.PjsuaAccount{Id: "sip:1007@127.0.0.1", Username: "1007", Password: "CGRateS.org", Realm: "*"}, "sip:1002@127.0.0.1",
|
||||
"sip:127.0.0.1:5060", time.Duration(66)*time.Second, 5077); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -341,7 +340,7 @@ func TestTutKamCalls1001Cdrs(t *testing.T) {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
cgrId = reply[0].CgrId
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "KAMAILIO_CGR_CALL_END" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PREPAID {
|
||||
@@ -415,7 +414,7 @@ func TestTutKamCalls1002Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "KAMAILIO_CGR_CALL_END" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_POSTPAID {
|
||||
@@ -442,7 +441,7 @@ func TestTutKamCalls1003Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "KAMAILIO_CGR_CALL_END" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PSEUDOPREPAID {
|
||||
@@ -470,7 +469,7 @@ func TestTutKamCalls1004Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "KAMAILIO_CGR_CALL_END" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_RATED {
|
||||
@@ -498,7 +497,7 @@ func TestTutKamCalls1006Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "KAMAILIO_CGR_CALL_END" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PREPAID {
|
||||
@@ -528,7 +527,7 @@ func TestTutKamCalls1007Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "KAMAILIO_CGR_CALL_END" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PREPAID {
|
||||
|
||||
@@ -44,7 +44,7 @@ func TestTutOsipsCallsInitCfg(t *testing.T) {
|
||||
}
|
||||
// Init config first
|
||||
var err error
|
||||
tutOsipsCallsCfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "tutorials", "fs_evsock", "cgrates", "etc", "cgrates"))
|
||||
tutOsipsCallsCfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "tutorials", "osips_async", "cgrates", "etc", "cgrates"))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -73,12 +73,12 @@ func TestTutOsipsCallsResetStorDb(t *testing.T) {
|
||||
}
|
||||
|
||||
// start FS server
|
||||
func TestTutOsipsCallsStartFS(t *testing.T) {
|
||||
func TestTutOsipsCallsStartOsips(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("freeswitch", 5000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "freeswitch", "etc", "init.d", "freeswitch"), "start", 3000); err != nil {
|
||||
engine.KillProcName("opensips", 3000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "osips_async", "opensips", "etc", "init.d", "opensips"), "start", 3000); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -89,18 +89,17 @@ func TestTutOsipsCallsStartEngine(t *testing.T) {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("cgr-engine", *waitRater)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "cgrates", "etc", "init.d", "cgrates"), "start", 100); err != nil {
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "osips_async", "cgrates", "etc", "init.d", "cgrates"), "start", 100); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// Restart FS so we make sure reconnects are working
|
||||
func TestTutOsipsCallsRestartFS(t *testing.T) {
|
||||
func TestTutOsipsCallsRestartOsips(t *testing.T) {
|
||||
if !*testCalls {
|
||||
return
|
||||
}
|
||||
engine.KillProcName("freeswitch", 5000)
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "freeswitch", "etc", "init.d", "freeswitch"), "start", 3000); err != nil {
|
||||
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "osips_async", "opensips", "etc", "init.d", "opensips"), "restart", 3000); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -341,7 +340,7 @@ func TestTutOsipsCalls1001Cdrs(t *testing.T) {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
cgrId = reply[0].CgrId
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "OSIPS_E_ACC_EVENT" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PREPAID {
|
||||
@@ -415,7 +414,7 @@ func TestTutOsipsCalls1002Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "OSIPS_E_ACC_EVENT" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_POSTPAID {
|
||||
@@ -442,7 +441,7 @@ func TestTutOsipsCalls1003Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "OSIPS_E_ACC_EVENT" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PSEUDOPREPAID {
|
||||
@@ -470,7 +469,7 @@ func TestTutOsipsCalls1004Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "OSIPS_E_ACC_EVENT" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_RATED {
|
||||
@@ -498,7 +497,7 @@ func TestTutOsipsCalls1006Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "OSIPS_E_ACC_EVENT" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PREPAID {
|
||||
@@ -528,7 +527,7 @@ func TestTutOsipsCalls1007Cdrs(t *testing.T) {
|
||||
} else if len(reply) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(reply))
|
||||
} else {
|
||||
if reply[0].CdrSource != "freeswitch_json" {
|
||||
if reply[0].CdrSource != "OSIPS_E_ACC_EVENT" {
|
||||
t.Errorf("Unexpected CdrSource for CDR: %+v", reply[0])
|
||||
}
|
||||
if reply[0].ReqType != utils.META_PREPAID {
|
||||
|
||||
Reference in New Issue
Block a user