1 package handlers
2
3 import "testing"
4
5 var blobUploadStates = []blobUploadState{
6 {
7 Name: "hello",
8 UUID: "abcd-1234-qwer-0987",
9 Offset: 0,
10 },
11 {
12 Name: "hello-world",
13 UUID: "abcd-1234-qwer-0987",
14 Offset: 0,
15 },
16 {
17 Name: "h3ll0_w0rld",
18 UUID: "abcd-1234-qwer-0987",
19 Offset: 1337,
20 },
21 {
22 Name: "ABCDEFG",
23 UUID: "ABCD-1234-QWER-0987",
24 Offset: 1234567890,
25 },
26 {
27 Name: "this-is-A-sort-of-Long-name-for-Testing",
28 UUID: "dead-1234-beef-0987",
29 Offset: 8675309,
30 },
31 }
32
33 var secrets = []string{
34 "supersecret",
35 "12345",
36 "a",
37 "SuperSecret",
38 "Sup3r... S3cr3t!",
39 "This is a reasonably long secret key that is used for the purpose of testing.",
40 "\u2603+\u2744",
41 }
42
43
44
45 func TestLayerUploadTokens(t *testing.T) {
46 secret := hmacKey("supersecret")
47
48 for _, testcase := range blobUploadStates {
49 token, err := secret.packUploadState(testcase)
50 if err != nil {
51 t.Fatal(err)
52 }
53
54 lus, err := secret.unpackUploadState(token)
55 if err != nil {
56 t.Fatal(err)
57 }
58
59 assertBlobUploadStateEquals(t, testcase, lus)
60 }
61 }
62
63
64
65 func TestHMACValidation(t *testing.T) {
66 for _, secret := range secrets {
67 secret1 := hmacKey(secret)
68 secret2 := hmacKey(secret)
69 badSecret := hmacKey("DifferentSecret")
70
71 for _, testcase := range blobUploadStates {
72 token, err := secret1.packUploadState(testcase)
73 if err != nil {
74 t.Fatal(err)
75 }
76
77 lus, err := secret2.unpackUploadState(token)
78 if err != nil {
79 t.Fatal(err)
80 }
81
82 assertBlobUploadStateEquals(t, testcase, lus)
83
84 _, err = badSecret.unpackUploadState(token)
85 if err == nil {
86 t.Fatalf("Expected token provider to fail at retrieving state from token: %s", token)
87 }
88
89 badToken, err := badSecret.packUploadState(lus)
90 if err != nil {
91 t.Fatal(err)
92 }
93
94 _, err = secret1.unpackUploadState(badToken)
95 if err == nil {
96 t.Fatalf("Expected token provider to fail at retrieving state from token: %s", badToken)
97 }
98
99 _, err = secret2.unpackUploadState(badToken)
100 if err == nil {
101 t.Fatalf("Expected token provider to fail at retrieving state from token: %s", badToken)
102 }
103 }
104 }
105 }
106
107 func assertBlobUploadStateEquals(t *testing.T, expected blobUploadState, received blobUploadState) {
108 if expected.Name != received.Name {
109 t.Fatalf("Expected Name=%q, Received Name=%q", expected.Name, received.Name)
110 }
111 if expected.UUID != received.UUID {
112 t.Fatalf("Expected UUID=%q, Received UUID=%q", expected.UUID, received.UUID)
113 }
114 if expected.Offset != received.Offset {
115 t.Fatalf("Expected Offset=%d, Received Offset=%d", expected.Offset, received.Offset)
116 }
117 }
118
View as plain text