github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/repository/repository_test.go (about) 1 package repository 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 9 "github.com/hoffie/larasync/helpers" 10 "github.com/hoffie/larasync/repository/nib" 11 12 . "gopkg.in/check.v1" 13 ) 14 15 type RepositoryTests struct { 16 dir string 17 } 18 19 var _ = Suite(&RepositoryTests{}) 20 21 func (t *RepositoryTests) SetUpTest(c *C) { 22 t.dir = c.MkDir() 23 } 24 25 func (t *RepositoryTests) TestGetRepoRelativePath(c *C) { 26 r := New(filepath.Join(t.dir, "foo")) 27 err := r.Create() 28 c.Assert(err, IsNil) 29 in := filepath.Join(t.dir, "foo", "test", "bar") 30 out, err := r.getRepoRelativePath(in) 31 c.Assert(err, IsNil) 32 c.Assert(out, Equals, filepath.Join("test", "bar")) 33 } 34 35 func (t *RepositoryTests) TestGetRepoRelativePathFail(c *C) { 36 r := New(filepath.Join(t.dir, "foo")) 37 err := r.Create() 38 c.Assert(err, IsNil) 39 in := t.dir 40 out, err := r.getRepoRelativePath(in) 41 c.Assert(err, NotNil) 42 c.Assert(out, Equals, "") 43 } 44 45 func (t *RepositoryTests) TestCreateManagementDir(c *C) { 46 r := New(t.dir) 47 err := r.CreateManagementDir() 48 c.Assert(err, IsNil) 49 50 s, err := os.Stat(filepath.Join(t.dir, ".lara")) 51 c.Assert(err, IsNil) 52 c.Assert(s.IsDir(), Equals, true) 53 54 s, err = os.Stat(filepath.Join(t.dir, ".lara", "objects")) 55 c.Assert(err, IsNil) 56 c.Assert(s.IsDir(), Equals, true) 57 58 s, err = os.Stat(filepath.Join(t.dir, ".lara", "nibs")) 59 c.Assert(err, IsNil) 60 c.Assert(s.IsDir(), Equals, true) 61 62 } 63 64 func (t *RepositoryTests) TestAddObject(c *C) { 65 r := New(t.dir) 66 err := r.CreateManagementDir() 67 c.Assert(err, IsNil) 68 objectID := "1234567890" 69 objectReader := bytes.NewReader([]byte("Test data")) 70 71 err = r.AddObject(objectID, objectReader) 72 c.Assert(err, IsNil) 73 } 74 75 func (t *RepositoryTests) TestGetObject(c *C) { 76 r := New(t.dir) 77 err := r.CreateManagementDir() 78 c.Assert(err, IsNil) 79 objectID := "1234567890" 80 objectData := []byte("Test data") 81 objectReader := bytes.NewReader(objectData) 82 83 r.AddObject(objectID, objectReader) 84 85 reader, err := r.GetObjectData(objectID) 86 defer reader.Close() 87 c.Assert(err, IsNil) 88 89 data, err := ioutil.ReadAll(reader) 90 91 err = reader.Close() 92 c.Assert(err, IsNil) 93 94 c.Assert(objectData, DeepEquals, data) 95 } 96 97 // It should throw an error if a content id references in the nib 98 // is not existing yet. 99 func (t *RepositoryAddItemTests) TestAddNibContentObjectIDsMissing(c *C) { 100 n := &nib.NIB{ 101 ID: "asdf", 102 Revisions: []*nib.Revision{ 103 &nib.Revision{ 104 MetadataID: "not-existing", 105 ContentIDs: []string{}, 106 }, 107 }, 108 } 109 r := New(t.dir) 110 err := r.CreateManagementDir() 111 c.Assert(err, IsNil) 112 113 err = r.nibStore.Add(n) 114 c.Assert(err, IsNil) 115 data, err := r.nibStore.GetBytes(n.ID) 116 c.Assert(err, IsNil) 117 118 buffer := bytes.NewBuffer(data) 119 120 err = r.AddNIBContent(buffer) 121 c.Assert(IsNIBContentMissing(err), Equals, true) 122 } 123 124 func (t *RepositoryAddItemTests) TestAddNIBContentConflict(c *C) { 125 n := &nib.NIB{ 126 ID: "asdf", 127 Revisions: []*nib.Revision{ 128 &nib.Revision{ 129 MetadataID: "metadata123", 130 ContentIDs: []string{}, 131 }, 132 }, 133 } 134 r := New(t.dir) 135 err := r.CreateManagementDir() 136 c.Assert(err, IsNil) 137 138 err = r.AddObject("metadata123", bytes.NewBufferString("x")) 139 c.Assert(err, IsNil) 140 141 err = r.AddObject("metadata456", bytes.NewBufferString("y")) 142 c.Assert(err, IsNil) 143 144 err = r.nibStore.Add(n) 145 c.Assert(err, IsNil) 146 data1, err := r.nibStore.GetBytes(n.ID) 147 c.Assert(err, IsNil) 148 149 n.AppendRevision(&nib.Revision{MetadataID: "metadata456"}) 150 151 err = r.nibStore.Add(n) 152 c.Assert(err, IsNil) 153 data2, err := r.nibStore.GetBytes(n.ID) 154 c.Assert(err, IsNil) 155 156 buffer1 := bytes.NewBuffer(data1) 157 buffer2 := bytes.NewBuffer(data2) 158 err = r.AddNIBContent(buffer2) 159 c.Assert(err, IsNil) 160 err = r.AddNIBContent(buffer1) 161 c.Assert(err, Equals, ErrNIBConflict) 162 } 163 164 func (t *RepositoryAddItemTests) TestAddNIBContentObjNotExisting(c *C) { 165 n := &nib.NIB{ 166 ID: "asdf", 167 Revisions: []*nib.Revision{ 168 &nib.Revision{ 169 MetadataID: "metadata1", 170 ContentIDs: []string{"content1", "content2", "content3"}, 171 }, 172 }, 173 } 174 r := New(t.dir) 175 err := r.CreateManagementDir() 176 c.Assert(err, IsNil) 177 178 err = r.AddObject("content2", bytes.NewBufferString("x")) 179 c.Assert(err, IsNil) 180 181 err = r.nibStore.Add(n) 182 c.Assert(err, IsNil) 183 184 reader, err := r.nibStore.getReader(n.ID) 185 defer reader.Close() 186 c.Assert(err, IsNil) 187 188 err = r.AddNIBContent(reader) 189 c.Assert(err, NotNil) 190 191 c.Assert(IsNIBContentMissing(err), Equals, true) 192 nibContentMissing := err.(*ErrNIBContentMissing) 193 missingIDs := nibContentMissing.MissingContentIDs() 194 195 c.Assert(helpers.SliceContainsString(missingIDs, "metadata1"), Equals, true) 196 c.Assert(helpers.SliceContainsString(missingIDs, "content1"), Equals, true) 197 c.Assert(helpers.SliceContainsString(missingIDs, "content2"), Equals, false) 198 c.Assert(helpers.SliceContainsString(missingIDs, "content3"), Equals, true) 199 }