Go · 1246 bytes Raw Blame History
1 // SPDX-License-Identifier: AGPL-3.0-or-later
2
3 package token
4
5 import (
6 "crypto/sha256"
7 "encoding/base64"
8 "testing"
9 )
10
11 func TestNew_Unique(t *testing.T) {
12 t.Parallel()
13 seen := map[string]bool{}
14 for i := 0; i < 100; i++ {
15 enc, h, err := New()
16 if err != nil {
17 t.Fatalf("New: %v", err)
18 }
19 if seen[enc] {
20 t.Fatalf("duplicate encoded token: %s", enc)
21 }
22 seen[enc] = true
23 if len(h) != sha256.Size {
24 t.Fatalf("hash size = %d, want %d", len(h), sha256.Size)
25 }
26 // HashOf(encoded) must reproduce the same hash.
27 got, err := HashOf(enc)
28 if err != nil {
29 t.Fatalf("HashOf: %v", err)
30 }
31 if !Equal(got, h) {
32 t.Fatalf("HashOf mismatch")
33 }
34 }
35 }
36
37 func TestHashOf_RejectsMalformed(t *testing.T) {
38 t.Parallel()
39 if _, err := HashOf("!!!not-base64!!!"); err == nil {
40 t.Fatal("expected error for invalid b64")
41 }
42 short := base64.RawURLEncoding.EncodeToString([]byte("short"))
43 if _, err := HashOf(short); err == nil {
44 t.Fatal("expected error for wrong length")
45 }
46 }
47
48 func TestEqual(t *testing.T) {
49 t.Parallel()
50 a := []byte{1, 2, 3, 4}
51 b := []byte{1, 2, 3, 4}
52 c := []byte{1, 2, 3, 5}
53 if !Equal(a, b) {
54 t.Fatal("Equal(a,b) = false, want true")
55 }
56 if Equal(a, c) {
57 t.Fatal("Equal(a,c) = true, want false")
58 }
59 }
60