used different kyoto lib

This commit is contained in:
Radu Ioan Fericean
2012-02-29 21:59:19 +02:00
parent 623c634848
commit f39503a75d
3 changed files with 42 additions and 39 deletions

View File

@@ -18,7 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
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)
}
}

View File

@@ -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}

View File

@@ -18,22 +18,26 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
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()))
}