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  }