database: add GetNamespace

Provides the functionality to retrieve a namespace from his name.
pull/424/head
Grégoire Unbekandt 7 years ago
parent b2519a044a
commit 5856c9fcb6

@ -76,6 +76,9 @@ type Datastore interface {
// ListNamespaces returns the entire list of known Namespaces.
ListNamespaces() ([]Namespace, error)
//GetNamespace returns the namespace with name namespaceName
GetNamespace(namespaceName string) (*Namespace, error)
// InsertLayer stores a Layer in the database.
//
// A Layer is uniquely identified by its Name.

@ -20,6 +20,7 @@ import "time"
// The default behavior of each method is to simply panic.
type MockDatastore struct {
FctListNamespaces func() ([]Namespace, error)
FctGetNamespace func(namespaceName string) (*Namespace, error)
FctInsertLayer func(Layer) error
FctFindLayer func(name string, withFeatures, withVulnerabilities bool) (Layer, error)
FctDeleteLayer func(name string) error
@ -49,6 +50,13 @@ func (mds *MockDatastore) ListNamespaces() ([]Namespace, error) {
panic("required mock function not implemented")
}
func (mds *MockDatastore) GetNamespace(namespaceName string) (*Namespace, error) {
if mds.FctGetNamespace != nil {
return mds.FctGetNamespace(namespaceName)
}
panic("required mock function not implemented")
}
func (mds *MockDatastore) InsertLayer(layer Layer) error {
if mds.FctInsertLayer != nil {
return mds.FctInsertLayer(layer)

@ -73,3 +73,12 @@ func (pgSQL *pgSQL) ListNamespaces() (namespaces []database.Namespace, err error
return namespaces, err
}
func (pgSQL *pgSQL) GetNamespace(namespaceName string) (*database.Namespace, error) {
var ns database.Namespace
err := pgSQL.QueryRow(getNamespace, namespaceName).Scan(&ns.ID, &ns.Name, &ns.VersionFormat)
if err != nil {
return nil, handleError("getNamespace", err)
}
return &ns, nil
}

@ -72,3 +72,22 @@ func TestListNamespace(t *testing.T) {
}
}
}
func TestGetNamespace(t *testing.T) {
datastore, err := openDatabaseForTest("GetNamespace", true)
if err != nil {
t.Error(err)
return
}
defer datastore.Close()
// Invalid Namespace.
ns0, err := datastore.GetNamespace("Not present")
assert.NotNil(t, err)
assert.Nil(t, ns0)
// Valid Namespace.
ns1, err := datastore.GetNamespace("debian:7")
assert.Nil(t, err)
assert.Equal(t, ns1.Name, "debian:7")
}

@ -40,6 +40,7 @@ const (
searchNamespace = `SELECT id FROM Namespace WHERE name = $1`
listNamespace = `SELECT id, name, version_format FROM Namespace`
getNamespace = `SELECT id, name, version_format FROM Namespace WHERE name = $1`
// feature.go
soiFeature = `

Loading…
Cancel
Save