mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 02:26:26 +05:00
Merge fixes
This commit is contained in:
@@ -20,6 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
package v1
|
||||
|
||||
import (
|
||||
"github.com/cgrates/cgrates/config"
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
"math/rand"
|
||||
"net/rpc"
|
||||
"net/rpc/jsonrpc"
|
||||
@@ -27,10 +30,6 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/config"
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -47,12 +46,14 @@ var evs = []*engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event1",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local()}},
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(),
|
||||
}},
|
||||
&engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event2",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local()}},
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(),
|
||||
}},
|
||||
&engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event3",
|
||||
@@ -75,7 +76,6 @@ var sTestsStatSV1 = []func(t *testing.T){
|
||||
testV1STSSetStatQueueProfile,
|
||||
testV1STSUpdateStatQueueProfile,
|
||||
testV1STSRemoveStatQueueProfile,
|
||||
//testV1STSGetStatQueueProfileAfterRemove,
|
||||
testV1STSStopEngine,
|
||||
}
|
||||
|
||||
@@ -149,9 +149,12 @@ func testV1STSGetStats(t *testing.T) {
|
||||
expectedMetrics := map[string]string{
|
||||
utils.MetaASR: utils.NOT_AVAILABLE,
|
||||
utils.MetaACD: utils.NOT_AVAILABLE,
|
||||
utils.MetaTCC: utils.NOT_AVAILABLE,
|
||||
utils.MetaTCD: utils.NOT_AVAILABLE,
|
||||
utils.MetaACC: utils.NOT_AVAILABLE,
|
||||
}
|
||||
if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics",
|
||||
&utils.TenantID{"cgrates.org", expectedIDs[0]}, &metrics); err != nil {
|
||||
&utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, &metrics); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expectedMetrics, metrics) {
|
||||
t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics)
|
||||
@@ -160,51 +163,52 @@ func testV1STSGetStats(t *testing.T) {
|
||||
|
||||
func testV1STSProcessEvent(t *testing.T) {
|
||||
var reply string
|
||||
if err := stsV1Rpc.Call("StatSV1.ProcessEvent",
|
||||
engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event1",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
utils.USAGE: time.Duration(125 * time.Second)}},
|
||||
&reply); err != nil {
|
||||
ev1 := engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event1",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ACCOUNT: "1001",
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
utils.USAGE: time.Duration(135 * time.Second),
|
||||
utils.COST: 123.0}}
|
||||
if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev1, &reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("received reply: %s", reply)
|
||||
}
|
||||
if err := stsV1Rpc.Call("StatSV1.ProcessEvent",
|
||||
engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event2",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ACCOUNT: "1002",
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
utils.USAGE: time.Duration(45 * time.Second)}},
|
||||
&reply); err != nil {
|
||||
ev2 := engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event2",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ACCOUNT: "1002",
|
||||
utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
utils.USAGE: time.Duration(45 * time.Second)}}
|
||||
if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev2, &reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("received reply: %s", reply)
|
||||
}
|
||||
if err := stsV1Rpc.Call("StatSV1.ProcessEvent",
|
||||
engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event3",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ACCOUNT: "1002",
|
||||
utils.SETUP_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
utils.USAGE: 0}},
|
||||
&reply); err != nil {
|
||||
ev3 := engine.StatEvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "event3",
|
||||
Fields: map[string]interface{}{
|
||||
utils.ACCOUNT: "1002",
|
||||
utils.SETUP_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
utils.USAGE: 0}}
|
||||
if err := stsV1Rpc.Call("StatSV1.ProcessEvent", &ev3, &reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("received reply: %s", reply)
|
||||
}
|
||||
expectedMetrics := map[string]string{
|
||||
utils.MetaASR: "66.66667%",
|
||||
utils.MetaACD: "170s",
|
||||
utils.MetaACD: "1m30s",
|
||||
utils.MetaACC: "61.5",
|
||||
utils.MetaTCD: "3m0s",
|
||||
utils.MetaTCC: "123",
|
||||
}
|
||||
var metrics map[string]string
|
||||
if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{"cgrates.org", "STATS_1"}, &metrics); err != nil {
|
||||
if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{Tenant: "cgrates.org", ID: "STATS_1"}, &metrics); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expectedMetrics, metrics) {
|
||||
t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics)
|
||||
@@ -332,14 +336,4 @@ func BenchmarkStatSV1SetEvent(b *testing.B) {
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkStatSV1GetQueueStringMetrics 20000 94607 ns/op
|
||||
func BenchmarkStatSV1GetQueueStringMetrics(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var metrics map[string]string
|
||||
if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", "Stats1",
|
||||
&metrics); err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
// BenchmarkStatSV1GetQueueStringMetrics 20000
|
||||
@@ -1,2 +1,2 @@
|
||||
#Tenant[0],Id[1],FilterType[2],FilterFieldName[3],FilterFieldValues[4],ActivationInterval[5],QueueLength[6],TTL[7],Metrics[8],Blocker[9],Stored[10],Weight[11],Thresholds[12]
|
||||
cgrates.org,Stats1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acd;*acc,true,true,20,THRESH1;THRESH2
|
||||
cgrates.org,Stats1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acd;*acc;*tcd;*tcc,true,true,20,THRESH1;THRESH2
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
#Tenant[0],Id[1],FilterType[2],FilterFieldName[3],FilterFieldValues[4],ActivationInterval[5],QueueLength[6],TTL[7],Metrics[8],Blocker[9],Stored[10],Weight[11],Thresholds[12]
|
||||
cgrates.org,STATS_1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acd,true,true,20,THRESH1;THRESH2
|
||||
cgrates.org,STATS_1,*string,Account,1001;1002,2014-07-29T15:00:00Z,100,1s,*asr;*acc;*tcc;*acd;*tcd,true,true,20,THRESH1;THRESH2
|
||||
|
||||
|
@@ -83,6 +83,9 @@ func (se StatEvent) Usage(timezone string) (at time.Duration, err error) {
|
||||
if us, canCast := usIf.(time.Duration); canCast {
|
||||
return us, nil
|
||||
}
|
||||
if us, canCast := usIf.(float64); canCast {
|
||||
return time.Duration(int64(us)), nil
|
||||
}
|
||||
usStr, canCast := usIf.(string)
|
||||
if !canCast {
|
||||
return at, errors.New("cannot cast to string")
|
||||
@@ -96,8 +99,8 @@ func (se StatEvent) Cost(timezone string) (cs float64, err error) {
|
||||
if !has {
|
||||
return cs, utils.ErrNotFound
|
||||
}
|
||||
if cs, canCast := csIf.(float64); canCast {
|
||||
return cs, nil
|
||||
if val, canCast := csIf.(float64); canCast {
|
||||
return val, nil
|
||||
}
|
||||
csStr, canCast := csIf.(string)
|
||||
if !canCast {
|
||||
|
||||
@@ -181,8 +181,7 @@ func (acd *StatACD) GetFloat64Value() (v float64) {
|
||||
|
||||
func (acd *StatACD) AddEvent(ev *StatEvent) (err error) {
|
||||
var value time.Duration
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
err != utils.ErrNotFound {
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil {
|
||||
return err
|
||||
} else if !at.IsZero() {
|
||||
if duration, err := ev.Usage(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
@@ -264,8 +263,7 @@ func (tcd *StatTCD) GetFloat64Value() (v float64) {
|
||||
|
||||
func (tcd *StatTCD) AddEvent(ev *StatEvent) (err error) {
|
||||
var value time.Duration
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
err != utils.ErrNotFound {
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil {
|
||||
return err
|
||||
} else if !at.IsZero() {
|
||||
if duration, err := ev.Usage(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
@@ -323,7 +321,7 @@ func (acc *StatACC) getValue() float64 {
|
||||
if acc.Count == 0 {
|
||||
acc.val = utils.Float64Pointer(float64(STATS_NA))
|
||||
} else {
|
||||
acc.val = utils.Float64Pointer(utils.Round((acc.Sum / acc.Count * 100),
|
||||
acc.val = utils.Float64Pointer(utils.Round((acc.Sum / acc.Count),
|
||||
config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE))
|
||||
}
|
||||
}
|
||||
@@ -334,7 +332,8 @@ func (acc *StatACC) GetStringValue(fmtOpts string) (val string) {
|
||||
if acc.Count == 0 {
|
||||
return utils.NOT_AVAILABLE
|
||||
}
|
||||
return fmt.Sprintf("%s", strconv.FormatFloat(acc.getValue(), 'E', -1, 64))
|
||||
return strconv.FormatFloat(acc.getValue(), 'f', -1, 64)
|
||||
|
||||
}
|
||||
|
||||
func (acc *StatACC) GetValue() (v interface{}) {
|
||||
@@ -347,8 +346,7 @@ func (acc *StatACC) GetFloat64Value() (v float64) {
|
||||
|
||||
func (acc *StatACC) AddEvent(ev *StatEvent) (err error) {
|
||||
var value float64
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
err != utils.ErrNotFound {
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil {
|
||||
return err
|
||||
} else if !at.IsZero() {
|
||||
if cost, err := ev.Cost(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
@@ -416,7 +414,7 @@ func (tcc *StatTCC) GetStringValue(fmtOpts string) (val string) {
|
||||
if tcc.Count == 0 {
|
||||
return utils.NOT_AVAILABLE
|
||||
}
|
||||
return fmt.Sprintf("%s", strconv.FormatFloat(tcc.getValue(), 'E', -1, 64))
|
||||
return strconv.FormatFloat(tcc.getValue(), 'f', -1, 64)
|
||||
}
|
||||
|
||||
func (tcc *StatTCC) GetValue() (v interface{}) {
|
||||
@@ -429,8 +427,7 @@ func (tcc *StatTCC) GetFloat64Value() (v float64) {
|
||||
|
||||
func (tcc *StatTCC) AddEvent(ev *StatEvent) (err error) {
|
||||
var value float64
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
err != utils.ErrNotFound {
|
||||
if at, err := ev.AnswerTime(config.CgrConfig().DefaultTimezone); err != nil {
|
||||
return err
|
||||
} else if !at.IsZero() {
|
||||
if cost, err := ev.Cost(config.CgrConfig().DefaultTimezone); err != nil &&
|
||||
|
||||
@@ -119,7 +119,7 @@ func TestACDGetStringValue(t *testing.T) {
|
||||
acd, _ := NewACD()
|
||||
ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1",
|
||||
Fields: map[string]interface{}{
|
||||
"Usage": time.Duration(10 * time.Second),
|
||||
utils.USAGE: time.Duration(10 * time.Second),
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
}}
|
||||
if strVal := acd.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
@@ -133,15 +133,15 @@ func TestACDGetStringValue(t *testing.T) {
|
||||
ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"}
|
||||
acd.AddEvent(ev2)
|
||||
acd.AddEvent(ev3)
|
||||
if strVal := acd.GetStringValue(""); strVal != "3.333333333s" {
|
||||
if strVal := acd.GetStringValue(""); strVal != "10s" {
|
||||
t.Errorf("wrong acd value: %s", strVal)
|
||||
}
|
||||
acd.RemEvent(ev3.TenantID())
|
||||
if strVal := acd.GetStringValue(""); strVal != "5s" {
|
||||
if strVal := acd.GetStringValue(""); strVal != "10s" {
|
||||
t.Errorf("wrong acd value: %s", strVal)
|
||||
}
|
||||
acd.RemEvent(ev.TenantID())
|
||||
if strVal := acd.GetStringValue(""); strVal != "0s" {
|
||||
if strVal := acd.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
t.Errorf("wrong acd value: %s", strVal)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
@@ -157,11 +157,11 @@ func TestACDGetStringValue(t *testing.T) {
|
||||
},
|
||||
}
|
||||
acd.AddEvent(ev4)
|
||||
if strVal := acd.GetStringValue(""); strVal != "30s" {
|
||||
if strVal := acd.GetStringValue(""); strVal != "1m0s" {
|
||||
t.Errorf("wrong acd value: %s", strVal)
|
||||
}
|
||||
acd.AddEvent(ev5)
|
||||
if strVal := acd.GetStringValue(""); strVal != "50s" {
|
||||
if strVal := acd.GetStringValue(""); strVal != "1m15s" {
|
||||
t.Errorf("wrong acd value: %s", strVal)
|
||||
}
|
||||
acd.RemEvent(ev2.TenantID())
|
||||
@@ -184,48 +184,48 @@ func TestACDGetFloat64Value(t *testing.T) {
|
||||
"Usage": time.Duration(10 * time.Second)}}
|
||||
acd.AddEvent(ev)
|
||||
if v := acd.GetFloat64Value(); v != 10.0 {
|
||||
t.Errorf("wrong acd value: %f", v)
|
||||
t.Errorf("wrong acd value: %v", v)
|
||||
}
|
||||
ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"}
|
||||
acd.AddEvent(ev2)
|
||||
if v := acd.GetFloat64Value(); v != 5.0 {
|
||||
t.Errorf("wrong acd value: %f", v)
|
||||
if v := acd.GetFloat64Value(); v != 10.0 {
|
||||
t.Errorf("wrong acd value: %v", v)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
Fields: map[string]interface{}{
|
||||
"Usage": time.Duration(1 * time.Minute),
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"AnswerTime": time.Date(2015, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
},
|
||||
}
|
||||
ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5",
|
||||
Fields: map[string]interface{}{
|
||||
"Usage": time.Duration(1*time.Minute + 30*time.Second),
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"AnswerTime": time.Date(2015, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
},
|
||||
}
|
||||
acd.AddEvent(ev4)
|
||||
if strVal := acd.GetFloat64Value(); strVal != 23.333333333 {
|
||||
t.Errorf("wrong acd value: %f", strVal)
|
||||
if strVal := acd.GetFloat64Value(); strVal != 35.0 {
|
||||
t.Errorf("wrong acd value: %v", strVal)
|
||||
}
|
||||
acd.AddEvent(ev5)
|
||||
if strVal := acd.GetFloat64Value(); strVal != 40.0 {
|
||||
t.Errorf("wrong acd value: %f", strVal)
|
||||
if strVal := acd.GetFloat64Value(); strVal != 53.333333333 {
|
||||
t.Errorf("wrong acd value: %v", strVal)
|
||||
}
|
||||
acd.RemEvent(ev2.TenantID())
|
||||
if strVal := acd.GetFloat64Value(); strVal != 53.333333333 {
|
||||
t.Errorf("wrong acd value: %f", strVal)
|
||||
t.Errorf("wrong acd value: %v", strVal)
|
||||
}
|
||||
acd.RemEvent(ev4.TenantID())
|
||||
if strVal := acd.GetFloat64Value(); strVal != 50.0 {
|
||||
t.Errorf("wrong acd value: %f", strVal)
|
||||
t.Errorf("wrong acd value: %v", strVal)
|
||||
}
|
||||
acd.RemEvent(ev.TenantID())
|
||||
if strVal := acd.GetFloat64Value(); strVal != 90.0 {
|
||||
t.Errorf("wrong acd value: %f", strVal)
|
||||
t.Errorf("wrong acd value: %v", strVal)
|
||||
}
|
||||
acd.RemEvent(ev5.TenantID())
|
||||
if strVal := acd.GetFloat64Value(); strVal != -1.0 {
|
||||
t.Errorf("wrong acd value: %f", strVal)
|
||||
t.Errorf("wrong acd value: %v", strVal)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,15 +246,15 @@ func TestACDGetValue(t *testing.T) {
|
||||
ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"}
|
||||
acd.AddEvent(ev2)
|
||||
acd.AddEvent(ev3)
|
||||
if v := acd.GetValue(); v != time.Duration(6*time.Second) {
|
||||
if v := acd.GetValue(); v != time.Duration(9*time.Second) {
|
||||
t.Errorf("wrong acd value: %+v", v)
|
||||
}
|
||||
acd.RemEvent(ev.TenantID())
|
||||
if v := acd.GetValue(); v != time.Duration(4*time.Second) {
|
||||
if v := acd.GetValue(); v != time.Duration(8*time.Second) {
|
||||
t.Errorf("wrong acd value: %+v", v)
|
||||
}
|
||||
acd.RemEvent(ev2.TenantID())
|
||||
if v := acd.GetValue(); v != time.Duration(0*time.Second) {
|
||||
if v := acd.GetValue(); v != time.Duration((-1)*time.Nanosecond) {
|
||||
t.Errorf("wrong acd value: %+v", v)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
@@ -271,12 +271,12 @@ func TestACDGetValue(t *testing.T) {
|
||||
}
|
||||
acd.AddEvent(ev4)
|
||||
acd.AddEvent(ev5)
|
||||
if v := acd.GetValue(); v != time.Duration(1*time.Minute+50*time.Second) {
|
||||
if v := acd.GetValue(); v != time.Duration(2*time.Minute+45*time.Second) {
|
||||
t.Errorf("wrong acd value: %+v", v)
|
||||
}
|
||||
acd.RemEvent(ev5.TenantID())
|
||||
acd.RemEvent(ev4.TenantID())
|
||||
if v := acd.GetValue(); v != time.Duration(0*time.Second) {
|
||||
if v := acd.GetValue(); v != time.Duration((-1)*time.Nanosecond) {
|
||||
t.Errorf("wrong acd value: %+v", v)
|
||||
}
|
||||
acd.RemEvent(ev3.TenantID())
|
||||
@@ -315,7 +315,7 @@ func TestTCDGetStringValue(t *testing.T) {
|
||||
t.Errorf("wrong tcd value: %s", strVal)
|
||||
}
|
||||
tcd.RemEvent(ev.TenantID())
|
||||
if strVal := tcd.GetStringValue(""); strVal != "0s" {
|
||||
if strVal := tcd.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
t.Errorf("wrong tcd value: %s", strVal)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
@@ -424,7 +424,7 @@ func TestTCDGetValue(t *testing.T) {
|
||||
t.Errorf("wrong tcd value: %+v", v)
|
||||
}
|
||||
tcd.RemEvent(ev2.TenantID())
|
||||
if v := tcd.GetValue(); v != time.Duration(0*time.Second) {
|
||||
if v := tcd.GetValue(); v != time.Duration((-1)*time.Nanosecond) {
|
||||
t.Errorf("wrong tcd value: %+v", v)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
@@ -446,7 +446,7 @@ func TestTCDGetValue(t *testing.T) {
|
||||
}
|
||||
tcd.RemEvent(ev5.TenantID())
|
||||
tcd.RemEvent(ev4.TenantID())
|
||||
if v := tcd.GetValue(); v != time.Duration(0*time.Second) {
|
||||
if v := tcd.GetValue(); v != time.Duration((-1)*time.Nanosecond) {
|
||||
t.Errorf("wrong tcd value: %+v", v)
|
||||
}
|
||||
tcd.RemEvent(ev3.TenantID())
|
||||
@@ -454,3 +454,205 @@ func TestTCDGetValue(t *testing.T) {
|
||||
t.Errorf("wrong tcd value: %+v", v)
|
||||
}
|
||||
}
|
||||
|
||||
func TestACCGetStringValue(t *testing.T) {
|
||||
acc, _ := NewACC()
|
||||
ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 12.3}}
|
||||
if strVal := acc.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
acc.AddEvent(ev)
|
||||
if strVal := acc.GetStringValue(""); strVal != "12.3" {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"}
|
||||
ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"}
|
||||
acc.AddEvent(ev2)
|
||||
acc.AddEvent(ev3)
|
||||
if strVal := acc.GetStringValue(""); strVal != "12.3" {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
acc.RemEvent(ev3.TenantID())
|
||||
if strVal := acc.GetStringValue(""); strVal != "12.3" {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 5.6}}
|
||||
ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 1.2}}
|
||||
acc.AddEvent(ev4)
|
||||
acc.AddEvent(ev5)
|
||||
acc.RemEvent(ev.TenantID())
|
||||
if strVal := acc.GetStringValue(""); strVal != "3.4" {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
acc.RemEvent(ev2.TenantID())
|
||||
if strVal := acc.GetStringValue(""); strVal != "3.4" {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
acc.RemEvent(ev4.TenantID())
|
||||
acc.RemEvent(ev5.TenantID())
|
||||
if strVal := acc.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
t.Errorf("wrong acc value: %s", strVal)
|
||||
}
|
||||
}
|
||||
|
||||
func TestACCGetValue(t *testing.T) {
|
||||
acc, _ := NewACC()
|
||||
ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": "12.3"}}
|
||||
if strVal := acc.GetValue(); strVal != -1.0 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
acc.AddEvent(ev)
|
||||
if strVal := acc.GetValue(); strVal != 12.3 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"}
|
||||
ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3"}
|
||||
acc.AddEvent(ev2)
|
||||
acc.AddEvent(ev3)
|
||||
if strVal := acc.GetValue(); strVal != 12.3 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
acc.RemEvent(ev3.TenantID())
|
||||
if strVal := acc.GetValue(); strVal != 12.3 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": "5.6"}}
|
||||
ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": "1.2"}}
|
||||
acc.AddEvent(ev4)
|
||||
acc.AddEvent(ev5)
|
||||
acc.RemEvent(ev.TenantID())
|
||||
if strVal := acc.GetValue(); strVal != 3.4 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
acc.RemEvent(ev2.TenantID())
|
||||
if strVal := acc.GetValue(); strVal != 3.4 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
acc.RemEvent(ev4.TenantID())
|
||||
acc.RemEvent(ev5.TenantID())
|
||||
if strVal := acc.GetValue(); strVal != -1.0 {
|
||||
t.Errorf("wrong acc value: %v", strVal)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTCCGetStringValue(t *testing.T) {
|
||||
tcc, _ := NewTCC()
|
||||
ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 12.3}}
|
||||
if strVal := tcc.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
tcc.AddEvent(ev)
|
||||
if strVal := tcc.GetStringValue(""); strVal != "12.3" {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"}
|
||||
ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 5.7}}
|
||||
tcc.AddEvent(ev2)
|
||||
tcc.AddEvent(ev3)
|
||||
if strVal := tcc.GetStringValue(""); strVal != "18" {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
tcc.RemEvent(ev3.TenantID())
|
||||
if strVal := tcc.GetStringValue(""); strVal != "12.3" {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 5.6}}
|
||||
ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 1.2}}
|
||||
tcc.AddEvent(ev4)
|
||||
tcc.AddEvent(ev5)
|
||||
tcc.RemEvent(ev.TenantID())
|
||||
if strVal := tcc.GetStringValue(""); strVal != "6.8" {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
tcc.RemEvent(ev2.TenantID())
|
||||
if strVal := tcc.GetStringValue(""); strVal != "6.8" {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
tcc.RemEvent(ev4.TenantID())
|
||||
tcc.RemEvent(ev5.TenantID())
|
||||
if strVal := tcc.GetStringValue(""); strVal != utils.NOT_AVAILABLE {
|
||||
t.Errorf("wrong tcc value: %s", strVal)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTCCGetValue(t *testing.T) {
|
||||
tcc, _ := NewTCC()
|
||||
ev := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_1",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": "12.3"}}
|
||||
if strVal := tcc.GetValue(); strVal != -1.0 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
tcc.AddEvent(ev)
|
||||
if strVal := tcc.GetValue(); strVal != 12.3 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
ev2 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_2"}
|
||||
ev3 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_3",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": 1.2}}
|
||||
tcc.AddEvent(ev2)
|
||||
tcc.AddEvent(ev3)
|
||||
if strVal := tcc.GetValue(); strVal != 13.5 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
tcc.RemEvent(ev3.TenantID())
|
||||
if strVal := tcc.GetValue(); strVal != 12.3 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
ev4 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_4",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": "5.6"}}
|
||||
ev5 := &StatEvent{Tenant: "cgrates.org", ID: "EVENT_5",
|
||||
Fields: map[string]interface{}{
|
||||
"AnswerTime": time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
|
||||
"Cost": "1.2"}}
|
||||
tcc.AddEvent(ev4)
|
||||
tcc.AddEvent(ev5)
|
||||
tcc.RemEvent(ev.TenantID())
|
||||
if strVal := tcc.GetValue(); strVal != 6.8 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
tcc.RemEvent(ev2.TenantID())
|
||||
if strVal := tcc.GetValue(); strVal != 6.8 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
tcc.RemEvent(ev4.TenantID())
|
||||
tcc.RemEvent(ev5.TenantID())
|
||||
if strVal := tcc.GetValue(); strVal != -1.0 {
|
||||
t.Errorf("wrong tcc value: %v", strVal)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user