|
15 | 15 | package name
|
16 | 16 |
|
17 | 17 | import (
|
| 18 | + "encoding/json" |
18 | 19 | "path"
|
| 20 | + "reflect" |
19 | 21 | "strings"
|
20 | 22 | "testing"
|
21 | 23 | )
|
@@ -150,3 +152,58 @@ func TestDigestScopes(t *testing.T) {
|
150 | 152 | t.Errorf("scope was incorrect for %v. Wanted: `%s` Got: `%s`", digest, expectedScope, actualScope)
|
151 | 153 | }
|
152 | 154 | }
|
| 155 | + |
| 156 | +func TestJSON(t *testing.T) { |
| 157 | + t.Parallel() |
| 158 | + digestNameStr := "gcr.io/project-id/image@" + validDigest |
| 159 | + digest, err := NewDigest(digestNameStr, StrictValidation) |
| 160 | + if err != nil { |
| 161 | + t.Fatalf("`%s` should be a valid Digest name, got error: %v", digestNameStr, err) |
| 162 | + } |
| 163 | + |
| 164 | + t.Run("string", func(t *testing.T) { |
| 165 | + t.Parallel() |
| 166 | + b, err := json.Marshal(digest) |
| 167 | + if err != nil { |
| 168 | + t.Fatalf("Marshal() failed: %v", err) |
| 169 | + } |
| 170 | + |
| 171 | + if want := `"` + digestNameStr + `"`; want != string(b) { |
| 172 | + t.Errorf("Marshal() was incorrect. Wanted: `%s` Got: `%s`", want, string(b)) |
| 173 | + } |
| 174 | + |
| 175 | + var out Digest |
| 176 | + if err := json.Unmarshal(b, &out); err != nil { |
| 177 | + t.Fatalf("Unmarshal() failed: %v", err) |
| 178 | + } |
| 179 | + |
| 180 | + if out.String() != digest.String() { |
| 181 | + t.Errorf("Unmarshaled Digest should be the same as the original. Wanted: `%s` Got: `%s`", digest, out) |
| 182 | + } |
| 183 | + }) |
| 184 | + |
| 185 | + t.Run("map", func(t *testing.T) { |
| 186 | + t.Parallel() |
| 187 | + in := map[string]Digest{ |
| 188 | + "a": digest, |
| 189 | + } |
| 190 | + b, err := json.Marshal(in) |
| 191 | + if err != nil { |
| 192 | + t.Fatalf("MarshalJSON() failed: %v", err) |
| 193 | + } |
| 194 | + |
| 195 | + want := `{"a":"` + digestNameStr + `"}` |
| 196 | + if want != string(b) { |
| 197 | + t.Errorf("Marshal() was incorrect. Wanted: `%s` Got: `%s`", want, string(b)) |
| 198 | + } |
| 199 | + |
| 200 | + var out map[string]Digest |
| 201 | + if err := json.Unmarshal(b, &out); err != nil { |
| 202 | + t.Fatalf("Unmarshal() failed: %v", err) |
| 203 | + } |
| 204 | + |
| 205 | + if !reflect.DeepEqual(in, out) { |
| 206 | + t.Errorf("Unmarshaled map should be the same as the original. Wanted: `%v` Got: `%v`", in, out) |
| 207 | + } |
| 208 | + }) |
| 209 | +} |
0 commit comments