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.
|
f5456470
Keenan Nemetz
13d ago
|
1 | package ci |
| 2 | ||
| 3 | import "testing" | |
| 4 | ||
|
e5478085
Keenan Nemetz
11d ago
|
5 | func TestValidRefOnlyAcceptsBranchesTagsAndCombinedResults(t *testing.T) { |
|
f5456470
Keenan Nemetz
13d ago
|
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", | |
|
e5478085
Keenan Nemetz
11d ago
|
12 | "refs/vole/candidates/01M5JR2JK29KKMAA1T9MDNTR01/main-abc", |
| 13 | "refs/vole/candidates/contrib/alice/01M5JR2JK29KKMAA1T9MDNTR01/main-abc", | |
|
f5456470
Keenan Nemetz
13d ago
|
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}", | |
|
e5478085
Keenan Nemetz
11d ago
|
40 | "refs/vole/acl", |
| 41 | "refs/vole/candidates/", | |
| 42 | "refs/vole/candidates/../main", | |
|
f5456470
Keenan Nemetz
13d ago
|
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 | } |