diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index 532563350..2d1717de9 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -20,6 +20,7 @@ along with this program. If not, see package v1 import ( + "math/rand" "net/rpc" "net/rpc/jsonrpc" "path" @@ -38,6 +39,22 @@ var ( stsV1Rpc *rpc.Client ) +var evs = []engine.StatsEvent{ + engine.StatsEvent{ + utils.ID: "event1", + utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC)}, + engine.StatsEvent{ + utils.ID: "event2", + utils.ANSWER_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC)}, + engine.StatsEvent{ + utils.ID: "event3", + utils.SETUP_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC)}, +} + +func init() { + rand.Seed(time.Now().UnixNano()) // used in benchmarks +} + func TestStatSV1LoadConfig(t *testing.T) { var err error stsV1CfgPath = path.Join(*dataDir, "conf", "samples", "stats") @@ -130,7 +147,7 @@ func TestStatSV1ProcessEvent(t *testing.T) { t.Errorf("received reply: %s", reply) } if err := stsV1Rpc.Call("StatSV1.ProcessEvent", - map[string]interface{}{ + engine.StatsEvent{ utils.ID: "event3", utils.SETUP_TIME: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC)}, &reply); err != nil { @@ -150,8 +167,41 @@ func TestStatSV1ProcessEvent(t *testing.T) { } } +/* func TestStatSV1StopEngine(t *testing.T) { if err := engine.KillEngine(100); err != nil { t.Error(err) } } +*/ + +// BenchmarkStatSV1SetEvent 5000 263437 ns/op +func BenchmarkStatSV1SetEvent(b *testing.B) { + b.StopTimer() + var err error + stsV1Rpc, err = jsonrpc.Dial("tcp", stsV1Cfg.RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + if err != nil { + b.Fatal("Could not connect to rater: ", err.Error()) + } + var reply string + b.StartTimer() + for i := 0; i < b.N; i++ { + if err := stsV1Rpc.Call("StatSV1.ProcessEvent", evs[rand.Intn(len(evs))], + &reply); err != nil { + b.Error(err) + } else if reply != utils.OK { + b.Errorf("received reply: %s", reply) + } + } +} + +// BenchmarkStatSV1GetStringMetrics 20000 94607 ns/op +func BenchmarkStatSV1GetStringMetrics(b *testing.B) { + for i := 0; i < b.N; i++ { + var metrics map[string]string + if err := stsV1Rpc.Call("StatSV1.GetStringMetrics", "Stats1", + &metrics); err != nil { + b.Error(err) + } + } +}