Updated agents integration tests for gob RPC

This commit is contained in:
Trial97
2019-12-03 16:09:35 +02:00
parent ab8ac753cb
commit 89721ddbfa
10 changed files with 743 additions and 13 deletions

View File

@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package agents
import (
"errors"
"flag"
"net/rpc"
"net/rpc/jsonrpc"
@@ -41,6 +42,7 @@ var (
dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here")
interations = flag.Int("iterations", 1, "Number of iterations to do for dry run simulation")
replyTimeout = flag.String("reply_timeout", "1s", "Maximum duration to wait for a reply")
encoding = flag.String("rpc", utils.MetaJSON, "what encoding whould be uused for rpc comunication")
daCfgPath, diamConfigDIR string
daCfg *config.CGRConfig
@@ -68,6 +70,17 @@ var (
}
)
func newRPCClient(cfg *config.ListenCfg) (c *rpc.Client, err error) {
switch *encoding {
case utils.MetaJSON:
return jsonrpc.Dial(utils.TCP, cfg.RPCJSONListen)
case utils.MetaGOB:
return rpc.Dial(utils.TCP, cfg.RPCGOBListen)
default:
return nil, errors.New("UNSUPPORTED_RPC")
}
}
// Test start here
func TestDiamItTcp(t *testing.T) {
engine.KillEngine(0)
@@ -78,6 +91,10 @@ func TestDiamItTcp(t *testing.T) {
}
func TestDiamItDispatcher(t *testing.T) {
if *encoding == utils.MetaGOB {
t.SkipNow()
return
}
isDispatcherActive = true
engine.StartEngine(path.Join(*dataDir, "conf", "samples", "dispatchers", "all"), 200)
engine.StartEngine(path.Join(*dataDir, "conf", "samples", "dispatchers", "all2"), 200)
@@ -182,7 +199,7 @@ func testDiamItConnectDiameterClient(t *testing.T) {
// Connect rpc client to rater
func testDiamItApierRpcConn(t *testing.T) {
var err error
apierRpc, err = jsonrpc.Dial("tcp", daCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
apierRpc, err = newRPCClient(daCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}
@@ -760,7 +777,7 @@ func testDiamItCCRTerminate(t *testing.T) {
}
time.Sleep(time.Duration(*waitRater) * time.Millisecond)
var cdrs []*engine.CDR
args := utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}}
args := utils.RPCCDRsFilterWithArgDispatcher{RPCCDRsFilter: &utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}}}
if err := apierRpc.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(cdrs) != 1 {
@@ -845,7 +862,7 @@ func testDiamItCCRSMS(t *testing.T) {
diamClnt.ReceivedMessage(rplyTimeout)
var cdrs []*engine.CDR
args := utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}, ToRs: []string{utils.SMS}}
args := &utils.RPCCDRsFilterWithArgDispatcher{RPCCDRsFilter: &utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}, ToRs: []string{utils.SMS}}}
if err := apierRpc.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(cdrs) != 1 {

View File

@@ -22,7 +22,6 @@ package agents
import (
"net/rpc"
"net/rpc/jsonrpc"
"path"
"testing"
"time"
@@ -87,7 +86,7 @@ func testDNSitStartEngine(t *testing.T) {
// Connect rpc client to rater
func testDNSitApierRpcConn(t *testing.T) {
var err error
dnsRPC, err = jsonrpc.Dial("tcp", dnsCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
dnsRPC, err = newRPCClient(dnsCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}

View File

@@ -28,7 +28,6 @@ import (
"io/ioutil"
"net/http"
"net/rpc"
"net/rpc/jsonrpc"
"path"
"reflect"
"testing"
@@ -63,6 +62,9 @@ var sTestsHA = []func(t *testing.T){
func TestHAitSimple(t *testing.T) {
haCfgPath = path.Join(*dataDir, "conf", "samples", "httpagent")
if *encoding == utils.MetaGOB {
haCfgPath = path.Join(*dataDir, "conf", "samples", "gob", "httpagent")
}
// Init config first
var err error
haCfg, err = config.NewCGRConfigFromPath(haCfgPath)
@@ -79,6 +81,9 @@ func TestHAitSimple(t *testing.T) {
func TestHA2itWithTls(t *testing.T) {
haCfgPath = path.Join(*dataDir, "conf", "samples", "httpagenttls")
if *encoding == utils.MetaGOB {
haCfgPath = path.Join(*dataDir, "conf", "samples", "gob", "httpagenttls")
}
// Init config first
var err error
haCfg, err = config.NewCGRConfigFromPath(haCfgPath)
@@ -136,7 +141,7 @@ func testHAitStartEngine(t *testing.T) {
// Connect rpc client to rater
func testHAitApierRpcConn(t *testing.T) {
var err error
haRPC, err = jsonrpc.Dial("tcp", haCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
haRPC, err = newRPCClient(haCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}

View File

@@ -23,7 +23,6 @@ package agents
import (
"fmt"
"net/rpc"
"net/rpc/jsonrpc"
"os/exec"
"path"
"reflect"
@@ -68,6 +67,10 @@ func TestRAit(t *testing.T) {
}
func TestRAitDispatcher(t *testing.T) {
if *encoding == utils.MetaGOB {
t.SkipNow()
return
}
isDispatcherActive = true
engine.StartEngine(path.Join(*dataDir, "conf", "samples", "dispatchers", "all"), 200)
engine.StartEngine(path.Join(*dataDir, "conf", "samples", "dispatchers", "all2"), 200)
@@ -82,6 +85,9 @@ func TestRAitDispatcher(t *testing.T) {
func testRAitInitCfg(t *testing.T) {
raCfgPath = path.Join(*dataDir, "conf", "samples", raonfigDIR)
if *encoding == utils.MetaGOB {
raCfgPath = path.Join(*dataDir, "conf", "samples", "gob", raonfigDIR)
}
// Init config first
var err error
raCfg, err = config.NewCGRConfigFromPath(raCfgPath)
@@ -133,7 +139,7 @@ func testRAitStartEngine(t *testing.T) {
// Connect rpc client to rater
func testRAitApierRpcConn(t *testing.T) {
var err error
raRPC, err = jsonrpc.Dial("tcp", raCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
raRPC, err = newRPCClient(raCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}

View File

@@ -0,0 +1,81 @@
{
// CGRateS Configuration file
//
"general": {
"log_level": 7,
},
"listen": {
"rpc_json": ":2012",
"rpc_gob": ":2013",
"http": ":2080",
},
"stor_db": {
"db_password": "CGRateS.org",
},
"rals": {
"enabled": true,
"max_increments":3000000,
},
"scheduler": {
"enabled": true,
},
"cdrs": {
"enabled": true,
"chargers_conns": [
{"address": "*internal"}
],
"rals_conns": [
{"address": "*internal"}
],
},
"attributes": {
"enabled": true,
},
"chargers": {
"enabled": true,
"attributes_conns": [
{"address": "*internal"}
],
},
"sessions": {
"enabled": true,
"attributes_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"cdrs_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"rals_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"chargers_conns": [
{"address": "*internal"}
],
},
"apier": {
"scheduler_conns": [ // connections to SchedulerS for reloads
{"address": "*internal"},
],
},
}

View File

@@ -0,0 +1,174 @@
{
"http_agent": [
{
"id": "conecto1",
"url": "/conecto",
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"request_payload": "*url",
"reply_payload": "*xml",
"request_processors": [
{
"id": "OutboundAUTHDryRun",
"filters": ["*string:~*req.request_type:OutboundAUTH","*string:~*req.Msisdn:497700056231"],
"tenant": "cgrates.org",
"flags": ["*dryrun"],
"request_fields":[
],
"reply_fields":[
{"tag": "Allow", "field_id": "response.Allow", "type": "*constant",
"value": "1", "mandatory": true},
{"tag": "Concatenated1", "field_id": "response.Concatenated", "type": "*composed",
"value": "~*req.MCC;/", "mandatory": true},
{"tag": "Concatenated2", "field_id": "response.Concatenated", "type": "*composed",
"value": "Val1"},
{"tag": "MaxDuration", "field_id": "response.MaxDuration", "type": "*constant",
"value": "1200", "blocker": true},
{"tag": "Unused", "field_id": "response.Unused", "type": "*constant",
"value": "0"},
],
},
{
"id": "OutboundAUTH",
"filters": ["*string:~*req.request_type:OutboundAUTH"],
"tenant": "cgrates.org",
"flags": [ "*auth", "*accounts", "*attributes"],
"request_fields":[
{"tag": "Category", "field_id": "Category", "type": "*constant", "value": "call"},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*pseudoprepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.CallID", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.Msisdn", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.Destination", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*constant",
"value": "*now", "mandatory": true},
],
"reply_fields":[
{"tag": "Allow", "field_id": "response.Allow", "type": "*constant",
"value": "1", "mandatory": true},
{"tag": "MaxDuration", "field_id": "response.MaxDuration", "type": "*composed",
"value": "~*cgrep.MaxUsage{*duration_seconds}", "mandatory": true},
],
},
{
"id": "mtcall_cdr",
"filters": ["*string:~*req.request_type:MTCALL_CDR"],
"tenant": "cgrates.org",
"flags": ["*cdrs"],
"request_fields":[
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*pseudoprepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.CDR_ID", "mandatory": true},
{"tag": "OriginHost", "field_id": "OriginHost", "type": "*remote_host",
"mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.msisdn", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.destination", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*variable",
"value": "~*req.timestamp", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*variable",
"value": "~*req.timestamp", "mandatory": true},
{"tag": "Usage", "field_id": "Usage", "type": "*composed",
"value": "~*req.leg_duration;s", "mandatory": true},
],
"reply_fields":[
{"tag": "ResultCode", "filters": ["*rsr::~*cgrep.Error(!^$)"],
"field_id": "CDR_RESPONSE.RESULT_CODE", "type": "*composed", "value": "~*cgrep.Error", "blocker": true},
{"tag": "CDR_ID", "field_id": "CDR_RESPONSE.CDR_ID", "type": "*composed",
"value": "~*req.CDR_ID", "mandatory": true},
{"tag": "CDR_STATUS", "field_id": "CDR_RESPONSE.CDR_STATUS", "type": "*constant",
"value": "1", "mandatory": true},
],
}
],
},
{
"id": "conecto_xml",
"url": "/conecto_xml",
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"request_payload": "*xml",
"reply_payload": "*xml",
"request_processors": [
{
"id": "cdr_from_xml",
"tenant": "cgrates.org",
"flags": ["*cdrs"],
"request_fields":[
{"tag": "TOR", "field_id": "ToR", "type": "*constant",
"value": "*data", "mandatory": true},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*pseudoprepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.complete-datasession-notification.customerid", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.complete-datasession-notification.username", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.complete-datasession-notification.userid", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed",
"value": "~*req.complete-datasession-notification.createtime", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed",
"value": "~*req.complete-datasession-notification.createtime", "mandatory": true},
{"tag": "Usage", "field_id": "Usage", "type": "*composed",
"value": "~*req.complete-datasession-notification.callleg.bytes", "mandatory": true},
],
"reply_fields":[],
}
],
},
{
"id": "textplain",
"url": "/textplain",
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"request_payload": "*url",
"reply_payload": "*text_plain",
"request_processors": [
{
"id": "TextPlainDryRun",
"filters": ["*string:~*req.request_type:TextPlainDryRun","*string:~*req.Msisdn:497700056231"],
"tenant": "cgrates.org",
"flags": ["*dryrun"],
"request_fields":[
],
"reply_fields":[
{"tag": "Field1", "field_id": "Variable1", "type": "*variable",
"value": "Hola1", "mandatory": true},
{"tag": "Field2", "field_id": "Variable2", "type": "*variable",
"value": "Hola2", "mandatory": true},
{"tag": "Field3", "field_id": "ComposedVar", "type": "*composed",
"value": "Test", "mandatory": true},
{"tag": "Field4", "field_id": "ComposedVar", "type": "*composed",
"value": "Composed", "mandatory": true},
{"tag": "Field5", "field_id": "Item1.1", "type": "*variable",
"value": "Val1", "mandatory": true},
],
"continue": true,
},
{
"id": "TextPlainDryRun2",
"filters": ["*string:~*req.request_type:TextPlainDryRun","*string:~*req.Msisdn:497700056231"],
"tenant": "cgrates.org",
"flags": ["*dryrun"],
"request_fields":[],
"reply_fields":[
{"tag": "Field1", "field_id": "Item1.1", "type": "*variable",
"value": "Val2", "mandatory": true},
],
},
],
},
],
}

View File

@@ -0,0 +1,94 @@
{
// CGRateS Configuration file
//
"general": {
"log_level": 7,
},
"listen": {
"rpc_json": ":2012",
"rpc_gob": ":2013",
"http": ":2080",
"rpc_json_tls":":2022",
"rpc_gob_tls":":2023",
"http_tls": "localhost:2280",
},
"tls": {
"server_certificate" : "/usr/share/cgrates/tls/server.crt", // path to server certificate(must conatin server.crt + ca.crt)
"server_key":"/usr/share/cgrates/tls/server.key", // path to server key
"client_certificate" : "/usr/share/cgrates/tls/client.crt", // path to client certificate(must conatin client.crt + ca.crt)
"client_key":"/usr/share/cgrates/tls/client.key", // path to client key
"ca_certificate":"/usr/share/cgrates/tls/ca.crt",
},
"stor_db": {
"db_password": "CGRateS.org",
},
"rals": {
"enabled": true,
"max_increments":3000000,
},
"scheduler": {
"enabled": true,
},
"cdrs": {
"enabled": true,
"chargers_conns": [
{"address": "*internal"}
],
"rals_conns": [
{"address": "*internal"}
],
},
"attributes": {
"enabled": true,
},
"chargers": {
"enabled": true,
"attributes_conns": [
{"address": "*internal"}
],
},
"sessions": {
"enabled": true,
"attributes_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"cdrs_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"rals_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"cdrs_conns": [
{"address": "*internal"}
],
"chargers_conns": [
{"address": "*internal"}
],
},
"apier": {
"scheduler_conns": [ // connections to SchedulerS for reloads
{"address": "*internal"},
],
},
}

View File

@@ -0,0 +1,175 @@
{
"http_agent": [
{
"id": "conecto1",
"url": "/conecto",
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"request_payload": "*url",
"reply_payload": "*xml",
"request_processors": [
{
"id": "OutboundAUTHDryRun",
"filters": ["*string:~*req.request_type:OutboundAUTH","*string:~*req.Msisdn:497700056231"],
"tenant": "cgrates.org",
"flags": ["*dryrun"],
"request_fields":[
],
"reply_fields":[
{"tag": "Allow", "field_id": "response.Allow", "type": "*constant",
"value": "1", "mandatory": true},
{"tag": "Concatenated1", "field_id": "response.Concatenated", "type": "*composed",
"value": "~*req.MCC;/", "mandatory": true},
{"tag": "Concatenated2", "field_id": "response.Concatenated", "type": "*composed",
"value": "Val1"},
{"tag": "MaxDuration", "field_id": "response.MaxDuration", "type": "*constant",
"value": "1200", "blocker": true},
{"tag": "Unused", "field_id": "response.Unused", "type": "*constant",
"value": "0"},
],
},
{
"id": "OutboundAUTH",
"filters": ["*string:~*req.request_type:OutboundAUTH"],
"tenant": "cgrates.org",
"flags": [ "*auth", "*accounts", "*attributes"],
"request_fields":[
{"tag": "Category", "field_id": "Category", "type": "*constant", "value": "call"},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*pseudoprepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.CallID", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.Msisdn", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.Destination", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*constant",
"value": "*now", "mandatory": true},
],
"reply_fields":[
{"tag": "Allow", "field_id": "response.Allow", "type": "*constant",
"value": "1", "mandatory": true},
{"tag": "MaxDuration", "field_id": "response.MaxDuration", "type": "*composed",
"value": "~*cgrep.MaxUsage{*duration_seconds}", "mandatory": true},
],
},
{
"id": "mtcall_cdr",
"filters": ["*string:~*req.request_type:MTCALL_CDR"],
"tenant": "cgrates.org",
"flags": ["*cdrs"],
"request_fields":[
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*pseudoprepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.CDR_ID", "mandatory": true},
{"tag": "OriginHost", "field_id": "OriginHost", "type": "*remote_host",
"mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.msisdn", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.destination", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed",
"value": "~*req.timestamp", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed",
"value": "~*req.timestamp", "mandatory": true},
{"tag": "Usage", "field_id": "Usage", "type": "*composed",
"value": "~*req.leg_duration;s", "mandatory": true},
],
"reply_fields":[
{"tag": "ResultCode", "filters": ["*rsr::~*cgrep.Error(!^$)"],
"field_id": "CDR_RESPONSE.RESULT_CODE", "type": "*composed", "value": "~*cgrep.Error", "blocker": true},
{"tag": "CDR_ID", "field_id": "CDR_RESPONSE.CDR_ID", "type": "*composed",
"value": "~*req.CDR_ID", "mandatory": true},
{"tag": "CDR_STATUS", "field_id": "CDR_RESPONSE.CDR_STATUS", "type": "*constant",
"value": "1", "mandatory": true},
],
}
],
},
{
"id": "conecto_xml",
"url": "/conecto_xml",
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"request_payload": "*xml",
"reply_payload": "*xml",
"request_processors": [
{
"id": "cdr_from_xml",
"tenant": "cgrates.org",
"flags": ["*cdrs"],
"request_fields":[
{"tag": "TOR", "field_id": "ToR", "type": "*constant",
"value": "*data", "mandatory": true},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*pseudoprepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.complete-datasession-notification.customerid", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.complete-datasession-notification.username", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.complete-datasession-notification.userid", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed",
"value": "~*req.complete-datasession-notification.createtime", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed",
"value": "~*req.complete-datasession-notification.createtime", "mandatory": true},
{"tag": "Usage", "field_id": "Usage", "type": "*composed",
"value": "~*req.complete-datasession-notification.callleg.bytes", "mandatory": true},
],
"reply_fields":[],
}
],
},
{
"id": "textplain",
"url": "/textplain",
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"request_payload": "*url",
"reply_payload": "*text_plain",
"request_processors": [
{
"id": "TextPlainDryRun",
"filters": ["*string:~*req.request_type:TextPlainDryRun","*string:~*req.Msisdn:497700056231"],
"tenant": "cgrates.org",
"flags": ["*dryrun"],
"request_fields":[
],
"reply_fields":[
{"tag": "Field1", "field_id": "Variable1", "type": "*variable",
"value": "Hola1", "mandatory": true},
{"tag": "Field2", "field_id": "Variable2", "type": "*variable",
"value": "Hola2", "mandatory": true},
{"tag": "Field3", "field_id": "ComposedVar", "type": "*composed",
"value": "Test", "mandatory": true},
{"tag": "Field4", "field_id": "ComposedVar", "type": "*composed",
"value": "Composed", "mandatory": true},
{"tag": "Field5", "field_id": "Item1.1", "type": "*variable",
"value": "Val1", "mandatory": true},
],
"continue": true,
},
{
"id": "TextPlainDryRun2",
"filters": ["*string:~*req.request_type:TextPlainDryRun","*string:~*req.Msisdn:497700056231"],
"tenant": "cgrates.org",
"flags": ["*dryrun"],
"request_fields":[
],
"reply_fields":[
{"tag": "Field1", "field_id": "Item1.1", "type": "*variable",
"value": "Val2", "mandatory": true},
],
},
],
},
],
}

View File

@@ -0,0 +1,179 @@
{
// CGRateS Configuration file
//
"general": {
"log_level": 7,
},
"listen": {
"rpc_json": ":2012", // RPC JSON listening address
"rpc_gob": ":2013", // RPC GOB listening address
"http": ":2080", // HTTP listening address
},
"data_db": { // database used to store runtime data (eg: accounts, cdr stats)
"db_type": "mongo", // stor database type to use: <mysql|postgres>
"db_port": 27017, // the port to reach the stordb
"db_name": "datadb",
"db_password": "",
},
"stor_db": {
"db_type": "mongo", // stor database type to use: <mysql|postgres>
"db_port": 27017, // the port to reach the stordb
"db_name": "stordb",
"db_password": "",
},
"rals": {
"enabled": true,
},
"scheduler": {
"enabled": true,
},
"cdrs": {
"enabled": true,
"rals_conns": [
{"address": "*internal"}
],
},
"resources": {
"enabled": true,
},
"attributes": {
"enabled": true,
},
"suppliers": {
"enabled": true,
},
"chargers": {
"enabled": true,
},
"sessions": {
"enabled": true,
"attributes_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"cdrs_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"rals_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"resources_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"}
],
"chargers_conns": [
{"address": "*internal"}
],
"debit_interval": "10s",
},
"radius_agent": {
"enabled": true,
"sessions_conns": [
{"address": "127.0.0.1:2013", "transport": "*gob"} // connection towards SMG component for session management
],
"request_processors": [
{
"id": "KamailioAuth",
"filters": ["*string:~*vars.*radReqType:*radAuth"],
"flags": ["*auth", "*accounts"],
"request_fields":[
{"tag": "Category", "field_id": "Category", "type": "*constant", "value": "call"},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*prepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.Acct-Session-Id;-;~*req.Sip-From-Tag", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.User-Name", "mandatory": true},
{"tag": "Subject", "field_id": "Subject", "type": "*variable",
"value": "~*req.User-Name", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.Called-Station-Id", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed",
"value": "~*req.Event-Timestamp", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed",
"value": "~*req.Event-Timestamp", "mandatory": true},
],
"reply_fields":[
{"tag": "MaxUsage", "field_id": "SIP-AVP", "type": "*composed",
"value": "session_max_time#;~*cgrep.MaxUsage{*duration_seconds}", "mandatory": true},
],
},
{
"id": "KamailioAccountingStart",
"filters": ["*string:~*req.Acct-Status-Type:Start"],
"flags": ["*initiate", "*attributes", "*resources", "*accounts"],
"request_fields":[
{"tag": "Category", "field_id": "Category", "type": "*constant", "value": "call"},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*prepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.Acct-Session-Id;-;~*req.Sip-From-Tag;-;~*req.Sip-To-Tag", "mandatory": true},
{"tag": "OriginHost", "field_id": "OriginHost", "type": "*composed",
"value": "~*req.NAS-IP-Address", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.User-Name", "mandatory": true},
{"tag": "Subject", "field_id": "Subject", "type": "*variable",
"value": "~*req.User-Name", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.Called-Station-Id", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed",
"value": "~*req.Ascend-User-Acct-Time", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed",
"value": "~*req.Ascend-User-Acct-Time", "mandatory": true},
{"tag": "RemoteAddr" , "field_id": "RemoteAddr", "type": "*remote_host"},
],
"reply_fields":[],
},
{
"id": "KamailioAccountingStop",
"filters": ["*string:~*req.Acct-Status-Type:Stop"],
"flags": ["*terminate", "*resources", "*accounts", "*cdrs"],
"request_fields":[
{"tag": "Category", "field_id": "Category", "type": "*constant", "value": "call"},
{"tag": "RequestType", "field_id": "RequestType", "type": "*constant",
"value": "*prepaid", "mandatory": true},
{"tag": "OriginID", "field_id": "OriginID", "type": "*composed",
"value": "~*req.Acct-Session-Id;-;~*req.Sip-From-Tag;-;~*req.Sip-To-Tag", "mandatory": true},
{"tag": "OriginHost", "field_id": "OriginHost", "type": "*composed",
"value": "~*req.NAS-IP-Address", "mandatory": true},
{"tag": "Account", "field_id": "Account", "type": "*composed",
"value": "~*req.User-Name", "mandatory": true},
{"tag": "Subject", "field_id": "Subject", "type": "*variable",
"value": "~*req.User-Name", "mandatory": true},
{"tag": "Destination", "field_id": "Destination", "type": "*composed",
"value": "~*req.Called-Station-Id", "mandatory": true},
{"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed",
"value": "~*req.Ascend-User-Acct-Time", "mandatory": true},
{"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed",
"value": "~*req.Ascend-User-Acct-Time", "mandatory": true},
{"tag": "Usage", "field_id": "Usage", "type": "*usage_difference",
"value": "~*req.Event-Timestamp;~*req.Ascend-User-Acct-Time", "mandatory": true},
{"tag": "RemoteAddr" , "field_id": "RemoteAddr", "type": "*remote_host"},
],
"reply_fields":[],
},
],
},
"apier": {
"scheduler_conns": [ // connections to SchedulerS for reloads
{"address": "*internal"},
],
},
}

View File

@@ -20,9 +20,9 @@ ers=$?
echo 'go test github.com/cgrates/cgrates/general_tests -tags=integration -rpc=*gob'
go test github.com/cgrates/cgrates/general_tests -tags=integration -rpc=*gob
gnr=$?
# echo 'go test github.com/cgrates/cgrates/agents -tags=integration'
# go test github.com/cgrates/cgrates/agents -tags=integration
# agts=$?
echo 'go test github.com/cgrates/cgrates/agents -tags=integration -rpc=*gob'
go test github.com/cgrates/cgrates/agents -tags=integration -rpc=*gob
agts=$?
echo 'go test github.com/cgrates/cgrates/sessions -tags=integration -rpc=*gob'
go test github.com/cgrates/cgrates/sessions -tags=integration -rpc=*gob
smg=$?
@@ -33,4 +33,4 @@ echo 'go test github.com/cgrates/cgrates/loaders -tags=integration -rpc=*gob'
go test github.com/cgrates/cgrates/loaders -tags=integration -rpc=*gob
lds=$?
exit $gen && $ap1 && $ap2 && $en && $cdrc #&& $gnr && $agts && $smg && $dis && $lds && $ers
exit $gen && $ap1 && $ap2 && $en && $cdrc && $gnr && $agts && $smg #&& $dis && $lds && $ers