database/api: add layer deletion support
This commit is contained in:
parent
248fc7df72
commit
726bd3c0c6
@ -80,7 +80,7 @@ func POSTLayers(w http.ResponseWriter, r *http.Request, _ httprouter.Params, e *
|
||||
// DELETELayers deletes the specified layer and any child layers that are
|
||||
// dependent on the specified layer.
|
||||
func DELETELayers(w http.ResponseWriter, r *http.Request, p httprouter.Params, e *Env) {
|
||||
if err := e.Datastore.DeleteLayer(p.ByName("id")); err != nil {
|
||||
if err := e.Datastore.DeleteLayer(p.ByName("name")); err != nil {
|
||||
httputils.WriteHTTPError(w, 0, err)
|
||||
return
|
||||
}
|
||||
@ -93,7 +93,7 @@ func GETLayers(w http.ResponseWriter, r *http.Request, p httprouter.Params, e *E
|
||||
_, withFeatures := r.URL.Query()["withFeatures"]
|
||||
_, withVulnerabilities := r.URL.Query()["withVulnerabilities"]
|
||||
|
||||
layer, err := e.Datastore.FindLayer(p.ByName("id"), withFeatures, withVulnerabilities)
|
||||
layer, err := e.Datastore.FindLayer(p.ByName("name"), withFeatures, withVulnerabilities)
|
||||
if err != nil {
|
||||
httputils.WriteHTTPError(w, 0, err)
|
||||
return
|
||||
|
@ -69,8 +69,8 @@ func NewRouterV1(to time.Duration, env *Env) *httprouter.Router {
|
||||
|
||||
// Layers
|
||||
router.POST("/layers", wrap(POSTLayers, env))
|
||||
router.DELETE("/layers/:id", wrap(DELETELayers, env))
|
||||
router.GET("/layers/:id", wrap(GETLayers, env))
|
||||
router.DELETE("/layers/:name", wrap(DELETELayers, env))
|
||||
router.GET("/layers/:name", wrap(GETLayers, env))
|
||||
|
||||
// Vulnerabilities
|
||||
// router.POST("/vulnerabilities", wrap(logic.POSTVulnerabilities))
|
||||
|
@ -350,6 +350,19 @@ func createNV(features []database.FeatureVersion) (map[string]*database.FeatureV
|
||||
}
|
||||
|
||||
func (pgSQL *pgSQL) DeleteLayer(name string) error {
|
||||
// TODO(Quentin-M): Implement and test me.
|
||||
result, err := pgSQL.Exec(getQuery("r_layer"), name)
|
||||
if err != nil {
|
||||
return handleError("r_layer", err)
|
||||
}
|
||||
|
||||
affected, err := result.RowsAffected()
|
||||
if err != nil {
|
||||
return handleError("r_layer.RowsAffected()", err)
|
||||
}
|
||||
|
||||
if affected <= 0 {
|
||||
return cerrors.ErrNotFound
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/coreos/clair/database"
|
||||
cerrors "github.com/coreos/clair/utils/errors"
|
||||
"github.com/coreos/clair/utils/types"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
@ -101,7 +102,7 @@ func TestFindLayer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestInsertLayer(t *testing.T) {
|
||||
datastore, err := OpenForTest("InsertLayer", true)
|
||||
datastore, err := OpenForTest("InsertLayer", false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
@ -118,7 +119,20 @@ func TestInsertLayer(t *testing.T) {
|
||||
// TODO(Quentin-M)
|
||||
|
||||
// Delete layer.
|
||||
// TODO(Quentin-M)
|
||||
err = datastore.DeleteLayer("TestInsertLayerX")
|
||||
assert.Equal(t, cerrors.ErrNotFound, err)
|
||||
|
||||
err = datastore.DeleteLayer("TestInsertLayer3")
|
||||
assert.Nil(t, err)
|
||||
|
||||
_, err = datastore.FindLayer("TestInsertLayer3", false, false)
|
||||
assert.Equal(t, cerrors.ErrNotFound, err)
|
||||
|
||||
_, err = datastore.FindLayer("TestInsertLayer4a", false, false)
|
||||
assert.Equal(t, cerrors.ErrNotFound, err)
|
||||
|
||||
_, err = datastore.FindLayer("TestInsertLayer4b", true, false)
|
||||
assert.Equal(t, cerrors.ErrNotFound, err)
|
||||
}
|
||||
|
||||
func testInsertLayerInvalid(t *testing.T, datastore database.Datastore) {
|
||||
@ -135,8 +149,6 @@ func testInsertLayerInvalid(t *testing.T, datastore database.Datastore) {
|
||||
}
|
||||
|
||||
func testInsertLayerTree(t *testing.T, datastore database.Datastore) {
|
||||
fmt.Println("- testInsertLayerTree")
|
||||
|
||||
f1 := database.FeatureVersion{
|
||||
Feature: database.Feature{
|
||||
Namespace: database.Namespace{Name: "TestInsertLayerNamespace2"},
|
||||
|
@ -127,6 +127,8 @@ func init() {
|
||||
FROM FeatureVersion fv
|
||||
WHERE fv.id = ANY($3::integer[])`
|
||||
|
||||
queries["r_layer"] = `DELETE FROM Layer WHERE name = $1`
|
||||
|
||||
// lock.go
|
||||
queries["i_lock"] = `INSERT INTO Lock(name, owner, until) VALUES($1, $2, $3)`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user