From f669be786ad34e19e631679a869d5b223a2ec6ad Mon Sep 17 00:00:00 2001 From: armirveliaj Date: Thu, 12 Sep 2024 09:58:50 -0400 Subject: [PATCH] Add coverage tests on engine --- engine/storage_csv_test.go | 73 ++++++++++++++++++++++++++++++++++ engine/storage_mysql_test.go | 76 ++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) diff --git a/engine/storage_csv_test.go b/engine/storage_csv_test.go index 802ffd312..8c2adfa64 100644 --- a/engine/storage_csv_test.go +++ b/engine/storage_csv_test.go @@ -20,6 +20,8 @@ package engine import ( "encoding/csv" + "net/http" + "net/http/httptest" "os" "path/filepath" "strings" @@ -300,3 +302,74 @@ func TestCsvURLRead(t *testing.T) { } } } + +func TestCsvURLOpenSuccess(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("field1,field2,field3\nvalue1,value2,value3\n")) + })) + defer server.Close() + c := &csvURL{} + err := c.Open(server.URL, ',', 3) + if err != nil { + t.Fatalf("expected no error, got: %v", err) + } + if c.csvReader == nil { + t.Fatalf("expected csvReader to be initialized") + } + + record, err := c.csvReader.Read() + if err != nil { + t.Fatalf("expected no error while reading CSV, got: %v", err) + } + + expectedRecord := []string{"field1", "field2", "field3"} + for i, field := range expectedRecord { + if record[i] != field { + t.Errorf("expected field %s, got: %s", field, record[i]) + } + } +} + +func TestCsvURLOpenInvalidURL(t *testing.T) { + c := &csvURL{} + err := c.Open("invalid-url", ',', 3) + if err == nil { + t.Fatalf("expected an error for invalid URL, got none") + } +} + +func TestCsvURLOpenNotFound(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + })) + defer server.Close() + c := &csvURL{} + err := c.Open(server.URL, ',', 3) + if err == nil { + t.Fatalf("expected ErrNotFound, got none") + } +} + +func TestCsvURLOpenPathNotReachable(t *testing.T) { + c := &csvURL{} + err := c.Open("http://invalid.localhost", ',', 3) + if err == nil { + t.Fatalf("expected path not reachable error, got none") + } +} + +func TestCsvURLClosePageNotNil(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("CsvUrlClose")) + })) + defer server.Close() + c := &csvURL{} + resp, err := http.Get(server.URL) + if err != nil { + t.Fatalf("expected no error while getting mock URL, got: %v", err) + } + c.page = resp.Body + c.Close() +} diff --git a/engine/storage_mysql_test.go b/engine/storage_mysql_test.go index 92fb61229..58964db7c 100644 --- a/engine/storage_mysql_test.go +++ b/engine/storage_mysql_test.go @@ -22,7 +22,9 @@ import ( "fmt" "testing" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" + "gorm.io/gorm" ) func TestGetStorageTypes(t *testing.T) { @@ -115,3 +117,77 @@ func TestAppendToMysqlDSNOptsBasic(t *testing.T) { t.Errorf("AppendToMysqlDSNOpts(nil) = %s; want %s", result, utils.EmptyString) } } + +func TestMongoGetContext(t *testing.T) { + testCtx := context.Background() + ms := &MongoStorage{ + ctx: testCtx, + } + gotCtx := ms.GetContext() + if gotCtx != testCtx { + t.Errorf("GetContext() = %v; want %v", gotCtx, testCtx) + } +} +func TestMongoSelectDatabase(t *testing.T) { + initialDB := "mongo" + ms := &MongoStorage{ + db: initialDB, + } + newDB := "db" + if err := ms.SelectDatabase(newDB); err != nil { + t.Errorf("SelectDatabase() returned an error: %v", err) + } + if got := ms.db; got != newDB { + t.Errorf("SelectDatabase() updated db to %v, want %v", got, newDB) + } +} + +func TestMongoGetStorageType(t *testing.T) { + ms := &MongoStorage{} + storageType := ms.GetStorageType() + expectedStorageType := utils.MetaMongo + if storageType != expectedStorageType { + t.Errorf("Expected storage type: %s, got: %s", expectedStorageType, storageType) + } +} + +func TestRemoveKeysForPrefix(t *testing.T) { + sqlStorage := SQLStorage{} + testPrefix := "644" + err := sqlStorage.RemoveKeysForPrefix(testPrefix) + if err != utils.ErrNotImplemented { + t.Errorf("Expected error: %v, got: %v", utils.ErrNotImplemented, err) + } +} + +func TestGetKeysForPrefix(t *testing.T) { + sqlStorage := SQLStorage{} + testPrefix := "390" + keys, err := sqlStorage.GetKeysForPrefix(testPrefix) + if err != utils.ErrNotImplemented { + t.Errorf("Expected error: %v, got: %v", utils.ErrNotImplemented, err) + } + if keys != nil { + t.Errorf("Expected keys to be nil, got: %v", keys) + } +} + +func TestMysqlSelectDatabase(t *testing.T) { + sqlStorage := SQLStorage{} + testDBName := "mysql" + err := sqlStorage.SelectDatabase(testDBName) + if err != nil { + t.Errorf("Expected nil error, got: %v", err) + } +} + +func TestExportGormDB(t *testing.T) { + mockDB := &gorm.DB{} + sqlStorage := &SQLStorage{ + db: mockDB, + } + resultDB := sqlStorage.ExportGormDB() + if resultDB != mockDB { + t.Errorf("ExportGormDB() = %v; want %v", resultDB, mockDB) + } +}