added fallback subject

This commit is contained in:
Radu Ioan Fericean
2012-08-10 16:32:09 +03:00
parent 9e92446d88
commit d2596f89e2
3 changed files with 47 additions and 20 deletions

View File

@@ -38,7 +38,8 @@ const (
// the minimum length for a destination prefix to be matched.
MinPrefixLength = 2
RecursionMaxDepth = 4
FallbackDestination = "*all" // the string to be used to mark the fallback destination
FallbackDestination = "fallback" // the string to be used to mark the fallback destination
FallbackSubject = "*all"
)
var (
@@ -135,9 +136,22 @@ func (cd *CallDescriptor) SearchStorageForPrefix() (destPrefix string, err error
key := base + destPrefix
values, err := cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
if err != nil {
// use the default destination
key := base + FallbackDestination
values, err = cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
}
if err != nil {
// use the default subject
base = fmt.Sprintf("%s:%s:%s:%s:", cd.Direction, cd.Tenant, cd.TOR, FallbackSubject)
key = base + destPrefix
values, err = cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
if err != nil {
// use the default destination
key := base + FallbackDestination
values, err = cd.getActivationPeriodsOrFallback(key, base, destPrefix, 1)
}
}
//load the activation preriods
if err == nil && len(values) > 0 {
cd.ActivationPeriods = values
@@ -157,6 +171,7 @@ func (cd *CallDescriptor) getActivationPeriodsOrFallback(key, base, destPrefix s
recursionDepth++
return cd.getActivationPeriodsOrFallback(key, base, destPrefix, recursionDepth)
}
//get for a smaller prefix if the orignal one was not found
for i := len(cd.Destination); err != nil || fallbackKey != ""; {
if fallbackKey != "" {

View File

@@ -112,6 +112,18 @@ func TestFullDestNotFound(t *testing.T) {
}
}
func TestFullSubjectNotFound(t *testing.T) {
t1 := time.Date(2012, time.February, 2, 17, 30, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 2, 18, 30, 0, 0, time.UTC)
cd := &CallDescriptor{Direction: "OUT", TOR: "0", Tenant: "vdf", Subject: "not_exiting", Destination: "025740532", TimeStart: t1, TimeEnd: t2}
result, _ := cd.GetCost()
expected := &CallCost{Tenant: "vdf", Subject: "rif", Destination: "0257", Cost: 2700, ConnectFee: 0}
if result.Cost != expected.Cost || result.ConnectFee != expected.ConnectFee {
t.Log(cd.ActivationPeriods)
t.Errorf("Expected %v was %v", expected, result)
}
}
func TestMultipleActivationPeriods(t *testing.T) {
t1 := time.Date(2012, time.February, 8, 17, 30, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 8, 18, 30, 0, 0, time.UTC)

View File

@@ -23,7 +23,7 @@ import (
)
var (
dest = `
destinations = `
Tag,Prefix
GERMANY,49
GERMANY_O2,41
@@ -37,7 +37,7 @@ NAT,0723
RET,0723
RET,0724
`
rts = `
rates = `
RT_STANDARD,GERMANY,0,0.2,60,1
RT_STANDARD,GERMANY_O2,0,0.1,60,1
RT_STANDARD,GERMANY_PREMIUM,0,0.1,60,1
@@ -47,13 +47,13 @@ RT_STD_WEEKEND,GERMANY_O2,0,0.05,60,1
P1,NAT,0,1,1,1
P2,NAT,0,0.5,1,1
`
ts = `
timings = `
WORKDAYS_00,*all,*all,*all,1;2;3;4;5,00:00:00
WORKDAYS_18,*all,*all,*all,1;2;3;4;5,18:00:00
WEEKENDS,*all,*all,*all,6;7,00:00:00
ONE_TIME_RUN,2012,,,,*asap
`
rtts = `
rateTimings = `
STANDARD,RT_STANDARD,WORKDAYS_00,10
STANDARD,RT_STD_WEEKEND,WORKDAYS_18,10
STANDARD,RT_STD_WEEKEND,WEEKENDS,10
@@ -63,7 +63,7 @@ EVENING,P1,WORKDAYS_00,10
EVENING,P2,WORKDAYS_18,10
EVENING,P2,WEEKENDS,10
`
rp = `
ratingProfiles = `
CUSTOMER_1,0,OUT,rif:from:tm,danb,PREMIUM,2012-01-01T00:00:00Z
CUSTOMER_1,0,OUT,rif:from:tm,danb,STANDARD,2012-02-28T00:00:00Z
CUSTOMER_2,0,OUT,danb:87.139.12.167,danb,STANDARD,2012-01-01T00:00:00Z
@@ -71,19 +71,19 @@ CUSTOMER_1,0,OUT,danb,,PREMIUM,2012-01-01T00:00:00Z
vdf,0,OUT,rif,,EVENING,2012-01-01T00:00:00Z
vdf,0,OUT,rif,,EVENING,2012-02-28T00:00:00Z
vdf,0,OUT,minu,,EVENING,2012-01-01T00:00:00Z
vdf,0,OUT,minu,,EVENING,2012-02-28T00:00:00Z
vdf,0,OUT,*all,,EVENING,2012-02-28T00:00:00Z
`
a = `
actions = `
MINI,TOPUP,MINUTES,OUT,100,NAT,ABSOLUTE,0,10,10
`
atms = `
actionTimings = `
MORE_MINUTES,MINI,ONE_TIME_RUN,10
`
atrs = `
actionTriggers = `
STANDARD_TRIGGER,MINUTES,OUT,10,GERMANY_O2,SOME_1,10
STANDARD_TRIGGER,MINUTES,OUT,200,GERMANY,SOME_2,10
`
accs = `
accountActions = `
vdf,minitsboy,OUT,MORE_MINUTES,STANDARD_TRIGGER
`
)
@@ -92,15 +92,15 @@ var csvr *CSVReader
func init() {
csvr = NewStringCSVReader()
csvr.LoadDestinations(dest, ',')
csvr.LoadRates(rts, ',')
csvr.LoadTimings(ts, ',')
csvr.LoadRateTimings(rtts, ',')
csvr.LoadRatingProfiles(rp, ',')
csvr.LoadActions(a, ',')
csvr.LoadActionTimings(atms, ',')
csvr.LoadActionTriggers(atrs, ',')
csvr.LoadAccountActions(accs, ',')
csvr.LoadDestinations(destinations, ',')
csvr.LoadRates(rates, ',')
csvr.LoadTimings(timings, ',')
csvr.LoadRateTimings(rateTimings, ',')
csvr.LoadRatingProfiles(ratingProfiles, ',')
csvr.LoadActions(actions, ',')
csvr.LoadActionTimings(actionTimings, ',')
csvr.LoadActionTriggers(actionTriggers, ',')
csvr.LoadAccountActions(accountActions, ',')
csvr.WriteToDatabase(storageGetter, false, false)
}