diff --git a/foreign/go/internal/command/access_token_test.go b/foreign/go/internal/command/access_token_test.go index 56f4c43d43..ca5424967b 100644 --- a/foreign/go/internal/command/access_token_test.go +++ b/foreign/go/internal/command/access_token_test.go @@ -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: "empty name", + request: &CreatePersonalAccessToken{Name: "", Expiry: 0x01020304}, + code: 42, + want: []byte{0, 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: "empty name", + request: &DeletePersonalAccessToken{Name: ""}, + code: 43, + want: []byte{0}, + }, + { + 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) } }) }