diff --git a/config/cdrecfg_test.go b/config/cdrecfg_test.go index c6bf8884a..47c1b3520 100644 --- a/config/cdrecfg_test.go +++ b/config/cdrecfg_test.go @@ -20,6 +20,7 @@ package config import ( "reflect" "testing" + "time" "github.com/cgrates/cgrates/utils" ) @@ -119,10 +120,11 @@ func TestCdreCfgloadFromJsonCfg(t *testing.T) { Attempts: 1, FieldSeparator: utils.CSV_SEP, Fields: []*FCTemplate{{ - Path: "*exp.CGRID", - Tag: "*exp.CGRID", - Type: "*composed", - Value: val, + Path: "*exp.CGRID", + Tag: "*exp.CGRID", + Type: "*composed", + Value: val, + Layout: time.RFC3339, }}, } if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { diff --git a/config/config_test.go b/config/config_test.go index fa8903e0b..de20c69fe 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -482,64 +482,74 @@ func TestCgrCfgJSONLoadCDRS(t *testing.T) { func TestCgrCfgJSONDefaultsCdreProfiles(t *testing.T) { eContentFlds := []*FCTemplate{ { - Tag: "*exp.CGRID", - Path: "*exp.CGRID", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.CGRID", true, utils.INFIELD_SEP), + Tag: "*exp.CGRID", + Path: "*exp.CGRID", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.CGRID", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.RunID", - Path: "*exp.RunID", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.RunID", true, utils.INFIELD_SEP), + Tag: "*exp.RunID", + Path: "*exp.RunID", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.RunID", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.ToR", - Path: "*exp.ToR", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.ToR", true, utils.INFIELD_SEP), + Tag: "*exp.ToR", + Path: "*exp.ToR", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.ToR", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.OriginID", - Path: "*exp.OriginID", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.OriginID", true, utils.INFIELD_SEP), + Tag: "*exp.OriginID", + Path: "*exp.OriginID", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.OriginID", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.RequestType", - Path: "*exp.RequestType", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.RequestType", true, utils.INFIELD_SEP), + Tag: "*exp.RequestType", + Path: "*exp.RequestType", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.RequestType", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.Tenant", - Path: "*exp.Tenant", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.Tenant", true, utils.INFIELD_SEP), + Tag: "*exp.Tenant", + Path: "*exp.Tenant", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.Tenant", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.Category", - Path: "*exp.Category", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.Category", true, utils.INFIELD_SEP), + Tag: "*exp.Category", + Path: "*exp.Category", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.Category", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.Account", - Path: "*exp.Account", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.Account", true, utils.INFIELD_SEP), + Tag: "*exp.Account", + Path: "*exp.Account", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.Account", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.Subject", - Path: "*exp.Subject", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.Subject", true, utils.INFIELD_SEP), + Tag: "*exp.Subject", + Path: "*exp.Subject", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.Subject", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { - Tag: "*exp.Destination", - Path: "*exp.Destination", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.Destination", true, utils.INFIELD_SEP), + Tag: "*exp.Destination", + Path: "*exp.Destination", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.Destination", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { Tag: "*exp.SetupTime", @@ -556,16 +566,18 @@ func TestCgrCfgJSONDefaultsCdreProfiles(t *testing.T) { Layout: "2006-01-02T15:04:05Z07:00", }, { - Tag: "*exp.Usage", - Path: "*exp.Usage", - Type: "*variable", - Value: NewRSRParsersMustCompile("~*req.Usage", true, utils.INFIELD_SEP), + Tag: "*exp.Usage", + Path: "*exp.Usage", + Type: "*variable", + Value: NewRSRParsersMustCompile("~*req.Usage", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, { Tag: "*exp.Cost", Path: "*exp.Cost", Type: "*variable", Value: NewRSRParsersMustCompile("~*req.Cost", true, utils.INFIELD_SEP), + Layout: time.RFC3339, RoundingDecimals: utils.IntPointer(4), }, } @@ -582,7 +594,7 @@ func TestCgrCfgJSONDefaultsCdreProfiles(t *testing.T) { }, } if !reflect.DeepEqual(cgrCfg.CdreProfiles, eCdreCfg) { - t.Errorf("received: %+v, expecting: %+v", cgrCfg.CdreProfiles, eCdreCfg) + t.Errorf("Expecting: %+v,\nReceived %+v", utils.ToJSON(eCdreCfg), utils.ToJSON(cgrCfg.CdreProfiles)) } } @@ -1024,48 +1036,74 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, - {Tag: "ProfileID", + Mandatory: true, + Layout: time.RFC3339, + }, + { + Tag: "ProfileID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, - {Tag: "Contexts", - Path: "Contexts", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, - {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, - {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, - {Tag: "AttributeFilterIDs", - Path: "AttributeFilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, - {Tag: "Path", - Path: "Path", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP)}, + Mandatory: true, + Layout: time.RFC3339, + }, + { + Tag: "Contexts", + Path: "Contexts", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, + { + Tag: "FilterIDs", + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, + { + Tag: "ActivationInterval", + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, + { + Tag: "AttributeFilterIDs", + Path: "AttributeFilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, + { + Tag: "Path", + Path: "Path", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, {Tag: "Type", - Path: "Type", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP)}, + Path: "Type", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, {Tag: "Value", - Path: "Value", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP)}, + Path: "Value", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, {Tag: "Blocker", - Path: "Blocker", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP)}, + Path: "Blocker", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP)}, + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Layout: time.RFC3339, + }, }, }, { @@ -1076,28 +1114,34 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "Type", - Path: "Type", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, + Path: "Type", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Element", - Path: "Element", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, + Path: "Element", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Values", - Path: "Values", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, + Path: "Values", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, }, }, { @@ -1108,48 +1152,59 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "TTL", - Path: "UsageTTL", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, + Path: "UsageTTL", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Limit", - Path: "Limit", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, + Path: "Limit", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "AllocationMessage", - Path: "AllocationMessage", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP)}, + Path: "AllocationMessage", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Blocker", - Path: "Blocker", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP)}, + Path: "Blocker", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Stored", - Path: "Stored", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP)}, + Path: "Stored", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP)}, + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ThresholdIDs", - Path: "ThresholdIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP)}, + Path: "ThresholdIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, }, }, { @@ -1160,57 +1215,70 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "QueueLength", - Path: "QueueLength", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, + Path: "QueueLength", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "TTL", - Path: "TTL", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, + Path: "TTL", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "MinItems", - Path: "MinItems", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP)}, + Path: "MinItems", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "MetricIDs", - Path: "MetricIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP)}, + Path: "MetricIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "MetricFilterIDs", - Path: "MetricFilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP)}, + Path: "MetricFilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Blocker", - Path: "Blocker", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP)}, + Path: "Blocker", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Stored", - Path: "Stored", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP)}, + Path: "Stored", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP)}, + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ThresholdIDs", - Path: "ThresholdIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP)}, + Path: "ThresholdIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, }, }, { @@ -1221,48 +1289,59 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "MaxHits", - Path: "MaxHits", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, + Path: "MaxHits", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "MinHits", - Path: "MinHits", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, + Path: "MinHits", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "MinSleep", - Path: "MinSleep", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP)}, + Path: "MinSleep", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Blocker", - Path: "Blocker", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP)}, + Path: "Blocker", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP)}, + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActionIDs", - Path: "ActionIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP)}, + Path: "ActionIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Async", - Path: "Async", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP)}, + Path: "Async", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, }, }, { @@ -1273,68 +1352,84 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Sorting", - Path: "Sorting", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, + Path: "Sorting", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SortingParamameters", - Path: "SortingParamameters", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, + Path: "SortingParamameters", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierID", - Path: "SupplierID", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP)}, + Path: "SupplierID", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierFilterIDs", - Path: "SupplierFilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP)}, + Path: "SupplierFilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierAccountIDs", - Path: "SupplierAccountIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP)}, + Path: "SupplierAccountIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierRatingPlanIDs", - Path: "SupplierRatingPlanIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP)}, + Path: "SupplierRatingPlanIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierResourceIDs", - Path: "SupplierResourceIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP)}, + Path: "SupplierResourceIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierStatIDs", - Path: "SupplierStatIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP)}, + Path: "SupplierStatIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierWeight", - Path: "SupplierWeight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP)}, + Path: "SupplierWeight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierBlocker", - Path: "SupplierBlocker", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~13", true, utils.INFIELD_SEP)}, + Path: "SupplierBlocker", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~13", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "SupplierParameters", - Path: "SupplierParameters", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~14", true, utils.INFIELD_SEP)}, + Path: "SupplierParameters", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~14", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~15", true, utils.INFIELD_SEP)}, + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~15", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, }, }, { @@ -1345,32 +1440,39 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP)}, + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP)}, + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "RunID", - Path: "RunID", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP)}, + Path: "RunID", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "AttributeIDs", - Path: "AttributeIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP)}, + Path: "AttributeIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP)}, + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339}, }, }, { @@ -1381,66 +1483,79 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "Contexts", - Path: "Contexts", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Path: "Contexts", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "FilterIDs", - Path: "FilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Path: "FilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "ActivationInterval", - Path: "ActivationInterval", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Path: "ActivationInterval", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "Strategy", - Path: "Strategy", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Path: "Strategy", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~5", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "StrategyParameters", - Path: "StrategyParameters", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Path: "StrategyParameters", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~6", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "ConnID", - Path: "ConnID", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Path: "ConnID", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~7", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "ConnFilterIDs", - Path: "ConnFilterIDs", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Path: "ConnFilterIDs", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~8", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "ConnWeight", - Path: "ConnWeight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Path: "ConnWeight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~9", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "ConnBlocker", - Path: "ConnBlocker", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Path: "ConnBlocker", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~10", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "ConnParameters", - Path: "ConnParameters", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP), + Path: "ConnParameters", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~11", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "Weight", - Path: "Weight", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP), + Path: "Weight", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~12", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, }, }, @@ -1452,26 +1567,31 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { Path: "Tenant", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~0", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "ID", Path: "ID", Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~1", true, utils.INFIELD_SEP), - Mandatory: true}, + Mandatory: true, + Layout: time.RFC3339}, {Tag: "Address", - Path: "Address", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Path: "Address", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~2", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "Transport", - Path: "Transport", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Path: "Transport", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~3", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, {Tag: "TLS", - Path: "TLS", - Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Path: "TLS", + Type: utils.MetaVariable, + Value: NewRSRParsersMustCompile("~4", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, }, }, @@ -1684,27 +1804,27 @@ func TestCgrCdfEventReader(t *testing.T) { Flags: utils.FlagsWithParams{}, Fields: []*FCTemplate{ {Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, }, CacheDumpFields: []*FCTemplate{}, }, @@ -1731,27 +1851,27 @@ func TestCgrCfgEventReaderDefault(t *testing.T) { Flags: utils.FlagsWithParams{}, Fields: []*FCTemplate{ {Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, }, CacheDumpFields: make([]*FCTemplate, 0), } diff --git a/config/erscfg_test.go b/config/erscfg_test.go index a4f0d0fd5..1a1f1e8e8 100644 --- a/config/erscfg_test.go +++ b/config/erscfg_test.go @@ -113,27 +113,27 @@ func TestEventReaderLoadFromJSON(t *testing.T) { Flags: utils.FlagsWithParams{}, Fields: []*FCTemplate{ {Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, }, CacheDumpFields: make([]*FCTemplate, 0), }, @@ -152,27 +152,27 @@ func TestEventReaderLoadFromJSON(t *testing.T) { Flags: utils.FlagsWithParams{}, Fields: []*FCTemplate{ {Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, }, CacheDumpFields: make([]*FCTemplate, 0), }, @@ -245,27 +245,27 @@ func TestEventReaderSameID(t *testing.T) { Flags: utils.FlagsWithParams{}, Fields: []*FCTemplate{ {Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, {Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, }, CacheDumpFields: make([]*FCTemplate, 0), }, @@ -285,7 +285,7 @@ func TestEventReaderSameID(t *testing.T) { Flags: utils.FlagsWithParams{}, Fields: []*FCTemplate{ {Tag: "CustomTag2", Path: "CustomPath2", Type: utils.MetaVariable, - Value: NewRSRParsersMustCompile("CustomValue2", true, utils.INFIELD_SEP), Mandatory: true}, + Value: NewRSRParsersMustCompile("CustomValue2", true, utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339}, }, CacheDumpFields: make([]*FCTemplate, 0), }, diff --git a/config/fctemplate.go b/config/fctemplate.go index 5a4f44003..4783c7530 100755 --- a/config/fctemplate.go +++ b/config/fctemplate.go @@ -20,6 +20,7 @@ package config import ( "fmt" + "time" "github.com/cgrates/cgrates/utils" ) @@ -75,6 +76,7 @@ func NewFCTemplateFromFCTemplateJsonCfg(jsnCfg *FcTemplateJsonCfg, separator str if jsnCfg.Break_on_success != nil { fcTmp.BreakOnSuccess = *jsnCfg.Break_on_success } + fcTmp.Layout = time.RFC3339 if jsnCfg.Layout != nil { fcTmp.Layout = *jsnCfg.Layout } diff --git a/config/fctemplate_test.go b/config/fctemplate_test.go index 0040fccf4..d1e1ab917 100755 --- a/config/fctemplate_test.go +++ b/config/fctemplate_test.go @@ -20,6 +20,7 @@ package config import ( "reflect" "testing" + "time" "github.com/cgrates/cgrates/utils" ) @@ -38,6 +39,7 @@ func TestNewFCTemplateFromFCTemplateJsonCfg(t *testing.T) { Path: "Tenant", Filters: []string{"Filter1", "Filter2"}, Value: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), + Layout: time.RFC3339, } if rcv, err := NewFCTemplateFromFCTemplateJsonCfg(jsonCfg, utils.INFIELD_SEP); err != nil { t.Error(err) @@ -70,6 +72,7 @@ func TestFCTemplatesFromFCTemplatesJsonCfg(t *testing.T) { Path: "Tenant", Filters: []string{"Filter1", "Filter2"}, Value: NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, &FCTemplate{ Tag: "RunID", @@ -77,6 +80,7 @@ func TestFCTemplatesFromFCTemplatesJsonCfg(t *testing.T) { Path: "RunID", Filters: []string{"Filter1_1", "Filter2_2"}, Value: NewRSRParsersMustCompile("SampleValue", true, utils.INFIELD_SEP), + Layout: time.RFC3339, }, } if rcv, err := FCTemplatesFromFCTemplatesJsonCfg(jsnCfgs, utils.INFIELD_SEP); err != nil { @@ -176,7 +180,7 @@ func TestFCTemplateInflate1(t *testing.T) { if rcv, err := InflateTemplates(fcTmp1, fcTmpMp); err != nil { t.Error(err) } else if !reflect.DeepEqual(expFC, rcv) { - t.Errorf("expected: %s ,received: %s", utils.ToJSON(expFC), utils.ToJSON(rcv)) + t.Errorf("expected: %s\n ,received: %s", utils.ToJSON(expFC), utils.ToJSON(rcv)) } } diff --git a/config/httpagntcfg_test.go b/config/httpagntcfg_test.go index 45c721494..ddf57cf2a 100644 --- a/config/httpagntcfg_test.go +++ b/config/httpagntcfg_test.go @@ -20,6 +20,7 @@ package config import ( "reflect" "testing" + "time" "github.com/cgrates/cgrates/utils" ) @@ -79,6 +80,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { Type: "*constant", Value: NewRSRParsersMustCompile("1", true, utils.INFIELD_SEP), Mandatory: true, + Layout: time.RFC3339, }}, }}, }} @@ -154,6 +156,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { Type: "*constant", Value: NewRSRParsersMustCompile("1", true, utils.INFIELD_SEP), Mandatory: true, + Layout: time.RFC3339, }}}, { ID: "mtcall_cdr", @@ -166,6 +169,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { Type: "*constant", Value: NewRSRParsersMustCompile("*pseudoprepaid", true, utils.INFIELD_SEP), Mandatory: true, + Layout: time.RFC3339, }}, ReplyFields: []*FCTemplate{{ Tag: "CDR_ID", @@ -173,6 +177,7 @@ func TestHttpAgentCfgsloadFromJsonCfg(t *testing.T) { Type: "*composed", Value: NewRSRParsersMustCompile("~*req.CDR_ID", true, utils.INFIELD_SEP), Mandatory: true, + Layout: time.RFC3339, }}, }}, }, &HttpAgentCfg{ @@ -321,6 +326,7 @@ func TestHttpAgentCfgappendHttpAgntProcCfgs(t *testing.T) { Type: "*constant", Value: NewRSRParsersMustCompile("1", true, utils.INFIELD_SEP), Mandatory: false, + Layout: time.RFC3339, }}, }, { ID: "OutboundAUTHDryRun1", @@ -334,6 +340,7 @@ func TestHttpAgentCfgappendHttpAgntProcCfgs(t *testing.T) { Type: "*constant", Value: NewRSRParsersMustCompile("1", true, utils.INFIELD_SEP), Mandatory: true, + Layout: time.RFC3339, }}, }}, } diff --git a/config/loaderscfg_test.go b/config/loaderscfg_test.go index 616a7e7ef..de26ab714 100644 --- a/config/loaderscfg_test.go +++ b/config/loaderscfg_test.go @@ -20,6 +20,7 @@ package config import ( "reflect" "testing" + "time" "github.com/cgrates/cgrates/utils" ) @@ -87,6 +88,7 @@ func TestLoaderSCfgloadFromJsonCfg(t *testing.T) { Type: "*composed", Value: val, Mandatory: true, + Layout: time.RFC3339, }, }, }, diff --git a/engine/cdr.go b/engine/cdr.go index da9e6ca36..7c7360571 100644 --- a/engine/cdr.go +++ b/engine/cdr.go @@ -323,14 +323,8 @@ func (cdr *CDR) exportFieldValue(cfgCdrFld *config.FCTemplate, filterS *FilterS) } cdrVal = cdr.FormatCost(cfgCdrFld.CostShiftDigits, roundDec) case utils.MetaExp + utils.NestingSep + utils.SetupTime: - if cfgCdrFld.Layout == "" { - cfgCdrFld.Layout = time.RFC3339 - } cdrVal = cdr.SetupTime.Format(cfgCdrFld.Layout) case utils.MetaExp + utils.NestingSep + utils.AnswerTime: // Format time based on layout - if cfgCdrFld.Layout == "" { - cfgCdrFld.Layout = time.RFC3339 - } cdrVal = cdr.AnswerTime.Format(cfgCdrFld.Layout) case utils.MetaExp + utils.NestingSep + utils.Destination: cdrVal, err = cdr.FieldAsString(rsrFld) @@ -369,9 +363,6 @@ func (cdr *CDR) formatField(cfgFld *config.FCTemplate, httpSkipTLSCheck bool, if err != nil { // Only one rule makes sense here return "", err } - if cfgFld.Layout == "" { - cfgFld.Layout = time.RFC3339 - } outVal = dtFld.Format(cfgFld.Layout) case utils.MetaHTTPPost: var outValByte []byte diff --git a/engine/cdr_test.go b/engine/cdr_test.go index 9f103b142..8ebfdd789 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -1139,13 +1139,13 @@ func TestCDRexportFieldValue(t *testing.T) { } cfgCdrFld := &config.FCTemplate{Path: "*exp.SetupTime", Type: utils.META_COMPOSED, - Value: config.NewRSRParsersMustCompile("~SetupTime", true, utils.INFIELD_SEP)} + Value: config.NewRSRParsersMustCompile("~SetupTime", true, utils.INFIELD_SEP),Layout: time.RFC3339} eVal := "2013-11-07T08:42:20Z" if val, err := cdr.exportFieldValue(cfgCdrFld, nil); err != nil { t.Error(err) } else if val != eVal { - t.Errorf("Expecting: %+v, received: %+v", eVal, val) + t.Errorf("Expecting: %+v, received: %+v", eVal, utils.ToJSON(val)) } }