diff --git a/timespans/activationperiod_test.go b/timespans/activationperiod_test.go
index ed07645c4..03ff385f4 100644
--- a/timespans/activationperiod_test.go
+++ b/timespans/activationperiod_test.go
@@ -18,7 +18,9 @@ along with this program. If not, see
package timespans
import (
+ "reflect"
"testing"
+ "time"
//"log"
)
@@ -43,3 +45,23 @@ func TestApRestoreRedis(t *testing.T) {
t.Error("Error restoring activation periods: ", cd.ActivationPeriods)
}
}
+
+func TestApStoreRestore(t *testing.T) {
+ getter, _ := NewRedisStorage("tcp:127.0.0.1:6379", 10)
+ defer getter.Close()
+ d := time.Date(2012, time.February, 1, 14, 30, 1, 0, time.UTC)
+ i := &Interval{Month: time.February,
+ MonthDay: 1,
+ WeekDays: []time.Weekday{time.Wednesday, time.Thursday},
+ StartTime: "14:30:00",
+ EndTime: "15:00:00"}
+ ap := &ActivationPeriod{ActivationTime: d}
+ ap.AddInterval(i)
+
+ getter.SetActivationPeriods("storerestore", []*ActivationPeriod{ap})
+ aps, err := getter.GetActivationPeriods("storerestore")
+ if err != nil || len(aps) != 1 || !reflect.DeepEqual(ap, aps[0]) {
+ t.Log(aps)
+ t.Errorf("Expected %v was %v ", ap, aps)
+ }
+}
diff --git a/timespans/calldesc_test.go b/timespans/calldesc_test.go
index 6ec227f8a..736203666 100644
--- a/timespans/calldesc_test.go
+++ b/timespans/calldesc_test.go
@@ -23,29 +23,6 @@ import (
//"log"
)
-func TestKyotoStoreRestore(t *testing.T) {
- getter, _ := NewRedisStorage("tcp:127.0.0.1:6379", 10)
- defer getter.Close()
- d := time.Date(2012, time.February, 1, 14, 30, 1, 0, time.UTC)
- i := &Interval{Month: time.February,
- MonthDay: 1,
- WeekDays: []time.Weekday{time.Wednesday, time.Thursday},
- StartTime: "14:30:00",
- EndTime: "15:00:00"}
- ap := &ActivationPeriod{ActivationTime: d}
- ap.AddInterval(i)
-
- cd := &CallDescriptor{CstmId: "vdf", Subject: "storerestore", DestinationPrefix: "0256"}
- cd.AddActivationPeriod(ap)
-
- getter.SetActivationPeriods(cd.GetKey(), cd.ActivationPeriods)
- aps, err := getter.GetActivationPeriods(cd.GetKey())
- if err != nil || len(aps) != 1 {
- t.Log(aps)
- t.Errorf("Expected %v was %v ", ap, aps)
- }
-}
-
func TestKyotoSplitSpans(t *testing.T) {
getter, _ := NewKyotoStorage("test.kch")
defer getter.Close()
@@ -258,7 +235,7 @@ func TestMaxSessionTimeNoCredit(t *testing.T) {
}
func TestGetCostWithVolumeDiscount(t *testing.T) {
- getter, _ := NewKyotoStorage("test.kch")
+ getter, _ := NewRedisStorage("tcp:127.0.0.1:6379", 10)
defer getter.Close()
vd1 := &VolumeDiscount{100, 10}
vd2 := &VolumeDiscount{500, 20}
diff --git a/timespans/kyoto_storage.go b/timespans/kyoto_storage.go
index 7987b4d7a..1c7b42205 100644
--- a/timespans/kyoto_storage.go
+++ b/timespans/kyoto_storage.go
@@ -18,22 +18,26 @@ along with this program. If not, see
package timespans
import (
+ "bitbucket.org/ww/cabinet"
"bytes"
"encoding/gob"
- "github.com/fsouza/gokabinet/kc"
+ //"github.com/fsouza/gokabinet/kc"
// "log"
"sync"
)
type KyotoStorage struct {
- db *kc.DB
+ //db *kc.DB
+ db *cabinet.KCDB
buf bytes.Buffer
dec *gob.Decoder
mux sync.Mutex // we need norma lock because we reset the buf variable
}
func NewKyotoStorage(filaName string) (*KyotoStorage, error) {
- ndb, err := kc.Open(filaName, kc.WRITE)
+ //ndb, err := kc.Open(filaName, kc.WRITE)
+ ndb := cabinet.New()
+ err := ndb.Open(filaName, cabinet.KCOWRITER|cabinet.KCOCREATE)
ks := &KyotoStorage{db: ndb}
ks.dec = gob.NewDecoder(&ks.buf)
return ks, err
@@ -50,53 +54,53 @@ func (ks *KyotoStorage) SetActivationPeriods(key string, aps []*ActivationPeriod
var writeBuf bytes.Buffer
encoder := gob.NewEncoder(&writeBuf)
encoder.Encode(aps)
- return ks.db.Set(key, writeBuf.String())
+ return ks.db.Set([]byte(key), writeBuf.Bytes())
}
func (ks *KyotoStorage) GetActivationPeriods(key string) (aps []*ActivationPeriod, err error) {
ks.mux.Lock()
defer ks.mux.Unlock()
- values, err := ks.db.Get(key)
+ values, err := ks.db.Get([]byte(key))
ks.buf.Reset()
- ks.buf.WriteString(values)
+ ks.buf.Write(values)
ks.dec.Decode(&aps)
return
}
func (ks *KyotoStorage) GetDestination(key string) (dest *Destination, err error) {
- if values, err := ks.db.Get(key); err == nil {
+ if values, err := ks.db.Get([]byte(key)); err == nil {
dest = &Destination{Id: key}
- dest.restore(values)
+ dest.restore(string(values))
}
return
}
func (ks *KyotoStorage) SetDestination(dest *Destination) error {
- return ks.db.Set(dest.Id, dest.store())
+ return ks.db.Set([]byte(dest.Id), []byte(dest.store()))
}
func (ks *KyotoStorage) GetTariffPlan(key string) (tp *TariffPlan, err error) {
- if values, err := ks.db.Get(key); err == nil {
+ if values, err := ks.db.Get([]byte(key)); err == nil {
tp = &TariffPlan{Id: key}
- tp.restore(values)
+ tp.restore(string(values))
}
return
}
func (ks *KyotoStorage) SetTariffPlan(tp *TariffPlan) error {
- return ks.db.Set(tp.Id, tp.store())
+ return ks.db.Set([]byte(tp.Id), []byte(tp.store()))
}
func (ks *KyotoStorage) GetUserBudget(key string) (ub *UserBudget, err error) {
- if values, err := ks.db.Get(key); err == nil {
+ if values, err := ks.db.Get([]byte(key)); err == nil {
ub = &UserBudget{Id: key}
- ub.restore(values)
+ ub.restore(string(values))
}
return
}
func (ks *KyotoStorage) SetUserBudget(ub *UserBudget) error {
- return ks.db.Set(ub.Id, ub.store())
+ return ks.db.Set([]byte(ub.Id), []byte(ub.store()))
}