...
1 package middleware
2
3 import (
4 "fmt"
5 "io"
6 "net/http"
7 "net/http/httptest"
8 "strings"
9 "testing"
10
11 "edge-infra.dev/pkg/edge/client"
12 "edge-infra.dev/pkg/lib/runtime/version"
13
14 "github.com/gin-gonic/gin"
15 assertAPI "github.com/stretchr/testify/assert"
16 )
17
18 func init() {
19 gin.SetMode(gin.ReleaseMode)
20 }
21
22 var v = version.New()
23 var serverVersion = v.SemVer
24
25 const token = "test-token"
26 const bearer = "bearer"
27
28 func TestCheckApiVersionOlder(t *testing.T) {
29 assert := assertAPI.New(t)
30 edgeVersion := "104.3.6"
31
32 router := gin.Default()
33 router.Use(CheckVersion())
34 router.Use(func(c *gin.Context) {
35 auth := c.GetHeader(client.Authorization)
36 assert.Equal(auth, bearer+" "+token)
37 assert.Equal(c.GetHeader(client.EdgeVersion), edgeVersion)
38 c.Status(200)
39 })
40 server := httptest.NewServer(router)
41
42 headers := make(map[string]string)
43 headers[client.Authorization] = fmt.Sprintf("%s %s", client.BearerToken, token)
44 headers[client.EdgeVersion] = edgeVersion
45 tokenclient := client.NewTokenClient(headers)
46 res, err := tokenclient.Get(server.URL)
47 assert.NoError(err)
48 assert.Equal(http.StatusBadRequest, res.StatusCode)
49 resp, err := io.ReadAll(res.Body)
50 assert.NoError(err)
51 assert.True(strings.Contains(string(resp), fmt.Sprintf("client version %s incompatible with server version %s", edgeVersion, serverVersion)))
52 }
53
54 func TestCheckApiVersionNewer(t *testing.T) {
55 assert := assertAPI.New(t)
56 edgeVersion := "0.3.0"
57
58 router := gin.Default()
59 router.Use(CheckVersion())
60 router.Use(func(c *gin.Context) {
61 auth := c.GetHeader(client.Authorization)
62 assert.Equal(auth, bearer+" "+token)
63 assert.Equal(c.GetHeader(client.EdgeVersion), edgeVersion)
64 c.Status(200)
65 })
66 server := httptest.NewServer(router)
67
68 headers := make(map[string]string)
69 headers[client.Authorization] = fmt.Sprintf("%s %s", client.BearerToken, token)
70 headers[client.EdgeVersion] = edgeVersion
71 tokenclient := client.NewTokenClient(headers)
72 res, err := tokenclient.Get(server.URL)
73 assert.NoError(err)
74 assert.Equal(res.StatusCode, http.StatusOK)
75 }
76
77 func TestCheckVersionMatch(t *testing.T) {
78 assert := assertAPI.New(t)
79 edgeVersion := serverVersion
80
81 router := gin.Default()
82 router.Use(CheckVersion())
83 router.Use(func(c *gin.Context) {
84 auth := c.GetHeader(client.Authorization)
85 assert.Equal(auth, bearer+" "+token)
86 assert.Equal(c.GetHeader(client.EdgeVersion), edgeVersion)
87 c.Status(200)
88 })
89 server := httptest.NewServer(router)
90
91 headers := make(map[string]string)
92 headers[client.Authorization] = fmt.Sprintf("%s %s", client.BearerToken, token)
93 headers[client.EdgeVersion] = edgeVersion
94 tokenclient := client.NewTokenClient(headers)
95 res, err := tokenclient.Get(server.URL)
96 assert.NoError(err)
97 assert.Equal(res.StatusCode, http.StatusOK)
98 }
99
View as plain text