blob_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package blobstore
  2. import (
  3. "strings"
  4. "testing"
  5. )
  6. func TestParseID(t *testing.T) {
  7. const valid = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  8. var invalid = strings.Repeat("\x00", HashSize*2)
  9. cases := []struct {
  10. in string
  11. want string
  12. }{
  13. {"", invalid},
  14. {"sha256-", invalid},
  15. {"sha256-" + valid, valid},
  16. {"" + valid, invalid}, // no prefix
  17. {"sha123-" + valid, invalid}, // invalid prefix
  18. {"sha256-" + valid[1:], invalid}, // too short
  19. {"sha256-" + valid + "a", invalid}, // too long
  20. {"sha256-!" + valid[1:], invalid}, // invalid hex
  21. }
  22. for _, tt := range cases {
  23. t.Run("", func(t *testing.T) {
  24. // sanity check
  25. if len(tt.want) > HashSize*2 {
  26. panic("invalid test")
  27. }
  28. got := ParseID(tt.in)
  29. wantValid := tt.want != invalid
  30. if wantValid {
  31. if !got.Valid() {
  32. t.Errorf("ParseID(%q).Valid() = false; want true", tt.in)
  33. }
  34. if got.String() != "sha256-"+tt.want {
  35. t.Errorf("ParseID(%q).String() = %q; want %q", tt.in, got.String(), "sha256-"+tt.want)
  36. }
  37. } else {
  38. if got.Valid() {
  39. t.Errorf("ParseID(%q).Valid() = true; want false", tt.in)
  40. }
  41. if got.String() != "" {
  42. t.Errorf("ParseID(%q).String() = %q; want %q", tt.in, got.String(), "")
  43. }
  44. }
  45. })
  46. }
  47. }