mirror of
https://github.com/containers/podman.git
synced 2025-12-12 09:50:25 +08:00
Begin the migration of the image bindings for podman 3.0. this includes the use of options for each binding. build was intentionally not converted as I believe it needs more discussion before migration. specifically, the build options themselves. also noteworthly is that the remove image and remove images bindings were merged into one. the remove images (or batch remove) has one downside in that the errors return no longer adhere to http return codes. this should be discussed and reimplemented in subsequent code. Signed-off-by: baude <bbaude@redhat.com>
126 lines
3.6 KiB
Go
126 lines
3.6 KiB
Go
package test_bindings
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/containers/common/pkg/auth"
|
|
"github.com/containers/image/v5/types"
|
|
podmanRegistry "github.com/containers/podman/v2/hack/podman-registry-go"
|
|
"github.com/containers/podman/v2/pkg/bindings/images"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/onsi/gomega/gexec"
|
|
)
|
|
|
|
var _ = Describe("Podman images", func() {
|
|
var (
|
|
registry *podmanRegistry.Registry
|
|
bt *bindingTest
|
|
s *gexec.Session
|
|
err error
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
// Note: we need to start the registry **before** setting up
|
|
// the test. Otherwise, the registry is not reachable for
|
|
// currently unknown reasons.
|
|
registry, err = podmanRegistry.Start()
|
|
Expect(err).To(BeNil())
|
|
|
|
bt = newBindingTest()
|
|
bt.RestoreImagesFromCache()
|
|
s = bt.startAPIService()
|
|
time.Sleep(1 * time.Second)
|
|
err := bt.NewConnection()
|
|
Expect(err).To(BeNil())
|
|
})
|
|
|
|
AfterEach(func() {
|
|
s.Kill()
|
|
bt.cleanup()
|
|
registry.Stop()
|
|
})
|
|
|
|
// Test using credentials.
|
|
It("tag + push + pull (with credentials)", func() {
|
|
|
|
imageRep := "localhost:" + registry.Port + "/test"
|
|
imageTag := "latest"
|
|
imageRef := imageRep + ":" + imageTag
|
|
|
|
// Tag the alpine image and verify it has worked.
|
|
err = images.Tag(bt.conn, alpine.shortName, imageTag, imageRep, nil)
|
|
Expect(err).To(BeNil())
|
|
_, err = images.GetImage(bt.conn, imageRef, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Now push the image.
|
|
pushOpts := new(images.PushOptions)
|
|
err = images.Push(bt.conn, imageRef, imageRef, pushOpts.WithUsername(registry.User).WithPassword(registry.Password).WithSkipTLSVerify(true))
|
|
Expect(err).To(BeNil())
|
|
|
|
// Now pull the image.
|
|
pullOpts := new(images.PullOptions)
|
|
_, err = images.Pull(bt.conn, imageRef, pullOpts.WithSkipTLSVerify(true).WithPassword(registry.Password).WithUsername(registry.User))
|
|
Expect(err).To(BeNil())
|
|
})
|
|
|
|
// Test using authfile.
|
|
It("tag + push + pull + search (with authfile)", func() {
|
|
|
|
imageRep := "localhost:" + registry.Port + "/test"
|
|
imageTag := "latest"
|
|
imageRef := imageRep + ":" + imageTag
|
|
|
|
// Create a temporary authentication file.
|
|
tmpFile, err := ioutil.TempFile("", "auth.json.")
|
|
Expect(err).To(BeNil())
|
|
_, err = tmpFile.Write([]byte{'{', '}'})
|
|
Expect(err).To(BeNil())
|
|
err = tmpFile.Close()
|
|
Expect(err).To(BeNil())
|
|
|
|
authFilePath := tmpFile.Name()
|
|
|
|
// Now login to a) test the credentials and to b) store them in
|
|
// the authfile for later use.
|
|
sys := types.SystemContext{
|
|
AuthFilePath: authFilePath,
|
|
DockerInsecureSkipTLSVerify: types.OptionalBoolTrue,
|
|
}
|
|
loginOptions := auth.LoginOptions{
|
|
Username: registry.User,
|
|
Password: registry.Password,
|
|
AuthFile: authFilePath,
|
|
Stdin: os.Stdin,
|
|
Stdout: os.Stdout,
|
|
}
|
|
err = auth.Login(bt.conn, &sys, &loginOptions, []string{imageRep})
|
|
Expect(err).To(BeNil())
|
|
|
|
// Tag the alpine image and verify it has worked.
|
|
err = images.Tag(bt.conn, alpine.shortName, imageTag, imageRep, nil)
|
|
Expect(err).To(BeNil())
|
|
_, err = images.GetImage(bt.conn, imageRef, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Now push the image.
|
|
pushOpts := new(images.PushOptions)
|
|
err = images.Push(bt.conn, imageRef, imageRef, pushOpts.WithAuthfile(authFilePath).WithSkipTLSVerify(true))
|
|
Expect(err).To(BeNil())
|
|
|
|
// Now pull the image.
|
|
pullOpts := new(images.PullOptions)
|
|
_, err = images.Pull(bt.conn, imageRef, pullOpts.WithAuthfile(authFilePath).WithSkipTLSVerify(true))
|
|
Expect(err).To(BeNil())
|
|
|
|
// Last, but not least, exercise search.
|
|
searchOptions := new(images.SearchOptions)
|
|
_, err = images.Search(bt.conn, imageRef, searchOptions.WithSkipTLSVerify(true).WithAuthfile(authFilePath))
|
|
Expect(err).To(BeNil())
|
|
})
|
|
|
|
})
|