diff --git a/cdrs/fscdr_test.go b/cdrs/fscdr_test.go index 165c4427d..e24334be2 100644 --- a/cdrs/fscdr_test.go +++ b/cdrs/fscdr_test.go @@ -180,3 +180,57 @@ func TestSearchReplaceInExtraFields(t *testing.T) { t.Error("Error parsing extra fields: ", extraFields) } } + +func TestDDazRSRExtraFields(t *testing.T) { + eFieldsCfg := []byte(`[cdrs] +extra_fields = ~effective_caller_id_number:s/(\d+)/+$1/ + +`) + simpleJsonCdr := []byte(`{ + "core-uuid": "feef0b51-7fdf-4c4a-878e-aff233752de2", + "channel_data": { + "state": "CS_REPORTING", + "direction": "inbound", + "state_number": "11", + "flags": "0=1;1=1;3=1;36=1;37=1;39=1;42=1;47=1;52=1;73=1;75=1;94=1", + "caps": "1=1;2=1;3=1;4=1;5=1;6=1" + }, + "variables": { + "direction": "inbound", + "uuid": "86cfd6e2-dbda-45a3-b59d-f683ec368e8b", + "session_id": "5", + "accountcode": "1001", + "user_context": "default", + "effective_caller_id_name": "Extension 1001", + "effective_caller_id_number": "4986517174963", + "outbound_caller_id_name": "FreeSWITCH", + "outbound_caller_id_number": "0000000000" + }, + "times": { + "created_time": "1396984221278217", + "profile_created_time": "1396984221278217", + "progress_time": "0", + "progress_media_time": "0", + "answered_time": "0", + "hangup_time": "0", + "resurrect_time": "0", + "transfer_time": "1396984221377035" + } +}`) + var err error + cfg, err = config.NewCGRConfigFromBytes(eFieldsCfg) + if err != nil { + t.Error("Could not parse the config", err.Error()) + } else if !reflect.DeepEqual(cfg.CDRSExtraFields, []*utils.RSRField{&utils.RSRField{Id: "effective_caller_id_number", + RSRule: &utils.ReSearchReplace{regexp.MustCompile(`(\d+)`), "+$1"}}}) { + t.Errorf("Unexpected value for config CdrsExtraFields: %v", cfg.CDRSExtraFields) + } + fsCdr, err := new(FSCdr).New(simpleJsonCdr) + if err != nil { + t.Error("Could not parse cdr", err.Error()) + } + extraFields := fsCdr.GetExtraFields() + if extraFields["effective_caller_id_number"] != "+4986517174963" { + t.Error("Unexpected effective_caller_id_number received", extraFields["effective_caller_id_number"]) + } +} diff --git a/config/config_test.go b/config/config_test.go index 3cee4b504..d9c0a2437 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -21,6 +21,7 @@ package config import ( "fmt" "reflect" + "regexp" "testing" "time" @@ -324,6 +325,15 @@ extra_fields = extr1,extr2 t.Errorf("Unexpected value for CdrsExtraFields: %v", cfg.CDRSExtraFields) } eFieldsCfg = []byte(`[cdrs] +extra_fields = ~effective_caller_id_number:s/(\d+)/+$1/ +`) + if cfg, err := NewCGRConfigFromBytes(eFieldsCfg); err != nil { + t.Error("Could not parse the config", err.Error()) + } else if !reflect.DeepEqual(cfg.CDRSExtraFields, []*utils.RSRField{&utils.RSRField{Id: "effective_caller_id_number", + RSRule: &utils.ReSearchReplace{regexp.MustCompile(`(\d+)`), "+$1"}}}) { + t.Errorf("Unexpected value for config CdrsExtraFields: %v", cfg.CDRSExtraFields) + } + eFieldsCfg = []byte(`[cdrs] extra_fields = extr1,extr2, `) if _, err := NewCGRConfigFromBytes(eFieldsCfg); err == nil { @@ -335,6 +345,7 @@ extra_fields = extr1,~extr2:s/x.+/ if _, err := NewCGRConfigFromBytes(eFieldsCfg); err == nil { t.Error("Failed to detect failed RSRParsing") } + } func TestCdreExtraFields(t *testing.T) { diff --git a/utils/researchreplace_test.go b/utils/researchreplace_test.go index 87fc961f3..e9780b120 100644 --- a/utils/researchreplace_test.go +++ b/utils/researchreplace_test.go @@ -31,3 +31,12 @@ func TestProcessReSearchReplace(t *testing.T) { t.Error("Unexpected output from SearchReplace: ", outStr) } } + +func TestProcessReSearchReplace2(t *testing.T) { + rsr := &ReSearchReplace{regexp.MustCompile(`(\d+)`), "+$1"} + source := "4986517174963" + expectOut := "+4986517174963" + if outStr := rsr.Process(source); outStr != expectOut { + t.Error("Unexpected output from SearchReplace: ", outStr) + } +} diff --git a/utils/rsrfield_test.go b/utils/rsrfield_test.go index ccbe99389..ce602de8e 100644 --- a/utils/rsrfield_test.go +++ b/utils/rsrfield_test.go @@ -83,3 +83,12 @@ func TestNewRSRField(t *testing.T) { t.Errorf("Unexpected RSRField received: %v", rsrField) } } + +func TestNewRSRFieldDDz(t *testing.T) { + expectRSRField := &RSRField{Id: "effective_caller_id_number", RSRule: &ReSearchReplace{regexp.MustCompile(`(\d+)`), "+$1"}} + if rsrField, err := NewRSRField(`~effective_caller_id_number:s/(\d+)/+$1/`); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(rsrField, expectRSRField) { + t.Errorf("Unexpected RSRField received: %v", rsrField) + } +}