From 03e5ee65ac6cdbbb00f6871a3e38b0d81d2e66e0 Mon Sep 17 00:00:00 2001 From: armirveliaj Date: Fri, 6 Sep 2024 11:00:17 -0400 Subject: [PATCH] Add coverage tests on engine --- engine/storage_csv_test.go | 91 ++++++++++++++++++++++++++++++++++++++ engine/tpexporter_test.go | 49 ++++++++++++++++++++ 2 files changed, 140 insertions(+) diff --git a/engine/storage_csv_test.go b/engine/storage_csv_test.go index db0628e95..802ffd312 100644 --- a/engine/storage_csv_test.go +++ b/engine/storage_csv_test.go @@ -19,8 +19,10 @@ along with this program. If not, see package engine import ( + "encoding/csv" "os" "path/filepath" + "strings" "testing" "github.com/cgrates/cgrates/utils" @@ -209,3 +211,92 @@ func TestOpen(t *testing.T) { t.Errorf("Failed to close file: %v", err) } } + +func TestCsvFileRead(t *testing.T) { + input := "subject,duration,destination\n101,60,1001\n102,45,1002\n" + reader := strings.NewReader(input) + csvReader := csv.NewReader(reader) + csvFileInstance := &csvFile{ + csvReader: csvReader, + } + expectedRecord1 := []string{"subject", "duration", "destination"} + record1, err := csvFileInstance.Read() + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if len(record1) != len(expectedRecord1) { + t.Fatalf("expected %d fields, got %d", len(expectedRecord1), len(record1)) + } + for i, field := range record1 { + if field != expectedRecord1[i] { + t.Errorf("expected field %d to be %s, got %s", i, expectedRecord1[i], field) + } + } + expectedRecord2 := []string{"101", "60", "1001"} + record2, err := csvFileInstance.Read() + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if len(record2) != len(expectedRecord2) { + t.Fatalf("expected %d fields, got %d", len(expectedRecord2), len(record2)) + } + for i, field := range record2 { + if field != expectedRecord2[i] { + t.Errorf("expected field %d to be %s, got %s", i, expectedRecord2[i], field) + } + } + expectedRecord3 := []string{"102", "45", "1002"} + record3, err := csvFileInstance.Read() + + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + + if len(record3) != len(expectedRecord3) { + t.Fatalf("expected %d fields, got %d", len(expectedRecord3), len(record3)) + } + for i, field := range record3 { + if field != expectedRecord3[i] { + t.Errorf("expected field %d to be %s, got %s", i, expectedRecord3[i], field) + } + } + _, err = csvFileInstance.Read() + if err == nil { + t.Fatalf("expected EOF error, got nil") + } +} + +func TestCsvURLRead(t *testing.T) { + input := "field1,field2,field3\nvalue1,value2,value3\n" + reader := strings.NewReader(input) + csvReader := csv.NewReader(reader) + csvURLInstance := &csvURL{ + csvReader: csvReader, + } + expectedRecord := []string{"field1", "field2", "field3"} + record, err := csvURLInstance.Read() + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if len(record) != len(expectedRecord) { + t.Fatalf("expected %d fields, got %d", len(expectedRecord), len(record)) + } + for i, field := range record { + if field != expectedRecord[i] { + t.Errorf("expected field %d to be %s, got %s", i, expectedRecord[i], field) + } + } + expectedRecord2 := []string{"value1", "value2", "value3"} + record2, err := csvURLInstance.Read() + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if len(record2) != len(expectedRecord2) { + t.Fatalf("expected %d fields, got %d", len(expectedRecord2), len(record2)) + } + for i, field := range record2 { + if field != expectedRecord2[i] { + t.Errorf("expected field %d to be %s, got %s", i, expectedRecord2[i], field) + } + } +} diff --git a/engine/tpexporter_test.go b/engine/tpexporter_test.go index 959caefe5..b8df15c4c 100644 --- a/engine/tpexporter_test.go +++ b/engine/tpexporter_test.go @@ -164,3 +164,52 @@ func TestNewTPExporter(t *testing.T) { } }) } + +func TestTPExporterWriteOut(t *testing.T) { + type Data struct { + Field1 string + Field2 string + } + tpExp := &TPExporter{ + compress: false, + exportPath: "", + fileFormat: utils.CSV, + sep: ',', + } + t.Run("empty tpData", func(t *testing.T) { + err := tpExp.writeOut("testfile.csv", []any{}) + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + }) + + t.Run("exportPath is set", func(t *testing.T) { + tmpDir := t.TempDir() + tpExp.exportPath = tmpDir + tpData := []any{ + Data{"ID1", "ID2"}, + Data{"ID3", "ID4"}, + } + err := tpExp.writeOut("testfile.csv", tpData) + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + expectedFilePath := path.Join(tmpDir, "testfile.csv") + if _, err := os.Stat(expectedFilePath); err != nil { + t.Errorf("Expected file to be created at %v, but got error: %v", expectedFilePath, err) + } + defer os.Remove(expectedFilePath) + }) + t.Run("write to buffer", func(t *testing.T) { + tpExp.exportPath = "" + tpData := []any{ + Data{"ID1", "ID2"}, + Data{"ID3", "ID4"}, + } + err := tpExp.writeOut("testfile.csv", tpData) + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + + }) +}