...

Source file src/edge-infra.dev/pkg/edge/device-registrar/services/device_pair_service_test.go

Documentation: edge-infra.dev/pkg/edge/device-registrar/services

     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  	// status code 500
    67  	assert.Equal(t, http.StatusInternalServerError, w.Code)
    68  
    69  	// confirm response contains the error message
    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  	// status code 500
    85  	assert.Equal(t, http.StatusInternalServerError, w.Code)
    86  
    87  	// confirm response contains the error message
    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  	// register endpoint
    93  	router.POST("/pair", Pair)
    94  
    95  	// Create a new HTTP request
    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