mirror of
https://github.com/containers/podman.git
synced 2025-06-20 00:51:16 +08:00
Merge pull request #6118 from baude/v2bindingsenforce
set binding tests to required
This commit is contained in:
@ -644,7 +644,6 @@ special_testing_cross_task:
|
||||
|
||||
special_testing_bindings_task:
|
||||
|
||||
skip: $CI == 'true'
|
||||
depends_on:
|
||||
- "gating"
|
||||
- "varlink_api"
|
||||
|
@ -234,7 +234,6 @@ func outputJSON(stats []*containerStats) error {
|
||||
Pids: j.PIDS(),
|
||||
})
|
||||
}
|
||||
|
||||
b, err := json.MarshalIndent(jstats, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -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,
|
||||
})
|
||||
|
@ -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
|
||||
;;
|
||||
*)
|
||||
|
@ -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)
|
||||
//}
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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())
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -42,12 +42,14 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if stopSignal != "" {
|
||||
sig, err := signal.ParseSignalNameOrNumber(stopSignal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.StopSignal = &sig
|
||||
}
|
||||
}
|
||||
|
||||
rtc, err := r.GetConfig()
|
||||
if err != nil {
|
||||
@ -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
|
||||
|
@ -5,6 +5,7 @@ package integration
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/pkg/cgroups"
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
@ -87,13 +88,24 @@ var _ = Describe("Podman stats", func() {
|
||||
})
|
||||
|
||||
It("podman stats with json output", func() {
|
||||
var found bool
|
||||
session := podmanTest.RunTopContainer("")
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
session = podmanTest.Podman([]string{"stats", "--all", "--no-stream", "--format", "json"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(session.IsJSONOutputValid()).To(BeTrue())
|
||||
for i := 0; i < 5; i++ {
|
||||
ps := podmanTest.Podman([]string{"ps", "-q"})
|
||||
ps.WaitWithDefaultTimeout()
|
||||
if len(ps.OutputToStringArray()) == 1 {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
Expect(found).To(BeTrue())
|
||||
stats := podmanTest.Podman([]string{"stats", "--all", "--no-stream", "--format", "json"})
|
||||
stats.WaitWithDefaultTimeout()
|
||||
Expect(stats.ExitCode()).To(Equal(0))
|
||||
Expect(stats.IsJSONOutputValid()).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman stats on a container with no net ns", func() {
|
||||
|
Reference in New Issue
Block a user