Allow derived charging regexp filters with empty templates

This commit is contained in:
DanB
2014-07-07 19:22:43 +02:00
committed by Radu Ioan Fericean
parent 10374448e6
commit 4ea3ac49da
3 changed files with 33 additions and 2 deletions

View File

@@ -46,7 +46,7 @@ func NewRSRField(fldStr string) (*RSRField, error) {
return nil, fmt.Errorf("Invalid Search&Replace field rule. %s", fldStr)
}
rsrField := &RSRField{Id: spltRules[0][1:]} // Original id in form ~hdr_name
rulesRgxp := regexp.MustCompile(`(?:(.+[^\\])\/(.+[^\\])\/){1,}`)
rulesRgxp := regexp.MustCompile(`(?:(.+[^\\])\/(.+[^\\])*\/){1,}`)
for _, ruleStr := range spltRules[1:] { // :s/ already removed through split
allMatches := rulesRgxp.FindStringSubmatch(ruleStr)
if len(allMatches) != 3 {

View File

@@ -145,6 +145,8 @@ func (storedCdr *StoredCdr) PassesFieldFilter(fieldFilter *RSRField) bool {
// Hardcode the template with maximum of 5 groups ordered
preparedFilter.RSRules[idx] = &ReSearchReplace{SearchRegexp: fieldFilter.RSRules[idx].SearchRegexp, ReplaceTemplate: "$1$2$3$4$5"}
}
fmt.Printf("For filterId: %s, preparedFilter match result: %s, filter match result: %s\n",
fieldFilter.Id, storedCdr.FieldAsString(preparedFilter), storedCdr.FieldAsString(fieldFilter))
if storedCdr.FieldAsString(preparedFilter) == storedCdr.FieldAsString(fieldFilter) && preparedFilter.RegexpMatched() {
return true
}

View File

@@ -79,7 +79,7 @@ func TestFieldAsString(t *testing.T) {
}
func TestPassesFieldFilter(t *testing.T) {
cdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf",
cdr := &StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf",
CdrHost: "192.168.1.1", CdrSource: "test", ReqType: "rated", Direction: "*out", Tenant: "cgrates.org",
Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC),
AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID,
@@ -122,6 +122,35 @@ func TestPassesFieldFilter(t *testing.T) {
}
}
func TestPassesFieldFilterDn1(t *testing.T) {
cdr := &StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), Account: "futurem0005",
ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01,
}
acntPrefxFltr, _ := NewRSRField(`~account:s/^\w+[s,h,m,p]\d{4}$//`)
if !cdr.PassesFieldFilter(acntPrefxFltr) {
t.Error("Not passing valid filter")
}
cdr = &StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), Account: "futurem00005",
ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01,
}
if cdr.PassesFieldFilter(acntPrefxFltr) {
t.Error("Should not pass filter")
}
cdr = &StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), Account: "0402129281",
ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01,
}
acntPrefxFltr, _ = NewRSRField(`~account:s/^0\d{9}$//`)
if !cdr.PassesFieldFilter(acntPrefxFltr) {
t.Error("Not passing valid filter")
}
cdr = &StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), Account: "04021292812",
ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01,
}
if cdr.PassesFieldFilter(acntPrefxFltr) {
t.Error("Should not pass filter")
}
}
func TestUsageMultiply(t *testing.T) {
cdr := StoredCdr{Usage: time.Duration(10) * time.Second}
if cdr.UsageMultiply(1024.0, 0); cdr.Usage != time.Duration(10240)*time.Second {