From f39503a75d4d6530f8d9e39bff0c82ba3feaf503 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 29 Feb 2012 21:59:19 +0200 Subject: [PATCH] used different kyoto lib --- timespans/activationperiod_test.go | 22 +++++++++++++++++++ timespans/calldesc_test.go | 25 +--------------------- timespans/kyoto_storage.go | 34 +++++++++++++++++------------- 3 files changed, 42 insertions(+), 39 deletions(-) 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())) }