started smg data tests

This commit is contained in:
Radu Ioan Fericean
2016-03-22 22:04:26 +02:00
parent fbbc067a5d
commit e07acf23f7
10 changed files with 196 additions and 16 deletions

View File

@@ -4,4 +4,5 @@ cgrates.org,1002,PREPAID_10,STANDARD_TRIGGERS,,
cgrates.org,1003,PREPAID_10,STANDARD_TRIGGERS,,
cgrates.org,1004,PREPAID_10,STANDARD_TRIGGERS,,
cgrates.org,1005,PREPAID_10,STANDARD_TRIGGERS,,
cgrates.org,1009,TEST_EXE,,,
cgrates.org,1009,TEST_EXE,,,
cgrates.org,1010,TEST_DATA_r,,,
1 #Tenant Account ActionPlanId ActionTriggersId AllowNegative Disabled
4 cgrates.org 1003 PREPAID_10 STANDARD_TRIGGERS
5 cgrates.org 1004 PREPAID_10 STANDARD_TRIGGERS
6 cgrates.org 1005 PREPAID_10 STANDARD_TRIGGERS
7 cgrates.org 1009 TEST_EXE
8 cgrates.org 1010 TEST_DATA_r

View File

@@ -1,4 +1,5 @@
#Tag,ActionsTag,TimingTag,Weight
PREPAID_10,PREPAID_10,ASAP,10
PREPAID_10,BONUS_1,ASAP,10
TEST_EXE,TOPUP_EXE,ALWAYS,10
TEST_EXE,TOPUP_EXE,ALWAYS,10
TEST_DATA_r,TOPUP_DATA_r,ASAP,10
1 #Tag ActionsTag TimingTag Weight
2 PREPAID_10 PREPAID_10 ASAP 10
3 PREPAID_10 BONUS_1 ASAP 10
4 TEST_EXE TOPUP_EXE ALWAYS 10
5 TEST_DATA_r TOPUP_DATA_r ASAP 10

View File

@@ -4,4 +4,5 @@ BONUS_1,*topup,,,,*monetary,*out,,*any,,,*unlimited,,1,10,false,false,10
LOG_BALANCE,*log,,,,,,,,,,,,,,false,false,10
CDRST_WARN_HTTP,*call_url,http://localhost:8080,,,,,,,,,,,,,false,false,10
CDRST_LOG,*log,,,,,,,,,,,,,,false,false,10
TOPUP_EXE,*topup,,,,*monetary,*out,,*any,,,*unlimited,,5,10,false,false,10
TOPUP_EXE,*topup,,,,*monetary,*out,,*any,,,*unlimited,,5,10,false,false,10
TOPUP_DATA_r,*topup,,,,*data,*out,,DATA_DEST,,,*unlimited,,50000000000,10,false,false,10
1 #ActionsTag[0] Action[1] ActionExtraParameters[2] Filter[3] BalanceTag[4] BalanceType[5] Directions[6] Categories[7] DestinationIds[8] RatingSubject[9] SharedGroup[10] ExpiryTime[11] TimingTags[12] Units[13] BalanceWeight[14] BalanceBlocker[15] BalanceDisabled[16] Weight[17]
4 LOG_BALANCE *log false false 10
5 CDRST_WARN_HTTP *call_url http://localhost:8080 false false 10
6 CDRST_LOG *log false false 10
7 TOPUP_EXE *topup *monetary *out *any *unlimited 5 10 false false 10
8 TOPUP_DATA_r *topup *data *out DATA_DEST *unlimited 50000000000 10 false false 10

View File

@@ -3,3 +3,4 @@ DR_RETAIL,GERMANY,RT_1CENT,*up,4,0,
DR_RETAIL,GERMANY_MOBILE,RT_1CENT,*up,4,0,
DR_DATA_1,*any,RT_DATA_2c,*up,4,0,
DR_SMS_1,*any,RT_SMS_5c,*up,4,0,
DR_DATA_r,DATA_DEST,RT_DATA_r,*up,5,0,
1 #Tag DestinationsTag RatesTag RoundingMethod RoundingDecimals MaxCost MaxCostStrategy
3 DR_RETAIL GERMANY_MOBILE RT_1CENT *up 4 0
4 DR_DATA_1 *any RT_DATA_2c *up 4 0
5 DR_SMS_1 *any RT_SMS_5c *up 4 0
6 DR_DATA_r DATA_DEST RT_DATA_r *up 5 0

View File

@@ -3,3 +3,4 @@ GERMANY,+49
GERMANY_MOBILE,+4915
GERMANY_MOBILE,+4916
GERMANY_MOBILE,+4917
DATA_DEST,222
1 #Tag Prefix
3 GERMANY_MOBILE +4915
4 GERMANY_MOBILE +4916
5 GERMANY_MOBILE +4917
6 DATA_DEST 222

View File

@@ -2,3 +2,5 @@
RT_1CENT,0,1,1s,1s,0s
RT_DATA_2c,0,0.002,10,10,0
RT_SMS_5c,0,0.005,1,1,0
RT_DATA_r,0,0,1,10240000,0
RT_DATA_r,0,0,1,10240000,60
1 #Tag ConnectFee Rate RateUnit RateIncrement GroupIntervalStart
2 RT_1CENT 0 1 1s 1s 0s
3 RT_DATA_2c 0 0.002 10 10 0
4 RT_SMS_5c 0 0.005 1 1 0
5 RT_DATA_r 0 0 1 10240000 0
6 RT_DATA_r 0 0 1 10240000 60

View File

@@ -2,3 +2,4 @@
RP_RETAIL,DR_RETAIL,ALWAYS,10
RP_DATA1,DR_DATA_1,ALWAYS,10
RP_SMS1,DR_SMS_1,ALWAYS,10
RP_DATAr,DR_DATA_r,ALWAYS,10
1 #Tag DestinationRatesTag TimingTag Weight
2 RP_RETAIL DR_RETAIL ALWAYS 10
3 RP_DATA1 DR_DATA_1 ALWAYS 10
4 RP_SMS1 DR_SMS_1 ALWAYS 10
5 RP_DATAr DR_DATA_r ALWAYS 10

View File

@@ -2,3 +2,4 @@
*out,cgrates.org,call,*any,2012-01-01T00:00:00Z,RP_RETAIL,,
*out,cgrates.org,data,*any,2012-01-01T00:00:00Z,RP_DATA1,,
*out,cgrates.org,sms,*any,2012-01-01T00:00:00Z,RP_SMS1,,
*out,cgrates.org,data,*any,2016-01-01T00:00:00Z,RP_DATAr,,
1 #Direction Tenant Category Subject ActivationTime RatingPlanId RatesFallbackSubject CdrStatQueueIds
2 *out cgrates.org call *any 2012-01-01T00:00:00Z RP_RETAIL
3 *out cgrates.org data *any 2012-01-01T00:00:00Z RP_DATA1
4 *out cgrates.org sms *any 2012-01-01T00:00:00Z RP_SMS1
5 *out cgrates.org data *any 2016-01-01T00:00:00Z RP_DATAr

View File

@@ -0,0 +1,184 @@
package sessionmanager
import (
"flag"
"net/rpc"
"net/rpc/jsonrpc"
"path"
"testing"
"time"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
)
var testIntegration = flag.Bool("integration", false, "Perform the tests in integration mode, not by default.") // This flag will be passed here via "go test -local" args
var waitRater = flag.Int("wait_rater", 150, "Number of miliseconds to wait for rater to start and cache")
var dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here")
var daCfgPath string
var daCfg *config.CGRConfig
var smgRPC *rpc.Client
var err error
func TestSMGDataInitCfg(t *testing.T) {
if !*testIntegration {
return
}
daCfgPath = path.Join(*dataDir, "conf", "samples", "smg")
// Init config first
var err error
daCfg, err = config.NewCGRConfigFromFolder(daCfgPath)
if err != nil {
t.Error(err)
}
daCfg.DataFolderPath = *dataDir // Share DataFolderPath through config towards StoreDb for Flush()
config.SetCgrConfig(daCfg)
}
// Remove data in both rating and accounting db
func TestSMGDataResetDataDb(t *testing.T) {
if !*testIntegration {
return
}
if err := engine.InitDataDb(daCfg); err != nil {
t.Fatal(err)
}
}
// Wipe out the cdr database
func TestSMGDataResetStorDb(t *testing.T) {
if !*testIntegration {
return
}
if err := engine.InitStorDb(daCfg); err != nil {
t.Fatal(err)
}
}
// Start CGR Engine
func TestSMGDataStartEngine(t *testing.T) {
if !*testIntegration {
return
}
if _, err := engine.StopStartEngine(daCfgPath, *waitRater); err != nil {
t.Fatal(err)
}
}
// Connect rpc client to rater
func TestSMGDataApierRpcConn(t *testing.T) {
if !*testIntegration {
return
}
var err error
smgRPC, err = jsonrpc.Dial("tcp", daCfg.RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}
}
// Load the tariff plan, creating accounts and their balances
func TestSMGDataTPFromFolder(t *testing.T) {
if !*testIntegration {
return
}
attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "testtp")}
var loadInst engine.LoadInstance
if err := smgRPC.Call("ApierV2.LoadTariffPlanFromFolder", attrs, &loadInst); err != nil {
t.Error(err)
}
time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups
}
func TestSMGDataLastUsedNotFixed(t *testing.T) {
if !*testIntegration {
return
}
var acnt *engine.Account
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
eAcntVal := 6.59000
if err := smgRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MONETARY].GetTotalValue())
}
smgEv := SMGenericEvent{
utils.EVENT_NAME: "TEST_EVENT",
utils.TOR: utils.VOICE,
utils.ACCID: "12349",
utils.DIRECTION: utils.OUT,
utils.ACCOUNT: "1001",
utils.SUBJECT: "1001",
utils.DESTINATION: "1006",
utils.CATEGORY: "call",
utils.TENANT: "cgrates.org",
utils.REQTYPE: utils.META_PREPAID,
utils.SETUP_TIME: "2016-01-05 18:30:49",
utils.ANSWER_TIME: "2016-01-05 18:31:05",
utils.USAGE: "2m",
}
var maxUsage float64
if err := smgRPC.Call("SMGenericV1.SessionStart", smgEv, &maxUsage); err != nil {
t.Error(err)
}
if maxUsage != 120 {
t.Error("Bad max usage: ", maxUsage)
}
eAcntVal = 5.190020
if err := smgRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MONETARY].GetTotalValue())
}
smgEv = SMGenericEvent{
utils.EVENT_NAME: "TEST_EVENT",
utils.TOR: utils.VOICE,
utils.ACCID: "12349",
utils.DIRECTION: utils.OUT,
utils.ACCOUNT: "1001",
utils.SUBJECT: "1001",
utils.DESTINATION: "1006",
utils.CATEGORY: "call",
utils.TENANT: "cgrates.org",
utils.REQTYPE: utils.META_PREPAID,
utils.USAGE: "2m",
utils.LastUsed: "13s",
}
if err := smgRPC.Call("SMGenericV1.SessionUpdate", smgEv, &maxUsage); err != nil {
t.Error(err)
}
if maxUsage != 120 {
t.Error("Bad max usage: ", maxUsage)
}
eAcntVal = 5.123360
if err := smgRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MONETARY].GetTotalValue())
}
smgEv = SMGenericEvent{
utils.EVENT_NAME: "TEST_EVENT",
utils.TOR: utils.VOICE,
utils.ACCID: "12349",
utils.DIRECTION: utils.OUT,
utils.ACCOUNT: "1001",
utils.SUBJECT: "1001",
utils.DESTINATION: "1006",
utils.CATEGORY: "call",
utils.TENANT: "cgrates.org",
utils.REQTYPE: utils.META_PREPAID,
utils.LastUsed: "0s",
}
var rpl string
if err = smgRPC.Call("SMGenericV1.SessionEnd", smgEv, &rpl); err != nil || rpl != utils.OK {
t.Error(err)
}
eAcntVal = 5.590000
if err := smgRPC.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MONETARY].GetTotalValue())
}
}

View File

@@ -19,8 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package sessionmanager
import (
"flag"
"net/rpc"
"net/rpc/jsonrpc"
"path"
"testing"
@@ -31,15 +29,6 @@ import (
"github.com/cgrates/cgrates/utils"
)
var testIntegration = flag.Bool("integration", false, "Perform the tests in integration mode, not by default.") // This flag will be passed here via "go test -local" args
var waitRater = flag.Int("wait_rater", 150, "Number of miliseconds to wait for rater to start and cache")
var dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here")
var daCfgPath string
var daCfg *config.CGRConfig
var smgRPC *rpc.Client
var err error
func TestSMGInitCfg(t *testing.T) {
if !*testIntegration {
return
@@ -604,5 +593,3 @@ func TestSMGLastUsedNotFixed(t *testing.T) {
t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MONETARY].GetTotalValue())
}
}