...
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
31 Banner(testBanner).
32 Store(testStore).
33 ClusterEdgeID("test-cluster-edge-id").
34 ClusterType(cluster.DSDS).
35
36
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
64 Banner(testBanner).
65 Store(testStore).
66 ClusterEdgeID("test-cluster-edge-id").
67 ClusterType(cluster.DSDS).
68
69
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
102 Banner(testBanner).
103 Store(testStore).
104 ClusterEdgeID("test-cluster-edge-id").
105 ClusterType(cluster.DSDS).
106
107
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
136 Banner(testBanner).
137 Store(testStore).
138 ClusterEdgeID(clusterEdgeID).
139 ClusterType(cluster.DSDS).
140
141
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
158
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