github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/test/connections_integration_test.go (about) 1 package test 2 3 import ( 4 "github.com/esnet/gdg/internal/config" 5 "github.com/esnet/gdg/internal/service" 6 7 "github.com/grafana/grafana-openapi-client-go/models" 8 "log/slog" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestConnectionsCRUD(t *testing.T) { 15 if testing.Short() { 16 t.Skip("skipping integration test") 17 } 18 19 apiClient, _, cleanup := initTest(t, nil) 20 defer func() { 21 cleanErr := cleanup() 22 if cleanErr != nil { 23 slog.Error("unable to clean up after test", slog.Any("err", cleanErr)) 24 } 25 }() 26 filtersEntity := service.NewConnectionFilter("") 27 slog.Info("Exporting all connections") 28 apiClient.UploadConnections(filtersEntity) 29 slog.Info("Listing all connections") 30 dataSources := apiClient.ListConnections(filtersEntity) 31 assert.Equal(t, len(dataSources), 3) 32 var dsItem *models.DataSourceListItemDTO 33 for _, ds := range dataSources { 34 if ds.Name == "netsage" { 35 dsItem = &ds 36 break 37 } 38 } 39 assert.NotNil(t, dsItem) 40 validateConnection(t, *dsItem) 41 //Import Dashboards 42 slog.Info("Importing connections") 43 list := apiClient.DownloadConnections(filtersEntity) 44 assert.Equal(t, len(list), len(dataSources)) 45 slog.Info("Deleting connections") 46 deleteList := apiClient.DeleteAllConnections(filtersEntity) 47 assert.Equal(t, len(deleteList), len(dataSources)) 48 slog.Info("List connections again") 49 dataSources = apiClient.ListConnections(filtersEntity) 50 assert.Equal(t, len(dataSources), 0) 51 } 52 53 // TestConnectionFilter ensures the regex matching and datasource type filters work as expected 54 func TestConnectionFilter(t *testing.T) { 55 if testing.Short() { 56 t.Skip("skipping integration test") 57 } 58 _, _, cleanup := initTest(t, nil) 59 defer func() { 60 cleanErr := cleanup() 61 if cleanErr != nil { 62 slog.Error("unable to clean up after test", slog.Any("err", cleanErr)) 63 } 64 }() 65 66 testingContext := config.Config().GetGDGConfig().GetContexts()["testing"] 67 testingContext.GetDataSourceSettings().FilterRules = []config.MatchingRule{ 68 { 69 Field: "name", 70 Regex: "DEV-*|-Dev-*", 71 }, 72 { 73 Field: "type", 74 Inclusive: true, 75 Regex: "elasticsearch|globalnoc-tsds-datasource", 76 }, 77 } 78 testingContext = config.Config().GetGDGConfig().GetContexts()["testing"] 79 _ = testingContext 80 81 apiClient := service.NewApiService("dummy") 82 83 filtersEntity := service.NewConnectionFilter("") 84 slog.Info("Exporting all connections") 85 apiClient.UploadConnections(filtersEntity) 86 slog.Info("Listing all connections") 87 dataSources := apiClient.ListConnections(filtersEntity) 88 assert.Equal(t, len(dataSources), 2) 89 var dsItem *models.DataSourceListItemDTO 90 for _, ds := range dataSources { 91 if ds.Name == "netsage" { 92 dsItem = &ds 93 break 94 } 95 } 96 assert.NotNil(t, dsItem) 97 validateConnection(t, *dsItem) 98 //Import Dashboards 99 slog.Info("Importing connections") 100 list := apiClient.DownloadConnections(filtersEntity) 101 assert.Equal(t, len(list), len(dataSources)) 102 slog.Info("Deleting connections") 103 deleteList := apiClient.DeleteAllConnections(filtersEntity) 104 assert.Equal(t, len(deleteList), len(dataSources)) 105 slog.Info("List connections again") 106 dataSources = apiClient.ListConnections(filtersEntity) 107 assert.Equal(t, len(dataSources), 0) 108 } 109 110 func validateConnection(t *testing.T, dsItem models.DataSourceListItemDTO) { 111 assert.Equal(t, int64(1), dsItem.OrgID) 112 assert.Equal(t, "netsage", dsItem.Name) 113 assert.Equal(t, "elasticsearch", dsItem.Type) 114 assert.Equal(t, models.DsAccess("proxy"), dsItem.Access) 115 assert.Equal(t, "https://netsage-elk1.grnoc.iu.edu/esproxy2/", dsItem.URL) 116 assert.True(t, dsItem.BasicAuth) 117 assert.True(t, dsItem.IsDefault) 118 119 }