1 package services
2
3 import (
4 "encoding/json"
5 "net/http"
6 "net/http/httptest"
7 "testing"
8
9 "github.com/gin-gonic/gin"
10 "github.com/stretchr/testify/assert"
11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12
13 "edge-infra.dev/pkg/edge/device-registrar/config"
14 test "edge-infra.dev/pkg/edge/device-registrar/utils/test"
15 ienApi "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
16 )
17
18 func TestPairFailVIPAddress(t *testing.T) {
19 router, scheme := setupTest()
20
21 mockClient := test.NewErrorInjectingFakeClient(scheme, true)
22
23 router.Use(injectMockClientMiddleware(t, mockClient))
24
25 w := servePairRequest(t, router)
26 assert.Equal(t, http.StatusInternalServerError, w.Code)
27 assert.Contains(t, w.Body.String(), "failed to retrieve VIP address")
28 }
29
30 func TestPairSuccess(t *testing.T) {
31 router, scheme := setupTest()
32
33 node := ienApi.IENode{
34 ObjectMeta: metav1.ObjectMeta{
35 Name: "test-node",
36 Namespace: "device-registrar-clients",
37 },
38 Spec: ienApi.IENodeSpec{
39 NetworkServices: ienApi.NetworkServices{
40 KubeVip: "172.0.0.1",
41 },
42 },
43 }
44
45 mockClient := test.NewErrorInjectingFakeClient(scheme, true, &node)
46 router.Use(injectMockClientMiddleware(t, mockClient))
47
48 w := servePairRequest(t, router)
49 assert.Equal(t, http.StatusOK, w.Code)
50 var resp DevicePairResponse
51 err := json.Unmarshal(w.Body.Bytes(), &resp)
52 assert.NoError(t, err)
53 assert.Contains(t, resp.ConnectURL, config.ConnectURL)
54 }
55
56 func TestPairFailCreateDevBinding(t *testing.T) {
57 router, scheme := setupTest()
58
59 mockClient := test.NewErrorInjectingFakeClient(scheme, true)
60 mockClient.SetFailOnCreate()
61
62 router.Use(injectMockClientMiddleware(t, mockClient))
63
64 w := servePairRequest(t, router)
65
66
67 assert.Equal(t, http.StatusInternalServerError, w.Code)
68
69
70 assert.Contains(t, w.Body.String(), "failed to create device binding: create error")
71 }
72
73 func TestPairFailUpdateDevBinding(t *testing.T) {
74 router, scheme := setupTest()
75
76 mockClient := test.NewErrorInjectingFakeClient(scheme, true)
77 mockClient.SetFailOnStatus()
78 mockClient.NewCustomSubResourceWriter().SetFailOnUpdate()
79
80 router.Use(injectMockClientMiddleware(t, mockClient))
81
82 w := servePairRequest(t, router)
83
84
85 assert.Equal(t, http.StatusInternalServerError, w.Code)
86
87
88 assert.Contains(t, w.Body.String(), "failed to update deviceBinding status")
89 }
90
91 func servePairRequest(t *testing.T, router *gin.Engine) *httptest.ResponseRecorder {
92
93 router.POST("/pair", Pair)
94
95
96 req, err := http.NewRequest(http.MethodPost, "/pair", nil)
97 assert.NoError(t, err)
98 w := httptest.NewRecorder()
99 router.ServeHTTP(w, req)
100
101 return w
102 }
103
View as plain text