diff options
author | Christian Pointner <equinox@spreadspace.org> | 2016-01-12 23:40:57 +0100 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2016-01-12 23:40:57 +0100 |
commit | 6dd37766912de3ac9dd51b96c10ace60662de458 (patch) | |
tree | 5fbccb05de7393f6910fdc7d9216985464ffdfa7 /refs_test.go | |
parent | also 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.go | 194 |
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) + } +} |