| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package moduleaddrs | |
| import ( | |
| "testing" | |
| ) | |
| func TestDetectGit(t *testing.T) { | |
| tableTestDetectorFuncs(t, []struct { | |
| Input string | |
| Output string | |
| }{ | |
| { | |
| "git@github.com:hashicorp/foo.git", | |
| "git::ssh://git@github.com/hashicorp/foo.git", | |
| }, | |
| { | |
| "git@github.com:org/project.git?ref=test-branch", | |
| "git::ssh://git@github.com/org/project.git?ref=test-branch", | |
| }, | |
| { | |
| "git@github.com:hashicorp/foo.git//bar", | |
| "git::ssh://git@github.com/hashicorp/foo.git//bar", | |
| }, | |
| { | |
| "git@github.com:hashicorp/foo.git?foo=bar", | |
| "git::ssh://git@github.com/hashicorp/foo.git?foo=bar", | |
| }, | |
| { | |
| "git@github.xyz.com:org/project.git", | |
| "git::ssh://git@github.xyz.com/org/project.git", | |
| }, | |
| { | |
| "git@github.xyz.com:org/project.git?ref=test-branch", | |
| "git::ssh://git@github.xyz.com/org/project.git?ref=test-branch", | |
| }, | |
| { | |
| "git@github.xyz.com:org/project.git//module/a", | |
| "git::ssh://git@github.xyz.com/org/project.git//module/a", | |
| }, | |
| { | |
| "git@github.xyz.com:org/project.git//module/a?ref=test-branch", | |
| "git::ssh://git@github.xyz.com/org/project.git//module/a?ref=test-branch", | |
| }, | |
| { | |
| // Already in the canonical form, so no rewriting required | |
| // When the ssh: protocol is used explicitly, we recognize it as | |
| // URL form rather than SCP-like form, so the part after the colon | |
| // is a port number, not part of the path. | |
| "git::ssh://git@git.example.com:2222/hashicorp/foo.git", | |
| "git::ssh://git@git.example.com:2222/hashicorp/foo.git", | |
| }, | |
| }) | |
| } | |
| func TestDetectGitHub(t *testing.T) { | |
| tableTestDetectorFuncs(t, []struct { | |
| Input string | |
| Output string | |
| }{ | |
| {"github.com/hashicorp/foo", "git::https://github.com/hashicorp/foo.git"}, | |
| {"github.com/hashicorp/foo.git", "git::https://github.com/hashicorp/foo.git"}, | |
| { | |
| "github.com/hashicorp/foo/bar", | |
| "git::https://github.com/hashicorp/foo.git//bar", | |
| }, | |
| { | |
| "github.com/hashicorp/foo?foo=bar", | |
| "git::https://github.com/hashicorp/foo.git?foo=bar", | |
| }, | |
| { | |
| "github.com/hashicorp/foo.git?foo=bar", | |
| "git::https://github.com/hashicorp/foo.git?foo=bar", | |
| }, | |
| { | |
| "github.com/hashicorp/foo.git?foo=bar/baz", | |
| "git::https://github.com/hashicorp/foo.git?foo=bar/baz", | |
| }, | |
| }) | |
| } | |
| func TestDetectBitBucket(t *testing.T) { | |
| tableTestDetectorFuncs(t, []struct { | |
| Input string | |
| Output string | |
| }{ | |
| // HTTP | |
| { | |
| "bitbucket.org/hashicorp/tf-test-git", | |
| "git::https://bitbucket.org/hashicorp/tf-test-git.git", | |
| }, | |
| { | |
| "bitbucket.org/hashicorp/tf-test-git.git", | |
| "git::https://bitbucket.org/hashicorp/tf-test-git.git", | |
| }, | |
| }) | |
| } |