| package getproviders |
| |
| import ( |
| "testing" |
| ) |
| |
| func TestParseHash(t *testing.T) { |
| tests := []struct { |
| Input string |
| Want Hash |
| WantErr string |
| }{ |
| { |
| Input: "h1:foo", |
| Want: HashScheme1.New("foo"), |
| }, |
| { |
| Input: "zh:bar", |
| Want: HashSchemeZip.New("bar"), |
| }, |
| { |
| // A scheme we don't know is considered valid syntax, it just won't match anything. |
| Input: "unknown:baz", |
| Want: HashScheme("unknown:").New("baz"), |
| }, |
| { |
| // A scheme with an empty value is weird, but allowed. |
| Input: "unknown:", |
| Want: HashScheme("unknown:").New(""), |
| }, |
| { |
| Input: "", |
| WantErr: "hash string must start with a scheme keyword followed by a colon", |
| }, |
| { |
| // A naked SHA256 hash in hex format is not sufficient |
| Input: "1e5f7a5f3ade7b8b1d1d59c5cea2e1a2f8d2f8c3f41962dbbe8647e222be8239", |
| WantErr: "hash string must start with a scheme keyword followed by a colon", |
| }, |
| { |
| // An empty scheme is not allowed |
| Input: ":blah", |
| WantErr: "hash string must start with a scheme keyword followed by a colon", |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(test.Input, func(t *testing.T) { |
| got, err := ParseHash(test.Input) |
| |
| if test.WantErr != "" { |
| if err == nil { |
| t.Fatalf("want error: %s", test.WantErr) |
| } |
| if got, want := err.Error(), test.WantErr; got != want { |
| t.Fatalf("wrong error\ngot: %s\nwant: %s", got, want) |
| } |
| return |
| } |
| |
| if err != nil { |
| t.Fatalf("unexpected error: %s", err.Error()) |
| } |
| |
| if got != test.Want { |
| t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want) |
| } |
| }) |
| } |
| } |