PackageCollection class.

This commit is contained in:
Andrey Smirnov
2013-12-23 14:14:03 +04:00
parent 08bd87629b
commit 65063135c9
2 changed files with 65 additions and 0 deletions
+33
View File
@@ -3,6 +3,7 @@ package debian
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"github.com/smira/aptly/database"
"github.com/smira/aptly/utils" "github.com/smira/aptly/utils"
debc "github.com/smira/godebiancontrol" debc "github.com/smira/godebiancontrol"
"github.com/ugorji/go/codec" "github.com/ugorji/go/codec"
@@ -108,3 +109,35 @@ func (p *Package) VerifyFile(filepath string) bool {
} }
return st.Size() == p.Filesize return st.Size() == p.Filesize
} }
// PackageCollection does management of packages in DB
type PackageCollection struct {
db database.Storage
}
// NewPackageCollection creates new PackageCollection and binds it to database
func NewPackageCollection(db database.Storage) *PackageCollection {
return &PackageCollection{
db: db,
}
}
// ByKey find package in DB by its key
func (collection *PackageCollection) ByKey(key []byte) (*Package, error) {
encoded, err := collection.db.Get(key)
if err != nil {
return nil, err
}
p := &Package{}
err = p.Decode(encoded)
if err != nil {
return nil, err
}
return p, nil
}
// Update adds or updates information about package in DB
func (collection *PackageCollection) Update(p *Package) error {
return collection.db.Put(p.Key(), p.Encode())
}
+32
View File
@@ -1,6 +1,7 @@
package debian package debian
import ( import (
"github.com/smira/aptly/database"
debc "github.com/smira/godebiancontrol" debc "github.com/smira/godebiancontrol"
. "launchpad.net/gocheck" . "launchpad.net/gocheck"
) )
@@ -66,3 +67,34 @@ func (s *PackageSuite) TestEquals(c *C) {
p2.Depends = []string{"package1"} p2.Depends = []string{"package1"}
c.Check(p.Equals(p2), Equals, false) c.Check(p.Equals(p2), Equals, false)
} }
type PackageCollectionSuite struct {
collection *PackageCollection
p *Package
db database.Storage
}
var _ = Suite(&PackageCollectionSuite{})
func (s *PackageCollectionSuite) SetUpTest(c *C) {
para := make(debc.Paragraph)
for k, v := range packagePara {
para[k] = v
}
s.p = NewPackageFromControlFile(para)
s.db, _ = database.OpenDB(c.MkDir())
s.collection = NewPackageCollection(s.db)
}
func (s *PackageCollectionSuite) TearDownTest(c *C) {
s.db.Close()
}
func (s *PackageCollectionSuite) TestUpdateByKey(c *C) {
err := s.collection.Update(s.p)
c.Assert(err, IsNil)
p2, err := s.collection.ByKey(s.p.Key())
c.Assert(err, IsNil)
c.Assert(p2.Equals(s.p), Equals, true)
}