digest_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package blob
  2. import (
  3. "encoding/json"
  4. "testing"
  5. )
  6. func TestParseDigest(t *testing.T) {
  7. cases := []struct {
  8. in string
  9. valid bool
  10. }{
  11. {"sha256-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", true},
  12. {"sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", true},
  13. // too short
  14. {"sha256-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde", false},
  15. {"sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde", false},
  16. // too long
  17. {"sha256-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0", false},
  18. {"sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0", false},
  19. // invalid prefix
  20. {"sha255-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", false},
  21. {"sha255:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", false},
  22. {"sha256!0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", false},
  23. // invalid hex
  24. {"sha256-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", false},
  25. {"sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", false},
  26. }
  27. for _, tt := range cases {
  28. got, err := ParseDigest(tt.in)
  29. if tt.valid && err != nil {
  30. t.Errorf("ParseDigest(%q) = %v, %v; want valid", tt.in, got, err)
  31. }
  32. want := "sha256:" + tt.in[7:]
  33. if tt.valid && got.String() != want {
  34. t.Errorf("ParseDigest(%q).String() = %q, want %q", tt.in, got.String(), want)
  35. }
  36. }
  37. }
  38. func TestDigestMarshalText(t *testing.T) {
  39. const s = `"sha256-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"`
  40. var d Digest
  41. if err := json.Unmarshal([]byte(s), &d); err != nil {
  42. t.Errorf("json.Unmarshal: %v", err)
  43. }
  44. out, err := json.Marshal(d)
  45. if err != nil {
  46. t.Errorf("json.Marshal: %v", err)
  47. }
  48. want := `"sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"`
  49. if string(out) != want {
  50. t.Errorf("json.Marshal: got %s, want %s", out, want)
  51. }
  52. if err := json.Unmarshal([]byte(`"invalid"`), &Digest{}); err == nil {
  53. t.Errorf("json.Unmarshal: expected error")
  54. }
  55. }