...

Source file src/edge-infra.dev/pkg/edge/api/middleware/version_check_test.go

Documentation: edge-infra.dev/pkg/edge/api/middleware

     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