mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | package scopes | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"context" | ||
|  | 	"encoding/json" | ||
|  | 	"os" | ||
|  | 	"testing" | ||
|  | 
 | ||
|  | 	"github.com/grafana/grafana/pkg/services/featuremgmt" | ||
|  | 	"github.com/grafana/grafana/pkg/tests/apis" | ||
|  | 	"github.com/grafana/grafana/pkg/tests/testinfra" | ||
|  | 	"github.com/stretchr/testify/require" | ||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
|  | 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" | ||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||
|  | ) | ||
|  | 
 | ||
|  | func TestIntegrationScopeNodesExample(t *testing.T) { | ||
|  | 	if testing.Short() { | ||
|  | 		t.Skip("skipping integration test in short mode.") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	ctx := context.Background() | ||
|  | 	helper := apis.NewK8sTestHelper(t, testinfra.GrafanaOpts{ | ||
|  | 		AppModeProduction: false, // required for experimental APIs
 | ||
|  | 		EnableFeatureToggles: []string{ | ||
|  | 			featuremgmt.FlagGrafanaAPIServerWithExperimentalAPIs, // Required to start the example service
 | ||
|  | 		}, | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	scopeClient := helper.GetResourceClient(apis.ResourceClientArgs{ | ||
|  | 		User:      helper.Org1.Admin, | ||
|  | 		Namespace: "default", // actually org1
 | ||
|  | 		GVR: schema.GroupVersionResource{ | ||
|  | 			Group: "scope.grafana.app", Version: "v0alpha1", Resource: "scopes", | ||
|  | 		}, | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	scopeNodesClient := helper.GetResourceClient(apis.ResourceClientArgs{ | ||
|  | 		User:      helper.Org1.Admin, | ||
|  | 		Namespace: "default", // actually org1
 | ||
|  | 		GVR: schema.GroupVersionResource{ | ||
|  | 			Group: "scope.grafana.app", Version: "v0alpha1", Resource: "scopenodes", | ||
|  | 		}, | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	createOptions := metav1.CreateOptions{FieldValidation: "Strict"} | ||
|  | 
 | ||
|  | 	t.Run("Create scopes", func(t *testing.T) { | ||
|  | 		ul := jsonListToUnstructuredList(t, "testdata/scopeNodesExample/scopes.json") | ||
|  | 
 | ||
|  | 		for _, item := range ul.Items { | ||
|  | 			_, err := scopeClient.Resource.Create(ctx, &item, createOptions) | ||
|  | 			require.NoError(t, err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		found, err := scopeClient.Resource.List(ctx, metav1.ListOptions{}) | ||
|  | 		require.NoError(t, err) | ||
|  | 		require.Len(t, found.Items, 5) | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	t.Run("Create scopeNodes", func(t *testing.T) { | ||
|  | 		ul := jsonListToUnstructuredList(t, "testdata/scopeNodesExample/scopeNodes.json") | ||
|  | 
 | ||
|  | 		for _, item := range ul.Items { | ||
|  | 			_, err := scopeNodesClient.Resource.Create(ctx, &item, createOptions) | ||
|  | 			require.NoError(t, err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		found, err := scopeNodesClient.Resource.List(ctx, metav1.ListOptions{}) | ||
|  | 		require.NoError(t, err) | ||
|  | 		require.Len(t, found.Items, 12) | ||
|  | 	}) | ||
|  | } | ||
|  | 
 | ||
|  | func jsonListToUnstructuredList(t *testing.T, fname string) (ul unstructured.UnstructuredList) { | ||
|  | 	// nolint:gosec
 | ||
|  | 	f, err := os.ReadFile(fname) | ||
|  | 	require.NoError(t, err) | ||
|  | 
 | ||
|  | 	err = json.Unmarshal(f, &ul) | ||
|  | 	require.NoError(t, err) | ||
|  | 	return | ||
|  | } |