diff --git a/apier/tutfscsv_local_test.go b/apier/tutfscsv_local_test.go index 70732219a..c4d146069 100644 --- a/apier/tutfscsv_local_test.go +++ b/apier/tutfscsv_local_test.go @@ -135,7 +135,7 @@ func TestFsCsvLoadTariffPlans(t *testing.T) { } reply := "" // Simple test that command is executed without errors - attrs := &AttrLoadTPFromFolder{FolderPath: path.Join(*dataDir, "tutorials", "fs_csv", "cgrates", "tariffplans")} + attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tutorials", "fs_csv", "cgrates", "tariffplans")} if err := rater.Call("ApierV1.LoadTariffPlanFromFolder", attrs, &reply); err != nil { t.Error("Got error on ApierV1.LoadTariffPlanFromFolder: ", err.Error()) } else if reply != "OK" { diff --git a/data/conf/cgrates.cfg b/data/conf/cgrates.cfg index 9b14678c7..fa88dd4d5 100644 --- a/data/conf/cgrates.cfg +++ b/data/conf/cgrates.cfg @@ -46,7 +46,7 @@ [cdrs] # enabled = false # Start the CDR Server service: . -# extra_fields = # Extra fields to store in CDRs +# extra_fields = # Extra fields to store in CDRs for non-generic CDRs # mediator = # Address where to reach the Mediator. Empty for disabling mediation. <""|internal> [cdre] diff --git a/data/conf/samples/mediator_test1.cfg b/data/conf/samples/mediator_test1.cfg index 5dfb040e2..fc9765653 100644 --- a/data/conf/samples/mediator_test1.cfg +++ b/data/conf/samples/mediator_test1.cfg @@ -45,7 +45,7 @@ enabled = true # Enable RaterCDRSExportPath service: . [cdrs] enabled = true # Start the CDR Server service: . -# extra_fields = # Extra fields to store in CDRs +# extra_fields = # Extra fields to store in CDRs in case of non generic CDRs mediator = internal # Address where to reach the Mediator. Empty for disabling mediation. <""|internal> [cdre] diff --git a/local_test.sh b/local_test.sh index 183830841..2de420cd0 100755 --- a/local_test.sh +++ b/local_test.sh @@ -8,9 +8,11 @@ go test github.com/cgrates/cgrates/engine -local en=$? go test github.com/cgrates/cgrates/cdrc -local cdrc=$? +go test github.com/cgrates/cgrates/mediator -local +med=$? -exit $gen && $ap && $en && cdrc +exit $gen && $ap && $en && $cdrc && $med diff --git a/mediator/mediator_local_test.go b/mediator/mediator_local_test.go index 7f86dad61..eca4ddb90 100644 --- a/mediator/mediator_local_test.go +++ b/mediator/mediator_local_test.go @@ -50,14 +50,15 @@ README: var cfg *config.CGRConfig var cgrRpc *rpc.Client +var cdrStor engine.CdrStorage var testLocal = flag.Bool("local", false, "Perform the tests only on local test environment, not by default.") // This flag will be passed here via "go test -local" args var dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here") var storDbType = flag.String("stordb_type", utils.MYSQL, "The type of the storDb database ") var startDelay = flag.Int("delay_start", 300, "Number of miliseconds to it for rater to start and cache") +var cfgPath = path.Join(*dataDir, "conf", "samples", "mediator_test1.cfg") func init() { - cfgPath := path.Join(*dataDir, "conf", "samples", "mediator_test1.cfg") cfg, _ = config.NewCGRConfig(&cfgPath) } @@ -83,10 +84,11 @@ func TestInitStorDb(t *testing.T) { t.Fatal("Unsupported storDbType") } var mysql *engine.MySQLStorage - if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass); err != nil { + var err error + if cdrStor, err = engine.ConfigureCdrStorage(cfg.StorDBType, cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass); err != nil { t.Fatal("Error on opening database connection: ", err) } else { - mysql = d.(*engine.MySQLStorage) + mysql = cdrStor.(*engine.MySQLStorage) } for _, scriptName := range []string{engine.CREATE_CDRS_TABLES_SQL, engine.CREATE_COSTDETAILS_TABLES_SQL, engine.CREATE_MEDIATOR_TABLES_SQL} { if err := mysql.CreateTablesFromScript(path.Join(*dataDir, "storage", *storDbType, scriptName)); err != nil { @@ -111,7 +113,7 @@ func TestStartEngine(t *testing.T) { t.Fatal("Cannot find cgr-engine executable") } exec.Command("pkill", "cgr-engine").Run() // Just to make sure another one is not running, bit brutal maybe we can fine tune it - engine := exec.Command(enginePath, "-rater", "-scheduler", "-cdrs", "-mediator", "-config", path.Join(*dataDir, "conf", "cgrates.cfg")) + engine := exec.Command(enginePath, "-config", cfgPath) if err := engine.Start(); err != nil { t.Fatal("Cannot start cgr-engine: ", err.Error()) } @@ -130,6 +132,48 @@ func TestRpcConn(t *testing.T) { } } +func TestPostCdrs(t *testing.T) { + if !*testLocal { + return + } + httpClient := new(http.Client) + cdrForm1 := url.Values{"accid": []string{"dsafdsaf"}, "cdrhost": []string{"192.168.1.1"}, "reqtype": []string{"rated"}, "direction": []string{"*out"}, + "tenant": []string{"cgrates.org"}, "tor": []string{"call"}, "account": []string{"1001"}, "subject": []string{"1001"}, "destination": []string{"1002"}, + "answer_time": []string{"2013-11-07T08:42:26Z"}, "duration": []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}} + cdrForm2 := url.Values{"accid": []string{"adsafdsaf"}, "cdrhost": []string{"192.168.1.1"}, "reqtype": []string{"rated"}, "direction": []string{"*out"}, + "tenant": []string{"itsyscom.com"}, "tor": []string{"call"}, "account": []string{"dan"}, "subject": []string{"dan"}, "destination": []string{"1002"}, + "answer_time": []string{"2013-11-07T08:42:26Z"}, "duration": []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}} + for _, cdrForm := range []url.Values{cdrForm1, cdrForm2} { + cdrForm.Set(utils.CDRSOURCE, engine.TEST_SQL) + if _, err := httpClient.PostForm(fmt.Sprintf("http://%s/cgr", cfg.HTTPListen), cdrForm); err != nil { + t.Error(err.Error()) + } + } + if storedCdrs, err := cdrStor.GetStoredCdrs(time.Time{}, time.Time{}, false, false); err != nil { + t.Error(err) + } else if len(storedCdrs) != 2 { + t.Error(fmt.Sprintf("Unexpected number of CDRs stored: %d", len(storedCdrs))) + } +} + +// Directly inject CDRs into storDb +func TestInjectCdrs(t *testing.T) { + if !*testLocal { + return + } + cgrCdr1 := utils.CgrCdr{"accid": "aaaaadsafdsaf", "cdr_source": engine.TEST_SQL, "cdrhost": "192.168.1.1", "reqtype": "rated", "direction": "*out", + "tenant": "cgrates.org", "tor": "call", "account": "1001", "subject": "1001", "destination": "1002", + "answer_time": "2013-11-07T08:42:26Z", "duration": "10"} + if err := cdrStor.SetCdr(cgrCdr1); err != nil { + t.Error(err) + } + if storedCdrs, err := cdrStor.GetStoredCdrs(time.Time{}, time.Time{}, false, false); err != nil { + t.Error(err) + } else if len(storedCdrs) != 3 { + t.Error(fmt.Sprintf("Unexpected number of CDRs stored: %d", len(storedCdrs))) + } +} + // Test here LoadTariffPlanFromFolder func TestLoadTariffPlanFromFolder(t *testing.T) { if !*testLocal { @@ -145,25 +189,6 @@ func TestLoadTariffPlanFromFolder(t *testing.T) { } } -func TestPostCdrs(t *testing.T) { - if !*testLocal { - return - } - httpClient := new(http.Client) - cdrForm1 := url.Values{"accid": []string{"dsafdsaf"}, "cdrhost": []string{"192.168.1.1"}, "reqtype": []string{"rated"}, "direction": []string{"*out"}, - "tenant": []string{"cgrates.org"}, "tor": []string{"call"}, "account": []string{"1001"}, "subject": []string{"1001"}, "destination": []string{"1002"}, - "answer_time": []string{"2013-11-07T08:42:26Z"}, "duration": []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}} - cdrForm2 := url.Values{"accid": []string{"adsafdsaf"}, "cdrhost": []string{"192.168.1.1"}, "reqtype": []string{"rated"}, "direction": []string{"*out"}, - "tenant": []string{"cgrates.org"}, "tor": []string{"call"}, "account": []string{"1001"}, "subject": []string{"1001"}, "destination": []string{"1002"}, - "answer_time": []string{"2013-11-07T08:42:26Z"}, "duration": []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}} - for _, cdrForm := range []url.Values{cdrForm1, cdrForm2} { - cdrForm.Set(utils.CDRSOURCE, engine.TEST_SQL) - if _, err := httpClient.PostForm(fmt.Sprintf("http://%s/cgr", cfg.HTTPListen), cdrForm); err != nil { - t.Error(err.Error()) - } - } -} - func TestRateCdrs(t *testing.T) { if !*testLocal { return