2018-02-08 16:40:43 +00:00
|
|
|
package integration
|
|
|
|
|
|
|
|
import (
|
2018-07-28 16:11:31 +00:00
|
|
|
"fmt"
|
2018-02-08 16:40:43 +00:00
|
|
|
"os"
|
2018-04-24 10:33:09 +00:00
|
|
|
"strconv"
|
2018-02-08 16:40:43 +00:00
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
. "github.com/containers/libpod/test/utils"
|
2018-02-08 16:40:43 +00:00
|
|
|
. "github.com/onsi/ginkgo"
|
|
|
|
. "github.com/onsi/gomega"
|
|
|
|
)
|
|
|
|
|
|
|
|
var _ = Describe("Podman search", func() {
|
|
|
|
var (
|
|
|
|
tempdir string
|
|
|
|
err error
|
2018-10-29 06:56:07 +00:00
|
|
|
podmanTest *PodmanTestIntegration
|
2018-02-08 16:40:43 +00:00
|
|
|
)
|
2018-06-08 21:56:25 +00:00
|
|
|
const regFileContents = `
|
|
|
|
[registries.search]
|
|
|
|
registries = ['localhost:5000']
|
2018-02-08 16:40:43 +00:00
|
|
|
|
2018-06-08 21:56:25 +00:00
|
|
|
[registries.insecure]
|
|
|
|
registries = ['localhost:5000']`
|
|
|
|
|
|
|
|
const badRegFileContents = `
|
|
|
|
[registries.search]
|
|
|
|
registries = ['localhost:5000']
|
|
|
|
# empty
|
|
|
|
[registries.insecure]
|
|
|
|
registries = []`
|
2018-06-15 23:41:00 +00:00
|
|
|
|
|
|
|
const regFileContents2 = `
|
|
|
|
[registries.search]
|
|
|
|
registries = ['localhost:5000', 'localhost:6000']
|
|
|
|
|
|
|
|
[registries.insecure]
|
|
|
|
registries = ['localhost:5000']`
|
2018-02-08 16:40:43 +00:00
|
|
|
BeforeEach(func() {
|
|
|
|
tempdir, err = CreateTempDirInTempDir()
|
|
|
|
if err != nil {
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
2018-10-29 06:56:07 +00:00
|
|
|
podmanTest = PodmanTestCreate(tempdir)
|
2018-06-08 21:56:25 +00:00
|
|
|
podmanTest.RestoreAllArtifacts()
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
AfterEach(func() {
|
|
|
|
podmanTest.Cleanup()
|
2018-07-28 16:11:31 +00:00
|
|
|
f := CurrentGinkgoTestDescription()
|
|
|
|
timedResult := fmt.Sprintf("Test: %s completed in %f seconds", f.TestText, f.Duration.Seconds())
|
|
|
|
GinkgoWriter.Write([]byte(timedResult))
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search", func() {
|
|
|
|
search := podmanTest.Podman([]string{"search", "alpine"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(len(search.OutputToStringArray())).To(BeNumerically(">", 1))
|
2018-04-19 08:33:29 +00:00
|
|
|
Expect(search.LineInOutputContains("docker.io/library/alpine")).To(BeTrue())
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|
|
|
|
|
2018-06-27 17:37:56 +00:00
|
|
|
It("podman search single registry flag", func() {
|
2018-09-15 08:58:57 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "registry.access.redhat.com/rhel7"})
|
2018-02-08 16:40:43 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
2018-09-15 08:58:57 +00:00
|
|
|
Expect(search.LineInOutputContains("registry.access.redhat.com/rhel7")).To(BeTrue())
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search format flag", func() {
|
|
|
|
search := podmanTest.Podman([]string{"search", "--format", "table {{.Index}} {{.Name}}", "alpine"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(len(search.OutputToStringArray())).To(BeNumerically(">", 1))
|
2018-04-19 08:33:29 +00:00
|
|
|
Expect(search.LineInOutputContains("docker.io/library/alpine")).To(BeTrue())
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search no-trunc flag", func() {
|
2018-04-24 10:30:53 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "--no-trunc", "alpine"})
|
2018-02-08 16:40:43 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(len(search.OutputToStringArray())).To(BeNumerically(">", 1))
|
2018-04-19 08:33:29 +00:00
|
|
|
Expect(search.LineInOutputContains("docker.io/library/alpine")).To(BeTrue())
|
2018-04-24 10:30:53 +00:00
|
|
|
Expect(search.LineInOutputContains("...")).To(BeFalse())
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search limit flag", func() {
|
2018-09-11 20:37:43 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "--limit", "3", "docker.io/alpine"})
|
2018-02-08 16:40:43 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(len(search.OutputToStringArray())).To(Equal(4))
|
|
|
|
})
|
2018-04-24 10:33:09 +00:00
|
|
|
|
|
|
|
It("podman search with filter stars", func() {
|
|
|
|
search := podmanTest.Podman([]string{"search", "--filter", "stars=10", "--format", "{{.Stars}}", "alpine"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
output := search.OutputToStringArray()
|
|
|
|
for i := 0; i < len(output); i++ {
|
|
|
|
Expect(strconv.Atoi(output[i])).To(BeNumerically(">=", 10))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search with filter is-official", func() {
|
|
|
|
search := podmanTest.Podman([]string{"search", "--filter", "is-official", "--format", "{{.Official}}", "alpine"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
output := search.OutputToStringArray()
|
|
|
|
for i := 0; i < len(output); i++ {
|
|
|
|
Expect(output[i]).To(Equal("[OK]"))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search with filter is-automated", func() {
|
|
|
|
search := podmanTest.Podman([]string{"search", "--filter", "is-automated=false", "--format", "{{.Automated}}", "alpine"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
output := search.OutputToStringArray()
|
|
|
|
for i := 0; i < len(output); i++ {
|
|
|
|
Expect(output[i]).To(Equal(""))
|
|
|
|
}
|
|
|
|
})
|
2018-06-08 21:56:25 +00:00
|
|
|
|
2018-09-11 20:37:43 +00:00
|
|
|
It("podman search v2 registry with empty query", func() {
|
|
|
|
search := podmanTest.Podman([]string{"search", "registry.fedoraproject.org/"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(len(search.OutputToStringArray())).To(BeNumerically(">=", 1))
|
|
|
|
})
|
|
|
|
|
2018-06-08 21:56:25 +00:00
|
|
|
It("podman search attempts HTTP if tls-verify flag is set false", func() {
|
2018-10-30 15:34:38 +00:00
|
|
|
if podmanTest.Host.Arch == "ppc64le" {
|
|
|
|
Skip("No registry image for ppc64le")
|
|
|
|
}
|
2018-07-31 14:05:48 +00:00
|
|
|
podmanTest.RestoreArtifact(registry)
|
|
|
|
fakereg := podmanTest.Podman([]string{"run", "-d", "--name", "registry", "-p", "5000:5000", registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
|
2018-06-08 21:56:25 +00:00
|
|
|
fakereg.WaitWithDefaultTimeout()
|
|
|
|
Expect(fakereg.ExitCode()).To(Equal(0))
|
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry", "listening on", 20, 1) {
|
2018-06-08 21:56:25 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
|
2018-06-27 17:37:56 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "localhost:5000/fake/image:andtag", "--tls-verify=false"})
|
2018-06-08 21:56:25 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
|
|
|
|
// if this test succeeded, there will be no output (there is no entry named fake/image:andtag in an empty registry)
|
|
|
|
// and the exit code will be 0
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(search.OutputToString()).Should(BeEmpty())
|
|
|
|
Expect(search.ErrorToString()).Should(BeEmpty())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search in local registry", func() {
|
2018-10-30 15:34:38 +00:00
|
|
|
if podmanTest.Host.Arch == "ppc64le" {
|
|
|
|
Skip("No registry image for ppc64le")
|
|
|
|
}
|
2018-07-31 14:05:48 +00:00
|
|
|
podmanTest.RestoreArtifact(registry)
|
|
|
|
registry := podmanTest.Podman([]string{"run", "-d", "--name", "registry3", "-p", "5000:5000", registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
|
2018-06-08 21:56:25 +00:00
|
|
|
registry.WaitWithDefaultTimeout()
|
|
|
|
Expect(registry.ExitCode()).To(Equal(0))
|
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry3", "listening on", 20, 1) {
|
2018-06-08 21:56:25 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
|
|
|
|
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
|
|
|
|
push.WaitWithDefaultTimeout()
|
|
|
|
Expect(push.ExitCode()).To(Equal(0))
|
2018-06-27 17:37:56 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "localhost:5000/my-alpine", "--tls-verify=false"})
|
2018-06-08 21:56:25 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(search.OutputToString()).ShouldNot(BeEmpty())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search attempts HTTP if registry is in registries.insecure and force secure is false", func() {
|
2018-10-30 15:34:38 +00:00
|
|
|
if podmanTest.Host.Arch == "ppc64le" {
|
|
|
|
Skip("No registry image for ppc64le")
|
|
|
|
}
|
2018-07-31 14:05:48 +00:00
|
|
|
podmanTest.RestoreArtifact(registry)
|
|
|
|
registry := podmanTest.Podman([]string{"run", "-d", "--name", "registry4", "-p", "5000:5000", registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
|
2018-06-08 21:56:25 +00:00
|
|
|
registry.WaitWithDefaultTimeout()
|
|
|
|
Expect(registry.ExitCode()).To(Equal(0))
|
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry4", "listening on", 20, 1) {
|
2018-06-08 21:56:25 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
|
|
|
|
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
|
|
|
|
push.WaitWithDefaultTimeout()
|
|
|
|
Expect(push.ExitCode()).To(Equal(0))
|
|
|
|
|
|
|
|
// registries.conf set up
|
2018-07-31 22:16:08 +00:00
|
|
|
podmanTest.setRegistriesConfigEnv([]byte(regFileContents))
|
2018-06-08 21:56:25 +00:00
|
|
|
|
2018-06-27 17:37:56 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "localhost:5000/my-alpine"})
|
2018-06-08 21:56:25 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
match, _ := search.GrepString("my-alpine")
|
|
|
|
Expect(match).Should(BeTrue())
|
|
|
|
Expect(search.ErrorToString()).Should(BeEmpty())
|
|
|
|
|
|
|
|
// cleanup
|
2018-07-31 22:16:08 +00:00
|
|
|
resetRegistriesConfigEnv()
|
2018-06-08 21:56:25 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search doesn't attempt HTTP if force secure is true", func() {
|
2018-10-30 15:34:38 +00:00
|
|
|
if podmanTest.Host.Arch == "ppc64le" {
|
|
|
|
Skip("No registry image for ppc64le")
|
|
|
|
}
|
2018-07-31 14:05:48 +00:00
|
|
|
podmanTest.RestoreArtifact(registry)
|
|
|
|
registry := podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry5", registry})
|
2018-06-08 21:56:25 +00:00
|
|
|
registry.WaitWithDefaultTimeout()
|
|
|
|
Expect(registry.ExitCode()).To(Equal(0))
|
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry5", "listening on", 20, 1) {
|
2018-06-08 21:56:25 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
|
|
|
|
push.WaitWithDefaultTimeout()
|
|
|
|
Expect(push.ExitCode()).To(Equal(0))
|
|
|
|
|
|
|
|
// registries.conf set up
|
2018-07-31 22:16:08 +00:00
|
|
|
podmanTest.setRegistriesConfigEnv([]byte(regFileContents))
|
2018-06-08 21:56:25 +00:00
|
|
|
|
2018-06-27 17:37:56 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "localhost:5000/my-alpine", "--tls-verify=true"})
|
2018-06-08 21:56:25 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(search.OutputToString()).Should(BeEmpty())
|
|
|
|
match, _ := search.ErrorGrepString("error")
|
|
|
|
Expect(match).Should(BeTrue())
|
|
|
|
|
|
|
|
// cleanup
|
2018-07-31 22:16:08 +00:00
|
|
|
resetRegistriesConfigEnv()
|
2018-06-08 21:56:25 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
It("podman search doesn't attempt HTTP if registry is not listed as insecure", func() {
|
2018-10-30 15:34:38 +00:00
|
|
|
if podmanTest.Host.Arch == "ppc64le" {
|
|
|
|
Skip("No registry image for ppc64le")
|
|
|
|
}
|
2018-07-31 14:05:48 +00:00
|
|
|
podmanTest.RestoreArtifact(registry)
|
|
|
|
registry := podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry6", registry})
|
2018-06-08 21:56:25 +00:00
|
|
|
registry.WaitWithDefaultTimeout()
|
|
|
|
Expect(registry.ExitCode()).To(Equal(0))
|
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry6", "listening on", 20, 1) {
|
2018-06-08 21:56:25 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
|
|
|
|
push.WaitWithDefaultTimeout()
|
|
|
|
Expect(push.ExitCode()).To(Equal(0))
|
|
|
|
|
|
|
|
// registries.conf set up
|
2018-07-31 22:16:08 +00:00
|
|
|
podmanTest.setRegistriesConfigEnv([]byte(badRegFileContents))
|
2018-06-08 21:56:25 +00:00
|
|
|
|
2018-06-27 17:37:56 +00:00
|
|
|
search := podmanTest.Podman([]string{"search", "localhost:5000/my-alpine"})
|
2018-06-08 21:56:25 +00:00
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(search.OutputToString()).Should(BeEmpty())
|
|
|
|
match, _ := search.ErrorGrepString("error")
|
|
|
|
Expect(match).Should(BeTrue())
|
|
|
|
|
|
|
|
// cleanup
|
2018-07-31 22:16:08 +00:00
|
|
|
resetRegistriesConfigEnv()
|
2018-06-08 21:56:25 +00:00
|
|
|
})
|
2018-06-15 23:41:00 +00:00
|
|
|
|
|
|
|
It("podman search doesn't attempt HTTP if one registry is not listed as insecure", func() {
|
2018-10-30 15:34:38 +00:00
|
|
|
if podmanTest.Host.Arch == "ppc64le" {
|
|
|
|
Skip("No registry image for ppc64le")
|
|
|
|
}
|
2018-07-31 14:05:48 +00:00
|
|
|
podmanTest.RestoreArtifact(registry)
|
|
|
|
registryLocal := podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry7", registry})
|
|
|
|
registryLocal.WaitWithDefaultTimeout()
|
|
|
|
Expect(registryLocal.ExitCode()).To(Equal(0))
|
2018-06-15 23:41:00 +00:00
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry7", "listening on", 20, 1) {
|
2018-06-15 23:41:00 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
|
2018-07-31 14:05:48 +00:00
|
|
|
registryLocal = podmanTest.Podman([]string{"run", "-d", "-p", "6000:5000", "--name", "registry8", registry})
|
|
|
|
registryLocal.WaitWithDefaultTimeout()
|
|
|
|
Expect(registryLocal.ExitCode()).To(Equal(0))
|
2018-06-15 23:41:00 +00:00
|
|
|
|
2018-10-29 06:56:07 +00:00
|
|
|
if !WaitContainerReady(podmanTest, "registry8", "listening on", 20, 1) {
|
2018-06-15 23:41:00 +00:00
|
|
|
Skip("Can not start docker registry.")
|
|
|
|
}
|
|
|
|
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:6000/my-alpine"})
|
|
|
|
push.WaitWithDefaultTimeout()
|
|
|
|
Expect(push.ExitCode()).To(Equal(0))
|
|
|
|
|
|
|
|
// registries.conf set up
|
2018-07-31 22:16:08 +00:00
|
|
|
podmanTest.setRegistriesConfigEnv([]byte(regFileContents2))
|
2018-06-15 23:41:00 +00:00
|
|
|
|
|
|
|
search := podmanTest.Podman([]string{"search", "my-alpine"})
|
|
|
|
search.WaitWithDefaultTimeout()
|
|
|
|
|
|
|
|
Expect(search.ExitCode()).To(Equal(0))
|
|
|
|
Expect(search.OutputToString()).Should(BeEmpty())
|
|
|
|
match, _ := search.ErrorGrepString("error")
|
|
|
|
Expect(match).Should(BeTrue())
|
|
|
|
|
|
|
|
// cleanup
|
2018-07-31 22:16:08 +00:00
|
|
|
resetRegistriesConfigEnv()
|
2018-06-15 23:41:00 +00:00
|
|
|
})
|
2018-02-08 16:40:43 +00:00
|
|
|
})
|