diff --git a/config/cdrreplication.go b/config/cdrreplication.go index 1d89bfc73..370bc6c12 100644 --- a/config/cdrreplication.go +++ b/config/cdrreplication.go @@ -33,7 +33,7 @@ type CDRReplicationCfg struct { func (rplCfg CDRReplicationCfg) FallbackFileName() string { fileSuffix := ".txt" switch rplCfg.Transport { - case utils.MetaHTTPjsonCDR, utils.MetaHTTPjsonMap: + case utils.MetaHTTPjsonCDR, utils.MetaHTTPjsonMap, utils.MetaAMQPjsonCDR, utils.MetaAMQPjsonMap: fileSuffix = ".json" case utils.META_HTTP_POST: fileSuffix = ".form" diff --git a/data/conf/samples/cdrsreplicationmaster/cdrsreplicationmaster.json b/data/conf/samples/cdrsreplicationmaster/cdrsreplicationmaster.json index 69c9b855d..900209bc5 100644 --- a/data/conf/samples/cdrsreplicationmaster/cdrsreplicationmaster.json +++ b/data/conf/samples/cdrsreplicationmaster/cdrsreplicationmaster.json @@ -70,7 +70,7 @@ "address": "http://127.0.0.1:12080/invalid", "attempts": 1, "content_fields": [ - {"tag": "CGRID", "type": "*composed", "value": "CGRID", "field_id": "CGRID"}, + {"tag": "OriginID", "type": "*composed", "value": "OriginID", "field_id": "OriginID"}, ], }, { diff --git a/general_tests/cdrs_replication_it_test.go b/general_tests/cdrs_replication_it_test.go index cacafc9a7..fb08eb9c6 100644 --- a/general_tests/cdrs_replication_it_test.go +++ b/general_tests/cdrs_replication_it_test.go @@ -61,11 +61,13 @@ func TestCdrsInitCdrDb(t *testing.T) { if err := engine.InitStorDb(cdrsSlaveCfg); err != nil { t.Fatal(err) } - /* - if err := os.Mkdir(cdrsMasterCfg.FailedPostsDir, 0700); err != nil { - t.Error(err) - } - */ + if err := os.RemoveAll(cdrsMasterCfg.FailedPostsDir); err != nil { + t.Fatal("Error removing folder: ", cdrsMasterCfg.FailedPostsDir, err) + } + + if err := os.Mkdir(cdrsMasterCfg.FailedPostsDir, 0700); err != nil { + t.Error(err) + } } @@ -173,16 +175,20 @@ func TestCdrsAMQPReplication(t *testing.T) { } } -// Connect rpc client to rater -func TestCdrsFileFailover(t *testing.T) { +func TestCdrsHTTPPosterFileFailover(t *testing.T) { time.Sleep(time.Duration(2 * time.Second)) - failoverContent := []byte(`CGRID=57548d485d61ebcba55afbe5d939c82a8e9ff670`) + failoverContent := []byte(`OriginID=httpjsonrpc1`) var rplCfg *config.CDRReplicationCfg + var foundFile bool for _, rplCfg = range cdrsMasterCfg.CDRSCdrReplication { if strings.HasSuffix(rplCfg.Address, "invalid") { // Find the config which shold generate the failoback + foundFile = true break } } + if !foundFile { + t.Fatal("Could not find the file in folder") + } filesInDir, _ := ioutil.ReadDir(cdrsMasterCfg.FailedPostsDir) if len(filesInDir) == 0 { t.Fatalf("No files in directory: %s", cdrsMasterCfg.FailedPostsDir) @@ -190,7 +196,45 @@ func TestCdrsFileFailover(t *testing.T) { 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 fileName = file.Name() - break + if strings.Index(fileName, ".txt") != -1 { + break + } + } + filePath := path.Join(cdrsMasterCfg.FailedPostsDir, fileName) + if readBytes, err := ioutil.ReadFile(filePath); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(failoverContent, readBytes) { // Checking just the prefix should do since some content is dynamic + t.Errorf("Expecting: %q, received: %q", string(failoverContent), string(readBytes)) + } + if err := os.Remove(filePath); err != nil { + t.Error("Failed removing file: ", filePath) + } +} + +func TestCdrsAMQPPosterFileFailover(t *testing.T) { + time.Sleep(time.Duration(6 * time.Second)) + failoverContent := []byte(`{"CGRID":"57548d485d61ebcba55afbe5d939c82a8e9ff670"}`) + var rplCfg *config.CDRReplicationCfg + var foundFile bool + for _, rplCfg = range cdrsMasterCfg.CDRSCdrReplication { + if rplCfg.Address == "amqp://guest:guest@localhost:25672/?queue_id=cgrates_cdrs" { // Find the config which shold generate the failoback + foundFile = true + break + } + } + if !foundFile { + t.Fatal("Could not find the file in folder") + } + filesInDir, _ := ioutil.ReadDir(cdrsMasterCfg.FailedPostsDir) + if len(filesInDir) == 0 { + t.Fatalf("No files in directory: %s", cdrsMasterCfg.FailedPostsDir) + } + 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 + fileName = file.Name() + if strings.HasPrefix(fileName, "cdr|*amqp_json_map") { + break + } } filePath := path.Join(cdrsMasterCfg.FailedPostsDir, fileName) if readBytes, err := ioutil.ReadFile(filePath); err != nil {