From a0b2211696a44d55c35b96e4e6b44f1c7bc1794a Mon Sep 17 00:00:00 2001 From: nickolasdaniel Date: Tue, 9 Nov 2021 17:24:51 +0200 Subject: [PATCH] Testing RPC EEs --- ees/log_test.go | 15 ++++ ees/rpc_test.go | 228 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 243 insertions(+) create mode 100644 ees/rpc_test.go diff --git a/ees/log_test.go b/ees/log_test.go index 6e484e256..37c5ef873 100644 --- a/ees/log_test.go +++ b/ees/log_test.go @@ -19,7 +19,10 @@ along with this program. If not, see package ees import ( + "bytes" + "log" "reflect" + "strings" "testing" "github.com/cgrates/birpc/context" @@ -56,7 +59,19 @@ func TestLogEEExportEvent(t *testing.T) { "field1": 2, "field2": "value", } + utils.Logger, err = utils.Newlogger(utils.MetaStdLog, utils.EmptyString) + if err != nil { + t.Error(err) + } + utils.Logger.SetLogLevel(7) + buff := new(bytes.Buffer) + log.SetOutput(buff) + logEE.ExportEvent(context.Background(), mp, "") + exp := `CGRateS <> [INFO] <*default> exported: <{"field1":2,"field2":"value"}>` + if !strings.Contains(buff.String(), exp) { + t.Errorf("Expected %v to contain %v", exp, buff.String()) + } } func TestLogEEGetMetrics(t *testing.T) { diff --git a/ees/rpc_test.go b/ees/rpc_test.go new file mode 100644 index 000000000..35cb274bf --- /dev/null +++ b/ees/rpc_test.go @@ -0,0 +1,228 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package ees + +import ( + "reflect" + "testing" + + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +func TestNewRpcEE(t *testing.T) { + eeSCfg := config.NewDefaultCGRConfig().EEsCfg().GetDefaultExporter() + dc, err := newEEMetrics("Local") + if err != nil { + t.Error(err) + } + connMgr := engine.NewConnManager(config.NewDefaultCGRConfig()) + + rcv, err := NewRpcEE(eeSCfg, dc, connMgr) + if err != nil { + t.Error(err) + } + + exp := &RPCee{ + cfg: eeSCfg, + dc: dc, + connMgr: connMgr, + } + + err = exp.parseOpts() + if err != nil { + t.Error(err) + } + + if !reflect.DeepEqual(rcv, exp) { + t.Errorf("Expected %+v \n but received \n %+v", exp, rcv) + } +} + +func TestRPCCfg(t *testing.T) { + cfg := &RPCee{ + cfg: &config.EventExporterCfg{ + ID: utils.MetaDefault, + Type: utils.MetaNone, + Attempts: 1, + Opts: new(config.EventExporterOpts), + ExportPath: "/var/spool/cgrates/ees", + FailedPostsDir: "/var/spool/cgrates/failed_posts", + AttributeSIDs: []string{}, + Fields: []*config.FCTemplate{}, + Filters: []string{}, + Flags: utils.FlagsWithParams{}, + Synchronous: false, + Timezone: "", + ConcurrentRequests: 0, + }, + codec: utils.MetaJSON, + serviceMethod: utils.APIerSv1ExportToFolder, + } + exp := &config.EventExporterCfg{ + ID: utils.MetaDefault, + Type: utils.MetaNone, + Attempts: 1, + Opts: new(config.EventExporterOpts), + ExportPath: "/var/spool/cgrates/ees", + FailedPostsDir: "/var/spool/cgrates/failed_posts", + AttributeSIDs: []string{}, + Fields: []*config.FCTemplate{}, + Filters: []string{}, + Flags: utils.FlagsWithParams{}, + Synchronous: false, + Timezone: "", + ConcurrentRequests: 0, + } + + rcv := cfg.Cfg() + rcv.HeaderFields() + + if !reflect.DeepEqual(rcv, exp) { + t.Errorf("Expected %+v \n but received \n %+v", utils.ToJSON(exp), utils.ToJSON(rcv)) + } +} + +func TestRPCConnect(t *testing.T) { + eeSCfg := config.NewDefaultCGRConfig().EEsCfg().GetDefaultExporter() + dc, err := newEEMetrics("Local") + if err != nil { + t.Error(err) + } + connMgr := engine.NewConnManager(config.NewDefaultCGRConfig()) + rpcEe, err := NewRpcEE(eeSCfg, dc, connMgr) + if err != nil { + t.Error(err) + } + if err := rpcEe.Connect(); err != nil { + t.Error(err) + } +} + +// func TestRPCExportEvent(t *testing.T) { +// eeSCfg := config.NewDefaultCGRConfig().EEsCfg().GetDefaultExporter() +// dc, err := newEEMetrics("Local") +// if err != nil { +// t.Error(err) +// } +// connMgr := engine.NewConnManager(config.NewDefaultCGRConfig()) +// rpcEe, err := NewRpcEE(eeSCfg, dc, connMgr) +// if err != nil { +// t.Error(err) +// } + +// // rpcEe.connMgr. + +// // internalCacheSChann := make(chan birpc.ClientConnector, 1) +// // rpcEe.connMgr.AddInternalConn(utils.ConcatenatedKey(utils.MetaJSON, utils.MetaCaches), "", internalCacheSChann) +// rpcEe.connIDs = []string{utils.ConcatenatedKey(utils.MetaJSON, utils.MetaCaches)utils.MetaInternal} + +// rpcEe.serviceMethod = utils.APIerSv1ExportToFolder +// args := &utils.TenantWithAPIOpts{ +// Tenant: "cgrates.org", +// APIOpts: map[string]interface{}{}, +// } + +// if err := rpcEe.ExportEvent(context.Background(), args, ""); err != nil { +// t.Error(err) +// } +// } + +func TestRPCClose(t *testing.T) { + eeSCfg := config.NewDefaultCGRConfig().EEsCfg().GetDefaultExporter() + dc, err := newEEMetrics("Local") + if err != nil { + t.Error(err) + } + connMgr := engine.NewConnManager(config.NewDefaultCGRConfig()) + rpcEe, err := NewRpcEE(eeSCfg, dc, connMgr) + if err != nil { + t.Error(err) + } + + if err := rpcEe.Close(); err != nil { + t.Error(err) + } else if rpcEe.connMgr != nil { + t.Errorf("Expected connMgr to be nil") + } +} + +func TestRPCGetMetrics(t *testing.T) { + eeSCfg := config.NewDefaultCGRConfig().EEsCfg().GetDefaultExporter() + dc := &utils.SafeMapStorage{ + MapStorage: utils.MapStorage{ + "time": "now", + "just_a_field": "just_a_value", + }, + } + connMgr := engine.NewConnManager(config.NewDefaultCGRConfig()) + rpcEe, err := NewRpcEE(eeSCfg, dc, connMgr) + if err != nil { + t.Error(err) + } + + if rcv := rpcEe.GetMetrics(); !reflect.DeepEqual(rcv, dc) { + t.Errorf("Expected %v \n but received \n %v", dc, rcv) + } +} + +func TestRPCPrepareMap(t *testing.T) { + eeSCfg := config.NewDefaultCGRConfig().EEsCfg().GetDefaultExporter() + dc, err := newEEMetrics("Local") + if err != nil { + t.Error(err) + } + connMgr := engine.NewConnManager(config.NewDefaultCGRConfig()) + rpcEe, err := NewRpcEE(eeSCfg, dc, connMgr) + if err != nil { + t.Error(err) + } + + exp := &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "CGRID1", + Event: map[string]interface{}{ + utils.Usage: 21, + }, + APIOpts: map[string]interface{}{ + utils.Subsys: "*attributes", + }, + } + + cgrEv := &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "CGRID1", + Event: map[string]interface{}{ + utils.Usage: 21, + }, + APIOpts: map[string]interface{}{ + utils.Subsys: "*attributes", + }, + } + + rcv, err := rpcEe.PrepareMap(cgrEv) + if err != nil { + t.Error(err) + } + + if !reflect.DeepEqual(rcv, exp) { + t.Errorf("Expected %+v \n but received \n %+v", utils.ToJSON(exp), utils.ToJSON(rcv)) + } +}