aboutsummaryrefslogtreecommitdiffstats
path: root/repository_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'repository_test.go')
-rw-r--r--repository_test.go82
1 files changed, 71 insertions, 11 deletions
diff --git a/repository_test.go b/repository_test.go
index 7d4abb5..80a765c 100644
--- a/repository_test.go
+++ b/repository_test.go
@@ -13,19 +13,26 @@ import (
. "gopkg.in/check.v1"
)
-var dirFixtures = [...]struct {
+var dirFixturesInit = [...]struct {
name string
tgz string
+ head string
}{
{
name: "binrels",
tgz: "storage/seekable/internal/gitdir/fixtures/alcortesm-binary-relations.tgz",
+ head: "c44b5176e99085c8fe36fa27b045590a7b9d34c9",
},
}
+type dirFixture struct {
+ path string
+ head core.Hash
+}
+
type SuiteRepository struct {
- repos map[string]*Repository
- dirFixturePaths map[string]string
+ repos map[string]*Repository
+ dirFixtures map[string]dirFixture
}
var _ = Suite(&SuiteRepository{})
@@ -33,22 +40,25 @@ var _ = Suite(&SuiteRepository{})
func (s *SuiteRepository) SetUpSuite(c *C) {
s.repos = unpackFixtures(c, tagFixtures, treeWalkerFixtures)
- s.dirFixturePaths = make(map[string]string, len(dirFixtures))
- for _, fix := range dirFixtures {
+ s.dirFixtures = make(map[string]dirFixture, len(dirFixturesInit))
+ for _, fix := range dirFixturesInit {
com := Commentf("fixture name = %s\n", fix.name)
path, err := tgz.Extract(fix.tgz)
c.Assert(err, IsNil, com)
- s.dirFixturePaths[fix.name] = path
+ s.dirFixtures[fix.name] = dirFixture{
+ path: path,
+ head: core.NewHash(fix.head),
+ }
}
}
func (s *SuiteRepository) TearDownSuite(c *C) {
- for name, path := range s.dirFixturePaths {
- err := os.RemoveAll(path)
+ for name, fix := range s.dirFixtures {
+ err := os.RemoveAll(fix.path)
c.Assert(err, IsNil, Commentf("cannot delete tmp dir for fixture %s: %s\n",
- name, path))
+ name, fix.path))
}
}
@@ -66,9 +76,9 @@ func (s *SuiteRepository) TestNewRepositoryWithAuth(c *C) {
}
func (s *SuiteRepository) TestNewRepositoryFromFS(c *C) {
- for name, path := range s.dirFixturePaths {
+ for name, fix := range s.dirFixtures {
fs := fs.NewOS()
- gitPath := fs.Join(path, ".git/")
+ gitPath := fs.Join(fix.path, ".git/")
com := Commentf("dir fixture %q → %q\n", name, gitPath)
repo, err := NewRepositoryFromFS(fs, gitPath)
c.Assert(err, IsNil, com)
@@ -205,3 +215,53 @@ func (s *SuiteRepository) TestCommitIterClosePanic(c *C) {
c.Assert(err, IsNil)
commits.Close()
}
+
+func (s *SuiteRepository) TestHeadFromFs(c *C) {
+ for name, fix := range s.dirFixtures {
+ fs := fs.NewOS()
+ gitPath := fs.Join(fix.path, ".git/")
+ com := Commentf("dir fixture %q → %q\n", name, gitPath)
+ repo, err := NewRepositoryFromFS(fs, gitPath)
+ c.Assert(err, IsNil, com)
+
+ head, err := repo.Head("")
+ c.Assert(err, IsNil)
+
+ c.Assert(head, Equals, fix.head)
+ }
+}
+
+func (s *SuiteRepository) TestHeadFromRemote(c *C) {
+ r, err := NewRepository(RepositoryFixture, nil)
+ c.Assert(err, IsNil)
+
+ upSrv := &MockGitUploadPackService{}
+ r.Remotes[DefaultRemoteName].upSrv = upSrv
+ err = r.Remotes[DefaultRemoteName].Connect()
+ c.Assert(err, IsNil)
+
+ info, err := upSrv.Info()
+ c.Assert(err, IsNil)
+ expected := info.Head
+
+ obtained, err := r.Head(DefaultRemoteName)
+ c.Assert(err, IsNil)
+
+ c.Assert(obtained, Equals, expected)
+}
+
+func (s *SuiteRepository) TestHeadErrors(c *C) {
+ r, err := NewRepository(RepositoryFixture, nil)
+ c.Assert(err, IsNil)
+
+ upSrv := &MockGitUploadPackService{}
+ r.Remotes[DefaultRemoteName].upSrv = upSrv
+
+ remote := "not found"
+ _, err = r.Head(remote)
+ c.Assert(err, ErrorMatches, fmt.Sprintf("unable to find remote %q", remote))
+
+ remote = ""
+ _, err = r.Head(remote)
+ c.Assert(err, ErrorMatches, "cannot retrieve local head: no local data found")
+}