package git import ( "net/url" "os" "testing" "github.com/openshift/source-to-image/pkg/test" ) func TestParseRepository(t *testing.T) { gitLocalDir := test.CreateLocalGitDirectory(t) defer os.RemoveAll(gitLocalDir) tests := map[string]url.URL{ "git@github.com:user/repo.git": { Scheme: "ssh", Host: "github.com", User: url.User("git"), Path: "user/repo.git", }, "git://github.com/user/repo.git": { Scheme: "git", Host: "github.com", Path: "/user/repo.git", }, "git://github.com/user/repo": { Scheme: "git", Host: "github.com", Path: "/user/repo", }, "http://github.com/user/repo.git": { Scheme: "http", Host: "github.com", Path: "/user/repo.git", }, "http://github.com/user/repo": { Scheme: "http", Host: "github.com", Path: "/user/repo", }, "https://github.com/user/repo.git": { Scheme: "https", Host: "github.com", Path: "/user/repo.git", }, "https://github.com/user/repo": { Scheme: "https", Host: "github.com", Path: "/user/repo", }, "file://" + gitLocalDir: { Scheme: "file", Path: gitLocalDir, }, gitLocalDir: { Scheme: "file", Path: gitLocalDir, }, "git@192.168.122.1:repositories/authooks": { Scheme: "ssh", Host: "192.168.122.1", User: url.User("git"), Path: "repositories/authooks", }, "mbalazs@build.ulx.hu:/var/git/eap-ulx.git": { Scheme: "ssh", Host: "build.ulx.hu", User: url.User("mbalazs"), Path: "/var/git/eap-ulx.git", }, "ssh://git@[2001:db8::1]/repository.git": { Scheme: "ssh", Host: "[2001:db8::1]", User: url.User("git"), Path: "/repository.git", }, "ssh://git@mydomain.com:8080/foo/bar": { Scheme: "ssh", Host: "mydomain.com:8080", User: url.User("git"), Path: "/foo/bar", }, "git@[2001:db8::1]:repository.git": { Scheme: "ssh", Host: "[2001:db8::1]", User: url.User("git"), Path: "repository.git", }, "git@[2001:db8::1]:/repository.git": { Scheme: "ssh", Host: "[2001:db8::1]", User: url.User("git"), Path: "/repository.git", }, } for scenario, want := range tests { got, err := ParseRepository(scenario) if err != nil { t.Errorf("ParseRepository returned err: %v", err) } // go1.5 added the RawPath field to url.URL; it is not a field we need to manipulate with the // ParseRepository path, but it impacts the values set in our test results array and doing a // DeepEqual compare; hence, we have reverted back to a field by field compare (which // this test originally did) if got.Scheme != want.Scheme || got.Host != want.Host || got.Path != want.Path || (got.User != nil && want.User != nil && got.User.Username() != want.User.Username()) || (got.User == nil && want.User != nil) || (got.User != nil && want.User == nil) { t.Errorf("%s: got %#v, want %#v", scenario, *got, want) } } }