Finished unit testing in config

This commit is contained in:
nickolasdaniel
2021-06-08 11:53:12 +03:00
committed by Dan Christian Bogos
parent b240d82eac
commit 323646602c
4 changed files with 167 additions and 6 deletions

View File

@@ -646,7 +646,8 @@ func (cfg *CGRConfig) checkConfigSanity() error {
utils.IfaceAsString(fldSep) == utils.EmptyString {
return fmt.Errorf("<%s> empty %s for reader with ID: %s", utils.ERs, utils.PartialOrderFieldOpt, rdr.ID)
}
} else if pAct == utils.MetaDumpToFile { // only if the action is *dump_to_file
}
if pAct == utils.MetaDumpToFile { // only if the action is *dump_to_file
if path, has := rdr.Opts[utils.PartialPathOpt]; has { // the path from options needs to exists if overwriten by reader
if _, err := os.Stat(utils.IfaceAsString(path)); err != nil && os.IsNotExist(err) {
return fmt.Errorf("<%s> nonexistent partial folder: %s for reader with ID: %s", utils.ERs, path, rdr.ID)

View File

@@ -1772,3 +1772,84 @@ func TestConfigSanityFilterS(t *testing.T) {
t.Errorf("Expecting: %+q received: %+q", expected, err)
}
}
func TestConfigSanityErs(t *testing.T) {
cfg = NewDefaultCGRConfig()
cfg.ersCfg.Enabled = true
expected := "<ERs> wrong partial expiry action"
cfg.ersCfg.PartialCacheAction = utils.MetaAny
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.PartialCacheAction = utils.MetaNone
cfg.ersCfg.PartialPath = "test"
expected = "<ERs> nonexistent partial folder: test"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.PartialPath = utils.EmptyString
cfg.ersCfg.SessionSConns = []string{}
cfg.ersCfg.PartialCacheAction = utils.MetaPostCDR
cfg.ersCfg.Readers = []*EventReaderCfg{
{
Type: utils.MetaNone,
ID: "rdrID",
Opts: map[string]interface{}{
utils.PartialCacheActionOpt: utils.MetaAny,
},
},
}
expected = "<ERs> wrong partial expiry action for reader with ID: rdrID"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.Readers[0].Opts = map[string]interface{}{
utils.PartialOrderFieldOpt: utils.EmptyString,
}
cfg.ersCfg.PartialCacheAction = utils.MetaPostCDR
expected = "<ERs> empty partialOrderField for reader with ID: rdrID"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.PartialCacheAction = utils.MetaDumpToFile
cfg.ersCfg.Readers[0].Opts = map[string]interface{}{
utils.PartialOrderFieldOpt: "non_empty",
utils.PartialPathOpt: "path",
}
expected = "<ERs> nonexistent partial folder: path for reader with ID: rdrID"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.Readers[0].Opts = map[string]interface{}{
utils.PartialCSVFieldSepartorOpt: utils.EmptyString,
}
expected = "<ERs> empty partialcsvFieldSeparator for reader with ID: rdrID"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.Readers[0].Type = utils.MetaFileCSV
cfg.ersCfg.Readers[0].ProcessedPath = utils.EmptyString
cfg.ersCfg.Readers[0].SourcePath = "/tmp"
cfg.ersCfg.Readers[0].ID = utils.MetaDefault
cfg.ersCfg.Readers[0].Opts = map[string]interface{}{
utils.CSVRowLengthOpt: "can't convert",
utils.CSVLazyQuotes: "can't convert",
}
expected = `<ERs> error when converting csvRowLength: <strconv.ParseInt: parsing "can't convert": invalid syntax> for reader with ID: *default`
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
cfg.ersCfg.Readers[0].Opts[utils.CSVRowLengthOpt] = "2"
expected = `<ERs> error when converting csvLazyQuotes: <strconv.ParseBool: parsing "can't convert": invalid syntax> for reader with ID: *default`
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expected %v \n but received \n %v", expected, err)
}
}

View File

@@ -53,6 +53,13 @@ func TestERSClone(t *testing.T) {
"cache_dump_fields": [
{"tag": "ToR", "path": "*cgreq.ToR", "type": "*variable", "value": "~*req.2", "mandatory": true},
],
"partial_commit_fields": [{
"mandatory": true,
"path": "*cgreq.ToR",
"tag": "ToR",
"type": "*variable",
"value": "~*req.2"
}],
"failed_calls_prefix": "randomPrefix",
"partial_record_cache": "1s",
"partial_cache_expiry_action": "randomAction",
@@ -130,7 +137,16 @@ func TestERSClone(t *testing.T) {
{Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.InfieldSep), Mandatory: true, Layout: time.RFC3339},
},
PartialCommitFields: make([]*FCTemplate, 0),
PartialCommitFields: []*FCTemplate{
{
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.InfieldSep),
Tag: utils.ToR,
Path: utils.MetaCgreq + utils.NestingSep + utils.ToR,
Mandatory: true,
Layout: time.RFC3339,
},
},
Opts: map[string]interface{}{
utils.MetaDefault: "randomVal",
"csvFieldSeparator": ",",
@@ -151,6 +167,9 @@ func TestERSClone(t *testing.T) {
for _, v := range profile.CacheDumpFields {
v.ComputePath()
}
for _, v := range profile.PartialCommitFields {
v.ComputePath()
}
}
if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
@@ -1015,8 +1034,15 @@ func TestERSCfgAsMapInterfaceCase2(t *testing.T) {
"partial_record_cache": "1s",
"processed_path": "/tmp/ers/out",
"cache_dump_fields": [
{"tag": "ToR", "path": "*cgreq.ToR", "type": "*variable", "value": "~*req.2", "mandatory": true}
{"tag": "ToR", "path": "*cgreq.ToR", "type": "*variable", "value": "~*req.2", "mandatory": true}
],
"partial_commit_fields": [{
"mandatory": true,
"path": "*cgreq.ToR",
"tag": "ToR",
"type": "*variable",
"value": "~*req.2"
}],
"opts":{
"kafkaGroupID": "test",
},
@@ -1066,9 +1092,17 @@ func TestERSCfgAsMapInterfaceCase2(t *testing.T) {
utils.CacheDumpFieldsCfg: []map[string]interface{}{
{utils.MandatoryCfg: true, utils.PathCfg: "*cgreq.ToR", utils.TagCfg: "ToR", utils.TypeCfg: "*variable", utils.ValueCfg: "~*req.2"},
},
utils.PartialCommitFieldsCfg: []map[string]interface{}{},
utils.ConcurrentRequestsCfg: 1024,
utils.TypeCfg: "*file_csv",
utils.PartialCommitFieldsCfg: []map[string]interface{}{
{
"mandatory": true,
"path": "*cgreq.ToR",
"tag": "ToR",
"type": "*variable",
"value": "~*req.2",
},
},
utils.ConcurrentRequestsCfg: 1024,
utils.TypeCfg: "*file_csv",
utils.FieldsCfg: []map[string]interface{}{
{utils.MandatoryCfg: true, utils.PathCfg: "*cgreq.ToR", utils.TagCfg: "ToR", utils.TypeCfg: "*variable", utils.ValueCfg: "~*req.2"},
{utils.MandatoryCfg: true, utils.PathCfg: "*cgreq.OriginID", utils.TagCfg: "OriginID", utils.TypeCfg: "*variable", utils.ValueCfg: "~*req.3"},
@@ -1371,6 +1405,14 @@ func TestDiffEventReaderJsonCfg(t *testing.T) {
Value: utils.StringPointer("~*req.3"),
},
},
Partial_commit_fields: &[]*FcTemplateJsonCfg{
{
Tag: utils.StringPointer("ToR3"),
Path: utils.StringPointer("*cgreq.ToR3"),
Type: utils.StringPointer(utils.MetaTemplate),
Value: utils.StringPointer("~*req.4"),
},
},
}
expected = &EventReaderJsonCfg{
@@ -1391,6 +1433,14 @@ func TestDiffEventReaderJsonCfg(t *testing.T) {
Value: utils.StringPointer("~*req.3"),
},
},
Partial_commit_fields: &[]*FcTemplateJsonCfg{
{
Tag: utils.StringPointer("ToR3"),
Path: utils.StringPointer("*cgreq.ToR3"),
Type: utils.StringPointer(utils.MetaTemplate),
Value: utils.StringPointer("~*req.4"),
},
},
}
rcv = diffEventReaderJsonCfg(d, v1, v2, ";")
if !reflect.DeepEqual(rcv, expected) {

View File

@@ -204,3 +204,32 @@ func TestFieldAsInterfaceObjDPMultiplePaths(t *testing.T) {
t.Errorf("Expected %+v, received %+v", "1", rcv)
}
}
func TestFieldAsInterface(t *testing.T) {
type aNewStruct struct {
Field1 int
Field2 int
}
type pNewStruct struct {
Field3 aNewStruct
Field4 int
Field5 []string
}
objDp := &ObjectDP{
obj: pNewStruct{
Field3: aNewStruct{
Field1: 2,
Field2: 4,
},
Field4: 2,
Field5: []string{""},
},
cache: map[string]interface{}{
"field1": nil,
},
}
_, err := objDp.FieldAsInterface([]string{"field1"})
if err == nil || err != utils.ErrNotFound {
t.Error(err)
}
}