mirror of https://github.com/containers/podman.git
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/v3/hack/podman-registry-go"
|
|
"github.com/containers/podman/v3/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())
|
|
})
|
|
|
|
})
|