summaryrefslogtreecommitdiff
path: root/refs_test.go
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2016-01-12 23:40:57 +0100
committerChristian Pointner <equinox@spreadspace.org>2016-01-12 23:40:57 +0100
commit6dd37766912de3ac9dd51b96c10ace60662de458 (patch)
tree5fbccb05de7393f6910fdc7d9216985464ffdfa7 /refs_test.go
parentalso create special user for vanity to run as (diff)
imported vantiy 0.1.1 and updated debian package actually build from source
Diffstat (limited to 'refs_test.go')
-rw-r--r--refs_test.go194
1 files changed, 194 insertions, 0 deletions
diff --git a/refs_test.go b/refs_test.go
new file mode 100644
index 0000000..55580c5
--- /dev/null
+++ b/refs_test.go
@@ -0,0 +1,194 @@
+package main
+
+import (
+ "bytes"
+ "fmt"
+ . "gopkg.in/check.v1"
+ "sort"
+)
+
+var _ = Suite(&RefsSuite{})
+
+type RefsSuite struct{}
+
+type refsTest struct {
+ summary string
+ original string
+ version string
+ changed string
+ versions []string
+}
+
+var refsTests = []refsTest{{
+ "Version v0 works even without any references",
+ reflines(
+ "hash1 HEAD",
+ ),
+ "v0",
+ reflines(
+ "hash1 HEAD",
+ ),
+ nil,
+}, {
+ "Preserve original capabilities",
+ reflines(
+ "hash1 HEAD\x00caps",
+ ),
+ "v0",
+ reflines(
+ "hash1 HEAD\x00caps",
+ ),
+ nil,
+}, {
+ "Matching major version branch",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD",
+ "00000000000000000000000000000000000hash2 refs/heads/v0",
+ "00000000000000000000000000000000000hash3 refs/heads/v1",
+ "00000000000000000000000000000000000hash4 refs/heads/v2",
+ ),
+ "v1",
+ reflines(
+ "00000000000000000000000000000000000hash3 HEAD\x00symref=HEAD:refs/heads/v1",
+ "00000000000000000000000000000000000hash3 refs/heads/master",
+ "00000000000000000000000000000000000hash2 refs/heads/v0",
+ "00000000000000000000000000000000000hash3 refs/heads/v1",
+ "00000000000000000000000000000000000hash4 refs/heads/v2",
+ ),
+ []string{"v0", "v1", "v2"},
+}, {
+ "Matching minor version branch",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD",
+ "00000000000000000000000000000000000hash2 refs/heads/v1.1",
+ "00000000000000000000000000000000000hash3 refs/heads/v1.3",
+ "00000000000000000000000000000000000hash4 refs/heads/v1.2",
+ ),
+ "v1",
+ reflines(
+ "00000000000000000000000000000000000hash3 HEAD\x00symref=HEAD:refs/heads/v1.3",
+ "00000000000000000000000000000000000hash3 refs/heads/master",
+ "00000000000000000000000000000000000hash2 refs/heads/v1.1",
+ "00000000000000000000000000000000000hash3 refs/heads/v1.3",
+ "00000000000000000000000000000000000hash4 refs/heads/v1.2",
+ ),
+ []string{"v1.1", "v1.2", "v1.3"},
+}, {
+ "Disable original symref capability",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD\x00foo symref=bar baz",
+ "00000000000000000000000000000000000hash2 refs/heads/v1",
+ ),
+ "v1",
+ reflines(
+ "00000000000000000000000000000000000hash2 HEAD\x00symref=HEAD:refs/heads/v1 foo oldref=bar baz",
+ "00000000000000000000000000000000000hash2 refs/heads/master",
+ "00000000000000000000000000000000000hash2 refs/heads/v1",
+ ),
+ []string{"v1"},
+}, {
+ "Replace original master branch",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD",
+ "00000000000000000000000000000000000hash1 refs/heads/master",
+ "00000000000000000000000000000000000hash2 refs/heads/v1",
+ ),
+ "v1",
+ reflines(
+ "00000000000000000000000000000000000hash2 HEAD\x00symref=HEAD:refs/heads/v1",
+ "00000000000000000000000000000000000hash2 refs/heads/master",
+ "00000000000000000000000000000000000hash2 refs/heads/v1",
+ ),
+ []string{"v1"},
+}, {
+ "Matching tag",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD",
+ "00000000000000000000000000000000000hash2 refs/tags/v0",
+ "00000000000000000000000000000000000hash3 refs/tags/v1",
+ "00000000000000000000000000000000000hash4 refs/tags/v2",
+ ),
+ "v1",
+ reflines(
+ "00000000000000000000000000000000000hash3 HEAD",
+ "00000000000000000000000000000000000hash3 refs/heads/master",
+ "00000000000000000000000000000000000hash2 refs/tags/v0",
+ "00000000000000000000000000000000000hash3 refs/tags/v1",
+ "00000000000000000000000000000000000hash4 refs/tags/v2",
+ ),
+ []string{"v0", "v1", "v2"},
+}, {
+ "Tag peeling",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD",
+ "00000000000000000000000000000000000hash2 refs/heads/master",
+ "00000000000000000000000000000000000hash3 refs/tags/v1",
+ "00000000000000000000000000000000000hash4 refs/tags/v1^{}",
+ "00000000000000000000000000000000000hash5 refs/tags/v2",
+ ),
+ "v1",
+ reflines(
+ "00000000000000000000000000000000000hash4 HEAD",
+ "00000000000000000000000000000000000hash4 refs/heads/master",
+ "00000000000000000000000000000000000hash3 refs/tags/v1",
+ "00000000000000000000000000000000000hash4 refs/tags/v1^{}",
+ "00000000000000000000000000000000000hash5 refs/tags/v2",
+ ),
+ []string{"v1", "v1", "v2"},
+}, {
+ "Matching unstable versions",
+ reflines(
+ "00000000000000000000000000000000000hash1 HEAD",
+ "00000000000000000000000000000000000hash2 refs/heads/master",
+ "00000000000000000000000000000000000hash3 refs/heads/v1",
+ "00000000000000000000000000000000000hash4 refs/heads/v1.1-unstable",
+ "00000000000000000000000000000000000hash5 refs/heads/v1.3-unstable",
+ "00000000000000000000000000000000000hash6 refs/heads/v1.2-unstable",
+ "00000000000000000000000000000000000hash7 refs/heads/v2",
+ ),
+ "v1-unstable",
+ reflines(
+ "00000000000000000000000000000000000hash5 HEAD\x00symref=HEAD:refs/heads/v1.3-unstable",
+ "00000000000000000000000000000000000hash5 refs/heads/master",
+ "00000000000000000000000000000000000hash3 refs/heads/v1",
+ "00000000000000000000000000000000000hash4 refs/heads/v1.1-unstable",
+ "00000000000000000000000000000000000hash5 refs/heads/v1.3-unstable",
+ "00000000000000000000000000000000000hash6 refs/heads/v1.2-unstable",
+ "00000000000000000000000000000000000hash7 refs/heads/v2",
+ ),
+ []string{"v1", "v1.1-unstable", "v1.2-unstable", "v1.3-unstable", "v2"},
+}}
+
+func reflines(lines ...string) string {
+ var buf bytes.Buffer
+ buf.WriteString("001e# service=git-upload-pack\n0000")
+ for _, l := range lines {
+ buf.WriteString(fmt.Sprintf("%04x%s\n", len(l)+5, l))
+ }
+ buf.WriteString("0000")
+ return buf.String()
+}
+
+func (s *RefsSuite) TestChangeRefs(c *C) {
+ for _, test := range refsTests {
+ c.Logf(test.summary)
+
+ v, ok := parseVersion(test.version)
+ if !ok {
+ c.Fatalf("Test has an invalid version: %q", test.version)
+ }
+
+ changed, versions, err := changeRefs([]byte(test.original), v)
+ c.Assert(err, IsNil)
+
+ c.Assert(string(changed), Equals, test.changed)
+
+ sort.Sort(versions)
+
+ var vs []string
+ for _, v := range versions {
+ vs = append(vs, v.String())
+ }
+ c.Assert(vs, DeepEquals, test.versions)
+ }
+}