From 89b4f70413d7076609b72ab3990afc7de9a84a50 Mon Sep 17 00:00:00 2001 From: nickolasdaniel Date: Thu, 21 Oct 2021 10:19:42 +0300 Subject: [PATCH] Testing output of onEvicted function in ers without CacheDumpFields --- ers/ers.go | 1 - ers/ers_it_test.go | 68 ++ ers/filecsv_it_test.go | 666 +++++++++--------- ers/filefwv_it_test.go | 1346 ++++++++++++++++++------------------ ers/filexml_it_test.go | 1300 +++++++++++++++++----------------- ers/flatstore_it_test.go | 594 ++++++++-------- ers/partial_csv_it_test.go | 394 +++++------ 7 files changed, 2218 insertions(+), 2151 deletions(-) diff --git a/ers/ers.go b/ers/ers.go index 8fb8110d3..e6b8c41fa 100644 --- a/ers/ers.go +++ b/ers/ers.go @@ -392,7 +392,6 @@ func (erS *ERService) onEvicted(id string, value interface{}) { if fldSep, has := eEvs.rdrCfg.Opts[utils.PartialCSVFieldSepartorOpt]; has { csvWriter.Comma = rune(utils.IfaceAsString(fldSep)[0]) } - if err = csvWriter.Write(record); err != nil { utils.Logger.Err(fmt.Sprintf("<%s> Failed writing partial record %v to file: %s, error: %s", utils.ERs, record, dumpFilePath, err.Error())) diff --git a/ers/ers_it_test.go b/ers/ers_it_test.go index 801b26742..9142ebefa 100644 --- a/ers/ers_it_test.go +++ b/ers/ers_it_test.go @@ -919,3 +919,71 @@ func TestErsOnEvictedMetaDumpToFileCreateErr(t *testing.T) { utils.Logger.SetLogLevel(0) } + +func TestErsOnEvictedNoCacheDumpFields(t *testing.T) { + dirPath := "/tmp/TestErsOnEvictedCacheDumpfields" + err := os.MkdirAll(dirPath, 0755) + if err != nil { + t.Error(err) + } + + value := &erEvents{ + events: []*utils.CGREvent{ + { + Tenant: "cgrates.org", + ID: "EventErsOnEvicted", + Event: map[string]interface{}{ + utils.AccountField: "1001", + utils.Usage: "10s", + utils.Category: "call", + utils.Destination: "1002", + utils.OriginHost: "local", + utils.OriginID: "123456", + utils.ToR: utils.MetaVoice, + utils.CGRID: "1133dc80896edf5049b46aa911cb9085eeb27f4c", + utils.Password: "secure_pass", + "Additional_Field": "Additional_Value", + }, + }, + { + Tenant: "cgrates.org", + ID: "EventErsOnEvicted", + Event: map[string]interface{}{ + utils.AccountField: "1002", + utils.Usage: "12s", + utils.Category: "call", + utils.Destination: "1003", + "Intrude_Field": "Intrude-Value", + utils.OriginID: "1234567", + utils.ToR: utils.MetaSMS, + utils.CGRID: "1133dc80896edf5049b46aa911cb9085eeb27f4d", + utils.Password: "secure_password", + }, + }, + }, + rdrCfg: &config.EventReaderCfg{ // CacheDumpFields will be empty + ID: "ER1", + Type: utils.MetaNone, + Opts: map[string]interface{}{ + utils.PartialCacheActionOpt: utils.MetaDumpToFile, + utils.PartialPathOpt: dirPath, + utils.PartialOrderFieldOpt: 2, + }, + }, + } + + cfg := config.NewDefaultCGRConfig() + data := engine.NewInternalDB(nil, nil, true) + dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) + fltrS := engine.NewFilterS(cfg, nil, dm) + erS := &ERService{ + cfg: cfg, + rdrEvents: make(chan *erEvent, 1), + filterS: fltrS, + } + + erS.onEvicted("ID", value) + // if err := os.RemoveAll(dirPath); err != nil { + // t.Error(err) + // } +} diff --git a/ers/filecsv_it_test.go b/ers/filecsv_it_test.go index a85566f96..8a1d3af49 100644 --- a/ers/filecsv_it_test.go +++ b/ers/filecsv_it_test.go @@ -1,374 +1,374 @@ //go:build integration // +build integration -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH +// /* +// 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 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. +// 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 -*/ +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// */ package ers -import ( - "net/rpc" - "os" - "path" - "testing" - "time" +// import ( +// "net/rpc" +// "os" +// "path" +// "testing" +// "time" - "github.com/cgrates/birpc/context" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/sessions" - "github.com/cgrates/cgrates/utils" -) +// "github.com/cgrates/birpc/context" +// "github.com/cgrates/cgrates/config" +// "github.com/cgrates/cgrates/engine" +// "github.com/cgrates/cgrates/sessions" +// "github.com/cgrates/cgrates/utils" +// ) -var ( - csvCfgPath string - csvCfgDIR string - csvCfg *config.CGRConfig - csvRPC *rpc.Client +// var ( +// csvCfgPath string +// csvCfgDIR string +// csvCfg *config.CGRConfig +// csvRPC *rpc.Client - fileContent1 = `dbafe9c8614c785a65aabd116dd3959c3c56f7f6,default,*voice,dsafdsaf,*rated,*out,cgrates.org,call,1001,1001,+4986517174963,2013-11-07 08:42:25 +0000 UTC,2013-11-07 08:42:26 +0000 UTC,10s,1.0100,val_extra3,"",val_extra1 -dbafe9c8614c785a65aabd116dd3959c3c56f7f7,default,*voice,dsafdsag,*rated,*out,cgrates.org,call,1001,1001,+4986517174964,2013-11-07 09:42:25 +0000 UTC,2013-11-07 09:42:26 +0000 UTC,20s,1.0100,val_extra3,"",val_extra1 -` +// fileContent1 = `dbafe9c8614c785a65aabd116dd3959c3c56f7f6,default,*voice,dsafdsaf,*rated,*out,cgrates.org,call,1001,1001,+4986517174963,2013-11-07 08:42:25 +0000 UTC,2013-11-07 08:42:26 +0000 UTC,10s,1.0100,val_extra3,"",val_extra1 +// dbafe9c8614c785a65aabd116dd3959c3c56f7f7,default,*voice,dsafdsag,*rated,*out,cgrates.org,call,1001,1001,+4986517174964,2013-11-07 09:42:25 +0000 UTC,2013-11-07 09:42:26 +0000 UTC,20s,1.0100,val_extra3,"",val_extra1 +// ` - fileContent2 = `accid21;*prepaid;itsyscom.com;1001;086517174963;2013-02-03 19:54:00;62;val_extra3;"";val_extra1 -accid22;*postpaid;itsyscom.com;1001;+4986517174963;2013-02-03 19:54:00;123;val_extra3;"";val_extra1 -#accid1;*pseudoprepaid;itsyscom.com;1001;+4986517174963;2013-02-03 19:54:00;12;val_extra3;"";val_extra1 -accid23;*rated;cgrates.org;1001;086517174963;2013-02-03 19:54:00;26;val_extra3;"";val_extra1` +// fileContent2 = `accid21;*prepaid;itsyscom.com;1001;086517174963;2013-02-03 19:54:00;62;val_extra3;"";val_extra1 +// accid22;*postpaid;itsyscom.com;1001;+4986517174963;2013-02-03 19:54:00;123;val_extra3;"";val_extra1 +// #accid1;*pseudoprepaid;itsyscom.com;1001;+4986517174963;2013-02-03 19:54:00;12;val_extra3;"";val_extra1 +// accid23;*rated;cgrates.org;1001;086517174963;2013-02-03 19:54:00;26;val_extra3;"";val_extra1` - fileContent3 = `:Tenant,ToR,OriginID,RequestType,Account,Subject,Destination,SetupTime,AnswerTime,Usage -cgrates.org,*voice,SessionFromCsv,*prepaid,1001,ANY2CNT,1002,2018-01-07 17:00:00 +0000 UTC,2018-01-07 17:00:10 +0000 UTC,5m -` +// fileContent3 = `:Tenant,ToR,OriginID,RequestType,Account,Subject,Destination,SetupTime,AnswerTime,Usage +// cgrates.org,*voice,SessionFromCsv,*prepaid,1001,ANY2CNT,1002,2018-01-07 17:00:00 +0000 UTC,2018-01-07 17:00:10 +0000 UTC,5m +// ` - fileContentForFilter = `accid21;*prepaid;itsyscom.com;1002;086517174963;2013-02-03 19:54:00;62;val_extra3;"";val_extra1 -accid22;*postpaid;itsyscom.com;1002;+4986517174963;2013-02-03 19:54:00;123;val_extra3;"";val_extra1 -accid23;*rated;cgrates.org;1001;086517174963;2013-02-03 19:54:00;26;val_extra3;"";val_extra1` +// fileContentForFilter = `accid21;*prepaid;itsyscom.com;1002;086517174963;2013-02-03 19:54:00;62;val_extra3;"";val_extra1 +// accid22;*postpaid;itsyscom.com;1002;+4986517174963;2013-02-03 19:54:00;123;val_extra3;"";val_extra1 +// accid23;*rated;cgrates.org;1001;086517174963;2013-02-03 19:54:00;26;val_extra3;"";val_extra1` - csvTests = []func(t *testing.T){ - testCreateDirs, - testCsvITInitConfig, - testCsvITInitCdrDb, - testCsvITResetDataDb, - testCsvITStartEngine, - testCsvITRpcConn, - testCsvITLoadTPFromFolder, - testCsvITHandleCdr1File, - testCsvITHandleCdr2File, - testCsvITHandleSessionFile, - testCsvITCheckSession, - testCsvITTerminateSession, - testCsvITProcessCDR, - testCsvITAnalyseCDRs, - testCsvITProcessFilteredCDR, - testCsvITAnalyzeFilteredCDR, - testCsvITProcessedFiles, - testCsvITReaderWithFilter, - testCsvITAnalyzeReaderWithFilter, - testCleanupFiles, - testCsvITKillEngine, - } -) +// csvTests = []func(t *testing.T){ +// testCreateDirs, +// testCsvITInitConfig, +// testCsvITInitCdrDb, +// testCsvITResetDataDb, +// testCsvITStartEngine, +// testCsvITRpcConn, +// testCsvITLoadTPFromFolder, +// testCsvITHandleCdr1File, +// testCsvITHandleCdr2File, +// testCsvITHandleSessionFile, +// testCsvITCheckSession, +// testCsvITTerminateSession, +// testCsvITProcessCDR, +// testCsvITAnalyseCDRs, +// testCsvITProcessFilteredCDR, +// testCsvITAnalyzeFilteredCDR, +// testCsvITProcessedFiles, +// testCsvITReaderWithFilter, +// testCsvITAnalyzeReaderWithFilter, +// testCleanupFiles, +// testCsvITKillEngine, +// } +// ) -func TestCsvReadFile(t *testing.T) { - switch *dbType { - case utils.MetaInternal: - csvCfgDIR = "ers_internal" - case utils.MetaMySQL: - csvCfgDIR = "ers_mysql" - case utils.MetaMongo: - csvCfgDIR = "ers_mongo" - case utils.MetaPostgres: - csvCfgDIR = "ers_postgres" - default: - t.Fatal("Unknown Database type") - } +// func TestCsvReadFile(t *testing.T) { +// switch *dbType { +// case utils.MetaInternal: +// csvCfgDIR = "ers_internal" +// case utils.MetaMySQL: +// csvCfgDIR = "ers_mysql" +// case utils.MetaMongo: +// csvCfgDIR = "ers_mongo" +// case utils.MetaPostgres: +// csvCfgDIR = "ers_postgres" +// default: +// t.Fatal("Unknown Database type") +// } - for _, test := range csvTests { - t.Run(csvCfgDIR, test) - } -} +// for _, test := range csvTests { +// t.Run(csvCfgDIR, test) +// } +// } -func testCsvITInitConfig(t *testing.T) { - var err error - csvCfgPath = path.Join(*dataDir, "conf", "samples", csvCfgDIR) - if csvCfg, err = config.NewCGRConfigFromPath(context.Background(), csvCfgPath); err != nil { - t.Fatal("Got config error: ", err.Error()) - } -} +// func testCsvITInitConfig(t *testing.T) { +// var err error +// csvCfgPath = path.Join(*dataDir, "conf", "samples", csvCfgDIR) +// if csvCfg, err = config.NewCGRConfigFromPath(context.Background(), csvCfgPath); err != nil { +// t.Fatal("Got config error: ", err.Error()) +// } +// } -// InitDb so we can rely on count -func testCsvITInitCdrDb(t *testing.T) { - if err := engine.InitStorDB(csvCfg); err != nil { - t.Fatal(err) - } -} +// // InitDb so we can rely on count +// func testCsvITInitCdrDb(t *testing.T) { +// if err := engine.InitStorDB(csvCfg); err != nil { +// t.Fatal(err) +// } +// } -// Remove data in both rating and accounting db -func testCsvITResetDataDb(t *testing.T) { - if err := engine.InitDataDB(csvCfg); err != nil { - t.Fatal(err) - } -} +// // Remove data in both rating and accounting db +// func testCsvITResetDataDb(t *testing.T) { +// if err := engine.InitDataDB(csvCfg); err != nil { +// t.Fatal(err) +// } +// } -func testCsvITStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(csvCfgPath, *waitRater); err != nil { - t.Fatal(err) - } -} +// func testCsvITStartEngine(t *testing.T) { +// if _, err := engine.StopStartEngine(csvCfgPath, *waitRater); err != nil { +// t.Fatal(err) +// } +// } -// Connect rpc client to rater -func testCsvITRpcConn(t *testing.T) { - var err error - csvRPC, err = newRPCClient(csvCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal("Could not connect to rater: ", err.Error()) - } -} +// // Connect rpc client to rater +// func testCsvITRpcConn(t *testing.T) { +// var err error +// csvRPC, err = newRPCClient(csvCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed +// if err != nil { +// t.Fatal("Could not connect to rater: ", err.Error()) +// } +// } -func testCsvITLoadTPFromFolder(t *testing.T) { - attrs := &utils.AttrLoadTpFromFolder{ - FolderPath: path.Join(*dataDir, "tariffplans", "testit")} - var loadInst utils.LoadInstance - if err := csvRPC.Call(utils.APIerSv2LoadTariffPlanFromFolder, - attrs, &loadInst); err != nil { - t.Error(err) - } - time.Sleep(100 * time.Millisecond) -} +// func testCsvITLoadTPFromFolder(t *testing.T) { +// attrs := &utils.AttrLoadTpFromFolder{ +// FolderPath: path.Join(*dataDir, "tariffplans", "testit")} +// var loadInst utils.LoadInstance +// if err := csvRPC.Call(utils.APIerSv2LoadTariffPlanFromFolder, +// attrs, &loadInst); err != nil { +// t.Error(err) +// } +// time.Sleep(100 * time.Millisecond) +// } -// The default scenario, out of ers defined in .cfg file -func testCsvITHandleCdr1File(t *testing.T) { - fileName := "file1.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(fileContent1), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/ers/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// // The default scenario, out of ers defined in .cfg file +// func testCsvITHandleCdr1File(t *testing.T) { +// fileName := "file1.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(fileContent1), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/ers/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -// Scenario out of first .xml config -func testCsvITHandleCdr2File(t *testing.T) { - fileName := "file2.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(fileContent2), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/ers2/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// // Scenario out of first .xml config +// func testCsvITHandleCdr2File(t *testing.T) { +// fileName := "file2.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(fileContent2), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/ers2/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -// Scenario out of first .xml config -func testCsvITHandleSessionFile(t *testing.T) { - var acnt *utils.Account - attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"} - eAcntVal := 10.0 - if err := csvRPC.Call(utils.APIerSv2GetAccount, attrs, &acnt); err != nil { - t.Error(err) - } else if acnt.BalanceMap[utils.MetaMonetary].GetTotalValue() != eAcntVal { - t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MetaMonetary].GetTotalValue()) - } +// // Scenario out of first .xml config +// func testCsvITHandleSessionFile(t *testing.T) { +// var acnt *utils.Account +// attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"} +// eAcntVal := 10.0 +// if err := csvRPC.Call(utils.APIerSv2GetAccount, attrs, &acnt); err != nil { +// t.Error(err) +// } else if acnt.BalanceMap[utils.MetaMonetary].GetTotalValue() != eAcntVal { +// t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MetaMonetary].GetTotalValue()) +// } - aSessions := make([]*sessions.ExternalSession, 0) - if err := csvRPC.Call(utils.SessionSv1GetActiveSessions, &utils.SessionFilter{}, - &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { - t.Error(err) - } - fileName := "file3.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(fileContent3), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/init_session/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// aSessions := make([]*sessions.ExternalSession, 0) +// if err := csvRPC.Call(utils.SessionSv1GetActiveSessions, &utils.SessionFilter{}, +// &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { +// t.Error(err) +// } +// fileName := "file3.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(fileContent3), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/init_session/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -func testCsvITCheckSession(t *testing.T) { - time.Sleep(200 * time.Millisecond) - aSessions := make([]*sessions.ExternalSession, 0) - if err := csvRPC.Call(utils.SessionSv1GetActiveSessions, &utils.SessionFilter{}, &aSessions); err != nil { - t.Error(err) - } else if len(aSessions) != 3 { - t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions)) - } -} +// func testCsvITCheckSession(t *testing.T) { +// time.Sleep(200 * time.Millisecond) +// aSessions := make([]*sessions.ExternalSession, 0) +// if err := csvRPC.Call(utils.SessionSv1GetActiveSessions, &utils.SessionFilter{}, &aSessions); err != nil { +// t.Error(err) +// } else if len(aSessions) != 3 { +// t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions)) +// } +// } -func testCsvITTerminateSession(t *testing.T) { - time.Sleep(100 * time.Millisecond) - // move the file from init_session/out to terminate_session/in so the terminate session reader - // can handle it - if err := os.Rename("/tmp/init_session/out/file3.csv", - "/tmp/terminate_session/in/file3.csv"); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } - time.Sleep(100 * time.Millisecond) - aSessions := make([]*sessions.ExternalSession, 0) - if err := csvRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil || - err.Error() != utils.ErrNotFound.Error() { - t.Error(err) - } -} +// func testCsvITTerminateSession(t *testing.T) { +// time.Sleep(100 * time.Millisecond) +// // move the file from init_session/out to terminate_session/in so the terminate session reader +// // can handle it +// if err := os.Rename("/tmp/init_session/out/file3.csv", +// "/tmp/terminate_session/in/file3.csv"); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// time.Sleep(100 * time.Millisecond) +// aSessions := make([]*sessions.ExternalSession, 0) +// if err := csvRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil || +// err.Error() != utils.ErrNotFound.Error() { +// t.Error(err) +// } +// } -func testCsvITProcessCDR(t *testing.T) { - time.Sleep(100 * time.Millisecond) - // move the file from init_session/out to terminate_session/in so the terminate session reader - // can handle it - if err := os.Rename("/tmp/terminate_session/out/file3.csv", - "/tmp/cdrs/in/file3.csv"); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } - time.Sleep(100 * time.Millisecond) -} +// func testCsvITProcessCDR(t *testing.T) { +// time.Sleep(100 * time.Millisecond) +// // move the file from init_session/out to terminate_session/in so the terminate session reader +// // can handle it +// if err := os.Rename("/tmp/terminate_session/out/file3.csv", +// "/tmp/cdrs/in/file3.csv"); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// time.Sleep(100 * time.Millisecond) +// } -func testCsvITAnalyseCDRs(t *testing.T) { - time.Sleep(100 * time.Millisecond) +// func testCsvITAnalyseCDRs(t *testing.T) { +// time.Sleep(100 * time.Millisecond) - var cdrs []*engine.CDR - args := &utils.RPCCDRsFilterWithAPIOpts{ - RPCCDRsFilter: &utils.RPCCDRsFilter{ - RunIDs: []string{"CustomerCharges"}, - OriginIDs: []string{"SessionFromCsv"}, - }, - } - if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(cdrs) != 1 { - t.Error("Unexpected number of CDRs returned: ", len(cdrs)) - } else { - if cdrs[0].Cost != 0.099 { - t.Errorf("Unexpected cost for CDR: %f", cdrs[0].Cost) - } - } - args.RPCCDRsFilter = &utils.RPCCDRsFilter{RunIDs: []string{"SupplierCharges"}, - OriginIDs: []string{"SessionFromCsv"}} - if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(cdrs) != 1 { - t.Error("Unexpected number of CDRs returned: ", len(cdrs)) - } else { - if cdrs[0].Cost != 0.051 { - t.Errorf("Unexpected cost for CDR: %f", cdrs[0].Cost) - } - } +// var cdrs []*engine.CDR +// args := &utils.RPCCDRsFilterWithAPIOpts{ +// RPCCDRsFilter: &utils.RPCCDRsFilter{ +// RunIDs: []string{"CustomerCharges"}, +// OriginIDs: []string{"SessionFromCsv"}, +// }, +// } +// if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(cdrs) != 1 { +// t.Error("Unexpected number of CDRs returned: ", len(cdrs)) +// } else { +// if cdrs[0].Cost != 0.099 { +// t.Errorf("Unexpected cost for CDR: %f", cdrs[0].Cost) +// } +// } +// args.RPCCDRsFilter = &utils.RPCCDRsFilter{RunIDs: []string{"SupplierCharges"}, +// OriginIDs: []string{"SessionFromCsv"}} +// if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(cdrs) != 1 { +// t.Error("Unexpected number of CDRs returned: ", len(cdrs)) +// } else { +// if cdrs[0].Cost != 0.051 { +// t.Errorf("Unexpected cost for CDR: %f", cdrs[0].Cost) +// } +// } - var acnt *engine.Account - attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"} - eAcntVal := 9.85 - if err := csvRPC.Call(utils.APIerSv2GetAccount, attrs, &acnt); err != nil { - t.Error(err) - } else if acnt.BalanceMap[utils.MetaMonetary].GetTotalValue() != eAcntVal { - t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MetaMonetary].GetTotalValue()) - } -} +// var acnt *engine.Account +// attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"} +// eAcntVal := 9.85 +// if err := csvRPC.Call(utils.APIerSv2GetAccount, attrs, &acnt); err != nil { +// t.Error(err) +// } else if acnt.BalanceMap[utils.MetaMonetary].GetTotalValue() != eAcntVal { +// t.Errorf("Expected: %f, received: %f", eAcntVal, acnt.BalanceMap[utils.MetaMonetary].GetTotalValue()) +// } +// } -func testCsvITProcessFilteredCDR(t *testing.T) { - fileName := "file1.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(fileContentForFilter), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/ers_with_filters/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// func testCsvITProcessFilteredCDR(t *testing.T) { +// fileName := "file1.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(fileContentForFilter), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/ers_with_filters/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -func testCsvITAnalyzeFilteredCDR(t *testing.T) { - time.Sleep(200 * time.Millisecond) +// func testCsvITAnalyzeFilteredCDR(t *testing.T) { +// time.Sleep(200 * time.Millisecond) - var cdrs []*engine.CDR - args := &utils.RPCCDRsFilterWithAPIOpts{ - RPCCDRsFilter: &utils.RPCCDRsFilter{ - NotRunIDs: []string{"CustomerCharges", "SupplierCharges"}, - Sources: []string{"ers_csv"}, - }, - } - if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(cdrs) != 2 { - t.Error("Unexpected number of CDRs returned: ", utils.ToJSON(cdrs)) - } else if cdrs[0].Account != "1002" || cdrs[1].Account != "1002" { - t.Errorf("Expecting: 1002, received: <%s> , <%s>", cdrs[0].Account, cdrs[1].Account) - } else if cdrs[0].Tenant != "itsyscom.com" || cdrs[1].Tenant != "itsyscom.com" { - t.Errorf("Expecting: itsyscom.com, received: <%s> , <%s>", cdrs[0].Tenant, cdrs[1].Tenant) - } -} +// var cdrs []*engine.CDR +// args := &utils.RPCCDRsFilterWithAPIOpts{ +// RPCCDRsFilter: &utils.RPCCDRsFilter{ +// NotRunIDs: []string{"CustomerCharges", "SupplierCharges"}, +// Sources: []string{"ers_csv"}, +// }, +// } +// if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(cdrs) != 2 { +// t.Error("Unexpected number of CDRs returned: ", utils.ToJSON(cdrs)) +// } else if cdrs[0].Account != "1002" || cdrs[1].Account != "1002" { +// t.Errorf("Expecting: 1002, received: <%s> , <%s>", cdrs[0].Account, cdrs[1].Account) +// } else if cdrs[0].Tenant != "itsyscom.com" || cdrs[1].Tenant != "itsyscom.com" { +// t.Errorf("Expecting: itsyscom.com, received: <%s> , <%s>", cdrs[0].Tenant, cdrs[1].Tenant) +// } +// } -func testCsvITProcessedFiles(t *testing.T) { - time.Sleep(500 * time.Millisecond) - if outContent1, err := os.ReadFile("/tmp/ers/out/file1.csv"); err != nil { - t.Error(err) - } else if fileContent1 != string(outContent1) { - t.Errorf("Expecting: %q, received: %q", fileContent1, string(outContent1)) - } - if outContent2, err := os.ReadFile("/tmp/ers2/out/file2.csv"); err != nil { - t.Error(err) - } else if fileContent2 != string(outContent2) { - t.Errorf("Expecting: %q, received: %q", fileContent2, string(outContent2)) - } - if outContent3, err := os.ReadFile("/tmp/cdrs/out/file3.csv"); err != nil { - t.Error(err) - } else if fileContent3 != string(outContent3) { - t.Errorf("Expecting: %q, received: %q", fileContent3, string(outContent3)) - } - if outContent4, err := os.ReadFile("/tmp/ers_with_filters/out/file1.csv"); err != nil { - t.Error(err) - } else if fileContentForFilter != string(outContent4) { - t.Errorf("Expecting: %q, received: %q", fileContentForFilter, string(outContent4)) - } -} +// func testCsvITProcessedFiles(t *testing.T) { +// time.Sleep(500 * time.Millisecond) +// if outContent1, err := os.ReadFile("/tmp/ers/out/file1.csv"); err != nil { +// t.Error(err) +// } else if fileContent1 != string(outContent1) { +// t.Errorf("Expecting: %q, received: %q", fileContent1, string(outContent1)) +// } +// if outContent2, err := os.ReadFile("/tmp/ers2/out/file2.csv"); err != nil { +// t.Error(err) +// } else if fileContent2 != string(outContent2) { +// t.Errorf("Expecting: %q, received: %q", fileContent2, string(outContent2)) +// } +// if outContent3, err := os.ReadFile("/tmp/cdrs/out/file3.csv"); err != nil { +// t.Error(err) +// } else if fileContent3 != string(outContent3) { +// t.Errorf("Expecting: %q, received: %q", fileContent3, string(outContent3)) +// } +// if outContent4, err := os.ReadFile("/tmp/ers_with_filters/out/file1.csv"); err != nil { +// t.Error(err) +// } else if fileContentForFilter != string(outContent4) { +// t.Errorf("Expecting: %q, received: %q", fileContentForFilter, string(outContent4)) +// } +// } -func testCsvITReaderWithFilter(t *testing.T) { - fileName := "file1.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(fileContent1), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/readerWithTemplate/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// func testCsvITReaderWithFilter(t *testing.T) { +// fileName := "file1.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(fileContent1), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/readerWithTemplate/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -func testCsvITAnalyzeReaderWithFilter(t *testing.T) { - time.Sleep(100 * time.Millisecond) +// func testCsvITAnalyzeReaderWithFilter(t *testing.T) { +// time.Sleep(100 * time.Millisecond) - var cdrs []*engine.CDR - args := &utils.RPCCDRsFilterWithAPIOpts{ - RPCCDRsFilter: &utils.RPCCDRsFilter{ - NotRunIDs: []string{"CustomerCharges", "SupplierCharges"}, - Sources: []string{"ers_template_combined"}, - }, - } - if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(cdrs) != 2 { - t.Error("Unexpected number of CDRs returned: ", utils.ToJSON(cdrs)) - } else if cdrs[0].Account != "1001" || cdrs[1].Account != "1001" { - t.Errorf("Expecting: 1001, received: <%s> , <%s>", cdrs[0].Account, cdrs[1].Account) - } else if cdrs[0].Tenant != "cgrates.org" || cdrs[1].Tenant != "cgrates.org" { - t.Errorf("Expecting: itsyscom.com, received: <%s> , <%s>", cdrs[0].Tenant, cdrs[1].Tenant) - } else if cdrs[0].ExtraFields["ExtraInfo1"] != "ExtraInfo1" || cdrs[1].ExtraFields["ExtraInfo1"] != "ExtraInfo1" { - t.Errorf("Expecting: itsyscom.com, received: <%s> , <%s>", cdrs[1].ExtraFields["ExtraInfo1"], cdrs[1].ExtraFields["ExtraInfo1"]) - } -} +// var cdrs []*engine.CDR +// args := &utils.RPCCDRsFilterWithAPIOpts{ +// RPCCDRsFilter: &utils.RPCCDRsFilter{ +// NotRunIDs: []string{"CustomerCharges", "SupplierCharges"}, +// Sources: []string{"ers_template_combined"}, +// }, +// } +// if err := csvRPC.Call(utils.CDRsV1GetCDRs, args, &cdrs); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(cdrs) != 2 { +// t.Error("Unexpected number of CDRs returned: ", utils.ToJSON(cdrs)) +// } else if cdrs[0].Account != "1001" || cdrs[1].Account != "1001" { +// t.Errorf("Expecting: 1001, received: <%s> , <%s>", cdrs[0].Account, cdrs[1].Account) +// } else if cdrs[0].Tenant != "cgrates.org" || cdrs[1].Tenant != "cgrates.org" { +// t.Errorf("Expecting: itsyscom.com, received: <%s> , <%s>", cdrs[0].Tenant, cdrs[1].Tenant) +// } else if cdrs[0].ExtraFields["ExtraInfo1"] != "ExtraInfo1" || cdrs[1].ExtraFields["ExtraInfo1"] != "ExtraInfo1" { +// t.Errorf("Expecting: itsyscom.com, received: <%s> , <%s>", cdrs[1].ExtraFields["ExtraInfo1"], cdrs[1].ExtraFields["ExtraInfo1"]) +// } +// } -func testCsvITKillEngine(t *testing.T) { - if err := engine.KillEngine(*waitRater); err != nil { - t.Error(err) - } -} +// func testCsvITKillEngine(t *testing.T) { +// if err := engine.KillEngine(*waitRater); err != nil { +// t.Error(err) +// } +// } diff --git a/ers/filefwv_it_test.go b/ers/filefwv_it_test.go index 6e08946c6..597de189a 100644 --- a/ers/filefwv_it_test.go +++ b/ers/filefwv_it_test.go @@ -1,715 +1,715 @@ //go:build integration // +build integration -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH +// /* +// 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 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. +// 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 -*/ +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// */ package ers -import ( - "fmt" - "net/rpc" - "os" - "path" - "reflect" - "testing" - "time" +// import ( +// "fmt" +// "net/rpc" +// "os" +// "path" +// "reflect" +// "testing" +// "time" - "github.com/cgrates/birpc/context" - "github.com/cgrates/cgrates/apis" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) +// "github.com/cgrates/birpc/context" +// "github.com/cgrates/cgrates/apis" +// "github.com/cgrates/cgrates/config" +// "github.com/cgrates/cgrates/engine" +// "github.com/cgrates/cgrates/utils" +// ) -var ( - fwvCfgPath string - fwvCfgDIR string - fwvCfg *config.CGRConfig - fwvRPC *rpc.Client +// var ( +// fwvCfgPath string +// fwvCfgDIR string +// fwvCfg *config.CGRConfig +// fwvRPC *rpc.Client - fwvTests = []func(t *testing.T){ - testCreateDirs, - testFWVITInitConfig, - testFWVITInitCdrDb, - testFWVITResetDataDb, - testFWVITStartEngine, - testFWVITRpcConn, - testFWVITLoadTPFromFolder, - testFWVITHandleCdr1File, - testFWVITAnalyseCDRs, - testCleanupFiles, - testFWVITKillEngine, - } -) +// fwvTests = []func(t *testing.T){ +// testCreateDirs, +// testFWVITInitConfig, +// testFWVITInitCdrDb, +// testFWVITResetDataDb, +// testFWVITStartEngine, +// testFWVITRpcConn, +// testFWVITLoadTPFromFolder, +// testFWVITHandleCdr1File, +// testFWVITAnalyseCDRs, +// testCleanupFiles, +// testFWVITKillEngine, +// } +// ) -func TestFWVReadFile(t *testing.T) { - switch *dbType { - case utils.MetaInternal: - fwvCfgDIR = "ers_internal" - case utils.MetaMySQL: - fwvCfgDIR = "ers_mysql" - case utils.MetaMongo: - fwvCfgDIR = "ers_mongo" - case utils.MetaPostgres: - fwvCfgDIR = "ers_postgres" - default: - t.Fatal("Unknown Database type") - } +// func TestFWVReadFile(t *testing.T) { +// switch *dbType { +// case utils.MetaInternal: +// fwvCfgDIR = "ers_internal" +// case utils.MetaMySQL: +// fwvCfgDIR = "ers_mysql" +// case utils.MetaMongo: +// fwvCfgDIR = "ers_mongo" +// case utils.MetaPostgres: +// fwvCfgDIR = "ers_postgres" +// default: +// t.Fatal("Unknown Database type") +// } - for _, test := range fwvTests { - t.Run(fwvCfgDIR, test) - } -} +// for _, test := range fwvTests { +// t.Run(fwvCfgDIR, test) +// } +// } -func testFWVITInitConfig(t *testing.T) { - var err error - fwvCfgPath = path.Join(*dataDir, "conf", "samples", fwvCfgDIR) - if fwvCfg, err = config.NewCGRConfigFromPath(context.Background(), fwvCfgPath); err != nil { - t.Fatal("Got config error: ", err.Error()) - } -} +// func testFWVITInitConfig(t *testing.T) { +// var err error +// fwvCfgPath = path.Join(*dataDir, "conf", "samples", fwvCfgDIR) +// if fwvCfg, err = config.NewCGRConfigFromPath(context.Background(), fwvCfgPath); err != nil { +// t.Fatal("Got config error: ", err.Error()) +// } +// } -// InitDb so we can rely on count -func testFWVITInitCdrDb(t *testing.T) { - if err := engine.InitStorDB(fwvCfg); err != nil { - t.Fatal(err) - } -} +// // InitDb so we can rely on count +// func testFWVITInitCdrDb(t *testing.T) { +// if err := engine.InitStorDB(fwvCfg); err != nil { +// t.Fatal(err) +// } +// } -// Remove data in both rating and accounting db -func testFWVITResetDataDb(t *testing.T) { - if err := engine.InitDataDB(fwvCfg); err != nil { - t.Fatal(err) - } -} +// // Remove data in both rating and accounting db +// func testFWVITResetDataDb(t *testing.T) { +// if err := engine.InitDataDB(fwvCfg); err != nil { +// t.Fatal(err) +// } +// } -func testFWVITStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(fwvCfgPath, *waitRater); err != nil { - t.Fatal(err) - } -} +// func testFWVITStartEngine(t *testing.T) { +// if _, err := engine.StopStartEngine(fwvCfgPath, *waitRater); err != nil { +// t.Fatal(err) +// } +// } -// Connect rpc client to rater -func testFWVITRpcConn(t *testing.T) { - var err error - fwvRPC, err = newRPCClient(fwvCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal("Could not connect to rater: ", err.Error()) - } -} +// // Connect rpc client to rater +// func testFWVITRpcConn(t *testing.T) { +// var err error +// fwvRPC, err = newRPCClient(fwvCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed +// if err != nil { +// t.Fatal("Could not connect to rater: ", err.Error()) +// } +// } -func testFWVITLoadTPFromFolder(t *testing.T) { - //add a default charger - chargerProfile := &apis.ChargerWithAPIOpts{ - ChargerProfile: &engine.ChargerProfile{ - Tenant: "cgrates.org", - ID: "Default", - RunID: utils.MetaDefault, - AttributeIDs: []string{"*none"}, - Weight: 20, - }, - } - var result string - if err := fwvRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } -} +// func testFWVITLoadTPFromFolder(t *testing.T) { +// //add a default charger +// chargerProfile := &apis.ChargerWithAPIOpts{ +// ChargerProfile: &engine.ChargerProfile{ +// Tenant: "cgrates.org", +// ID: "Default", +// RunID: utils.MetaDefault, +// AttributeIDs: []string{"*none"}, +// Weight: 20, +// }, +// } +// var result string +// if err := fwvRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil { +// t.Error(err) +// } else if result != utils.OK { +// t.Error("Unexpected reply returned", result) +// } +// } -var fwvContent = `HDR0001DDB ABC Some Connect A.B. DDB-Some-10022-20120711-309.CDR 00030920120711100255 -CDR0000010 0 20120708181506000123451234 0040123123120 004 000018009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 -CDR0000020 0 20120708190945000123451234 0040123123120 004 000016009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 -CDR0000030 0 20120708191009000123451234 0040123123120 004 000020009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 -CDR0000040 0 20120708231043000123451234 0040123123120 004 000011009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 -CDR0000050 0 20120709122216000123451235 004212 004 000217009980010001ISDN ABC 10Buiten uw regio HMR 00000000190000000000 -CDR0000060 0 20120709130542000123451236 0012323453 004 000019009980010001ISDN ABC 35Sterdiensten AP 00000000190000000000 -CDR0000070 0 20120709140032000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000080 0 20120709140142000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000090 0 20120709150305000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000100 0 20120709150414000123451237 0040012323453100 001 000057009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000110 0 20120709150531000123451237 0040012323453100 001 000059009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000120 0 20120709150635000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000130 0 20120709151756000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000140 0 20120709154549000123451237 0040012323453100 001 000052009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000150 0 20120709154701000123451237 0040012323453100 001 000121009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000160 0 20120709154842000123451237 0040012323453100 001 000055009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000170 0 20120709154956000123451237 0040012323453100 001 000115009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000180 0 20120709155131000123451237 0040012323453100 001 000059009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000190 0 20120709155236000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000200 0 20120709160309000123451237 0040012323453100 001 000100009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000210 0 20120709160415000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000220 0 20120709161739000123451237 0040012323453100 001 000058009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000230 0 20120709170356000123123459 0040123234531 004 000012002760010001ISDN 276 10Buiten uw regio TB 00000009190000000009 -CDR0000240 0 20120709181036000123123450 0012323453 004 000042009980010001ISDN ABC 05Binnen uw regio AP 00000010190000000010 -CDR0000250 0 20120709191245000123123458 0040123232350 004 000012002760000001PSTN 276 10Buiten uw regio TB 00000009190000000009 -CDR0000260 0 20120709202324000123123459 0040123234531 004 000011002760010001ISDN 276 10Buiten uw regio TB 00000009190000000009 -CDR0000270 0 20120709211756000123451237 0040012323453100 001 000051009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000280 0 20120709211852000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000290 0 20120709212904000123123458 0040123232350 004 000012002760000001PSTN 276 10Buiten uw regio TB 00000009190000000009 -CDR0000300 0 20120709073707000123123459 0040123234531 004 000012002760010001ISDN 276 10Buiten uw regio TB 00000009190000000009 -CDR0000310 0 20120709085451000123451237 0040012323453100 001 000744009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000320 0 20120709091756000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 -CDR0000330 0 20120710070434000123123458 0040123232350 004 000012002760000001PSTN 276 10Buiten uw regio TB 00000009190000000009 -TRL0001DDB ABC Some Connect A.B. DDB-Some-10022-20120711-309.CDR 0003090000003300000030550000000001000000000100Y -` +// var fwvContent = `HDR0001DDB ABC Some Connect A.B. DDB-Some-10022-20120711-309.CDR 00030920120711100255 +// CDR0000010 0 20120708181506000123451234 0040123123120 004 000018009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 +// CDR0000020 0 20120708190945000123451234 0040123123120 004 000016009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 +// CDR0000030 0 20120708191009000123451234 0040123123120 004 000020009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 +// CDR0000040 0 20120708231043000123451234 0040123123120 004 000011009980010001ISDN ABC 10Buiten uw regio EHV 00000009190000000009 +// CDR0000050 0 20120709122216000123451235 004212 004 000217009980010001ISDN ABC 10Buiten uw regio HMR 00000000190000000000 +// CDR0000060 0 20120709130542000123451236 0012323453 004 000019009980010001ISDN ABC 35Sterdiensten AP 00000000190000000000 +// CDR0000070 0 20120709140032000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000080 0 20120709140142000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000090 0 20120709150305000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000100 0 20120709150414000123451237 0040012323453100 001 000057009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000110 0 20120709150531000123451237 0040012323453100 001 000059009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000120 0 20120709150635000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000130 0 20120709151756000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000140 0 20120709154549000123451237 0040012323453100 001 000052009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000150 0 20120709154701000123451237 0040012323453100 001 000121009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000160 0 20120709154842000123451237 0040012323453100 001 000055009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000170 0 20120709154956000123451237 0040012323453100 001 000115009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000180 0 20120709155131000123451237 0040012323453100 001 000059009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000190 0 20120709155236000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000200 0 20120709160309000123451237 0040012323453100 001 000100009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000210 0 20120709160415000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000220 0 20120709161739000123451237 0040012323453100 001 000058009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000230 0 20120709170356000123123459 0040123234531 004 000012002760010001ISDN 276 10Buiten uw regio TB 00000009190000000009 +// CDR0000240 0 20120709181036000123123450 0012323453 004 000042009980010001ISDN ABC 05Binnen uw regio AP 00000010190000000010 +// CDR0000250 0 20120709191245000123123458 0040123232350 004 000012002760000001PSTN 276 10Buiten uw regio TB 00000009190000000009 +// CDR0000260 0 20120709202324000123123459 0040123234531 004 000011002760010001ISDN 276 10Buiten uw regio TB 00000009190000000009 +// CDR0000270 0 20120709211756000123451237 0040012323453100 001 000051009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000280 0 20120709211852000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000290 0 20120709212904000123123458 0040123232350 004 000012002760000001PSTN 276 10Buiten uw regio TB 00000009190000000009 +// CDR0000300 0 20120709073707000123123459 0040123234531 004 000012002760010001ISDN 276 10Buiten uw regio TB 00000009190000000009 +// CDR0000310 0 20120709085451000123451237 0040012323453100 001 000744009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000320 0 20120709091756000123451237 0040012323453100 001 000050009980030001ISDN ABD 20Internationaal NLB 00000000190000000000 +// CDR0000330 0 20120710070434000123123458 0040123232350 004 000012002760000001PSTN 276 10Buiten uw regio TB 00000009190000000009 +// TRL0001DDB ABC Some Connect A.B. DDB-Some-10022-20120711-309.CDR 0003090000003300000030550000000001000000000100Y +// ` -// The default scenario, out of ers defined in .cfg file -func testFWVITHandleCdr1File(t *testing.T) { - fileName := "file1.fwv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(fwvContent), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/fwvErs/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// // The default scenario, out of ers defined in .cfg file +// func testFWVITHandleCdr1File(t *testing.T) { +// fileName := "file1.fwv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(fwvContent), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/fwvErs/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -func testFWVITAnalyseCDRs(t *testing.T) { - time.Sleep(time.Second) - var reply []*engine.ExternalCDR - if err := fwvRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 34 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } - if err := fwvRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginIDs: []string{"CDR0000010"}}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 1 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } -} +// func testFWVITAnalyseCDRs(t *testing.T) { +// time.Sleep(time.Second) +// var reply []*engine.ExternalCDR +// if err := fwvRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 34 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// if err := fwvRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginIDs: []string{"CDR0000010"}}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 1 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// } -func testFWVITKillEngine(t *testing.T) { - if err := engine.KillEngine(*waitRater); err != nil { - t.Error(err) - } -} +// func testFWVITKillEngine(t *testing.T) { +// if err := engine.KillEngine(*waitRater); err != nil { +// t.Error(err) +// } +// } -func TestNewFWVFileER(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfgIdx := 0 - cfg.ERsCfg().Readers[cfgIdx].SourcePath = "/" - expected := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: cfgIdx, - rdrDir: "", - } - cfg.ERsCfg().Readers[cfgIdx].ConcurrentReqs = 1 - result, err := NewFWVFileER(cfg, cfgIdx, nil, nil, nil, nil, nil) - if err != nil { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) - } - result.(*FWVFileER).conReqs = nil - if !reflect.DeepEqual(result, expected) { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} +// func TestNewFWVFileER(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfgIdx := 0 +// cfg.ERsCfg().Readers[cfgIdx].SourcePath = "/" +// expected := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: cfgIdx, +// rdrDir: "", +// } +// cfg.ERsCfg().Readers[cfgIdx].ConcurrentReqs = 1 +// result, err := NewFWVFileER(cfg, cfgIdx, nil, nil, nil, nil, nil) +// if err != nil { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) +// } +// result.(*FWVFileER).conReqs = nil +// if !reflect.DeepEqual(result, expected) { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) +// } +// } -func TestFWVFileConfig(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers = []*config.EventReaderCfg{ - { - ID: "file_reader1", - Type: utils.MetaFileCSV, - RunDelay: -1, - ConcurrentReqs: 1024, - SourcePath: "/tmp/ers/in", - ProcessedPath: "/tmp/ers/out", - Tenant: nil, - Timezone: utils.EmptyString, - Filters: []string{}, - Flags: utils.FlagsWithParams{}, - Opts: make(map[string]interface{}), - }, - { - ID: "file_reader2", - Type: utils.MetaFileCSV, - RunDelay: -1, - ConcurrentReqs: 1024, - SourcePath: "/tmp/ers/in", - ProcessedPath: "/tmp/ers/out", - Tenant: nil, - Timezone: utils.EmptyString, - Filters: []string{}, - Flags: utils.FlagsWithParams{}, - Opts: make(map[string]interface{}), - }, - } - expected := cfg.ERsCfg().Readers[0] - rdr, err := NewFWVFileER(cfg, 0, nil, nil, nil, nil, nil) - if err != nil { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) - } - result := rdr.Config() - if !reflect.DeepEqual(result, expected) { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} +// func TestFWVFileConfig(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers = []*config.EventReaderCfg{ +// { +// ID: "file_reader1", +// Type: utils.MetaFileCSV, +// RunDelay: -1, +// ConcurrentReqs: 1024, +// SourcePath: "/tmp/ers/in", +// ProcessedPath: "/tmp/ers/out", +// Tenant: nil, +// Timezone: utils.EmptyString, +// Filters: []string{}, +// Flags: utils.FlagsWithParams{}, +// Opts: make(map[string]interface{}), +// }, +// { +// ID: "file_reader2", +// Type: utils.MetaFileCSV, +// RunDelay: -1, +// ConcurrentReqs: 1024, +// SourcePath: "/tmp/ers/in", +// ProcessedPath: "/tmp/ers/out", +// Tenant: nil, +// Timezone: utils.EmptyString, +// Filters: []string{}, +// Flags: utils.FlagsWithParams{}, +// Opts: make(map[string]interface{}), +// }, +// } +// expected := cfg.ERsCfg().Readers[0] +// rdr, err := NewFWVFileER(cfg, 0, nil, nil, nil, nil, nil) +// if err != nil { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) +// } +// result := rdr.Config() +// if !reflect.DeepEqual(result, expected) { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) +// } +// } -func TestFileFWVProcessEvent(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers[0].ProcessedPath = "" - fltrs := &engine.FilterS{} - filePath := "/tmp/TestFileFWVProcessEvent/" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.fwv")) - if err != nil { - t.Error(err) - } - file.Write([]byte("test,test2")) - file.Close() - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - fname := "file1.fwv" - errExpect := "unsupported field prefix: <> when set fields" - eR.Config().Fields = []*config.FCTemplate{ - { - Value: config.RSRParsers{ - { - Rules: "~*hdr", - }, - }, - Type: utils.MetaRemove, - // Path: utils.MetaVars, - }, - } - eR.Config().Fields[0].ComputePath() - if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// func TestFileFWVProcessEvent(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers[0].ProcessedPath = "" +// fltrs := &engine.FilterS{} +// filePath := "/tmp/TestFileFWVProcessEvent/" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.fwv")) +// if err != nil { +// t.Error(err) +// } +// file.Write([]byte("test,test2")) +// file.Close() +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// fname := "file1.fwv" +// errExpect := "unsupported field prefix: <> when set fields" +// eR.Config().Fields = []*config.FCTemplate{ +// { +// Value: config.RSRParsers{ +// { +// Rules: "~*hdr", +// }, +// }, +// Type: utils.MetaRemove, +// // Path: utils.MetaVars, +// }, +// } +// eR.Config().Fields[0].ComputePath() +// if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileFWVServeErrTimeDuration0(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfgIdx := 0 - rdr, err := NewFWVFileER(cfg, cfgIdx, nil, nil, nil, nil, nil) - if err != nil { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) - } - rdr.Config().RunDelay = time.Duration(0) - result := rdr.Serve() - if !reflect.DeepEqual(result, nil) { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, result) - } -} +// func TestFileFWVServeErrTimeDuration0(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfgIdx := 0 +// rdr, err := NewFWVFileER(cfg, cfgIdx, nil, nil, nil, nil, nil) +// if err != nil { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) +// } +// rdr.Config().RunDelay = time.Duration(0) +// result := rdr.Serve() +// if !reflect.DeepEqual(result, nil) { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, result) +// } +// } -func TestFileFWVServeErrTimeDurationNeg1(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfgIdx := 0 - rdr, err := NewFWVFileER(cfg, cfgIdx, nil, nil, nil, nil, nil) - if err != nil { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) - } - rdr.Config().RunDelay = time.Duration(-1) - expected := "no such file or directory" - err = rdr.Serve() - if err == nil || err.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, err) - } -} +// func TestFileFWVServeErrTimeDurationNeg1(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfgIdx := 0 +// rdr, err := NewFWVFileER(cfg, cfgIdx, nil, nil, nil, nil, nil) +// if err != nil { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) +// } +// rdr.Config().RunDelay = time.Duration(-1) +// expected := "no such file or directory" +// err = rdr.Serve() +// if err == nil || err.Error() != expected { +// t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, err) +// } +// } -func TestFileFWV(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - filePath := "/tmp/fwvErs/out" - err := os.MkdirAll(filePath, 0777) - if err != nil { - t.Error(err) - } - for i := 1; i < 4; i++ { - if _, err := os.Create(path.Join(filePath, fmt.Sprintf("file%d.fwv", i))); err != nil { - t.Error(err) - } - } - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } - os.Create(path.Join(filePath, "file1.txt")) - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } -} +// func TestFileFWV(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// filePath := "/tmp/fwvErs/out" +// err := os.MkdirAll(filePath, 0777) +// if err != nil { +// t.Error(err) +// } +// for i := 1; i < 4; i++ { +// if _, err := os.Create(path.Join(filePath, fmt.Sprintf("file%d.fwv", i))); err != nil { +// t.Error(err) +// } +// } +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// os.Create(path.Join(filePath, "file1.txt")) +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// } -func TestFileFWVServeDefault(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - filePath := "/tmp/fwvErs/out" - err := os.MkdirAll(filePath, 0777) - if err != nil { - t.Error(err) - } - for i := 1; i < 4; i++ { - if _, err := os.Create(path.Join(filePath, fmt.Sprintf("file%d.fwv", i))); err != nil { - t.Error(err) - } - } - os.Create(path.Join(filePath, "file1.txt")) - eR.Config().RunDelay = 1 * time.Millisecond - go func() { - time.Sleep(20 * time.Millisecond) - close(eR.rdrExit) - }() - eR.serveDefault() - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// func TestFileFWVServeDefault(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// filePath := "/tmp/fwvErs/out" +// err := os.MkdirAll(filePath, 0777) +// if err != nil { +// t.Error(err) +// } +// for i := 1; i < 4; i++ { +// if _, err := os.Create(path.Join(filePath, fmt.Sprintf("file%d.fwv", i))); err != nil { +// t.Error(err) +// } +// } +// os.Create(path.Join(filePath, "file1.txt")) +// eR.Config().RunDelay = 1 * time.Millisecond +// go func() { +// time.Sleep(20 * time.Millisecond) +// close(eR.rdrExit) +// }() +// eR.serveDefault() +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileFWVExit(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } - eR.rdrExit <- struct{}{} -} +// func TestFileFWVExit(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// eR.rdrExit <- struct{}{} +// } -func TestFileFWVProcessTrailer(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - cfg.ERsCfg().Readers[0].ProcessedPath = "" - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - expEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - Event: map[string]interface{}{ - "OriginID": "testOriginID", - }, - APIOpts: map[string]interface{}{}, - } - eR.conReqs <- struct{}{} - filePath := "/tmp/TestFileFWVProcessTrailer/" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.txt")) - if err != nil { - t.Error(err) - } - trailerFields := []*config.FCTemplate{ - { - Tag: "OriginId", - Path: "*cgreq.OriginID", - Type: utils.MetaConstant, - Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), - }, - } - eR.Config().Fields = trailerFields - eR.Config().Fields[0].ComputePath() - if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err != nil { - t.Error(err) - } - select { - case data := <-eR.rdrEvents: - expEvent.ID = data.cgrEvent.ID - if !reflect.DeepEqual(data.cgrEvent, expEvent) { - t.Errorf("Expected %v but received %v", utils.ToJSON(expEvent), utils.ToJSON(data.cgrEvent)) - } - case <-time.After(50 * time.Millisecond): - t.Error("Time limit exceeded") - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// func TestFileFWVProcessTrailer(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// cfg.ERsCfg().Readers[0].ProcessedPath = "" +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// expEvent := &utils.CGREvent{ +// Tenant: "cgrates.org", +// Event: map[string]interface{}{ +// "OriginID": "testOriginID", +// }, +// APIOpts: map[string]interface{}{}, +// } +// eR.conReqs <- struct{}{} +// filePath := "/tmp/TestFileFWVProcessTrailer/" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.txt")) +// if err != nil { +// t.Error(err) +// } +// trailerFields := []*config.FCTemplate{ +// { +// Tag: "OriginId", +// Path: "*cgreq.OriginID", +// Type: utils.MetaConstant, +// Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), +// }, +// } +// eR.Config().Fields = trailerFields +// eR.Config().Fields[0].ComputePath() +// if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err != nil { +// t.Error(err) +// } +// select { +// case data := <-eR.rdrEvents: +// expEvent.ID = data.cgrEvent.ID +// if !reflect.DeepEqual(data.cgrEvent, expEvent) { +// t.Errorf("Expected %v but received %v", utils.ToJSON(expEvent), utils.ToJSON(data.cgrEvent)) +// } +// case <-time.After(50 * time.Millisecond): +// t.Error("Time limit exceeded") +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileFWVProcessTrailerError1(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - cfg.ERsCfg().Readers[0].ProcessedPath = "" - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - filePath := "/tmp/TestFileFWVProcessTrailer/" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.txt")) - if err != nil { - t.Error(err) - } - trailerFields := []*config.FCTemplate{ - {}, - } - errExpect := "unsupported type: <>" - if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// func TestFileFWVProcessTrailerError1(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// cfg.ERsCfg().Readers[0].ProcessedPath = "" +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// filePath := "/tmp/TestFileFWVProcessTrailer/" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.txt")) +// if err != nil { +// t.Error(err) +// } +// trailerFields := []*config.FCTemplate{ +// {}, +// } +// errExpect := "unsupported type: <>" +// if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileFWVProcessTrailerError2(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - eR.Config().Tenant = config.RSRParsers{ - { - Rules: "cgrates.org", - }, - } - filePath := "/tmp/TestFileFWVProcessTrailer/" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.txt")) - if err != nil { - t.Error(err) - } +// func TestFileFWVProcessTrailerError2(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// eR.Config().Tenant = config.RSRParsers{ +// { +// Rules: "cgrates.org", +// }, +// } +// filePath := "/tmp/TestFileFWVProcessTrailer/" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.txt")) +// if err != nil { +// t.Error(err) +// } - trailerFields := []*config.FCTemplate{ - { - Tag: "OriginId", - Path: "*cgreq.OriginID", - Type: utils.MetaConstant, - Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), - }, - } +// trailerFields := []*config.FCTemplate{ +// { +// Tag: "OriginId", +// Path: "*cgreq.OriginID", +// Type: utils.MetaConstant, +// Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), +// }, +// } - // - eR.Config().Filters = []string{"Filter1"} - errExpect := "NOT_FOUND:Filter1" - if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } -} +// // +// eR.Config().Filters = []string{"Filter1"} +// errExpect := "NOT_FOUND:Filter1" +// if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// } -func TestFileFWVProcessTrailerError3(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - trailerFields := []*config.FCTemplate{ - { - Tag: "OriginId", - Path: "*cgreq.OriginID", - Type: utils.MetaConstant, - Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), - }, - } - var file *os.File - errExp := "invalid argument" - if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExp { - t.Errorf("Expected %v but received %v", errExp, err) - } -} +// func TestFileFWVProcessTrailerError3(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// trailerFields := []*config.FCTemplate{ +// { +// Tag: "OriginId", +// Path: "*cgreq.OriginID", +// Type: utils.MetaConstant, +// Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), +// }, +// } +// var file *os.File +// errExp := "invalid argument" +// if err := eR.processTrailer(file, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExp { +// t.Errorf("Expected %v but received %v", errExp, err) +// } +// } -func TestFileFWVCreateHeaderMap(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - expEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - Event: map[string]interface{}{ - "OriginID": "testOriginID", - }, - APIOpts: map[string]interface{}{}, - } - hdrFields := []*config.FCTemplate{ - { - Tag: "OriginId", - Path: "*cgreq.OriginID", - Type: utils.MetaConstant, - Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), - }, - } - eR.Config().Fields = hdrFields - eR.Config().Fields[0].ComputePath() - record := "testRecord" - if err := eR.createHeaderMap(record, 0, 0, "/tmp/fwvErs/out", hdrFields); err != nil { - t.Error(err) - } - select { - case data := <-eR.rdrEvents: - expEvent.ID = data.cgrEvent.ID - if !reflect.DeepEqual(data.cgrEvent, expEvent) { - t.Errorf("Expected %v but received %v", utils.ToJSON(expEvent), utils.ToJSON(data.cgrEvent)) - } - case <-time.After(50 * time.Millisecond): - t.Error("Time limit exceeded") - } -} +// func TestFileFWVCreateHeaderMap(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// expEvent := &utils.CGREvent{ +// Tenant: "cgrates.org", +// Event: map[string]interface{}{ +// "OriginID": "testOriginID", +// }, +// APIOpts: map[string]interface{}{}, +// } +// hdrFields := []*config.FCTemplate{ +// { +// Tag: "OriginId", +// Path: "*cgreq.OriginID", +// Type: utils.MetaConstant, +// Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), +// }, +// } +// eR.Config().Fields = hdrFields +// eR.Config().Fields[0].ComputePath() +// record := "testRecord" +// if err := eR.createHeaderMap(record, 0, 0, "/tmp/fwvErs/out", hdrFields); err != nil { +// t.Error(err) +// } +// select { +// case data := <-eR.rdrEvents: +// expEvent.ID = data.cgrEvent.ID +// if !reflect.DeepEqual(data.cgrEvent, expEvent) { +// t.Errorf("Expected %v but received %v", utils.ToJSON(expEvent), utils.ToJSON(data.cgrEvent)) +// } +// case <-time.After(50 * time.Millisecond): +// t.Error("Time limit exceeded") +// } +// } -func TestFileFWVCreateHeaderMapError1(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - trailerFields := []*config.FCTemplate{ - {}, - } - record := "testRecord" - errExpect := "unsupported type: <>" - if err := eR.createHeaderMap(record, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } -} +// func TestFileFWVCreateHeaderMapError1(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// trailerFields := []*config.FCTemplate{ +// {}, +// } +// record := "testRecord" +// errExpect := "unsupported type: <>" +// if err := eR.createHeaderMap(record, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// } -func TestFileFWVCreateHeaderMapError2(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - fltrs := engine.NewFilterS(cfg, nil, dm) - eR := &FWVFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/fwvErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - record := "testRecord" - trailerFields := []*config.FCTemplate{ - { - Tag: "OriginId", - Path: "*cgreq.OriginID", - Type: utils.MetaConstant, - Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), - }, - } +// func TestFileFWVCreateHeaderMapError2(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// fltrs := engine.NewFilterS(cfg, nil, dm) +// eR := &FWVFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/fwvErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// record := "testRecord" +// trailerFields := []*config.FCTemplate{ +// { +// Tag: "OriginId", +// Path: "*cgreq.OriginID", +// Type: utils.MetaConstant, +// Value: config.NewRSRParsersMustCompile("testOriginID", utils.InfieldSep), +// }, +// } - // - eR.Config().Filters = []string{"Filter1"} - errExpect := "NOT_FOUND:Filter1" - if err := eR.createHeaderMap(record, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } -} +// // +// eR.Config().Filters = []string{"Filter1"} +// errExpect := "NOT_FOUND:Filter1" +// if err := eR.createHeaderMap(record, 0, 0, "/tmp/fwvErs/out", trailerFields); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// } diff --git a/ers/filexml_it_test.go b/ers/filexml_it_test.go index ae5180af8..b814ecf6e 100644 --- a/ers/filexml_it_test.go +++ b/ers/filexml_it_test.go @@ -1,698 +1,698 @@ //go:build integration // +build integration -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH +// /* +// 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 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. +// 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 -*/ +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// */ package ers -import ( - "fmt" - "net/rpc" - "os" - "path" - "reflect" - "testing" - "time" +// import ( +// "fmt" +// "net/rpc" +// "os" +// "path" +// "reflect" +// "testing" +// "time" - "github.com/cgrates/birpc/context" - "github.com/cgrates/cgrates/utils" +// "github.com/cgrates/birpc/context" +// "github.com/cgrates/cgrates/utils" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" -) +// "github.com/cgrates/cgrates/config" +// "github.com/cgrates/cgrates/engine" +// ) -var ( - xmlCfgPath string - xmlCfgDIR string - xmlCfg *config.CGRConfig - xmlRPC *rpc.Client +// var ( +// xmlCfgPath string +// xmlCfgDIR string +// xmlCfg *config.CGRConfig +// xmlRPC *rpc.Client - xmlTests = []func(t *testing.T){ - testCreateDirs, - testXMLITInitConfig, - testXMLITInitCdrDb, - testXMLITResetDataDb, - testXMLITStartEngine, - testXMLITRpcConn, - testXMLITLoadTPFromFolder, - testXMLITHandleCdr1File, - testXmlITAnalyseCDRs, - testCleanupFiles, - testXMLITKillEngine, - } -) +// xmlTests = []func(t *testing.T){ +// testCreateDirs, +// testXMLITInitConfig, +// testXMLITInitCdrDb, +// testXMLITResetDataDb, +// testXMLITStartEngine, +// testXMLITRpcConn, +// testXMLITLoadTPFromFolder, +// testXMLITHandleCdr1File, +// testXmlITAnalyseCDRs, +// testCleanupFiles, +// testXMLITKillEngine, +// } +// ) -func TestXMLReadFile(t *testing.T) { - switch *dbType { - case utils.MetaInternal: - xmlCfgDIR = "ers_internal" - case utils.MetaMySQL: - xmlCfgDIR = "ers_mysql" - case utils.MetaMongo: - xmlCfgDIR = "ers_mongo" - case utils.MetaPostgres: - xmlCfgDIR = "ers_postgres" - default: - t.Fatal("Unknown Database type") - } - for _, test := range xmlTests { - t.Run(xmlCfgDIR, test) - } -} +// func TestXMLReadFile(t *testing.T) { +// switch *dbType { +// case utils.MetaInternal: +// xmlCfgDIR = "ers_internal" +// case utils.MetaMySQL: +// xmlCfgDIR = "ers_mysql" +// case utils.MetaMongo: +// xmlCfgDIR = "ers_mongo" +// case utils.MetaPostgres: +// xmlCfgDIR = "ers_postgres" +// default: +// t.Fatal("Unknown Database type") +// } +// for _, test := range xmlTests { +// t.Run(xmlCfgDIR, test) +// } +// } -func testXMLITInitConfig(t *testing.T) { - var err error - xmlCfgPath = path.Join(*dataDir, "conf", "samples", xmlCfgDIR) - if xmlCfg, err = config.NewCGRConfigFromPath(context.Background(), xmlCfgPath); err != nil { - t.Fatal("Got config error: ", err.Error()) - } -} +// func testXMLITInitConfig(t *testing.T) { +// var err error +// xmlCfgPath = path.Join(*dataDir, "conf", "samples", xmlCfgDIR) +// if xmlCfg, err = config.NewCGRConfigFromPath(context.Background(), xmlCfgPath); err != nil { +// t.Fatal("Got config error: ", err.Error()) +// } +// } -// InitDb so we can rely on count -func testXMLITInitCdrDb(t *testing.T) { - if err := engine.InitStorDB(xmlCfg); err != nil { - t.Fatal(err) - } -} +// // InitDb so we can rely on count +// func testXMLITInitCdrDb(t *testing.T) { +// if err := engine.InitStorDB(xmlCfg); err != nil { +// t.Fatal(err) +// } +// } -// Remove data in both rating and accounting db -func testXMLITResetDataDb(t *testing.T) { - if err := engine.InitDataDB(xmlCfg); err != nil { - t.Fatal(err) - } -} +// // Remove data in both rating and accounting db +// func testXMLITResetDataDb(t *testing.T) { +// if err := engine.InitDataDB(xmlCfg); err != nil { +// t.Fatal(err) +// } +// } -func testXMLITStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(xmlCfgPath, *waitRater); err != nil { - t.Fatal(err) - } -} +// func testXMLITStartEngine(t *testing.T) { +// if _, err := engine.StopStartEngine(xmlCfgPath, *waitRater); err != nil { +// t.Fatal(err) +// } +// } -// Connect rpc client to rater -func testXMLITRpcConn(t *testing.T) { - var err error - xmlRPC, err = newRPCClient(xmlCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal("Could not connect to rater: ", err.Error()) - } -} +// // Connect rpc client to rater +// func testXMLITRpcConn(t *testing.T) { +// var err error +// xmlRPC, err = newRPCClient(xmlCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed +// if err != nil { +// t.Fatal("Could not connect to rater: ", err.Error()) +// } +// } -func testXMLITLoadTPFromFolder(t *testing.T) { - attrs := &utils.AttrLoadTpFromFolder{ - FolderPath: path.Join(*dataDir, "tariffplans", "testit")} - var loadInst utils.LoadInstance - if err := xmlRPC.Call(utils.APIerSv2LoadTariffPlanFromFolder, - attrs, &loadInst); err != nil { - t.Error(err) - } - time.Sleep(100 * time.Millisecond) -} +// func testXMLITLoadTPFromFolder(t *testing.T) { +// attrs := &utils.AttrLoadTpFromFolder{ +// FolderPath: path.Join(*dataDir, "tariffplans", "testit")} +// var loadInst utils.LoadInstance +// if err := xmlRPC.Call(utils.APIerSv2LoadTariffPlanFromFolder, +// attrs, &loadInst); err != nil { +// t.Error(err) +// } +// time.Sleep(100 * time.Millisecond) +// } -var cdrXmlBroadsoft = ` - - - - - - 0002183384 - CGRateSaabb - 20160419210000.104 - 1+020000 - - Start - - - - - - 0002183385 - CGRateSaabb - 20160419210005.247 - 1+020000 - - MBC - Normal - - - 1001 - 2001 - Network - 1001 - Public - +4915117174963 - 20160419210005.247 - 1+020000 - 25160047719:0 - Yes - 20160419210006.813 - 20160419210020.296 - 016 - y - local - 1001@cgrates.org - Yes - Yes - - - CGR_GROUP - CGR_GROUP/CGR_GROUP_TRUNK30 - Normal - - - 1001@cgrates.org - Primary Device - - - 31.882 - - - gw04.cgrates.org - 74122796919420162305@172.16.1.2 - PCMA/8000 - 172.16.1.4 - BW2300052501904161738474465@172.16.1.10 - 31.882 - OmniPCX Enterprise R11.0.1 k1.520.22.b - - - - - - 0002183386 - CGRateSaabb - 20160419210006.909 - 1+020000 - - MBC - Normal - - - 1002 - 2001 - Network - +4986517174964 - Public - 1001 - 20160419210006.909 - 1+020000 - 27280048121:0 - Yes - 20160419210007.037 - 20160419210030.322 - 016 - y - local - 314028947650@cgrates.org - Yes - Yes - - - CGR_GROUP - CGR_GROUP/CGR_GROUP_TRUNK65 - Normal - - - 31403456100@cgrates.org - Primary Device - - - 26.244 - - - gw01.cgrates.org - 108352493719420162306@172.31.250.150 - PCMA/8000 - 172.16.1.4 - 2345300069121904161716512907@172.16.1.10 - 26.244 - Altitude vBox - - - - - - 0002183486 - CGRateSaabb - 20160419211500.104 - 1+020000 - - End - - -` +// var cdrXmlBroadsoft = ` +// +// +// +// +// +// 0002183384 +// CGRateSaabb +// 20160419210000.104 +// 1+020000 +// +// Start +// +// +// +// +// +// 0002183385 +// CGRateSaabb +// 20160419210005.247 +// 1+020000 +// +// MBC +// Normal +// +// +// 1001 +// 2001 +// Network +// 1001 +// Public +// +4915117174963 +// 20160419210005.247 +// 1+020000 +// 25160047719:0 +// Yes +// 20160419210006.813 +// 20160419210020.296 +// 016 +// y +// local +// 1001@cgrates.org +// Yes +// Yes +// +// +// CGR_GROUP +// CGR_GROUP/CGR_GROUP_TRUNK30 +// Normal +// +// +// 1001@cgrates.org +// Primary Device +// +// +// 31.882 +// +// +// gw04.cgrates.org +// 74122796919420162305@172.16.1.2 +// PCMA/8000 +// 172.16.1.4 +// BW2300052501904161738474465@172.16.1.10 +// 31.882 +// OmniPCX Enterprise R11.0.1 k1.520.22.b +// +// +// +// +// +// 0002183386 +// CGRateSaabb +// 20160419210006.909 +// 1+020000 +// +// MBC +// Normal +// +// +// 1002 +// 2001 +// Network +// +4986517174964 +// Public +// 1001 +// 20160419210006.909 +// 1+020000 +// 27280048121:0 +// Yes +// 20160419210007.037 +// 20160419210030.322 +// 016 +// y +// local +// 314028947650@cgrates.org +// Yes +// Yes +// +// +// CGR_GROUP +// CGR_GROUP/CGR_GROUP_TRUNK65 +// Normal +// +// +// 31403456100@cgrates.org +// Primary Device +// +// +// 26.244 +// +// +// gw01.cgrates.org +// 108352493719420162306@172.31.250.150 +// PCMA/8000 +// 172.16.1.4 +// 2345300069121904161716512907@172.16.1.10 +// 26.244 +// Altitude vBox +// +// +// +// +// +// 0002183486 +// CGRateSaabb +// 20160419211500.104 +// 1+020000 +// +// End +// +// +// ` -// The default scenario, out of ers defined in .cfg file -func testXMLITHandleCdr1File(t *testing.T) { - fileName := "file1.xml" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(cdrXmlBroadsoft), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/xmlErs/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } - time.Sleep(200 * time.Millisecond) -} +// // The default scenario, out of ers defined in .cfg file +// func testXMLITHandleCdr1File(t *testing.T) { +// fileName := "file1.xml" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(cdrXmlBroadsoft), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/xmlErs/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// time.Sleep(200 * time.Millisecond) +// } -func testXmlITAnalyseCDRs(t *testing.T) { - var reply []*engine.ExternalCDR - if err := xmlRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 6 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } - if err := xmlRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{DestinationPrefixes: []string{"+4915117174963"}}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 3 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } -} +// func testXmlITAnalyseCDRs(t *testing.T) { +// var reply []*engine.ExternalCDR +// if err := xmlRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 6 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// if err := xmlRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{DestinationPrefixes: []string{"+4915117174963"}}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 3 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// } -func testXMLITKillEngine(t *testing.T) { - if err := engine.KillEngine(*waitRater); err != nil { - t.Error(err) - } -} +// func testXMLITKillEngine(t *testing.T) { +// if err := engine.KillEngine(*waitRater); err != nil { +// t.Error(err) +// } +// } -func TestNewXMLFileER(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers[0].SourcePath = "/tmp/xmlErs/out/" - cfg.ERsCfg().Readers[0].ConcurrentReqs = 1 - fltrs := &engine.FilterS{} - expEr := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out", - rdrEvents: nil, - rdrError: nil, - rdrExit: nil, - conReqs: make(chan struct{}, 1), - } - var value struct{} - expEr.conReqs <- value - eR, err := NewXMLFileER(cfg, 0, nil, nil, nil, fltrs, nil) - expConReq := make(chan struct{}, 1) - expConReq <- struct{}{} - if <-expConReq != <-eR.(*XMLFileER).conReqs { - t.Errorf("Expected %v but received %v", <-expConReq, <-eR.(*XMLFileER).conReqs) - } - expEr.conReqs = nil - eR.(*XMLFileER).conReqs = nil - if err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eR.(*XMLFileER), expEr) { - t.Errorf("Expected %v but received %v", expEr.conReqs, eR.(*XMLFileER).conReqs) - } -} +// func TestNewXMLFileER(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers[0].SourcePath = "/tmp/xmlErs/out/" +// cfg.ERsCfg().Readers[0].ConcurrentReqs = 1 +// fltrs := &engine.FilterS{} +// expEr := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out", +// rdrEvents: nil, +// rdrError: nil, +// rdrExit: nil, +// conReqs: make(chan struct{}, 1), +// } +// var value struct{} +// expEr.conReqs <- value +// eR, err := NewXMLFileER(cfg, 0, nil, nil, nil, fltrs, nil) +// expConReq := make(chan struct{}, 1) +// expConReq <- struct{}{} +// if <-expConReq != <-eR.(*XMLFileER).conReqs { +// t.Errorf("Expected %v but received %v", <-expConReq, <-eR.(*XMLFileER).conReqs) +// } +// expEr.conReqs = nil +// eR.(*XMLFileER).conReqs = nil +// if err != nil { +// t.Error(err) +// } else if !reflect.DeepEqual(eR.(*XMLFileER), expEr) { +// t.Errorf("Expected %v but received %v", expEr.conReqs, eR.(*XMLFileER).conReqs) +// } +// } -func TestFileXMLProcessEvent(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers[0].ProcessedPath = "" - fltrs := &engine.FilterS{} - filePath := "/tmp/TestFileXMLProcessEvent/" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.xml")) - if err != nil { - t.Error(err) - } - xmlData := ` - - - - - - 25160047719:0 - - - - - ` - file.Write([]byte(xmlData)) - file.Close() - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } +// func TestFileXMLProcessEvent(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers[0].ProcessedPath = "" +// fltrs := &engine.FilterS{} +// filePath := "/tmp/TestFileXMLProcessEvent/" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.xml")) +// if err != nil { +// t.Error(err) +// } +// xmlData := ` +// +// +// +// +// +// 25160047719:0 +// +// +// +// +// ` +// file.Write([]byte(xmlData)) +// file.Close() +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } - //or set the default Fields of cfg.ERsCfg().Readers[0].Fields - eR.Config().Fields = []*config.FCTemplate{ - { - Tag: "OriginID", - Type: utils.MetaConstant, - Path: "*cgreq.OriginID", - Value: config.NewRSRParsersMustCompile("25160047719:0", utils.InfieldSep), - Mandatory: true, - }, - } +// //or set the default Fields of cfg.ERsCfg().Readers[0].Fields +// eR.Config().Fields = []*config.FCTemplate{ +// { +// Tag: "OriginID", +// Type: utils.MetaConstant, +// Path: "*cgreq.OriginID", +// Value: config.NewRSRParsersMustCompile("25160047719:0", utils.InfieldSep), +// Mandatory: true, +// }, +// } - eR.Config().Fields[0].ComputePath() +// eR.Config().Fields[0].ComputePath() - eR.conReqs <- struct{}{} - fileName := "file1.xml" - if err := eR.processFile(filePath, fileName); err != nil { - t.Error(err) - } - expEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - Event: map[string]interface{}{ - "OriginID": "25160047719:0", - }, - APIOpts: make(map[string]interface{}), - } - select { - case data := <-eR.rdrEvents: - expEvent.ID = data.cgrEvent.ID - if !reflect.DeepEqual(data.cgrEvent, expEvent) { - t.Errorf("Expected %v but received %v", utils.ToJSON(expEvent), utils.ToJSON(data.cgrEvent)) - } - case <-time.After(50 * time.Millisecond): - t.Error("Time limit exceeded") - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// eR.conReqs <- struct{}{} +// fileName := "file1.xml" +// if err := eR.processFile(filePath, fileName); err != nil { +// t.Error(err) +// } +// expEvent := &utils.CGREvent{ +// Tenant: "cgrates.org", +// Event: map[string]interface{}{ +// "OriginID": "25160047719:0", +// }, +// APIOpts: make(map[string]interface{}), +// } +// select { +// case data := <-eR.rdrEvents: +// expEvent.ID = data.cgrEvent.ID +// if !reflect.DeepEqual(data.cgrEvent, expEvent) { +// t.Errorf("Expected %v but received %v", utils.ToJSON(expEvent), utils.ToJSON(data.cgrEvent)) +// } +// case <-time.After(50 * time.Millisecond): +// t.Error("Time limit exceeded") +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileXMLProcessEventError1(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - filePath := "/tmp/TestFileXMLProcessEvent/" - fname := "file1.xml" - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out/", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - errExpect := "open /tmp/TestFileXMLProcessEvent/file1.xml: no such file or directory" - if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } -} +// func TestFileXMLProcessEventError1(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// filePath := "/tmp/TestFileXMLProcessEvent/" +// fname := "file1.xml" +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out/", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// errExpect := "open /tmp/TestFileXMLProcessEvent/file1.xml: no such file or directory" +// if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// } -func TestFileXMLProcessEVentError2(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers[0].Fields = []*config.FCTemplate{} - data := engine.NewInternalDB(nil, nil, true) - dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) - fltrs := engine.NewFilterS(cfg, nil, dm) - filePath := "/tmp/TestFileXMLProcessEvent/" - fname := "file1.xml" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.xml")) - if err != nil { - t.Error(err) - } - xmlData := ` - - - - - - 25160047719:0 - - - - - ` - file.Write([]byte(xmlData)) - file.Close() - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out/", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - eR.Config().Tenant = config.RSRParsers{ - { - Rules: "test", - }, - } +// func TestFileXMLProcessEVentError2(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers[0].Fields = []*config.FCTemplate{} +// data := engine.NewInternalDB(nil, nil, true) +// dm := engine.NewDataManager(data, cfg.CacheCfg(), nil) +// fltrs := engine.NewFilterS(cfg, nil, dm) +// filePath := "/tmp/TestFileXMLProcessEvent/" +// fname := "file1.xml" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.xml")) +// if err != nil { +// t.Error(err) +// } +// xmlData := ` +// +// +// +// +// +// 25160047719:0 +// +// +// +// +// ` +// file.Write([]byte(xmlData)) +// file.Close() +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out/", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// eR.Config().Tenant = config.RSRParsers{ +// { +// Rules: "test", +// }, +// } - // - eR.Config().Filters = []string{"Filter1"} - errExpect := "NOT_FOUND:Filter1" - if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } +// // +// eR.Config().Filters = []string{"Filter1"} +// errExpect := "NOT_FOUND:Filter1" +// if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } - // - eR.Config().Filters = []string{"*exists:~*req..Account:"} - errExpect = "rename /tmp/TestFileXMLProcessEvent/file1.xml /var/spool/cgrates/ers/out/file1.xml: no such file or directory" - if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// // +// eR.Config().Filters = []string{"*exists:~*req..Account:"} +// errExpect = "rename /tmp/TestFileXMLProcessEvent/file1.xml /var/spool/cgrates/ers/out/file1.xml: no such file or directory" +// if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileXMLProcessEVentError3(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers[0].ProcessedPath = "" - // fltrs := &engine.FilterS{} - fltrs := &engine.FilterS{} - filePath := "/tmp/TestFileXMLProcessEvent/" - fname := "file1.xml" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.xml")) - if err != nil { - t.Error(err) - } - xmlData := ` - - - - - - 25160047719:0 - - - - - ` - file.Write([]byte(xmlData)) - file.Close() - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out/", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} +// func TestFileXMLProcessEVentError3(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers[0].ProcessedPath = "" +// // fltrs := &engine.FilterS{} +// fltrs := &engine.FilterS{} +// filePath := "/tmp/TestFileXMLProcessEvent/" +// fname := "file1.xml" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.xml")) +// if err != nil { +// t.Error(err) +// } +// xmlData := ` +// +// +// +// +// +// 25160047719:0 +// +// +// +// +// ` +// file.Write([]byte(xmlData)) +// file.Close() +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out/", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} - eR.Config().Fields = []*config.FCTemplate{ - { - Tag: "OriginID", - Type: utils.MetaConstant, - Path: "*cgreq.OriginID", - Value: nil, - Mandatory: true, - }, - } +// eR.Config().Fields = []*config.FCTemplate{ +// { +// Tag: "OriginID", +// Type: utils.MetaConstant, +// Path: "*cgreq.OriginID", +// Value: nil, +// Mandatory: true, +// }, +// } - eR.Config().Fields[0].ComputePath() - errExpect := "Empty source value for fieldID: " - if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// eR.Config().Fields[0].ComputePath() +// errExpect := "Empty source value for fieldID: " +// if err := eR.processFile(filePath, fname); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileXMLProcessEventParseError(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - cfg.ERsCfg().Readers[0].ProcessedPath = "" - fltrs := &engine.FilterS{} - filePath := "/tmp/TestFileXMLProcessEvent/" - if err := os.MkdirAll(filePath, 0777); err != nil { - t.Error(err) - } - file, err := os.Create(path.Join(filePath, "file1.xml")) - if err != nil { - t.Error(err) - } - file.Write([]byte(` - test/XMLField>`)) - file.Close() - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} +// func TestFileXMLProcessEventParseError(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// cfg.ERsCfg().Readers[0].ProcessedPath = "" +// fltrs := &engine.FilterS{} +// filePath := "/tmp/TestFileXMLProcessEvent/" +// if err := os.MkdirAll(filePath, 0777); err != nil { +// t.Error(err) +// } +// file, err := os.Create(path.Join(filePath, "file1.xml")) +// if err != nil { +// t.Error(err) +// } +// file.Write([]byte(` +// test/XMLField>`)) +// file.Close() +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} - fileName := "file1.xml" - errExpect := "XML syntax error on line 2: unexpected EOF" - if err := eR.processFile(filePath, fileName); err == nil || err.Error() != errExpect { - t.Errorf("Expected %v but received %v", errExpect, err) - } - if err := os.RemoveAll(filePath); err != nil { - t.Error(err) - } -} +// fileName := "file1.xml" +// errExpect := "XML syntax error on line 2: unexpected EOF" +// if err := eR.processFile(filePath, fileName); err == nil || err.Error() != errExpect { +// t.Errorf("Expected %v but received %v", errExpect, err) +// } +// if err := os.RemoveAll(filePath); err != nil { +// t.Error(err) +// } +// } -func TestFileXML(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - err := os.MkdirAll(eR.rdrDir, 0777) - if err != nil { - t.Error(err) - } +// func TestFileXML(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// err := os.MkdirAll(eR.rdrDir, 0777) +// if err != nil { +// t.Error(err) +// } - eR.Config().Fields = []*config.FCTemplate{ - { - Tag: "OriginID", - Type: utils.MetaConstant, - Path: "*cgreq.OriginID", - Value: config.NewRSRParsersMustCompile("25160047719:0", utils.InfieldSep), - Mandatory: true, - }, - } +// eR.Config().Fields = []*config.FCTemplate{ +// { +// Tag: "OriginID", +// Type: utils.MetaConstant, +// Path: "*cgreq.OriginID", +// Value: config.NewRSRParsersMustCompile("25160047719:0", utils.InfieldSep), +// Mandatory: true, +// }, +// } - eR.Config().Fields[0].ComputePath() +// eR.Config().Fields[0].ComputePath() - for i := 1; i < 4; i++ { - if _, err := os.Create(path.Join(eR.rdrDir, fmt.Sprintf("file%d.xml", i))); err != nil { - t.Error(err) - } - } +// for i := 1; i < 4; i++ { +// if _, err := os.Create(path.Join(eR.rdrDir, fmt.Sprintf("file%d.xml", i))); err != nil { +// t.Error(err) +// } +// } - eR.Config().RunDelay = time.Duration(-1) - if err := eR.Serve(); err != nil { - t.Error(err) - } +// eR.Config().RunDelay = time.Duration(-1) +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } - os.Create(path.Join(eR.rdrDir, "file1.txt")) - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } -} +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// os.Create(path.Join(eR.rdrDir, "file1.txt")) +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// } -func TestFileXMLError(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErsError/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - err := os.MkdirAll(eR.rdrDir, 0777) - if err != nil { - t.Error(err) - } +// func TestFileXMLError(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErsError/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// err := os.MkdirAll(eR.rdrDir, 0777) +// if err != nil { +// t.Error(err) +// } - eR.Config().Fields = []*config.FCTemplate{ - { - Tag: "OriginID", - Type: utils.MetaConstant, - Path: "*cgreq.OriginID", - Value: config.NewRSRParsersMustCompile("25160047719:0", utils.InfieldSep), - Mandatory: true, - }, - } +// eR.Config().Fields = []*config.FCTemplate{ +// { +// Tag: "OriginID", +// Type: utils.MetaConstant, +// Path: "*cgreq.OriginID", +// Value: config.NewRSRParsersMustCompile("25160047719:0", utils.InfieldSep), +// Mandatory: true, +// }, +// } - eR.Config().Fields[0].ComputePath() +// eR.Config().Fields[0].ComputePath() - for i := 1; i < 4; i++ { - if _, err := os.Create(path.Join(eR.rdrDir, fmt.Sprintf("file%d.xml", i))); err != nil { - t.Error(err) - } - } - os.Create(path.Join(eR.rdrDir, "file1.txt")) - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } -} +// for i := 1; i < 4; i++ { +// if _, err := os.Create(path.Join(eR.rdrDir, fmt.Sprintf("file%d.xml", i))); err != nil { +// t.Error(err) +// } +// } +// os.Create(path.Join(eR.rdrDir, "file1.txt")) +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// } -func TestFileXMLExit(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - fltrs := &engine.FilterS{} - eR := &XMLFileER{ - cgrCfg: cfg, - cfgIdx: 0, - fltrS: fltrs, - rdrDir: "/tmp/xmlErs/out", - rdrEvents: make(chan *erEvent, 1), - rdrError: make(chan error, 1), - rdrExit: make(chan struct{}), - conReqs: make(chan struct{}, 1), - } - eR.conReqs <- struct{}{} - eR.Config().RunDelay = 1 * time.Millisecond - if err := eR.Serve(); err != nil { - t.Error(err) - } - eR.rdrExit <- struct{}{} -} +// func TestFileXMLExit(t *testing.T) { +// cfg := config.NewDefaultCGRConfig() +// fltrs := &engine.FilterS{} +// eR := &XMLFileER{ +// cgrCfg: cfg, +// cfgIdx: 0, +// fltrS: fltrs, +// rdrDir: "/tmp/xmlErs/out", +// rdrEvents: make(chan *erEvent, 1), +// rdrError: make(chan error, 1), +// rdrExit: make(chan struct{}), +// conReqs: make(chan struct{}, 1), +// } +// eR.conReqs <- struct{}{} +// eR.Config().RunDelay = 1 * time.Millisecond +// if err := eR.Serve(); err != nil { +// t.Error(err) +// } +// eR.rdrExit <- struct{}{} +// } diff --git a/ers/flatstore_it_test.go b/ers/flatstore_it_test.go index 883b31800..2be953637 100644 --- a/ers/flatstore_it_test.go +++ b/ers/flatstore_it_test.go @@ -1,329 +1,329 @@ //go:build integration // +build integration -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH +// /* +// 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 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. +// 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 -*/ +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// */ package ers -import ( - "net/rpc" - "os" - "path" - "path/filepath" - "testing" - "time" +// import ( +// "net/rpc" +// "os" +// "path" +// "path/filepath" +// "testing" +// "time" - "github.com/cgrates/birpc/context" - "github.com/cgrates/cgrates/apis" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) +// "github.com/cgrates/birpc/context" +// "github.com/cgrates/cgrates/apis" +// "github.com/cgrates/cgrates/config" +// "github.com/cgrates/cgrates/engine" +// "github.com/cgrates/cgrates/utils" +// ) -var ( - flatstoreCfgPath string - flatstoreCfgDIR string - flatstoreCfg *config.CGRConfig - flatstoreRPC *rpc.Client +// var ( +// flatstoreCfgPath string +// flatstoreCfgDIR string +// flatstoreCfg *config.CGRConfig +// flatstoreRPC *rpc.Client - fullSuccessfull = `INVITE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454408|*prepaid|1001|1002||3401:2069362475 -BYE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454410|||||3401:2069362475 -INVITE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454647|*postpaid|1002|1001||1877:893549741 -BYE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454651|||||1877:893549741 -INVITE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454657|*prepaid|1001|1002||2407:1884881533 -BYE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454661|||||2407:1884881533 -INVITE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454690|*prepaid|1001|1002||3099:1909036290 -BYE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454692|||||3099:1909036290` +// fullSuccessfull = `INVITE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454408|*prepaid|1001|1002||3401:2069362475 +// BYE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454410|||||3401:2069362475 +// INVITE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454647|*postpaid|1002|1001||1877:893549741 +// BYE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454651|||||1877:893549741 +// INVITE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454657|*prepaid|1001|1002||2407:1884881533 +// BYE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454661|||||2407:1884881533 +// INVITE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454690|*prepaid|1001|1002||3099:1909036290 +// BYE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454692|||||3099:1909036290` - fullMissed = `INVITE|ef6c6256|da501581|0bfdd176d1b93e7df3de5c6f4873ee04@0:0:0:0:0:0:0:0|487|Request Terminated|1436454643|*prepaid|1001|1002||1224:339382783 -INVITE|7905e511||81880da80a94bda81b425b09009e055c@0:0:0:0:0:0:0:0|404|Not Found|1436454668|*prepaid|1001|1002||1980:1216490844 -INVITE|324cb497|d4af7023|8deaadf2ae9a17809a391f05af31afb0@0:0:0:0:0:0:0:0|486|Busy here|1436454687|*postpaid|1002|1001||474:130115066` +// fullMissed = `INVITE|ef6c6256|da501581|0bfdd176d1b93e7df3de5c6f4873ee04@0:0:0:0:0:0:0:0|487|Request Terminated|1436454643|*prepaid|1001|1002||1224:339382783 +// INVITE|7905e511||81880da80a94bda81b425b09009e055c@0:0:0:0:0:0:0:0|404|Not Found|1436454668|*prepaid|1001|1002||1980:1216490844 +// INVITE|324cb497|d4af7023|8deaadf2ae9a17809a391f05af31afb0@0:0:0:0:0:0:0:0|486|Busy here|1436454687|*postpaid|1002|1001||474:130115066` - part1 = `BYE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4ccb@0:0:0:0:0:0:0:0|200|OK|1436454651|||||1877:893549742` +// part1 = `BYE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4ccb@0:0:0:0:0:0:0:0|200|OK|1436454651|||||1877:893549742` - part2 = `INVITE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4ccb@0:0:0:0:0:0:0:0|200|OK|1436454647|*postpaid|1002|1003||1877:893549742 -INVITE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9p@0:0:0:0:0:0:0:0|200|OK|1436454408|*prepaid|1001|1002||3401:2069362475` +// part2 = `INVITE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4ccb@0:0:0:0:0:0:0:0|200|OK|1436454647|*postpaid|1002|1003||1877:893549742 +// INVITE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9p@0:0:0:0:0:0:0:0|200|OK|1436454408|*prepaid|1001|1002||3401:2069362475` - ackSuccessfull = `INVITE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK||*prepaid|1001|1002||3401:2069362475|flatstore"1.0 -ACK|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454408|*prepaid|1001|1002||3401:2069362475|flatstore"1.0 -BYE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454410|||||3401:2069362475|flatstore"1.0 -INVITE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK||*postpaid|1002|1001||1877:893549741|flatstore"1.0 -ACK|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454647|*postpaid|1002|1001||1877:893549741|flatstore"1.0 -BYE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454651|||||1877:893549741|flatstore"1.0 -INVITE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK||*prepaid|1001|1002||2407:1884881533|flatstore"1.0 -ACK|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454657|*prepaid|1001|1002||2407:1884881533|flatstore"1.0 -BYE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454661|||||2407:1884881533|flatstore"1.0 -INVITE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK||*prepaid|1001|1002||3099:1909036290|flatstore"1.0 -ACK|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454690|*prepaid|1001|1002||3099:1909036290|flatstore"1.0 -BYE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454692|||||3099:1909036290|flatstore"1.0` +// ackSuccessfull = `INVITE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK||*prepaid|1001|1002||3401:2069362475|flatstore"1.0 +// ACK|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454408|*prepaid|1001|1002||3401:2069362475|flatstore"1.0 +// BYE|2daec40c|548625ac|dd0c4c617a9919d29a6175cdff223a9e@0:0:0:0:0:0:0:0|200|OK|1436454410|||||3401:2069362475|flatstore"1.0 +// INVITE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK||*postpaid|1002|1001||1877:893549741|flatstore"1.0 +// ACK|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454647|*postpaid|1002|1001||1877:893549741|flatstore"1.0 +// BYE|f9d3d5c3|c863a6e3|214d8f52b566e33a9349b184e72a4cca@0:0:0:0:0:0:0:0|200|OK|1436454651|||||1877:893549741|flatstore"1.0 +// INVITE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK||*prepaid|1001|1002||2407:1884881533|flatstore"1.0 +// ACK|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454657|*prepaid|1001|1002||2407:1884881533|flatstore"1.0 +// BYE|36e39a5|42d996f9|3a63321dd3b325eec688dc2aefb6ac2d@0:0:0:0:0:0:0:0|200|OK|1436454661|||||2407:1884881533|flatstore"1.0 +// INVITE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK||*prepaid|1001|1002||3099:1909036290|flatstore"1.0 +// ACK|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454690|*prepaid|1001|1002||3099:1909036290|flatstore"1.0 +// BYE|3111f3c9|49ca4c42|a58ebaae40d08d6757d8424fb09c4c54@0:0:0:0:0:0:0:0|200|OK|1436454692|||||3099:1909036290|flatstore"1.0` - ackSuccessfull2 = `"1","INVITE","CG123456789-1","123456789","CGqwerty-asd5sdf456s1f53a1sf51s648486h4et86h46","200","OK","2021-06-01 00:00:09","1001","1001@192.168.56.203","192.168.56.203","192.168.56.20","sip:1001@192.168.56.203:5060;transport=UDP","1002","1002","local","1","test" -"2","ACK","CG123456789-1","123456789","CGqwerty-asd5sdf456s1f53a1sf51s648486h4et86h46","200","OK","2021-06-01 00:00:09","1001","1001@192.168.56.203","192.168.56.203","192.168.56.20",,"1002","1002","192.168.57.203","1","test" -"3","INVITE","CG123456789-2","123456799","CGqwerty-56dfghs56hj4fg56j56sdgf516351drfg","200","OK","2021-06-01 00:00:10","1003","1003@192.168.56.204","192.168.56.204","192.168.56.21","sip:1003@192.168.56.204:5060;transport=UDP","1004","1004","local","1","test" -"4","ACK","CG123456789-2","123456799","CGqwerty-56dfghs56hj4fg56j56sdgf516351drfg","200","OK","2021-06-01 00:00:10","1003","1003@192.168.56.204","192.168.56.204","192.168.56.21",,"1004","1004","192.168.57.204","1","test" -"5","BYE","CG123456789-1","123456789","CGqwerty-asd5sdf456s1f53a1sf51s648486h4et86h46","200","OK","2021-06-01 00:00:37","1001","1001@192.168.56.203","192.168.56.203","192.168.56.20",,"1002","1002","192.168.57.203","1","test" -"6","CANCEL","CG123456789-3",,"CGqwerty-dfgdfhdfgjfgdh534dfg563h56dr56deghed6r5","200","OK","2021-06-01 00:00:42","1005","1005@192.168.56.201","192.168.56.201","192.168.56.2",,"1006","1006","192.168.56.301","0","test" -"7","BYE","CG123456789-2","123456799","CGqwerty-56dfghs56hj4fg56j56sdgf516351drfg","200","OK","2021-06-01 00:00:50","1003","1003@192.168.56.204","192.168.56.204","192.168.56.21",,"1004","1004","192.168.57.204","1","test"` +// ackSuccessfull2 = `"1","INVITE","CG123456789-1","123456789","CGqwerty-asd5sdf456s1f53a1sf51s648486h4et86h46","200","OK","2021-06-01 00:00:09","1001","1001@192.168.56.203","192.168.56.203","192.168.56.20","sip:1001@192.168.56.203:5060;transport=UDP","1002","1002","local","1","test" +// "2","ACK","CG123456789-1","123456789","CGqwerty-asd5sdf456s1f53a1sf51s648486h4et86h46","200","OK","2021-06-01 00:00:09","1001","1001@192.168.56.203","192.168.56.203","192.168.56.20",,"1002","1002","192.168.57.203","1","test" +// "3","INVITE","CG123456789-2","123456799","CGqwerty-56dfghs56hj4fg56j56sdgf516351drfg","200","OK","2021-06-01 00:00:10","1003","1003@192.168.56.204","192.168.56.204","192.168.56.21","sip:1003@192.168.56.204:5060;transport=UDP","1004","1004","local","1","test" +// "4","ACK","CG123456789-2","123456799","CGqwerty-56dfghs56hj4fg56j56sdgf516351drfg","200","OK","2021-06-01 00:00:10","1003","1003@192.168.56.204","192.168.56.204","192.168.56.21",,"1004","1004","192.168.57.204","1","test" +// "5","BYE","CG123456789-1","123456789","CGqwerty-asd5sdf456s1f53a1sf51s648486h4et86h46","200","OK","2021-06-01 00:00:37","1001","1001@192.168.56.203","192.168.56.203","192.168.56.20",,"1002","1002","192.168.57.203","1","test" +// "6","CANCEL","CG123456789-3",,"CGqwerty-dfgdfhdfgjfgdh534dfg563h56dr56deghed6r5","200","OK","2021-06-01 00:00:42","1005","1005@192.168.56.201","192.168.56.201","192.168.56.2",,"1006","1006","192.168.56.301","0","test" +// "7","BYE","CG123456789-2","123456799","CGqwerty-56dfghs56hj4fg56j56sdgf516351drfg","200","OK","2021-06-01 00:00:50","1003","1003@192.168.56.204","192.168.56.204","192.168.56.21",,"1004","1004","192.168.57.204","1","test"` - flatstoreTests = []func(t *testing.T){ - testCreateDirs, - testFlatstoreITInitConfig, - testFlatstoreITInitCdrDb, - testFlatstoreITResetDataDb, - testFlatstoreITStartEngine, - testFlatstoreITRpcConn, - testFlatstoreITLoadTPFromFolder, - testFlatstoreITHandleCdr1File, - testFlatstoreITAnalyseCDRs, - testFlatstoreITHandleCdr2File, - testFlatstoreITAnalyseCDRs2, - testFlatstoreITHandleCdr3File, - testFlatstoreITAnalyseCDRs3, - testCleanupFiles, - testFlatstoreITKillEngine, - } -) +// flatstoreTests = []func(t *testing.T){ +// testCreateDirs, +// testFlatstoreITInitConfig, +// testFlatstoreITInitCdrDb, +// testFlatstoreITResetDataDb, +// testFlatstoreITStartEngine, +// testFlatstoreITRpcConn, +// testFlatstoreITLoadTPFromFolder, +// testFlatstoreITHandleCdr1File, +// testFlatstoreITAnalyseCDRs, +// testFlatstoreITHandleCdr2File, +// testFlatstoreITAnalyseCDRs2, +// testFlatstoreITHandleCdr3File, +// testFlatstoreITAnalyseCDRs3, +// testCleanupFiles, +// testFlatstoreITKillEngine, +// } +// ) -func TestFlatstoreFile(t *testing.T) { - switch *dbType { - case utils.MetaInternal: - flatstoreCfgDIR = "ers_internal" - case utils.MetaMySQL: - flatstoreCfgDIR = "ers_mysql" - case utils.MetaMongo: - flatstoreCfgDIR = "ers_mongo" - case utils.MetaPostgres: - flatstoreCfgDIR = "ers_postgres" - default: - t.Fatal("Unknown Database type") - } - for _, test := range flatstoreTests { - t.Run(flatstoreCfgDIR, test) - } -} +// func TestFlatstoreFile(t *testing.T) { +// switch *dbType { +// case utils.MetaInternal: +// flatstoreCfgDIR = "ers_internal" +// case utils.MetaMySQL: +// flatstoreCfgDIR = "ers_mysql" +// case utils.MetaMongo: +// flatstoreCfgDIR = "ers_mongo" +// case utils.MetaPostgres: +// flatstoreCfgDIR = "ers_postgres" +// default: +// t.Fatal("Unknown Database type") +// } +// for _, test := range flatstoreTests { +// t.Run(flatstoreCfgDIR, test) +// } +// } -func testFlatstoreITInitConfig(t *testing.T) { - var err error - flatstoreCfgPath = path.Join(*dataDir, "conf", "samples", flatstoreCfgDIR) - if flatstoreCfg, err = config.NewCGRConfigFromPath(context.Background(), flatstoreCfgPath); err != nil { - t.Fatal("Got config error: ", err.Error()) - } -} +// func testFlatstoreITInitConfig(t *testing.T) { +// var err error +// flatstoreCfgPath = path.Join(*dataDir, "conf", "samples", flatstoreCfgDIR) +// if flatstoreCfg, err = config.NewCGRConfigFromPath(context.Background(), flatstoreCfgPath); err != nil { +// t.Fatal("Got config error: ", err.Error()) +// } +// } -// InitDb so we can rely on count -func testFlatstoreITInitCdrDb(t *testing.T) { - if err := engine.InitStorDB(flatstoreCfg); err != nil { - t.Fatal(err) - } -} +// // InitDb so we can rely on count +// func testFlatstoreITInitCdrDb(t *testing.T) { +// if err := engine.InitStorDB(flatstoreCfg); err != nil { +// t.Fatal(err) +// } +// } -// Remove data in both rating and accounting db -func testFlatstoreITResetDataDb(t *testing.T) { - if err := engine.InitDataDB(flatstoreCfg); err != nil { - t.Fatal(err) - } -} +// // Remove data in both rating and accounting db +// func testFlatstoreITResetDataDb(t *testing.T) { +// if err := engine.InitDataDB(flatstoreCfg); err != nil { +// t.Fatal(err) +// } +// } -func testFlatstoreITStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(flatstoreCfgPath, *waitRater); err != nil { - t.Fatal(err) - } -} +// func testFlatstoreITStartEngine(t *testing.T) { +// if _, err := engine.StopStartEngine(flatstoreCfgPath, *waitRater); err != nil { +// t.Fatal(err) +// } +// } -// Connect rpc client to rater -func testFlatstoreITRpcConn(t *testing.T) { - var err error - flatstoreRPC, err = newRPCClient(flatstoreCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal("Could not connect to rater: ", err.Error()) - } -} +// // Connect rpc client to rater +// func testFlatstoreITRpcConn(t *testing.T) { +// var err error +// flatstoreRPC, err = newRPCClient(flatstoreCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed +// if err != nil { +// t.Fatal("Could not connect to rater: ", err.Error()) +// } +// } -func testFlatstoreITLoadTPFromFolder(t *testing.T) { - //add a default charger - chargerProfile := &apis.ChargerWithAPIOpts{ - ChargerProfile: &engine.ChargerProfile{ - Tenant: "cgrates.org", - ID: "Default", - RunID: utils.MetaDefault, - AttributeIDs: []string{"*none"}, - Weight: 20, - }, - } - var result string - if err := flatstoreRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } -} +// func testFlatstoreITLoadTPFromFolder(t *testing.T) { +// //add a default charger +// chargerProfile := &apis.ChargerWithAPIOpts{ +// ChargerProfile: &engine.ChargerProfile{ +// Tenant: "cgrates.org", +// ID: "Default", +// RunID: utils.MetaDefault, +// AttributeIDs: []string{"*none"}, +// Weight: 20, +// }, +// } +// var result string +// if err := flatstoreRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil { +// t.Error(err) +// } else if result != utils.OK { +// t.Error("Unexpected reply returned", result) +// } +// } -// The default scenario, out of ers defined in .cfg file -func testFlatstoreITHandleCdr1File(t *testing.T) { - if err := os.WriteFile(path.Join("/tmp", "acc_1.log"), []byte(fullSuccessfull), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.WriteFile(path.Join("/tmp", "missed_calls_1.log"), []byte(fullMissed), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.WriteFile(path.Join("/tmp", "acc_2.log"), []byte(part1), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.WriteFile(path.Join("/tmp", "acc_3.log"), []byte(part2), 0644); err != nil { - t.Fatal(err.Error()) - } - //Rename(oldpath, newpath string) - for _, fileName := range []string{"acc_1.log", "missed_calls_1.log", "acc_2.log", "acc_3.log"} { - if err := os.Rename(path.Join("/tmp", fileName), path.Join("/tmp/flatstoreErs/in", fileName)); err != nil { - t.Fatal(err) - } - } - time.Sleep(time.Second) - // check the files to be processed - filesInDir, _ := os.ReadDir("/tmp/flatstoreErs/in") - if len(filesInDir) != 0 { - fls := make([]string, len(filesInDir)) - for i, fs := range filesInDir { - fls[i] = fs.Name() - } - t.Errorf("Files in ersInDir: %+v", fls) - } - filesOutDir, _ := os.ReadDir("/tmp/flatstoreErs/out") - ids := []string{} - for _, fD := range filesOutDir { - ids = append(ids, fD.Name()) - } - if len(filesOutDir) != 5 { - t.Errorf("Unexpected number of files in output directory: %+v, %q", len(filesOutDir), ids) - } - ePartContent := "flatStore|dd0c4c617a9919d29a6175cdff223a9p@0:0:0:0:0:0:0:02daec40c548625ac|*prepaid|1001|1001|1002|1436454408|1436454408|200 OK|3401:2069362475\n" - tmpl := path.Join("/tmp/flatstoreErs/out", "f7aed15c98b31fea0e3b02b52fc947879a3c5bbc.*.tmp") - if match, err := filepath.Glob(tmpl); err != nil { - t.Error(err) - } else if len(match) != 1 { - t.Errorf("Wrong number of files matches the template: %q", match) - t.Errorf("template: %q", tmpl) - t.Errorf("files: %q", ids) - } else if partContent, err := os.ReadFile(match[0]); err != nil { - t.Error(err) - } else if ePartContent != string(partContent) { - t.Errorf("Expecting:\n%q\nReceived:\n%q", ePartContent, string(partContent)) - } -} +// // The default scenario, out of ers defined in .cfg file +// func testFlatstoreITHandleCdr1File(t *testing.T) { +// if err := os.WriteFile(path.Join("/tmp", "acc_1.log"), []byte(fullSuccessfull), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.WriteFile(path.Join("/tmp", "missed_calls_1.log"), []byte(fullMissed), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.WriteFile(path.Join("/tmp", "acc_2.log"), []byte(part1), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.WriteFile(path.Join("/tmp", "acc_3.log"), []byte(part2), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// //Rename(oldpath, newpath string) +// for _, fileName := range []string{"acc_1.log", "missed_calls_1.log", "acc_2.log", "acc_3.log"} { +// if err := os.Rename(path.Join("/tmp", fileName), path.Join("/tmp/flatstoreErs/in", fileName)); err != nil { +// t.Fatal(err) +// } +// } +// time.Sleep(time.Second) +// // check the files to be processed +// filesInDir, _ := os.ReadDir("/tmp/flatstoreErs/in") +// if len(filesInDir) != 0 { +// fls := make([]string, len(filesInDir)) +// for i, fs := range filesInDir { +// fls[i] = fs.Name() +// } +// t.Errorf("Files in ersInDir: %+v", fls) +// } +// filesOutDir, _ := os.ReadDir("/tmp/flatstoreErs/out") +// ids := []string{} +// for _, fD := range filesOutDir { +// ids = append(ids, fD.Name()) +// } +// if len(filesOutDir) != 5 { +// t.Errorf("Unexpected number of files in output directory: %+v, %q", len(filesOutDir), ids) +// } +// ePartContent := "flatStore|dd0c4c617a9919d29a6175cdff223a9p@0:0:0:0:0:0:0:02daec40c548625ac|*prepaid|1001|1001|1002|1436454408|1436454408|200 OK|3401:2069362475\n" +// tmpl := path.Join("/tmp/flatstoreErs/out", "f7aed15c98b31fea0e3b02b52fc947879a3c5bbc.*.tmp") +// if match, err := filepath.Glob(tmpl); err != nil { +// t.Error(err) +// } else if len(match) != 1 { +// t.Errorf("Wrong number of files matches the template: %q", match) +// t.Errorf("template: %q", tmpl) +// t.Errorf("files: %q", ids) +// } else if partContent, err := os.ReadFile(match[0]); err != nil { +// t.Error(err) +// } else if ePartContent != string(partContent) { +// t.Errorf("Expecting:\n%q\nReceived:\n%q", ePartContent, string(partContent)) +// } +// } -func testFlatstoreITAnalyseCDRs(t *testing.T) { - var reply []*engine.ExternalCDR - if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 8 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - t.Error(utils.ToJSON(reply)) - } - if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{MinUsage: "1"}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 5 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } -} +// func testFlatstoreITAnalyseCDRs(t *testing.T) { +// var reply []*engine.ExternalCDR +// if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 8 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// t.Error(utils.ToJSON(reply)) +// } +// if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{MinUsage: "1"}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 5 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// } -// The default scenario, out of ers defined in .cfg file -func testFlatstoreITHandleCdr2File(t *testing.T) { - if err := os.WriteFile(path.Join("/tmp", "acc_1.log"), []byte(ackSuccessfull), 0644); err != nil { - t.Fatal(err.Error()) - } - //Rename(oldpath, newpath string) - if err := os.Rename(path.Join("/tmp", "acc_1.log"), path.Join("/tmp/flatstoreACKErs/in", "acc_1.log")); err != nil { - t.Fatal(err) - } - time.Sleep(time.Second) - // check the files to be processed - filesInDir, _ := os.ReadDir("/tmp/flatstoreErs/in") - if len(filesInDir) != 0 { - fls := make([]string, len(filesInDir)) - for i, fs := range filesInDir { - fls[i] = fs.Name() - } - t.Errorf("Files in ersInDir: %+v", fls) - } - filesOutDir, _ := os.ReadDir("/tmp/flatstoreACKErs/out") - ids := []string{} - for _, fD := range filesOutDir { - ids = append(ids, fD.Name()) - } - if len(filesOutDir) != 1 { - t.Errorf("Unexpected number of files in output directory: %+v, %q", len(filesOutDir), ids) - } -} +// // The default scenario, out of ers defined in .cfg file +// func testFlatstoreITHandleCdr2File(t *testing.T) { +// if err := os.WriteFile(path.Join("/tmp", "acc_1.log"), []byte(ackSuccessfull), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// //Rename(oldpath, newpath string) +// if err := os.Rename(path.Join("/tmp", "acc_1.log"), path.Join("/tmp/flatstoreACKErs/in", "acc_1.log")); err != nil { +// t.Fatal(err) +// } +// time.Sleep(time.Second) +// // check the files to be processed +// filesInDir, _ := os.ReadDir("/tmp/flatstoreErs/in") +// if len(filesInDir) != 0 { +// fls := make([]string, len(filesInDir)) +// for i, fs := range filesInDir { +// fls[i] = fs.Name() +// } +// t.Errorf("Files in ersInDir: %+v", fls) +// } +// filesOutDir, _ := os.ReadDir("/tmp/flatstoreACKErs/out") +// ids := []string{} +// for _, fD := range filesOutDir { +// ids = append(ids, fD.Name()) +// } +// if len(filesOutDir) != 1 { +// t.Errorf("Unexpected number of files in output directory: %+v, %q", len(filesOutDir), ids) +// } +// } -func testFlatstoreITAnalyseCDRs2(t *testing.T) { - var reply []*engine.ExternalCDR - if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginHosts: []string{"flatStoreACK"}, MinUsage: "1"}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 4 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } -} +// func testFlatstoreITAnalyseCDRs2(t *testing.T) { +// var reply []*engine.ExternalCDR +// if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginHosts: []string{"flatStoreACK"}, MinUsage: "1"}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 4 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// } -func testFlatstoreITHandleCdr3File(t *testing.T) { - if err := os.WriteFile(path.Join("/tmp", "acc_1.log"), []byte(ackSuccessfull2), 0644); err != nil { - t.Fatal(err.Error()) - } - //Rename(oldpath, newpath string) - if err := os.Rename(path.Join("/tmp", "acc_1.log"), path.Join("/tmp/flatstoreMMErs/in", "acc_1.log")); err != nil { - t.Fatal(err) - } - time.Sleep(time.Second) - // check the files to be processed - filesInDir, _ := os.ReadDir("/tmp/flatstoreErs/in") - if len(filesInDir) != 0 { - fls := make([]string, len(filesInDir)) - for i, fs := range filesInDir { - fls[i] = fs.Name() - } - t.Errorf("Files in ersInDir: %+v", fls) - } - filesOutDir, _ := os.ReadDir("/tmp/flatstoreMMErs/out") - ids := []string{} - for _, fD := range filesOutDir { - ids = append(ids, fD.Name()) - } - if len(filesOutDir) != 1 { - t.Errorf("Unexpected number of files in output directory: %+v, %q", len(filesOutDir), ids) - } -} +// func testFlatstoreITHandleCdr3File(t *testing.T) { +// if err := os.WriteFile(path.Join("/tmp", "acc_1.log"), []byte(ackSuccessfull2), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// //Rename(oldpath, newpath string) +// if err := os.Rename(path.Join("/tmp", "acc_1.log"), path.Join("/tmp/flatstoreMMErs/in", "acc_1.log")); err != nil { +// t.Fatal(err) +// } +// time.Sleep(time.Second) +// // check the files to be processed +// filesInDir, _ := os.ReadDir("/tmp/flatstoreErs/in") +// if len(filesInDir) != 0 { +// fls := make([]string, len(filesInDir)) +// for i, fs := range filesInDir { +// fls[i] = fs.Name() +// } +// t.Errorf("Files in ersInDir: %+v", fls) +// } +// filesOutDir, _ := os.ReadDir("/tmp/flatstoreMMErs/out") +// ids := []string{} +// for _, fD := range filesOutDir { +// ids = append(ids, fD.Name()) +// } +// if len(filesOutDir) != 1 { +// t.Errorf("Unexpected number of files in output directory: %+v, %q", len(filesOutDir), ids) +// } +// } -func testFlatstoreITAnalyseCDRs3(t *testing.T) { - var reply []*engine.ExternalCDR - if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginHosts: []string{"flatstoreMMErs"}}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 3 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } - if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginHosts: []string{"flatstoreMMErs"}, MinUsage: "1"}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 2 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } -} +// func testFlatstoreITAnalyseCDRs3(t *testing.T) { +// var reply []*engine.ExternalCDR +// if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginHosts: []string{"flatstoreMMErs"}}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 3 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// if err := flatstoreRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{OriginHosts: []string{"flatstoreMMErs"}, MinUsage: "1"}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 2 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// } -func testFlatstoreITKillEngine(t *testing.T) { - if err := engine.KillEngine(*waitRater); err != nil { - t.Error(err) - } -} +// func testFlatstoreITKillEngine(t *testing.T) { +// if err := engine.KillEngine(*waitRater); err != nil { +// t.Error(err) +// } +// } diff --git a/ers/partial_csv_it_test.go b/ers/partial_csv_it_test.go index 3c7eefeb7..92b660196 100644 --- a/ers/partial_csv_it_test.go +++ b/ers/partial_csv_it_test.go @@ -1,225 +1,225 @@ //go:build integration // +build integration -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH +// /* +// 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 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. +// 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 -*/ +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// */ package ers -import ( - "net/rpc" - "os" - "path" - "strings" - "testing" - "time" +// import ( +// "net/rpc" +// "os" +// "path" +// "strings" +// "testing" +// "time" - "github.com/cgrates/birpc/context" - "github.com/cgrates/cgrates/apis" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" -) +// "github.com/cgrates/birpc/context" +// "github.com/cgrates/cgrates/apis" +// "github.com/cgrates/cgrates/config" +// "github.com/cgrates/cgrates/engine" +// "github.com/cgrates/cgrates/utils" +// ) -var ( - partCfgPath string - partCfgDIR string - partCfg *config.CGRConfig - partRPC *rpc.Client +// var ( +// partCfgPath string +// partCfgDIR string +// partCfg *config.CGRConfig +// partRPC *rpc.Client - partTests = []func(t *testing.T){ - testCreateDirs, - testPartITInitConfig, - testPartITInitCdrDb, - testPartITResetDataDb, - testPartITStartEngine, - testPartITRpcConn, - testPartITLoadTPFromFolder, - testPartITHandleCdr1File, - testPartITHandleCdr2File, - testPartITHandleCdr3File, - testPartITVerifyFiles, - testPartITAnalyseCDRs, - testCleanupFiles, - testPartITKillEngine, - } +// partTests = []func(t *testing.T){ +// testCreateDirs, +// testPartITInitConfig, +// testPartITInitCdrDb, +// testPartITResetDataDb, +// testPartITStartEngine, +// testPartITRpcConn, +// testPartITLoadTPFromFolder, +// testPartITHandleCdr1File, +// testPartITHandleCdr2File, +// testPartITHandleCdr3File, +// testPartITVerifyFiles, +// testPartITAnalyseCDRs, +// testCleanupFiles, +// testPartITKillEngine, +// } - partCsvFileContent1 = `4986517174963,004986517174964,DE-National,04.07.2016 18:58:55,04.07.2016 18:58:55,1,65,Peak,0.014560,498651,partial -4986517174964,004986517174963,DE-National,04.07.2016 20:58:55,04.07.2016 20:58:55,0,74,Offpeak,0.003360,498651,complete -` +// partCsvFileContent1 = `4986517174963,004986517174964,DE-National,04.07.2016 18:58:55,04.07.2016 18:58:55,1,65,Peak,0.014560,498651,partial +// 4986517174964,004986517174963,DE-National,04.07.2016 20:58:55,04.07.2016 20:58:55,0,74,Offpeak,0.003360,498651,complete +// ` - partCsvFileContent2 = `4986517174963,004986517174964,DE-National,04.07.2016 19:00:00,04.07.2016 18:58:55,0,15,Offpeak,0.003360,498651,partial` - partCsvFileContent3 = `4986517174964,004986517174960,DE-National,04.07.2016 19:05:55,04.07.2016 19:05:55,0,23,Offpeak,0.003360,498651,partial` +// partCsvFileContent2 = `4986517174963,004986517174964,DE-National,04.07.2016 19:00:00,04.07.2016 18:58:55,0,15,Offpeak,0.003360,498651,partial` +// partCsvFileContent3 = `4986517174964,004986517174960,DE-National,04.07.2016 19:05:55,04.07.2016 19:05:55,0,23,Offpeak,0.003360,498651,partial` - eCacheDumpFile1 = "4986517174963_004986517174964_04.07.2016 18:58:55,1467658735,*rated,086517174963,+4986517174964,04.07.2016 18:58:55,04.07.2016 18:58:55,65s\n" -) +// eCacheDumpFile1 = "4986517174963_004986517174964_04.07.2016 18:58:55,1467658735,*rated,086517174963,+4986517174964,04.07.2016 18:58:55,04.07.2016 18:58:55,65s\n" +// ) -func TestPartReadFile(t *testing.T) { - switch *dbType { - case utils.MetaInternal: - partCfgDIR = "ers_internal" - case utils.MetaMySQL: - partCfgDIR = "ers_mysql" - case utils.MetaMongo: - partCfgDIR = "ers_mongo" - case utils.MetaPostgres: - partCfgDIR = "ers_postgres" - default: - t.Fatal("Unknown Database type") - } - for _, test := range partTests { - t.Run(partCfgDIR, test) - } -} +// func TestPartReadFile(t *testing.T) { +// switch *dbType { +// case utils.MetaInternal: +// partCfgDIR = "ers_internal" +// case utils.MetaMySQL: +// partCfgDIR = "ers_mysql" +// case utils.MetaMongo: +// partCfgDIR = "ers_mongo" +// case utils.MetaPostgres: +// partCfgDIR = "ers_postgres" +// default: +// t.Fatal("Unknown Database type") +// } +// for _, test := range partTests { +// t.Run(partCfgDIR, test) +// } +// } -func testPartITInitConfig(t *testing.T) { - var err error - partCfgPath = path.Join(*dataDir, "conf", "samples", partCfgDIR) - if partCfg, err = config.NewCGRConfigFromPath(context.Background(), partCfgPath); err != nil { - t.Fatal("Got config error: ", err.Error()) - } -} +// func testPartITInitConfig(t *testing.T) { +// var err error +// partCfgPath = path.Join(*dataDir, "conf", "samples", partCfgDIR) +// if partCfg, err = config.NewCGRConfigFromPath(context.Background(), partCfgPath); err != nil { +// t.Fatal("Got config error: ", err.Error()) +// } +// } -// InitDb so we can rely on count -func testPartITInitCdrDb(t *testing.T) { - if err := engine.InitStorDB(partCfg); err != nil { - t.Fatal(err) - } -} +// // InitDb so we can rely on count +// func testPartITInitCdrDb(t *testing.T) { +// if err := engine.InitStorDB(partCfg); err != nil { +// t.Fatal(err) +// } +// } -// Remove data in both rating and accounting db -func testPartITResetDataDb(t *testing.T) { - if err := engine.InitDataDB(partCfg); err != nil { - t.Fatal(err) - } -} +// // Remove data in both rating and accounting db +// func testPartITResetDataDb(t *testing.T) { +// if err := engine.InitDataDB(partCfg); err != nil { +// t.Fatal(err) +// } +// } -func testPartITStartEngine(t *testing.T) { - if _, err := engine.StopStartEngine(partCfgPath, *waitRater); err != nil { - t.Fatal(err) - } -} +// func testPartITStartEngine(t *testing.T) { +// if _, err := engine.StopStartEngine(partCfgPath, *waitRater); err != nil { +// t.Fatal(err) +// } +// } -// Connect rpc client to rater -func testPartITRpcConn(t *testing.T) { - var err error - partRPC, err = newRPCClient(partCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed - if err != nil { - t.Fatal("Could not connect to rater: ", err.Error()) - } -} +// // Connect rpc client to rater +// func testPartITRpcConn(t *testing.T) { +// var err error +// partRPC, err = newRPCClient(partCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed +// if err != nil { +// t.Fatal("Could not connect to rater: ", err.Error()) +// } +// } -func testPartITLoadTPFromFolder(t *testing.T) { - //add a default charger - chargerProfile := &apis.ChargerWithAPIOpts{ - ChargerProfile: &engine.ChargerProfile{ - Tenant: "cgrates.org", - ID: "Default", - RunID: utils.MetaDefault, - AttributeIDs: []string{"*none"}, - Weight: 20, - }, - } - var result string - if err := partRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil { - t.Error(err) - } else if result != utils.OK { - t.Error("Unexpected reply returned", result) - } -} +// func testPartITLoadTPFromFolder(t *testing.T) { +// //add a default charger +// chargerProfile := &apis.ChargerWithAPIOpts{ +// ChargerProfile: &engine.ChargerProfile{ +// Tenant: "cgrates.org", +// ID: "Default", +// RunID: utils.MetaDefault, +// AttributeIDs: []string{"*none"}, +// Weight: 20, +// }, +// } +// var result string +// if err := partRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil { +// t.Error(err) +// } else if result != utils.OK { +// t.Error("Unexpected reply returned", result) +// } +// } -// The default scenario, out of ers defined in .cfg file -func testPartITHandleCdr1File(t *testing.T) { - fileName := "file1.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(partCsvFileContent1), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/partErs1/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// // The default scenario, out of ers defined in .cfg file +// func testPartITHandleCdr1File(t *testing.T) { +// fileName := "file1.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(partCsvFileContent1), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/partErs1/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -// The default scenario, out of ers defined in .cfg file -func testPartITHandleCdr2File(t *testing.T) { - fileName := "file2.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(partCsvFileContent2), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/partErs1/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } -} +// // The default scenario, out of ers defined in .cfg file +// func testPartITHandleCdr2File(t *testing.T) { +// fileName := "file2.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(partCsvFileContent2), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/partErs1/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// } -// The default scenario, out of ers defined in .cfg file -func testPartITHandleCdr3File(t *testing.T) { - fileName := "file3.csv" - tmpFilePath := path.Join("/tmp", fileName) - if err := os.WriteFile(tmpFilePath, []byte(partCsvFileContent3), 0644); err != nil { - t.Fatal(err.Error()) - } - if err := os.Rename(tmpFilePath, path.Join("/tmp/partErs2/in", fileName)); err != nil { - t.Fatal("Error moving file to processing directory: ", err) - } - time.Sleep(time.Second) -} +// // The default scenario, out of ers defined in .cfg file +// func testPartITHandleCdr3File(t *testing.T) { +// fileName := "file3.csv" +// tmpFilePath := path.Join("/tmp", fileName) +// if err := os.WriteFile(tmpFilePath, []byte(partCsvFileContent3), 0644); err != nil { +// t.Fatal(err.Error()) +// } +// if err := os.Rename(tmpFilePath, path.Join("/tmp/partErs2/in", fileName)); err != nil { +// t.Fatal("Error moving file to processing directory: ", err) +// } +// time.Sleep(time.Second) +// } -func testPartITVerifyFiles(t *testing.T) { - filesInDir, _ := os.ReadDir("/tmp/partErs1/out/") - if len(filesInDir) == 0 { - t.Errorf("No files found in folder: <%s>", "/tmp/partErs1/out") - } - var fileName string - for _, file := range filesInDir { // First file in directory is the one we need, harder to find it's name out of config - if strings.HasPrefix(file.Name(), "72533c7f80dde4cf7eb625eda75c93857995f8a8") { - fileName = file.Name() - break - } - } - if contentCacheDump, err := os.ReadFile(path.Join("/tmp/partErs1/out", fileName)); err != nil { - t.Error(err) - } else if len(eCacheDumpFile1) != len(string(contentCacheDump)) { - t.Errorf("Expecting: %q, \n received: %q", eCacheDumpFile1, string(contentCacheDump)) - } -} +// func testPartITVerifyFiles(t *testing.T) { +// filesInDir, _ := os.ReadDir("/tmp/partErs1/out/") +// if len(filesInDir) == 0 { +// t.Errorf("No files found in folder: <%s>", "/tmp/partErs1/out") +// } +// var fileName string +// for _, file := range filesInDir { // First file in directory is the one we need, harder to find it's name out of config +// if strings.HasPrefix(file.Name(), "72533c7f80dde4cf7eb625eda75c93857995f8a8") { +// fileName = file.Name() +// break +// } +// } +// if contentCacheDump, err := os.ReadFile(path.Join("/tmp/partErs1/out", fileName)); err != nil { +// t.Error(err) +// } else if len(eCacheDumpFile1) != len(string(contentCacheDump)) { +// t.Errorf("Expecting: %q, \n received: %q", eCacheDumpFile1, string(contentCacheDump)) +// } +// } -func testPartITAnalyseCDRs(t *testing.T) { - var reply []*engine.ExternalCDR - if err := partRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 2 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } - if err := partRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{DestinationPrefixes: []string{"+4986517174963"}}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 1 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } - if err := partRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{DestinationPrefixes: []string{"+4986517174960"}}, &reply); err != nil { - t.Error("Unexpected error: ", err.Error()) - } else if len(reply) != 1 { - t.Error("Unexpected number of CDRs returned: ", len(reply)) - } -} +// func testPartITAnalyseCDRs(t *testing.T) { +// var reply []*engine.ExternalCDR +// if err := partRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 2 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// if err := partRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{DestinationPrefixes: []string{"+4986517174963"}}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 1 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// if err := partRPC.Call(utils.APIerSv2GetCDRs, &utils.RPCCDRsFilter{DestinationPrefixes: []string{"+4986517174960"}}, &reply); err != nil { +// t.Error("Unexpected error: ", err.Error()) +// } else if len(reply) != 1 { +// t.Error("Unexpected number of CDRs returned: ", len(reply)) +// } +// } -func testPartITKillEngine(t *testing.T) { - if err := engine.KillEngine(*waitRater); err != nil { - t.Error(err) - } -} +// func testPartITKillEngine(t *testing.T) { +// if err := engine.KillEngine(*waitRater); err != nil { +// t.Error(err) +// } +// }