...

Source file src/edge-infra.dev/pkg/edge/registration/cluster_registration_test.go

Documentation: edge-infra.dev/pkg/edge/registration

     1  package registration
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  	v1 "k8s.io/api/core/v1"
    12  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    13  	"sigs.k8s.io/controller-runtime/pkg/client"
    14  	"sigs.k8s.io/controller-runtime/pkg/client/fake"
    15  
    16  	"edge-infra.dev/pkg/edge/api/totp"
    17  	edgeErrors "edge-infra.dev/pkg/edge/apis/errors"
    18  	"edge-infra.dev/pkg/edge/constants/api/cluster"
    19  	"edge-infra.dev/pkg/edge/info"
    20  )
    21  
    22  var (
    23  	objNameIndexFunc = func(obj client.Object) []string { return []string{obj.GetName()} }
    24  )
    25  
    26  func TestRegisterCluster(t *testing.T) {
    27  	assert := assert.New(t)
    28  	srv := httptest.NewServer(http.HandlerFunc(GraphQLHandler(assert)))
    29  	reg, err := NewBuilder().
    30  		// cluster info
    31  		Banner(testBanner).
    32  		Store(testStore).
    33  		ClusterEdgeID("test-cluster-edge-id").
    34  		ClusterType(cluster.DSDS).
    35  
    36  		// bff info
    37  		APIEndpoint(srv.URL).
    38  		BSLOrganization(testOrganization).
    39  		BSLUserPassword(testUser, testPassword).
    40  		Fleet(fleetType).
    41  		Build()
    42  	if err != nil {
    43  		t.Fatal(err)
    44  	}
    45  
    46  	scheme, err := GetRegistrationRuntime()
    47  	assert.NoError(err, "fail to register scheme")
    48  	cl := fake.NewClientBuilder().WithScheme(scheme).Build()
    49  	ctx := context.Background()
    50  	reg.Client = cl
    51  	if _, err = reg.RegisterCluster(ctx); err != nil {
    52  		t.Fatal(err)
    53  	}
    54  	if err = reg.BootstrapCluster(ctx); err != nil {
    55  		t.Fatal(err)
    56  	}
    57  }
    58  
    59  func TestCheckIfClusterInCleanState(t *testing.T) {
    60  	assert := assert.New(t)
    61  	srv := httptest.NewServer(http.HandlerFunc(GraphQLHandler(assert)))
    62  	reg, err := NewBuilder().
    63  		// cluster info
    64  		Banner(testBanner).
    65  		Store(testStore).
    66  		ClusterEdgeID("test-cluster-edge-id").
    67  		ClusterType(cluster.DSDS).
    68  
    69  		// bff info
    70  		APIEndpoint(srv.URL).
    71  		BSLOrganization(testOrganization).
    72  		BSLUserPassword(testUser, testPassword).
    73  		Fleet(fleetType).
    74  		Build()
    75  	if err != nil {
    76  		t.Fatal(err)
    77  	}
    78  
    79  	scheme, err := GetRegistrationRuntime()
    80  	assert.NoError(err, "fail to register scheme")
    81  	cl := fake.NewClientBuilder().WithScheme(scheme).WithIndex(&v1.ConfigMap{}, "metadata.name", objNameIndexFunc).WithIndex(&v1.Secret{}, "metadata.name", objNameIndexFunc).Build()
    82  	ctx := context.Background()
    83  	reg.Client = cl
    84  	if _, err = reg.RegisterCluster(ctx); err != nil {
    85  		t.Fatal(err)
    86  	}
    87  	err = cl.Create(ctx, &v1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: info.EdgeConfigMapName, Namespace: info.EdgeConfigMapNS}, Data: map[string]string{"test": "test"}})
    88  	assert.NoError(err)
    89  	err = reg.CheckIfClusterInCleanState(ctx)
    90  	assert.Error(err)
    91  	assert.Equal(err.Error(), "found config map edge-info in cluster")
    92  }
    93  
    94  func TestRegisterClusterWithTotpToken(t *testing.T) {
    95  	assert := assert.New(t)
    96  	totpSecret := "totp-secret"
    97  	totpToken, err := totp.GenerateTotp(totpSecret)
    98  	assert.NoError(err)
    99  	srv := httptest.NewServer(http.HandlerFunc(GraphQLHandler(assert, WithTotpSecret(totpSecret))))
   100  	reg, err := NewBuilder().
   101  		// cluster info
   102  		Banner(testBanner).
   103  		Store(testStore).
   104  		ClusterEdgeID("test-cluster-edge-id").
   105  		ClusterType(cluster.DSDS).
   106  
   107  		// bff info
   108  		APIEndpoint(srv.URL).
   109  		BSLOrganization(testOrganization).
   110  		TotpToken(totpToken.Code).
   111  		Fleet(fleetType).
   112  		Build()
   113  	if err != nil {
   114  		t.Fatal(err)
   115  	}
   116  
   117  	scheme, err := GetRegistrationRuntime()
   118  	assert.NoError(err, "fail to register scheme")
   119  	cl := fake.NewClientBuilder().WithScheme(scheme).WithIndex(&v1.ConfigMap{}, "metadata.name", objNameIndexFunc).WithIndex(&v1.Secret{}, "metadata.name", objNameIndexFunc).Build()
   120  	ctx := context.Background()
   121  	reg.Client = cl
   122  	if _, err = reg.RegisterCluster(ctx); err != nil {
   123  		t.Fatal(err)
   124  	}
   125  	if err = reg.BootstrapCluster(ctx); err != nil {
   126  		t.Fatal(err)
   127  	}
   128  }
   129  
   130  func TestRegisterExistingCluster(t *testing.T) {
   131  	assert := assert.New(t)
   132  	srv := httptest.NewServer(http.HandlerFunc(GraphQLHandler(assert, WithExistingCluster(testBanner))))
   133  	clusterEdgeID := "test-registration-id"
   134  	reg, err := NewBuilder().
   135  		// cluster info
   136  		Banner(testBanner).
   137  		Store(testStore).
   138  		ClusterEdgeID(clusterEdgeID).
   139  		ClusterType(cluster.DSDS).
   140  
   141  		// bff info
   142  		APIEndpoint(srv.URL).
   143  		BSLOrganization(testOrganization).
   144  		BSLUserPassword(testUser, testPassword).
   145  		Fleet(fleetType).
   146  		Build()
   147  	if err != nil {
   148  		t.Fatal(err)
   149  	}
   150  
   151  	scheme, err := GetRegistrationRuntime()
   152  	assert.NoError(err, "fail to register scheme")
   153  	cl := fake.NewClientBuilder().WithScheme(scheme).WithIndex(&v1.ConfigMap{}, "metadata.name", objNameIndexFunc).WithIndex(&v1.Secret{}, "metadata.name", objNameIndexFunc).Build()
   154  	ctx := context.Background()
   155  	reg.Client = cl
   156  
   157  	// Attempt to register cluster "again" to verify that a response
   158  	// is still returned
   159  	resp, err := reg.RegisterCluster(ctx)
   160  	assert.True(strings.Contains(err.Error(), edgeErrors.ErrClusterAlreadyExists))
   161  	assert.NotNil(resp)
   162  	assert.Equal(clusterEdgeID, resp.ClusterEdgeID)
   163  }
   164  

View as plain text