package blobstore import ( "strings" "testing" ) func TestParseID(t *testing.T) { const valid = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" var invalid = strings.Repeat("\x00", HashSize*2) cases := []struct { in string want string }{ {"", invalid}, {"sha256-", invalid}, {"sha256-" + valid, valid}, {"" + valid, invalid}, // no prefix {"sha123-" + valid, invalid}, // invalid prefix {"sha256-" + valid[1:], invalid}, // too short {"sha256-" + valid + "a", invalid}, // too long {"sha256-!" + valid[1:], invalid}, // invalid hex } for _, tt := range cases { t.Run("", func(t *testing.T) { // sanity check if len(tt.want) > HashSize*2 { panic("invalid test") } got := ParseID(tt.in) wantValid := tt.want != invalid if wantValid { if !got.Valid() { t.Errorf("ParseID(%q).Valid() = false; want true", tt.in) } if got.String() != "sha256-"+tt.want { t.Errorf("ParseID(%q).String() = %q; want %q", tt.in, got.String(), "sha256-"+tt.want) } } else { if got.Valid() { t.Errorf("ParseID(%q).Valid() = true; want false", tt.in) } if got.String() != "" { t.Errorf("ParseID(%q).String() = %q; want %q", tt.in, got.String(), "") } } }) } }