From 97c4cf5bd6e202d97797615c70412dd084fd9cb8 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Sat, 2 Aug 2014 15:32:55 +0300 Subject: [PATCH] test for stats RPC methods --- cmd/cgr-engine/cgr-engine.go | 3 +- engine/stats_test.go | 164 ++++++++++++++++++++++++++++++++++- engine/storage_map.go | 4 +- 3 files changed, 166 insertions(+), 5 deletions(-) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 64bb155dd..7af2e4128 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -465,8 +465,7 @@ func main() { if cfg.CDRStatsEnabled { cdrStats = engine.NewStats(ratingDb) if cfg.CDRStatConfig != nil && len(cfg.CDRStatConfig.Metrics) != 0 { - var out int - cdrStats.AddQueue(engine.NewCdrStatsFromCdrStatsCfg(cfg.CDRStatConfig), &out) + cdrStats.AddQueue(engine.NewCdrStatsFromCdrStatsCfg(cfg.CDRStatConfig), nil) } server.RpcRegister(cdrStats) server.RpcRegister(&apier.CDRStatsV1{cdrStats}) // Public APIs diff --git a/engine/stats_test.go b/engine/stats_test.go index 360d19698..2f5d22105 100644 --- a/engine/stats_test.go +++ b/engine/stats_test.go @@ -25,7 +25,7 @@ import ( "github.com/cgrates/cgrates/utils" ) -func TestStatsInit(t *testing.T) { +func TestStatsQueueInit(t *testing.T) { sq := NewStatsQueue(&CdrStats{Metrics: []string{ASR, ACC}}) if len(sq.metrics) != 2 { t.Error("Expected 2 metrics got ", len(sq.metrics)) @@ -180,3 +180,165 @@ func TestAcceptCdr(t *testing.T) { t.Error("Should have accepted thif CDR: %+v", cdr) } } + +func TestStatsQueueIds(t *testing.T) { + cdrStats := NewStats(dataStorage) + ids := []string{} + if err := cdrStats.GetQueueIds(0, &ids); err != nil { + t.Error("Error getting queue ids: ", err) + } + result := len(ids) + expected := 2 + if result != expected { + t.Errorf("Error loading stats queues. Expected %v was %v", expected, result) + } +} + +func TestStatsAppendCdr(t *testing.T) { + cdrStats := NewStats(dataStorage) + cdr := &utils.StoredCdr{ + Tenant: "cgrates.org", + Category: "call", + AnswerTime: time.Now(), + SetupTime: time.Now(), + Usage: 10 * time.Second, + Cost: 10, + } + err := cdrStats.AppendCDR(cdr, nil) + if err != nil { + t.Error("Error appending cdr to stats: ", err) + } + if len(cdrStats.queues["CDRST1"].cdrs) != 0 || + len(cdrStats.queues["CDRST2"].cdrs) != 1 { + t.Error("Error appending cdr to queue: ", len(cdrStats.queues["CDRST2"].cdrs)) + } +} + +func TestStatsGetValues(t *testing.T) { + cdrStats := NewStats(dataStorage) + cdr := &utils.StoredCdr{ + Tenant: "cgrates.org", + Category: "call", + AnswerTime: time.Now(), + SetupTime: time.Now(), + Usage: 10 * time.Second, + Cost: 10, + } + cdrStats.AppendCDR(cdr, nil) + cdr = &utils.StoredCdr{ + Tenant: "cgrates.org", + Category: "call", + AnswerTime: time.Now(), + SetupTime: time.Now(), + Usage: 2 * time.Second, + Cost: 4, + } + cdrStats.AppendCDR(cdr, nil) + valMap := make(map[string]float64) + if err := cdrStats.GetValues("CDRST2", &valMap); err != nil { + t.Error("Error getting metric values: ", err) + } + if len(valMap) != 2 || valMap["ACD"] != 6 || valMap["ASR"] != 100 { + t.Error("Error on metric map: ", valMap) + } +} + +func TestStatsReloadQueues(t *testing.T) { + cdrStats := NewStats(dataStorage) + cdr := &utils.StoredCdr{ + Tenant: "cgrates.org", + Category: "call", + AnswerTime: time.Now(), + SetupTime: time.Now(), + Usage: 10 * time.Second, + Cost: 10, + } + cdrStats.AppendCDR(cdr, nil) + if err := cdrStats.ReloadQueues(nil, nil); err != nil { + t.Error("Error reloading queues: ", err) + } + ids := []string{} + if err := cdrStats.GetQueueIds(0, &ids); err != nil { + t.Error("Error getting queue ids: ", err) + } + result := len(ids) + expected := 2 + if result != expected { + t.Errorf("Error loading stats queues. Expected %v was %v", expected, result) + } + valMap := make(map[string]float64) + if err := cdrStats.GetValues("CDRST2", &valMap); err != nil { + t.Error("Error getting metric values: ", err) + } + if len(valMap) != 2 || valMap["ACD"] != 0 || valMap["ASR"] != 0 { + t.Error("Error on metric map: ", valMap) + } +} + +func TestStatsReloadQueuesWithDefault(t *testing.T) { + cdrStats := NewStats(dataStorage) + cdrStats.AddQueue(&CdrStats{ + Id: utils.META_DEFAULT, + }, nil) + cdr := &utils.StoredCdr{ + Tenant: "cgrates.org", + Category: "call", + AnswerTime: time.Now(), + SetupTime: time.Now(), + Usage: 10 * time.Second, + Cost: 10, + } + cdrStats.AppendCDR(cdr, nil) + + if err := cdrStats.ReloadQueues(nil, nil); err != nil { + t.Error("Error reloading queues: ", err) + } + ids := []string{} + if err := cdrStats.GetQueueIds(0, &ids); err != nil { + t.Error("Error getting queue ids: ", err) + } + result := len(ids) + expected := 3 + if result != expected { + t.Errorf("Error loading stats queues. Expected %v was %v", expected, result) + } + valMap := make(map[string]float64) + if err := cdrStats.GetValues("CDRST2", &valMap); err != nil { + t.Error("Error getting metric values: ", err) + } + if len(valMap) != 2 || valMap["ACD"] != 0 || valMap["ASR"] != 0 { + t.Error("Error on metric map: ", valMap) + } +} + +func TestStatsResetQueues(t *testing.T) { + cdrStats := NewStats(dataStorage) + cdr := &utils.StoredCdr{ + Tenant: "cgrates.org", + Category: "call", + AnswerTime: time.Now(), + SetupTime: time.Now(), + Usage: 10 * time.Second, + Cost: 10, + } + cdrStats.AppendCDR(cdr, nil) + if err := cdrStats.ResetQueues(nil, nil); err != nil { + t.Error("Error reloading queues: ", err) + } + ids := []string{} + if err := cdrStats.GetQueueIds(0, &ids); err != nil { + t.Error("Error getting queue ids: ", err) + } + result := len(ids) + expected := 2 + if result != expected { + t.Errorf("Error loading stats queues. Expected %v was %v", expected, result) + } + valMap := make(map[string]float64) + if err := cdrStats.GetValues("CDRST2", &valMap); err != nil { + t.Error("Error getting metric values: ", err) + } + if len(valMap) != 2 || valMap["ACD"] != 0 || valMap["ASR"] != 0 { + t.Error("Error on metric map: ", valMap) + } +} diff --git a/engine/storage_map.go b/engine/storage_map.go index 606e7ce83..fdad137d4 100644 --- a/engine/storage_map.go +++ b/engine/storage_map.go @@ -526,7 +526,7 @@ func (ms *MapStorage) SetCdrStats(cs *CdrStats) error { } func (ms *MapStorage) GetCdrStats(key string) (cs *CdrStats, err error) { - if values, ok := ms.dict[key]; ok { + if values, ok := ms.dict[CDR_STATS_PREFIX+key]; ok { err = ms.ms.Unmarshal(values, &cs) } else { return nil, errors.New(utils.ERR_NOT_FOUND) @@ -539,7 +539,7 @@ func (ms *MapStorage) GetAllCdrStats() (css []*CdrStats, err error) { if !strings.HasPrefix(key, CDR_STATS_PREFIX) { continue } - var cs *CdrStats + cs := &CdrStats{} err = ms.ms.Unmarshal(value, cs) css = append(css, cs) }