File
Blob: spec/tun/session_test.go
| 1 | package tun |
| 2 | |
| 3 | import ( |
| 4 | "strings" |
| 5 | "testing" |
| 6 | |
| 7 | "go.miragespace.co/specter/spec/chord" |
| 8 | |
| 9 | "github.com/stretchr/testify/require" |
| 10 | ) |
| 11 | |
| 12 | func TestLabelAndAliasFormats(t *testing.T) { |
| 13 | label, inv, err := EphemeralLabel(chord.MaxIdentitifer-1, []byte("public key")) |
| 14 | require.NoError(t, err) |
| 15 | require.Len(t, label, 47) |
| 16 | home, parsed, ok := ParseEphemeralLabel(label) |
| 17 | require.True(t, ok) |
| 18 | require.Equal(t, chord.MaxIdentitifer-1, home) |
| 19 | require.Equal(t, inv, parsed) |
| 20 | _, _, err = EphemeralLabel(chord.MaxIdentitifer, nil) |
| 21 | require.Error(t, err) |
| 22 | for _, bad := range []string{strings.ToUpper(label), label[:46], label + ".example.com", label[:46] + "g"} { |
| 23 | _, _, ok := ParseEphemeralLabel(bad) |
| 24 | require.False(t, ok, bad) |
| 25 | } |
| 26 | alias := SessionAlias(inv) |
| 27 | require.Len(t, alias, 40) |
| 28 | require.True(t, IsSessionAlias(alias)) |
| 29 | for _, bad := range []string{strings.ToUpper(alias), alias + "0", "v2:" + strings.Repeat("a", 46), strings.Repeat("a", 44)} { |
| 30 | require.False(t, IsSessionAlias(bad)) |
| 31 | } |
| 32 | secret := [32]byte{1, 2, 3, 4} |
| 33 | token := EncodeDelegationToken(secret) |
| 34 | require.Len(t, token, 47) |
| 35 | got, err := ParseDelegationToken(token) |
| 36 | require.NoError(t, err) |
| 37 | require.Equal(t, secret, got) |
| 38 | id := DelegationID(secret) |
| 39 | require.True(t, IsDelegationID(id)) |
| 40 | require.False(t, IsDelegationID(strings.ToUpper(id))) |
| 41 | for _, bad := range []string{id, token + "=", " " + token, token[:46], token[:46] + "B"} { |
| 42 | _, err := ParseDelegationToken(bad) |
| 43 | require.Error(t, err, bad) |
| 44 | } |
| 45 | } |