vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
| 1 | package ci |
| 2 | |
| 3 | import "testing" |
| 4 | |
| 5 | func TestValidRefOnlyAcceptsBranchesTagsAndCombinedResults(t *testing.T) { |
| 6 | t.Parallel() |
| 7 | for _, ok := range []string{ |
| 8 | "refs/heads/main", |
| 9 | "refs/heads/feature/one", |
| 10 | "refs/heads/contrib/alice/patch", |
| 11 | "refs/tags/v1.0.0", |
| 12 | "refs/vole/candidates/01M5JR2JK29KKMAA1T9MDNTR01/main-abc", |
| 13 | "refs/vole/candidates/contrib/alice/01M5JR2JK29KKMAA1T9MDNTR01/main-abc", |
| 14 | } { |
| 15 | if !ValidRef(ok) { |
| 16 | t.Fatalf("ValidRef(%q) = false", ok) |
| 17 | } |
| 18 | } |
| 19 | for _, bad := range []string{ |
| 20 | "", |
| 21 | "main", |
| 22 | "HEAD", |
| 23 | "refs/remotes/origin/main", |
| 24 | "refs/heads/", |
| 25 | "refs/heads/../etc", |
| 26 | "refs/heads/a/../../b", |
| 27 | "refs/heads//empty", |
| 28 | "refs/heads/a..b", |
| 29 | "refs/heads/a b", |
| 30 | "refs/heads/a:b", |
| 31 | "refs/heads/a?b", |
| 32 | "refs/heads/a*b", |
| 33 | "refs/heads/a[b", |
| 34 | "refs/heads/a\\b", |
| 35 | "refs/heads/a\x00b", |
| 36 | "refs/heads/a\nb", |
| 37 | "refs/heads/a.lock", |
| 38 | "refs/heads/a.", |
| 39 | "refs/tags/a@{1}", |
| 40 | "refs/vole/acl", |
| 41 | "refs/vole/candidates/", |
| 42 | "refs/vole/candidates/../main", |
| 43 | } { |
| 44 | if ValidRef(bad) { |
| 45 | t.Fatalf("ValidRef(%q) = true", bad) |
| 46 | } |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | func TestValidObjectID(t *testing.T) { |
| 51 | t.Parallel() |
| 52 | sha1 := "0123456789abcdef0123456789abcdef01234567" |
| 53 | sha256 := "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" |
| 54 | if !ValidObjectID(sha1) || !ValidObjectID(sha256) { |
| 55 | t.Fatal("a real object id was refused") |
| 56 | } |
| 57 | for _, bad := range []string{"", "abc", sha1[:39], sha1 + "0", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", |
| 58 | "0123456789ABCDEF0123456789abcdef01234567"} { |
| 59 | if ValidObjectID(bad) { |
| 60 | t.Fatalf("ValidObjectID(%q) = true", bad) |
| 61 | } |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | func TestValidateArtifactPath(t *testing.T) { |
| 66 | t.Parallel() |
| 67 | for _, ok := range []string{"dist/*", "dist/*.tar.gz", "build/app", "a/b/c.txt"} { |
| 68 | if err := ValidateArtifactPath(ok); err != nil { |
| 69 | t.Fatalf("ValidateArtifactPath(%q) = %v", ok, err) |
| 70 | } |
| 71 | } |
| 72 | for _, bad := range []string{ |
| 73 | "", "/etc/passwd", "../secret", "a/../../b", "dist/", "**/*.go", "a[b", |
| 74 | } { |
| 75 | if err := ValidateArtifactPath(bad); err == nil { |
| 76 | t.Fatalf("ValidateArtifactPath(%q) = nil", bad) |
| 77 | } |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | func TestValidatePagesPath(t *testing.T) { |
| 82 | t.Parallel() |
| 83 | for _, ok := range []string{"site", "dist/", "public/site"} { |
| 84 | if err := ValidatePagesPath(ok); err != nil { |
| 85 | t.Fatalf("ValidatePagesPath(%q) = %v", ok, err) |
| 86 | } |
| 87 | } |
| 88 | for _, bad := range []string{"", "/srv/site", "../site", "a/../../b", "site/*", "site:name", "site\x00"} { |
| 89 | if err := ValidatePagesPath(bad); err == nil { |
| 90 | t.Fatalf("ValidatePagesPath(%q) = nil", bad) |
| 91 | } |
| 92 | } |
| 93 | } |
| 94 |