Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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.

Blame · ci/validate_test.go

Line attribution on main · 93 line(s)

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 }