Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 73 additions & 14 deletions foreign/go/internal/command/access_token_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,90 @@ package command

import (
"bytes"
"strings"
"testing"

iggcon "github.com/apache/iggy/foreign/go/contracts"
)

func TestCreatePersonalAccessTokenMarshalBinary(t *testing.T) {
tests := []struct {
name string
expiry iggcon.Duration
want []byte
func TestPersonalAccessTokenCommandsMarshalBinary(t *testing.T) {
for _, test := range []struct {
name string
request Command
code Code
want []byte
}{
{"server default", iggcon.IggyExpiryServerDefault, []byte{5, 't', 'o', 'k', 'e', 'n', 0, 0, 0, 0, 0, 0, 0, 0}},
{"little endian", 0x01020304, []byte{5, 't', 'o', 'k', 'e', 'n', 4, 3, 2, 1, 0, 0, 0, 0}},
{"past 32 bits", 0x0102030405060708, []byte{5, 't', 'o', 'k', 'e', 'n', 8, 7, 6, 5, 4, 3, 2, 1}},
{"never expire", iggcon.IggyExpiryNeverExpire, []byte{5, 't', 'o', 'k', 'e', 'n', 255, 255, 255, 255, 255, 255, 255, 255}},
}

for _, test := range tests {
{
name: "server default expiry",
request: &CreatePersonalAccessToken{Name: "token", Expiry: iggcon.IggyExpiryServerDefault},
code: 42,
want: []byte{5, 't', 'o', 'k', 'e', 'n', 0, 0, 0, 0, 0, 0, 0, 0},
},
{
name: "little endian expiry",
request: &CreatePersonalAccessToken{Name: "token", Expiry: 0x01020304},
code: 42,
want: []byte{5, 't', 'o', 'k', 'e', 'n', 4, 3, 2, 1, 0, 0, 0, 0},
},
{
name: "expiry past 32 bits",
request: &CreatePersonalAccessToken{Name: "token", Expiry: 0x0102030405060708},
code: 42,
want: []byte{5, 't', 'o', 'k', 'e', 'n', 8, 7, 6, 5, 4, 3, 2, 1},
},
{
name: "never expire",
request: &CreatePersonalAccessToken{Name: "token", Expiry: iggcon.IggyExpiryNeverExpire},
code: 42,
want: []byte{5, 't', 'o', 'k', 'e', 'n', 255, 255, 255, 255, 255, 255, 255, 255},
},
{
name: "create token with one-character name",
request: &CreatePersonalAccessToken{Name: "t", Expiry: 0x01020304},
code: 42,
want: []byte{1, 't', 4, 3, 2, 1, 0, 0, 0, 0},
},
{
name: "token with 255-byte name",
request: &CreatePersonalAccessToken{Name: strings.Repeat("t", 255), Expiry: iggcon.IggyExpiryServerDefault},
code: 42,
want: append(append([]byte{255}, bytes.Repeat([]byte{'t'}, 255)...), 0, 0, 0, 0, 0, 0, 0, 0),
},
{
name: "get tokens with no request payload",
request: &GetPersonalAccessTokens{},
code: 41,
want: []byte{},
},
{
name: "short name",
request: &DeletePersonalAccessToken{Name: "token"},
code: 43,
want: []byte{5, 't', 'o', 'k', 'e', 'n'},
},
{
name: "delete token with one-character name",
request: &DeletePersonalAccessToken{Name: "t"},
code: 43,
want: []byte{1, 't'},
},
{
name: "delete token with 255-byte name",
request: &DeletePersonalAccessToken{Name: strings.Repeat("t", 255)},
code: 43,
want: append([]byte{255}, bytes.Repeat([]byte{'t'}, 255)...),
},
} {
t.Run(test.name, func(t *testing.T) {
got, err := (&CreatePersonalAccessToken{Name: "token", Expiry: test.expiry}).MarshalBinary()
if got := test.request.Code(); got != test.code {
t.Fatalf("command code = %d, want %d", got, test.code)
}
got, err := test.request.MarshalBinary()
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(got, test.want) {
t.Fatalf("CreatePersonalAccessToken body = % x, want % x", got, test.want)
t.Fatalf("command body = %x, want %x", got, test.want)
}
})
}
Expand Down