mirror of
https://github.com/distribution/distribution
synced 2024-11-12 05:45:51 +01:00
a650f0f854
After discussion, it was found that one of the proposed regular expressions incorrectly limited separator delimited compoonents to two characters. The desired restriction is to have repository name components limited to two characters minimum. This changeset accomplishes this by wrapping the regular expressions in a validation function, returning detailed feedback on the validation error. With this change, the repository name regular expressions are no longer enough to respond with 404s on invalid repo names. Changes to the router will need to be added to support this.
92 lines
1.7 KiB
Go
92 lines
1.7 KiB
Go
package common
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestRepositoryNameRegexp(t *testing.T) {
|
|
for _, testcase := range []struct {
|
|
input string
|
|
err error
|
|
}{
|
|
{
|
|
input: "simple/name",
|
|
},
|
|
{
|
|
input: "library/ubuntu",
|
|
},
|
|
{
|
|
input: "docker/stevvooe/app",
|
|
},
|
|
{
|
|
input: "aa/aa/aa/aa/aa/aa/aa/aa/aa/bb/bb/bb/bb/bb/bb",
|
|
err: ErrRepositoryNameTooManyComponents,
|
|
},
|
|
{
|
|
input: "aa/aa/bb/bb/bb",
|
|
},
|
|
{
|
|
input: "a/a/a/b/b",
|
|
err: ErrRepositoryNameComponentShort,
|
|
},
|
|
{
|
|
input: "a/a/a/a/",
|
|
err: ErrRepositoryNameComponentShort,
|
|
},
|
|
{
|
|
input: "foo.com/bar/baz",
|
|
},
|
|
{
|
|
input: "blog.foo.com/bar/baz",
|
|
},
|
|
{
|
|
input: "asdf",
|
|
err: ErrRepositoryNameMissingComponents,
|
|
},
|
|
{
|
|
input: "asdf$$^/aa",
|
|
err: ErrRepositoryNameComponentInvalid,
|
|
},
|
|
{
|
|
input: "aa-a/aa",
|
|
},
|
|
{
|
|
input: "aa/aa",
|
|
},
|
|
{
|
|
input: "a-a/a-a",
|
|
},
|
|
{
|
|
input: "a",
|
|
err: ErrRepositoryNameMissingComponents,
|
|
},
|
|
{
|
|
input: "a-/a/a/a",
|
|
err: ErrRepositoryNameComponentInvalid,
|
|
},
|
|
} {
|
|
|
|
failf := func(format string, v ...interface{}) {
|
|
t.Logf(testcase.input+": "+format, v...)
|
|
t.Fail()
|
|
}
|
|
|
|
if err := ValidateRespositoryName(testcase.input); err != testcase.err {
|
|
if testcase.err != nil {
|
|
if err != nil {
|
|
failf("unexpected error for invalid repository: got %v, expected %v", err, testcase.err)
|
|
} else {
|
|
failf("expected invalid repository: %v", testcase.err)
|
|
}
|
|
} else {
|
|
if err != nil {
|
|
// Wrong error returned.
|
|
failf("unexpected error validating repository name: %v, expected %v", err, testcase.err)
|
|
} else {
|
|
failf("unexpected error validating repository name: %v", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|