From 9b7377e7f8b841c054f8924d59ef3aa934843099 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Fri, 10 Aug 2012 22:09:22 +0300 Subject: [PATCH] correction for deep hidden bug :) --- .travis.yml | 2 +- build.sh | 12 ++++++++++++ conf/session_manager.config | 5 ++++- build_and_test.sh => test.sh | 4 ---- timespans/activationperiod.go | 6 +++++- timespans/activationperiod_test.go | 9 +++++++++ timespans/calldesc.go | 3 --- timespans/interval_test.go | 9 +++++++++ timespans/minute_buckets.go | 12 +++++++----- timespans/userbalance.go | 4 ++-- 10 files changed, 49 insertions(+), 17 deletions(-) create mode 100755 build.sh rename build_and_test.sh => test.sh (62%) diff --git a/.travis.yml b/.travis.yml index 4bc41896a..5da29ade5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,4 +15,4 @@ notifications: on_success: change on_failure: always -after_script: ./build_and_test.sh +after_script: ./test.sh diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..6031fc6fa --- /dev/null +++ b/build.sh @@ -0,0 +1,12 @@ +#! /usr/bin/env sh + +go install github.com/cgrates/cgrates/cmd/cgr-rater +cr=$? +go install github.com/cgrates/cgrates/cmd/cgr-loader +cl=$? +go install github.com/cgrates/cgrates/cmd/cgr-console +cc=$? + +exit $cr || $cl || $cc + + diff --git a/conf/session_manager.config b/conf/session_manager.config index c4fec82ad..b36e76704 100644 --- a/conf/session_manager.config +++ b/conf/session_manager.config @@ -26,4 +26,7 @@ enabled = true rater = internal #address where to access rater. Can be internal, direct rater address or the address of a balancer freeswitch_server = localhost:8021 freeswitch_pass = ClueCon -rpc_encoding = gob \ No newline at end of file +rpc_encoding = gob + +[scheduler] +enabled = true diff --git a/build_and_test.sh b/test.sh similarity index 62% rename from build_and_test.sh rename to test.sh index 05a653807..a655108b9 100755 --- a/build_and_test.sh +++ b/test.sh @@ -1,9 +1,5 @@ #! /usr/bin/env sh -go install github.com/cgrates/cgrates/cmd/cgr-rater -go install github.com/cgrates/cgrates/cmd/cgr-loader -go install github.com/cgrates/cgrates/cmd/cgr-console - go test github.com/cgrates/cgrates/timespans ts=$? go test github.com/cgrates/cgrates/sessionmanager diff --git a/timespans/activationperiod.go b/timespans/activationperiod.go index be58db0c8..173f3a55c 100644 --- a/timespans/activationperiod.go +++ b/timespans/activationperiod.go @@ -80,7 +80,11 @@ func (ap *ActivationPeriod) restore(input string) { elements := strings.Split(input, "|") unixNano, _ := strconv.ParseInt(elements[0], 10, 64) ap.ActivationTime = time.Unix(0, unixNano).In(time.UTC) - for _, is := range elements[1 : len(elements)-1] { + els := elements[1:] + if len(els) > 1 { + els = elements[1 : len(elements)-1] + } + for _, is := range els { i := &Interval{} i.restore(is) ap.Intervals = append(ap.Intervals, i) diff --git a/timespans/activationperiod_test.go b/timespans/activationperiod_test.go index 1c302db26..3767c5379 100644 --- a/timespans/activationperiod_test.go +++ b/timespans/activationperiod_test.go @@ -48,6 +48,15 @@ func TestApStoreRestore(t *testing.T) { } } +func TestApRestoreFromString(t *testing.T) { + s := "1325376000000000000|;1,2,3,4,5,6,7,8,9,10,11,12;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31;1,2,3,4,5,6,0;00:00:00;;10;0;0.2;60;1\n" + ap := ActivationPeriod{} + ap.restore(s) + if len(ap.Intervals) != 1 { + t.Error("Error restoring activation period from string", ap) + } +} + func TestApRestoreFromStorage(t *testing.T) { cd := &CallDescriptor{ Direction: "OUT", diff --git a/timespans/calldesc.go b/timespans/calldesc.go index 3141ad6de..4a213b651 100644 --- a/timespans/calldesc.go +++ b/timespans/calldesc.go @@ -153,9 +153,6 @@ func (cd *CallDescriptor) SearchStorageForPrefix() (destPrefix string, err error } //load the activation preriods if err == nil && len(values) > 0 { - if len(values[0].Intervals) > 0 { - Logger.Debug(fmt.Sprintf("Activation periods: ", values[0].Intervals)) - } cd.ActivationPeriods = values } return diff --git a/timespans/interval_test.go b/timespans/interval_test.go index fc7a286a2..690523386 100644 --- a/timespans/interval_test.go +++ b/timespans/interval_test.go @@ -48,6 +48,15 @@ func TestIntervalStoreRestore(t *testing.T) { } } +func TestIntervalRestoreFromString(t *testing.T) { + s := ";1,2,3,4,5,6,7,8,9,10,11,12;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31;1,2,3,4,5,6,0;00:00:00;;10;0;0.2;60;1" + i := Interval{} + i.restore(s) + if i.Price != 0.2 { + t.Errorf("Error restoring inteval period from string %+v", i) + } +} + func TestIntervalMonth(t *testing.T) { i := &Interval{Months: Months{time.February}} d := time.Date(2012, time.February, 10, 23, 0, 0, 0, time.UTC) diff --git a/timespans/minute_buckets.go b/timespans/minute_buckets.go index 4b88f63f2..eeb300d84 100644 --- a/timespans/minute_buckets.go +++ b/timespans/minute_buckets.go @@ -102,9 +102,11 @@ De-serializes the minute bucket for the storage. Used for key-value storages. */ func (mb *MinuteBucket) restore(input string) { elements := strings.Split(input, ";") - mb.Seconds, _ = strconv.ParseFloat(elements[0], 64) - mb.Weight, _ = strconv.ParseFloat(elements[1], 64) - mb.Price, _ = strconv.ParseFloat(elements[2], 64) - mb.Percent, _ = strconv.ParseFloat(elements[3], 64) - mb.DestinationId = elements[4] + if len(elements) == 5 { + mb.Seconds, _ = strconv.ParseFloat(elements[0], 64) + mb.Weight, _ = strconv.ParseFloat(elements[1], 64) + mb.Price, _ = strconv.ParseFloat(elements[2], 64) + mb.Percent, _ = strconv.ParseFloat(elements[3], 64) + mb.DestinationId = elements[4] + } } diff --git a/timespans/userbalance.go b/timespans/userbalance.go index 2a8d0f20b..cb3694620 100644 --- a/timespans/userbalance.go +++ b/timespans/userbalance.go @@ -122,7 +122,7 @@ If the amount is bigger than the sum of all seconds in the minute buckets than n debited and an error will be returned. */ func (ub *UserBalance) debitMinutesBalance(amount float64, prefix string, count bool) error { - if count && amount > 0 { + if count { ub.countUnits(&Action{BalanceId: MINUTES, Direction: OUTBOUND, MinuteBucket: &MinuteBucket{Seconds: amount, DestinationId: prefix}}) } avaliableNbSeconds, _, bucketList := ub.getSecondsForPrefix(prefix) @@ -169,7 +169,7 @@ func (ub *UserBalance) debitMinutesBalance(amount float64, prefix string, count Debits some amount of user's specified balance. Returns the remaining credit in user's balance. */ func (ub *UserBalance) debitBalance(balanceId string, amount float64, count bool) float64 { - if count && amount > 0 { + if count { ub.countUnits(&Action{BalanceId: balanceId, Direction: OUTBOUND, Units: amount}) } ub.BalanceMap[balanceId+OUTBOUND] -= amount