diff --git a/engine/cdrs_test.go b/engine/cdrs_test.go new file mode 100644 index 000000000..b29d5c4b9 --- /dev/null +++ b/engine/cdrs_test.go @@ -0,0 +1,126 @@ +/* +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 engine + +import ( + "reflect" + "testing" + "time" + + "github.com/cgrates/birpc/context" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/guardian" + "github.com/cgrates/cgrates/utils" +) + +func TestCDRsNewCDRServer(t *testing.T) { + var sent StorDB + cfg := config.NewDefaultCGRConfig() + storDBChan := make(chan StorDB, 1) + storDBChan <- sent + dm := &DataManager{} + fltrs := &FilterS{} + connMng := &ConnManager{} + newCDRSrv := NewCDRServer(cfg, storDBChan, dm, fltrs, connMng) + expected := &CDRServer{ + cfg: cfg, + cdrDB: sent, + dm: dm, + guard: guardian.Guardian, + filterS: fltrs, + connMgr: connMng, + storDBChan: storDBChan, + } + if !reflect.DeepEqual(newCDRSrv, expected) { + t.Errorf("\nExpected <%+v> \n, received <%+v>", expected, newCDRSrv) + } +} + +func TestCDRsListenAndServeCaseStorDBChanOK(t *testing.T) { + var sent StorDB + cfg := config.NewDefaultCGRConfig() + storDBChan := make(chan StorDB, 1) + storDBChan <- sent + dm := &DataManager{} + fltrs := &FilterS{} + connMng := &ConnManager{} + newCDRSrv := NewCDRServer(cfg, storDBChan, dm, fltrs, connMng) + stopChan := make(chan struct{}, 1) + func() { + storDBChan <- sent + time.Sleep(10 * time.Millisecond) + stopChan <- struct{}{} + }() + newCDRSrv.ListenAndServe(stopChan) + if !reflect.DeepEqual(newCDRSrv.cdrDB, sent) { + t.Errorf("\nExpected <%+v> \n, received <%+v>", sent, newCDRSrv.cdrDB) + } +} + +func TestCDRsListenAndServeCaseStorDBChanNotOK(t *testing.T) { + var sent StorDB + cfg := config.NewDefaultCGRConfig() + storDBChan := make(chan StorDB, 1) + storDBChan <- sent + dm := &DataManager{} + fltrs := &FilterS{} + connMng := &ConnManager{} + newCDRSrv := NewCDRServer(cfg, storDBChan, dm, fltrs, connMng) + stopChan := make(chan struct{}, 1) + func() { + time.Sleep(30 * time.Millisecond) + close(storDBChan) + }() + newCDRSrv.ListenAndServe(stopChan) + if !reflect.DeepEqual(newCDRSrv.cdrDB, nil) { + t.Errorf("\nExpected <%+v> \n, received <%+v>", nil, newCDRSrv.cdrDB) + } +} + +func TestCDRsChrgrSProcessEventErrMsnConnIDs(t *testing.T) { + var sent StorDB + cfg := config.NewDefaultCGRConfig() + storDBChan := make(chan StorDB, 1) + storDBChan <- sent + dm := &DataManager{} + fltrs := &FilterS{} + connMng := &ConnManager{} + newCDRSrv := NewCDRServer(cfg, storDBChan, dm, fltrs, connMng) + + cgrEv := &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "testID", + Event: map[string]interface{}{ + "Resources": "ResourceProfile1", + utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC), + "UsageInterval": "1s", + "PddInterval": "1s", + utils.Weight: "20.0", + utils.Usage: 135 * time.Second, + utils.Cost: 123.0, + }, + APIOpts: map[string]interface{}{ + utils.Subsys: utils.MetaChargers, + }, + } + _, err := newCDRSrv.chrgrSProcessEvent(context.Background(), cgrEv) + if err == nil || err.Error() != "MANDATORY_IE_MISSING: [connIDs]" { + t.Errorf("\nExpected <%+v> \n, received <%+v>", nil, err) + } + +}