From fd0bec2e1069e5854da3e7cc8cc9d85174168e9c Mon Sep 17 00:00:00 2001 From: arberkatellari Date: Fri, 18 Nov 2022 18:51:32 -0500 Subject: [PATCH] Improving Coverage at Utils --- utils/librates_test.go | 86 ++++++++++++++++++++++++++++++++--------- utils/marshaler_test.go | 63 ++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 18 deletions(-) diff --git a/utils/librates_test.go b/utils/librates_test.go index fef58cc8f..778df0b4f 100644 --- a/utils/librates_test.go +++ b/utils/librates_test.go @@ -2406,8 +2406,19 @@ func TestMergeRate(t *testing.T) { } -// unfinished +type MockMarshaler struct{} + +func (MockMarshaler) Marshal(interface{}) ([]byte, error) { + return nil, ErrNotImplemented +} + +func (MockMarshaler) Unmarshal([]byte, interface{}) error { + return ErrNotImplemented +} + func TestAsDataDBMap(t *testing.T) { + + ms := MockMarshaler{} rp := &RateProfile{ FilterIDs: []string{"fltr1", "fltr2"}, Weights: DynamicWeights{{ @@ -2418,27 +2429,66 @@ func TestAsDataDBMap(t *testing.T) { MaxCost: NewDecimal(10, 0), MaxCostStrategy: "strategy", Rates: map[string]*Rate{ - "rat1": { - ID: "rat1", - FilterIDs: []string{"fltr1"}, - ActivationTimes: "* * * * *", - Weights: DynamicWeights{{}}, - Blocker: true, - IntervalRates: []*IntervalRate{{}}, - }, - "rat2": { - ID: "rat2", - }, - "rat3": {}, + "rat1": {ID: "rat1"}, "rat2": {ID: "rat2"}, }, } - // exp := map[FilterIDs:fltr1;fltr2 MaxCost:10 MaxCostStrategy:strategy MinCost:10 Rates:rat1:{"ID":"rat1","FilterIDs":["fltr1"],"ActivationTimes":"* * * * *","Weights":[{"FilterIDs":null,"Weight":0}],"Blocker":true,"IntervalRates":[{"IntervalStart":null,"FixedFee":null,"RecurrentFee":null,"Unit":null,"Increment":null}]} Rates:rat2:{"ID":"rat2","FilterIDs":null,"ActivationTimes":"","Weights":null,"Blocker":false,"IntervalRates":null} Rates:rat3:{"ID":"","FilterIDs":null,"ActivationTimes":"","Weights":null,"Blocker":false,"IntervalRates":null} Weights:;10] - if _, err := rp.AsDataDBMap(JSONMarshaler{}); err != nil { + exp := "{\"FilterIDs\":\"fltr1;fltr2\",\"MaxCost\":\"10\",\"MaxCostStrategy\":\"strategy\",\"MinCost\":\"10\",\"Rates:rat1\":\"{\\\"ID\\\":\\\"rat1\\\",\\\"FilterIDs\\\":null,\\\"ActivationTimes\\\":\\\"\\\",\\\"Weights\\\":null,\\\"Blocker\\\":false,\\\"IntervalRates\\\":null}\",\"Rates:rat2\":\"{\\\"ID\\\":\\\"rat2\\\",\\\"FilterIDs\\\":null,\\\"ActivationTimes\\\":\\\"\\\",\\\"Weights\\\":null,\\\"Blocker\\\":false,\\\"IntervalRates\\\":null}\",\"Weights\":\";10\"}" + + if rcv, err := rp.AsDataDBMap(JSONMarshaler{}); err != nil { t.Error(err) + } else if !reflect.DeepEqual(exp, ToJSON(rcv)) { + t.Errorf("Expected <%v %T>, \nReceived <%v %T>", exp, exp, ToJSON(rcv), ToJSON(rcv)) + } + + if _, err := rp.AsDataDBMap(ms); err == nil || err != ErrNotImplemented { + t.Errorf("Expected <%v>, Received <%v>", ErrNotImplemented, err) + } +} + +func TestNewRateProfileFromMapDataDBMap(t *testing.T) { + mapRP := map[string]interface{}{ + "FilterIDs": "fltrID1", + "Weights": "fltrID1;20", + "MinCost": "2", + "MaxCost": "10", + "Rates:rat1": "{\"ID\":\"rat1\",\"FilterIDs\":null,\"ActivationTimes\":\"\",\"Weights\":null,\"Blocker\":false,\"IntervalRates\":null}", + } + if rcv, err := NewRateProfileFromMapDataDBMap("cgrates.org", "ExID", mapRP, JSONMarshaler{}); err != nil { + t.Error(rcv, err) + } + + mapRP = map[string]interface{}{ + "FilterIDs": "fltrID1", + "Weights": "wrong", + } + expErr := "invalid DynamicWeight format for string " + if _, err := NewRateProfileFromMapDataDBMap("cgrates.org", "ExID", mapRP, JSONMarshaler{}); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, received <%v>", expErr, err) + } + mapRP = map[string]interface{}{ + "FilterIDs": "fltrID1", + "MinCost": "wrong", + } + expErr = "can't convert to decimal" + if _, err := NewRateProfileFromMapDataDBMap("cgrates.org", "ExID", mapRP, JSONMarshaler{}); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, received <%v>", expErr, err) + } + mapRP = map[string]interface{}{ + "FilterIDs": "fltrID1", + "MaxCost": "wrong", + } + expErr = "can't convert to decimal" + if _, err := NewRateProfileFromMapDataDBMap("cgrates.org", "ExID", mapRP, JSONMarshaler{}); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, received <%v>", expErr, err) + } + mapRP = map[string]interface{}{ + "FilterIDs": "fltrID1", + "Rates:rat1": "{\"ID\":\"rat1\",\"FilterIDs\":null,\"ActivationTimes\":\"\",\"Weights\":null,\"Blocker\":false,\"IntervalRates\":null}\",\"Rates:rat2\":\"{\"ID\":\"rat2\",\"FilterIDs\":null,\"ActivationTimes\":\"\",\"Weights\":null,\"Blocker\":false,\"IntervalRates\":null}\",\"Weights\":\";10\"}", + } + expErr = "invalid character '\"' after top-level value" + if _, err := NewRateProfileFromMapDataDBMap("cgrates.org", "ExID", mapRP, JSONMarshaler{}); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, received <%v>", expErr, err) } - // else if !reflect.DeepEqual(ToJSON(rp), ToJSON(rcv)) { - // t.Error(ToJSON(rcv)) - // } } diff --git a/utils/marshaler_test.go b/utils/marshaler_test.go index b4305538c..e4268b056 100644 --- a/utils/marshaler_test.go +++ b/utils/marshaler_test.go @@ -166,3 +166,66 @@ func TestNewBincMarshler(t *testing.T) { t.Errorf("Expected <%+v>, Received <%+v>", ToJSON(exp), ToJSON(rcv)) } } + +func TestCodecMsgpackMarshalerMarshal(t *testing.T) { + cmm := &CodecMsgpackMarshaler{&codec.MsgpackHandle{}} + v := "texted" + exp := []byte{166, 116, 101, 120, 116, 101, 100} + if rcv, err := cmm.Marshal(v); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(exp, rcv) { + t.Errorf("Expected <%v>, Received <%v>", exp, rcv) + } + +} + +func TestCodecMsgpackMarshalerUnmarshal(t *testing.T) { + cmm := &CodecMsgpackMarshaler{&codec.MsgpackHandle{}} + data := []byte{116, 101, 100} + v := "testv" + expErr := "[pos 1]: invalid container type: expecting bin|str|array" + if err := cmm.Unmarshal(data, v); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, Received <%v>", expErr, err) + } +} + +func TestBincMarshalerMarshal(t *testing.T) { + bm := &BincMarshaler{&codec.BincHandle{}} + v := "testinterface" + exp := []byte{64, 13, 116, 101, 115, 116, 105, 110, 116, 101, 114, 102, 97, 99, 101} + if rcv, err := bm.Marshal(v); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(exp, rcv) { + t.Errorf("Expected <%v>, Received <%v>", exp, rcv) + } +} +func TestBincMarshalerUnmarshal(t *testing.T) { + bm := &BincMarshaler{&codec.BincHandle{}} + v := "testinterce" + data := []byte{64, 13, 11, 115, 116, 105, 110, 116, 101, 114, 102, 97, 99, 101} + expErr := "unexpected EOF" + if err := bm.Unmarshal(data, v); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, Received <%v>", expErr, err) + } +} + +func TestGOBMarshalerMarshal(t *testing.T) { + v := "test" + gobm := GOBMarshaler{} + exp := []byte{7, 12, 0, 4, 116, 101, 115, 116} + if rcv, err := gobm.Marshal(v); err != nil { + t.Error(rcv, err) + } else if !reflect.DeepEqual(exp, rcv) { + t.Errorf("Expected <%v>, Received <%v>", exp, rcv) + } +} + +func TestGOBMarshalerUnmarshal(t *testing.T) { + gobm := GOBMarshaler{} + v := "testinterce" + data := []byte{64, 13, 11, 115, 116, 105, 110, 116, 101, 114, 102, 97, 99, 101} + expErr := "gob: attempt to decode into a non-pointer" + if err := gobm.Unmarshal(data, v); err == nil || err.Error() != expErr { + t.Errorf("Expected error <%v>, Received <%v>", expErr, err) + } +}