From e4409e009a2ee3c662d2f4958b4eb6f171566bd1 Mon Sep 17 00:00:00 2001 From: adragusin Date: Thu, 2 Jul 2020 17:53:19 +0300 Subject: [PATCH 1/4] Removed unwanted print --- utils/dynamicdataprovider_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/utils/dynamicdataprovider_test.go b/utils/dynamicdataprovider_test.go index c79f50a1d..bf3129964 100644 --- a/utils/dynamicdataprovider_test.go +++ b/utils/dynamicdataprovider_test.go @@ -18,7 +18,6 @@ along with this program. If not, see package utils import ( - "fmt" "strings" "testing" ) @@ -252,5 +251,4 @@ func TestDynamicDataProviderGetFullFieldPath(t *testing.T) { if newpath == nil { t.Errorf("Expected: %v,received %q", nil, newpath) } - fmt.Println(*newpath) } From 60e9bee8aeb737c85e4321ea0e422022ff50353c Mon Sep 17 00:00:00 2001 From: adragusin Date: Thu, 2 Jul 2020 17:54:19 +0300 Subject: [PATCH 2/4] Added test for NewTimeStringConverter --- engine/model_helpers_test.go | 182 ++++++++++++++++++++++++++++++++++- utils/dataconverter_test.go | 71 ++++++++++++++ 2 files changed, 251 insertions(+), 2 deletions(-) diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index 012eda52c..06816da56 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -160,9 +160,7 @@ func TestTpDestinationsAPItoModelDestination(t *testing.T) { if !reflect.DeepEqual(rcv, eOut) { t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } - } - } func TestTpDestinationsAsTPDestinations(t *testing.T) { @@ -177,6 +175,144 @@ func TestTpDestinationsAsTPDestinations(t *testing.T) { } +func TestMapTPTimings(t *testing.T) { + var tps []*utils.ApierTPTiming + eOut := map[string]*utils.TPTiming{} + if rcv, err := MapTPTimings(tps); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", eOut, rcv) + } + + tps = []*utils.ApierTPTiming{ + &utils.ApierTPTiming{ + TPid: "TPid1", + ID: "ID1", + }, + } + eOut = map[string]*utils.TPTiming{ + "ID1": &utils.TPTiming{ + ID: "ID1", + Years: utils.Years{}, + Months: utils.Months{}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{}, + }, + } + if rcv, err := MapTPTimings(tps); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + } + tps = []*utils.ApierTPTiming{ + &utils.ApierTPTiming{ + TPid: "TPid1", + ID: "ID1", + Months: "1;2;3;4", + }, + } + eOut = map[string]*utils.TPTiming{ + "ID1": &utils.TPTiming{ + ID: "ID1", + Years: utils.Years{}, + Months: utils.Months{1, 2, 3, 4}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{}, + }, + } + if rcv, err := MapTPTimings(tps); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + } + //same id error + tps = []*utils.ApierTPTiming{ + &utils.ApierTPTiming{ + TPid: "TPid1", + ID: "ID1", + Months: "1;2;3;4", + }, + &utils.ApierTPTiming{ + TPid: "TPid1", + ID: "ID1", + Months: "1;2;3;4", + }, + } + eOut = map[string]*utils.TPTiming{ + "ID1": &utils.TPTiming{ + ID: "ID1", + Years: utils.Years{}, + Months: utils.Months{1, 2, 3, 4}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{}, + }, + } + if rcv, err := MapTPTimings(tps); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + } +} + +func TestAPItoModelTimings(t *testing.T) { + ts := []*utils.ApierTPTiming{} + eOut := TpTimings{} + if rcv := APItoModelTimings(ts); rcv != nil { + t.Errorf("Expecting: nil, received: %+v", utils.ToJSON(rcv)) + } + + ts = []*utils.ApierTPTiming{ + &utils.ApierTPTiming{ + TPid: "TPid1", + ID: "ID1", + Months: "1;2;3;4", + }, + } + eOut = TpTimings{ + TpTiming{ + Tpid: "TPid1", + Months: "1;2;3;4", + Tag: "ID1", + }, + } + if rcv := APItoModelTimings(ts); !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + } + ts = []*utils.ApierTPTiming{ + &utils.ApierTPTiming{ + TPid: "TPid1", + ID: "ID1", + Months: "1;2;3;4", + }, + &utils.ApierTPTiming{ + TPid: "TPid2", + ID: "ID2", + Months: "1;2;3;4", + MonthDays: "1;2;3;4;28", + Years: "2020;2019", + WeekDays: "4;5", + }, + } + eOut = TpTimings{ + TpTiming{ + Tpid: "TPid1", + Months: "1;2;3;4", + Tag: "ID1", + }, + TpTiming{ + Tpid: "TPid2", + Tag: "ID2", + Months: "1;2;3;4", + MonthDays: "1;2;3;4;28", + Years: "2020;2019", + WeekDays: "4;5", + }, + } + if rcv := APItoModelTimings(ts); !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + } +} + func TestTPRateAsExportSlice(t *testing.T) { tpRate := &utils.TPRateRALs{ TPid: "TEST_TPID", @@ -215,6 +351,48 @@ func TestTPRateAsExportSlice(t *testing.T) { } } +func TestAPItoModelRates(t *testing.T) { + rs := []*utils.TPRateRALs{} + eOut := TpRates{} + if rcv := APItoModelRates(rs); rcv != nil { + t.Errorf("Expecting: nil, received: %+v", utils.ToJSON(rcv)) + } + + rs = []*utils.TPRateRALs{ + &utils.TPRateRALs{ + ID: "SomeID", + TPid: "TPid", + RateSlots: []*utils.RateSlot{ + &utils.RateSlot{ + ConnectFee: 0.7, + Rate: 0.8, + }, + &utils.RateSlot{ + ConnectFee: 0.77, + Rate: 0.88, + }, + }, + }, + } + eOut = TpRates{ + TpRate{ + Tpid: "TPid", + Tag: "SomeID", + ConnectFee: 0.7, + Rate: 0.8, + }, + TpRate{ + Tpid: "TPid", + Tag: "SomeID", + ConnectFee: 0.77, + Rate: 0.88, + }, + } + if rcv := APItoModelRates(rs); !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + } +} + func TestTPDestinationRateAsExportSlice(t *testing.T) { tpDstRate := &utils.TPDestinationRate{ TPid: "TEST_TPID", diff --git a/utils/dataconverter_test.go b/utils/dataconverter_test.go index 2e262cba9..018af0d9e 100644 --- a/utils/dataconverter_test.go +++ b/utils/dataconverter_test.go @@ -711,3 +711,74 @@ func TestNewDataConverterMustCompile2(t *testing.T) { }() NewDataConverterMustCompile(MetaMultiply) } + +func TestNewTimeStringConverter(t *testing.T) { + //empty + eOut := &TimeStringConverter{Layout: EmptyString} + if rcv, err := NewTimeStringConverter(EmptyString); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", eOut, rcv) + } + + //default + eOut = &TimeStringConverter{Layout: time.RFC3339} + var rcv DataConverter + var err error + if rcv, err = NewTimeStringConverter(time.RFC3339); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", eOut, rcv) + } + exp := "2015-07-07T14:52:08Z" + if rcv, err := rcv.Convert("1436280728"); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("Expecting: %+v, received: %+v", exp, rcv) + } + exp = "2013-07-30T19:33:10Z" + if rcv, err := rcv.Convert("1375212790"); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("Expecting: %+v, received: %+v", exp, rcv) + } + + //other + eOut = &TimeStringConverter{"020106150400"} + if rcv, err = NewTimeStringConverter("020106150400"); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", eOut, rcv) + } + exp = "070715145200" + if rcv, err := rcv.Convert("1436280728"); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("Expecting: %+v, received: %+v", exp, rcv) + } + exp = "290720175900" + if rcv, err := rcv.Convert("2020-07-29T17:59:59Z"); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("Expecting: %+v, received: %+v", exp, rcv) + } + + //wrong cases + eOut = &TimeStringConverter{"not really a good time"} + if rcv, err = NewTimeStringConverter("not really a good time"); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(eOut, rcv) { + t.Errorf("Expecting: %+v, received: %+v", eOut, rcv) + } + exp = "not really a good time" + if rcv, err := rcv.Convert(EmptyString); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("Expecting: %+v, received: %+v", exp, rcv) + } + if rcv, err := rcv.Convert("1375212790"); err != nil { + t.Error(err) + } else if rcv.(string) != exp { + t.Errorf("Expecting: %+v, received: %+v", exp, rcv) + } +} From a2dd06d5ccd2acd921573070d12c9368427660db Mon Sep 17 00:00:00 2001 From: adragusin Date: Thu, 2 Jul 2020 17:55:00 +0300 Subject: [PATCH 3/4] Fixed NewTimeStringConverter --- utils/dataconverter.go | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/utils/dataconverter.go b/utils/dataconverter.go index 19cde7bf6..29abdb234 100644 --- a/utils/dataconverter.go +++ b/utils/dataconverter.go @@ -341,19 +341,9 @@ func (*SIPURIMethodConverter) Convert(in interface{}) (out interface{}, err erro } func NewTimeStringConverter(params string) (hdlr DataConverter, err error) { - tS := new(TimeStringConverter) - var paramsSplt []string - if params != EmptyString { - paramsSplt = strings.Split(params, InInFieldSep) - } - switch len(paramsSplt) { - case 1: - tS.Layout = paramsSplt[0] - default: - return nil, fmt.Errorf("invalid %s converter parameters: <%s>", - MetaTimeString, params) - } - return tS, nil + tm := new(TimeStringConverter) + tm.Layout = params + return tm, nil } type TimeStringConverter struct { From 06a9f1b8e49e19bb1fac2e01d02a1b0fcf30d91d Mon Sep 17 00:00:00 2001 From: adragusin Date: Thu, 2 Jul 2020 18:00:38 +0300 Subject: [PATCH 4/4] Updated a test --- engine/model_helpers_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index 06816da56..8b126dc3e 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -247,10 +247,8 @@ func TestMapTPTimings(t *testing.T) { WeekDays: utils.WeekDays{}, }, } - if rcv, err := MapTPTimings(tps); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eOut, rcv) { - t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + if _, err := MapTPTimings(tps); err == nil || err.Error() != "duplicate timing tag: ID1" { + t.Errorf("Expecting: nil, received: %+v", err) } }