From fba94efc2bc0a5d703274911fb697328c2ddc95a Mon Sep 17 00:00:00 2001 From: nickolasdaniel Date: Thu, 8 Apr 2021 13:34:09 +0300 Subject: [PATCH] Coverage tests for config, agents, engine --- agents/agentreq_test.go | 30 ++++++++++ config/configsanity_test.go | 115 ++++++++++++++++++++++++++++++++++++ engine/cdr_test.go | 60 +++++++++++++++++++ 3 files changed, 205 insertions(+) diff --git a/agents/agentreq_test.go b/agents/agentreq_test.go index a1a9429be..b7e3c3b29 100644 --- a/agents/agentreq_test.go +++ b/agents/agentreq_test.go @@ -2190,3 +2190,33 @@ func TestAgReqSetFieldsFromCfg(t *testing.T) { } } + +func TestFieldAsInterface(t *testing.T) { + fldPath := []string{utils.MetaOpts, utils.AccountField} + ar := &AgentRequest{ + Request: nil, + Vars: &utils.DataNode{}, + CGRRequest: &utils.OrderedNavigableMap{}, + diamreq: nil, + tmp: &utils.DataNode{}, + Opts: utils.MapStorage{ + utils.AccountField: "Field1", + }, + } + + rcv, err := ar.FieldAsInterface(fldPath) + rcvExpect := ar.Opts[utils.AccountField] + if err != nil { + t.Error(err) + } else if rcv != rcvExpect { + t.Errorf("Expected %v but received %v", rcvExpect, rcv) + } + + //default case + fldPath = []string{utils.MetaNone} + _, err = ar.FieldAsInterface(fldPath) + errExpect := "unsupported field prefix: <*none>" + if err == nil || err.Error() != errExpect { + t.Errorf("Expected %v but received %v", errExpect, err) + } +} diff --git a/config/configsanity_test.go b/config/configsanity_test.go index 31d9f5239..7e1b7521e 100644 --- a/config/configsanity_test.go +++ b/config/configsanity_test.go @@ -1301,6 +1301,8 @@ func TestConfigSanityEventReader(t *testing.T) { }, }, } + + //CacheDumpFields expected = " MANDATORY_IE_MISSING: [Path] for at SessionId" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) @@ -1310,6 +1312,79 @@ func TestConfigSanityEventReader(t *testing.T) { if err := cfg.CheckConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } + + cfg.ersCfg.Readers[0].CacheDumpFields[0].Path = "~Field1..Field2[0]" + expected = " Empty field path for ~Field1..Field2[0] at Path" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.ersCfg.Readers[0].CacheDumpFields[0].Value = RSRParsers{ + &RSRParser{ + Rules: "~*req.Session-Id2", + path: "~Field1..Field2[0]", + }, + } + cfg.ersCfg.Readers[0].CacheDumpFields[0].Path = "~Field1.Field3[0]" + cfg.ersCfg.Readers[0].CacheDumpFields[0].Type = utils.MetaUnixTimestamp + expected = " Empty field path for ~Field1..Field2[0] at Values of cache_dump_fields" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.ersCfg.Readers[0].CacheDumpFields[0].Type = utils.MetaNone + cfg.ersCfg.Readers[0].CacheDumpFields[0].Value = RSRParsers{ + &RSRParser{ + Rules: "~*req.Session-Id2", + path: "~Field1.Field2[0]", + }, + } + cfg.ersCfg.Readers[0].CacheDumpFields[0].Filters = []string{"*empty:~Field1..Field2[0]:*Test3:*Test4"} + expected = " Empty field path for <*empty:~Field1..Field2[0]:*Test3:*Test4> for [*empty:~Field1..Field2[0]:*Test3:*Test4] at cache_dump_fields" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.ersCfg.Readers[0].CacheDumpFields[0].Filters = nil + + //Fields + cfg.ersCfg.Readers[0].Fields[0].Path = "~Field1..Field2[0]" + expected = " Empty field path for ~Field1..Field2[0] at Path" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.ersCfg.Readers[0].Fields[0].Value = RSRParsers{ + &RSRParser{ + Rules: "~*req.Session-Id2", + path: "~Field1..Field2[0]", + }, + } + cfg.ersCfg.Readers[0].Fields[0].Path = "~Field1.Field3[0]" + cfg.ersCfg.Readers[0].Fields[0].Type = utils.MetaUnixTimestamp + expected = " Empty field path for ~Field1..Field2[0] at Values of fields" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.ersCfg.Readers[0].Fields[0].Type = utils.MetaNone + cfg.ersCfg.Readers[0].Fields[0].Value = RSRParsers{ + &RSRParser{ + Rules: "~*req.Session-Id2", + path: "~Field1.Field2[0]", + }, + } + cfg.ersCfg.Readers[0].Fields[0].Filters = []string{"*empty:~Field1..Field2[0]:*Test3:*Test4"} + expected = " Empty field path for <*empty:~Field1..Field2[0]:*Test3:*Test4> for [*empty:~Field1..Field2[0]:*Test3:*Test4] at fields" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.ersCfg.Readers[0].Fields[0].Filters = nil + + cfg.ersCfg.Readers[0].Filters = []string{"*empty:~Field1..Field2[0]:*Test3:*Test4"} + expected = " Empty field path for <*empty:~Field1..Field2[0]:*Test3:*Test4> for [*empty:~Field1..Field2[0]:*Test3:*Test4] at readers" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } } func TestConfigSanityEventExporter(t *testing.T) { @@ -1373,6 +1448,46 @@ func TestConfigSanityEventExporter(t *testing.T) { if err := cfg.CheckConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } + + cfg.eesCfg.Exporters[0].Type = utils.MetaHTTPPost + cfg.eesCfg.Exporters[0].Fields[0].Path = "~Field1..Field2[0]" + expected = " Empty field path for ~Field1..Field2[0] at Path" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.eesCfg.Exporters[0].Fields[0].Value = RSRParsers{ + &RSRParser{ + Rules: "~*req.Session-Id2", + path: "~Field1..Field2[0]", + }, + } + cfg.eesCfg.Exporters[0].Fields[0].Path = "~Field1.Field3[0]" + cfg.eesCfg.Exporters[0].Fields[0].Type = utils.MetaUnixTimestamp + expected = " Empty field path for ~Field1..Field2[0] at Values of fields" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.eesCfg.Exporters[0].Fields[0].Type = utils.MetaNone + cfg.eesCfg.Exporters[0].Fields[0].Value = RSRParsers{ + &RSRParser{ + Rules: "~*req.Session-Id2", + path: "~Field1.Field2[0]", + }, + } + cfg.eesCfg.Exporters[0].Fields[0].Filters = []string{"*empty:~Field1..Field2[0]:*Test3:*Test4"} + expected = " Empty field path for <*empty:~Field1..Field2[0]:*Test3:*Test4> for [*empty:~Field1..Field2[0]:*Test3:*Test4] at fields" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.eesCfg.Exporters[0].Fields[0].Filters = nil + + cfg.eesCfg.Exporters[0].Filters = []string{"*empty:~Field1..Field2[0]:*Test3:*Test4"} + expected = " Empty field path for <*empty:~Field1..Field2[0]:*Test3:*Test4> for [*empty:~Field1..Field2[0]:*Test3:*Test4] at exporters" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } } func TestConfigSanityCache(t *testing.T) { diff --git a/engine/cdr_test.go b/engine/cdr_test.go index 70b20d04c..d2677ceef 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -54,6 +54,66 @@ func TestNewCDRFromExternalCDR(t *testing.T) { } } +func TestNewCDRFromExternalCDRErrors(t *testing.T) { + extCdr := &ExternalCDR{ + CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), + OrderID: 123, + ToR: utils.MetaVoice, + OriginID: "dsafdsaf", + OriginHost: "192.168.1.1", + Source: utils.UnitTest, + RequestType: utils.MetaRated, + Tenant: "cgrates.org", + Category: "call", + Account: "1001", + Subject: "1001", + Destination: "1002", + SetupTime: "2013-11-07T08:42:20Z", + AnswerTime: "2013-11-07T08:42:26Z", + RunID: utils.MetaDefault, + Usage: "10", + Cost: 1.01, + PreRated: true, + ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, + } + + /// + extCdr.SetupTime = "invalid" + errExpect := "Unsupported time format" + if _, err := NewCDRFromExternalCDR(extCdr, ""); err == nil || err.Error() != errExpect { + t.Errorf("Expected %v but received %v", errExpect, err) + } + extCdr.SetupTime = "2013-11-07T08:42:20Z" + + /// + extCdr.AnswerTime = "invalid" + if _, err := NewCDRFromExternalCDR(extCdr, ""); err == nil || err.Error() != errExpect { + t.Errorf("Expected %v but received %v", errExpect, err) + } + extCdr.AnswerTime = "2013-11-07T08:42:20Z" + + /// + extCdr.CGRID = "" + if _, err := NewCDRFromExternalCDR(extCdr, ""); err != nil { + t.Error(err) + } + extCdr.CGRID = utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()) + + /// + extCdr.Usage = "invalid" + errExpect = `time: invalid duration "invalid"` + if _, err := NewCDRFromExternalCDR(extCdr, ""); err != nil { + t.Error(err) + } + extCdr.Usage = "10" + + /// + extCdr.CostDetails = "CostDetail" + if _, err := NewCDRFromExternalCDR(extCdr, ""); err != nil { + t.Error(err) + } +} + func TestCDRClone(t *testing.T) { storCdr := &CDR{CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderID: 123, ToR: utils.MetaVoice, OriginID: "dsafdsaf", OriginHost: "192.168.1.1",