set binding tests to required

some small fix ups for binding tests and then make them required.

update containers-common

V2 bindings tests were failing because of changes introduced in commit
a2ad5bb.

Fix some typos.

Signed-off-by: Lokesh Mandvekar <lsm5@fedoraproject.org>

in the case where the specgen attribute for Env and Labels are nil, we should should then make the map IF we have labels and envs that need to be added.

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude
2020-05-07 09:19:00 -05:00
parent 7c63059287
commit a4c607cc71
10 changed files with 91 additions and 73 deletions

View File

@ -644,7 +644,6 @@ special_testing_cross_task:
special_testing_bindings_task:
skip: $CI == 'true'
depends_on:
- "gating"
- "varlink_api"

View File

@ -24,7 +24,7 @@ var (
func init() {
registry.Commands = append(registry.Commands, registry.CliCommand{
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
Mode: []entities.EngineMode{entities.ABIMode},
Command: annotateCmd,
Parent: manifestCmd,
})

View File

@ -87,7 +87,7 @@ case "$CG_FS_TYPE" in
# Normally not something to do for stable testing
# but crun is new, and late-breaking fixes may be required
# on short notice
dnf update -y crun
dnf update -y crun containers-common
fi
;;
*)

View File

@ -125,23 +125,24 @@ func Push(ctx context.Context, name string, destination *string, all *bool) (str
return idr.ID, response.Process(&idr)
}
// There is NO annotate endpoint. this binding could never work
// Annotate updates the image configuration of a given manifest list
func Annotate(ctx context.Context, name, digest string, options image.ManifestAnnotateOpts) (string, error) {
var idr handlers.IDResponse
conn, err := bindings.GetClient(ctx)
if err != nil {
return "", err
}
params := url.Values{}
params.Set("digest", digest)
optionsString, err := jsoniter.MarshalToString(options)
if err != nil {
return "", err
}
stringReader := strings.NewReader(optionsString)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/manifests/%s/annotate", params, name)
if err != nil {
return "", err
}
return idr.ID, response.Process(&idr)
}
//func Annotate(ctx context.Context, name, digest string, options image.ManifestAnnotateOpts) (string, error) {
// var idr handlers.IDResponse
// conn, err := bindings.GetClient(ctx)
// if err != nil {
// return "", err
// }
// params := url.Values{}
// params.Set("digest", digest)
// optionsString, err := jsoniter.MarshalToString(options)
// if err != nil {
// return "", err
// }
// stringReader := strings.NewReader(optionsString)
// response, err := conn.DoRequest(stringReader, http.MethodPost, "/manifests/%s/annotate", params, name)
// if err != nil {
// return "", err
// }
// return idr.ID, response.Process(&idr)
//}

View File

@ -531,7 +531,7 @@ var _ = Describe("Podman containers ", func() {
Expect(err).ToNot(BeNil())
})
It("podman prune stoped containers", func() {
It("podman prune stopped containers", func() {
// Start and stop a container to enter in exited state.
var name = "top"
_, err := bt.RunTopContainer(&name, &bindings.PFalse, nil)
@ -546,7 +546,7 @@ var _ = Describe("Podman containers ", func() {
Expect(len(pruneResponse.ID)).To(Equal(1))
})
It("podman prune stoped containers with filters", func() {
It("podman prune stopped containers with filters", func() {
// Start and stop a container to enter in exited state.
var name = "top"
_, err := bt.RunTopContainer(&name, &bindings.PFalse, nil)

View File

@ -118,25 +118,27 @@ var _ = Describe("Podman containers ", func() {
Expect(len(data.Manifests)).To(BeZero())
})
It("annotate manifest", func() {
id, err := manifests.Create(bt.conn, []string{"quay.io/libpod/foobar:latest"}, []string{}, nil)
Expect(err).To(BeNil())
opts := image.ManifestAddOpts{Images: []string{"docker.io/library/alpine:latest"}}
// There is NO annotate endpoint, this could never work.:w
_, err = manifests.Add(bt.conn, id, opts)
Expect(err).To(BeNil())
data, err := manifests.Inspect(bt.conn, id)
Expect(err).To(BeNil())
Expect(len(data.Manifests)).To(BeNumerically("==", 1))
digest := data.Manifests[0].Digest.String()
annoOpts := image.ManifestAnnotateOpts{OS: "foo"}
_, err = manifests.Annotate(bt.conn, id, digest, annoOpts)
Expect(err).To(BeNil())
list, err := manifests.Inspect(bt.conn, id)
Expect(err).To(BeNil())
Expect(len(list.Manifests)).To(BeNumerically("==", 1))
Expect(list.Manifests[0].Platform.OS).To(Equal("foo"))
})
//It("annotate manifest", func() {
// id, err := manifests.Create(bt.conn, []string{"quay.io/libpod/foobar:latest"}, []string{}, nil)
// Expect(err).To(BeNil())
// opts := image.ManifestAddOpts{Images: []string{"docker.io/library/alpine:latest"}}
//
// _, err = manifests.Add(bt.conn, id, opts)
// Expect(err).To(BeNil())
// data, err := manifests.Inspect(bt.conn, id)
// Expect(err).To(BeNil())
// Expect(len(data.Manifests)).To(BeNumerically("==", 1))
// digest := data.Manifests[0].Digest.String()
// annoOpts := image.ManifestAnnotateOpts{OS: "foo"}
// _, err = manifests.Annotate(bt.conn, id, digest, annoOpts)
// Expect(err).To(BeNil())
// list, err := manifests.Inspect(bt.conn, id)
// Expect(err).To(BeNil())
// Expect(len(list.Manifests)).To(BeNumerically("==", 1))
// Expect(list.Manifests[0].Platform.OS).To(Equal("foo"))
//})
It("push manifest", func() {
Skip("TODO")

View File

@ -57,6 +57,11 @@ var _ = Describe("Podman pods", func() {
podSummary, err := pods.List(bt.conn, nil)
Expect(err).To(BeNil())
Expect(len(podSummary)).To(Equal(1))
// Start the pod
_, err = pods.Start(bt.conn, newpod)
Expect(err).To(BeNil())
// Adding an alpine container to the existing pod
_, err = bt.RunTopContainer(nil, &bindings.PTrue, &newpod)
Expect(err).To(BeNil())
@ -83,6 +88,11 @@ var _ = Describe("Podman pods", func() {
It("List pods with filters", func() {
newpod2 := "newpod2"
bt.Podcreate(&newpod2)
// Start the pod
_, err = pods.Start(bt.conn, newpod)
Expect(err).To(BeNil())
_, err = bt.RunTopContainer(nil, &bindings.PTrue, &newpod)
Expect(err).To(BeNil())

View File

@ -3,7 +3,6 @@ package test_bindings
import (
"time"
"github.com/containers/libpod/pkg/api/handlers"
"github.com/containers/libpod/pkg/bindings"
"github.com/containers/libpod/pkg/bindings/containers"
"github.com/containers/libpod/pkg/bindings/pods"
@ -39,8 +38,8 @@ var _ = Describe("Podman system", func() {
})
It("podman events", func() {
eChan := make(chan handlers.Event, 1)
var messages []handlers.Event
eChan := make(chan entities.Event, 1)
var messages []entities.Event
cancelChan := make(chan bool, 1)
go func() {
for e := range eChan {

View File

@ -64,32 +64,34 @@ func (ir *ImageEngine) ManifestAdd(ctx context.Context, opts entities.ManifestAd
return listID, nil
}
// FIXME There is no endpoint for annotate and therefor this code is currently invalid
// ManifestAnnotate updates an entry of the manifest list
func (ir *ImageEngine) ManifestAnnotate(ctx context.Context, names []string, opts entities.ManifestAnnotateOptions) (string, error) {
manifestAnnotateOpts := image.ManifestAnnotateOpts{
Arch: opts.Arch,
Features: opts.Features,
OS: opts.OS,
OSFeatures: opts.OSFeatures,
OSVersion: opts.OSVersion,
Variant: opts.Variant,
}
if len(opts.Annotation) > 0 {
annotations := make(map[string]string)
for _, annotationSpec := range opts.Annotation {
spec := strings.SplitN(annotationSpec, "=", 2)
if len(spec) != 2 {
return "", errors.Errorf("no value given for annotation %q", spec[0])
}
annotations[spec[0]] = spec[1]
}
manifestAnnotateOpts.Annotation = annotations
}
updatedListID, err := manifests.Annotate(ctx, names[0], names[1], manifestAnnotateOpts)
if err != nil {
return updatedListID, errors.Wrapf(err, "error annotating %s of manifest list %s", names[1], names[0])
}
return fmt.Sprintf("%s :%s", updatedListID, names[1]), nil
return "", errors.New("not implemented")
// manifestAnnotateOpts := image.ManifestAnnotateOpts{
// Arch: opts.Arch,
// Features: opts.Features,
// OS: opts.OS,
// OSFeatures: opts.OSFeatures,
// OSVersion: opts.OSVersion,
// Variant: opts.Variant,
// }
// if len(opts.Annotation) > 0 {
// annotations := make(map[string]string)
// for _, annotationSpec := range opts.Annotation {
// spec := strings.SplitN(annotationSpec, "=", 2)
// if len(spec) != 2 {
// return "", errors.Errorf("no value given for annotation %q", spec[0])
// }
// annotations[spec[0]] = spec[1]
// }
// manifestAnnotateOpts.Annotation = annotations
// }
// updatedListID, err := manifests.Annotate(ctx, names[0], names[1], manifestAnnotateOpts)
// if err != nil {
// return updatedListID, errors.Wrapf(err, "error annotating %s of manifest list %s", names[1], names[0])
// }
// return fmt.Sprintf("%s :%s", updatedListID, names[1]), nil
}
// ManifestRemove removes the digest from manifest list

View File

@ -42,11 +42,13 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
if err != nil {
return err
}
sig, err := signal.ParseSignalNameOrNumber(stopSignal)
if err != nil {
return err
if stopSignal != "" {
sig, err := signal.ParseSignalNameOrNumber(stopSignal)
if err != nil {
return err
}
s.StopSignal = &sig
}
s.StopSignal = &sig
}
rtc, err := r.GetConfig()
@ -78,6 +80,9 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
}
// labels from the image that dont exist already
if len(labels) > 0 && s.Labels == nil {
s.Labels = make(map[string]string)
}
for k, v := range labels {
if _, exists := s.Labels[k]; !exists {
s.Labels[k] = v