mirror of
https://github.com/containers/podman.git
synced 2025-06-20 00:51:16 +08:00
Merge pull request #14845 from edsantiago/registry_sanitize
manifest_test: safer registry setup and teardown
This commit is contained in:
@ -122,6 +122,25 @@ function must_pass() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###################
|
||||||
|
# wait_for_port # Returns once port is available on localhost
|
||||||
|
###################
|
||||||
|
function wait_for_port() {
|
||||||
|
local port=$1 # Numeric port
|
||||||
|
|
||||||
|
local host=127.0.0.1
|
||||||
|
local _timeout=5
|
||||||
|
|
||||||
|
# Wait
|
||||||
|
while [ $_timeout -gt 0 ]; do
|
||||||
|
{ exec {unused_fd}<> /dev/tcp/$host/$port; } &>/dev/null && return
|
||||||
|
sleep 1
|
||||||
|
_timeout=$(( $_timeout - 1 ))
|
||||||
|
done
|
||||||
|
|
||||||
|
die "Timed out waiting for port $port"
|
||||||
|
}
|
||||||
|
|
||||||
# END helper functions
|
# END helper functions
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# BEGIN action processing
|
# BEGIN action processing
|
||||||
@ -130,7 +149,7 @@ function do_start() {
|
|||||||
# If called without a port, assign a random one in the 5xxx range
|
# If called without a port, assign a random one in the 5xxx range
|
||||||
if [ -z "${PODMAN_REGISTRY_PORT}" ]; then
|
if [ -z "${PODMAN_REGISTRY_PORT}" ]; then
|
||||||
for port in $(shuf -i 5000-5999);do
|
for port in $(shuf -i 5000-5999);do
|
||||||
if ! { exec 3<> /dev/tcp/127.0.0.1/$port; } &>/dev/null; then
|
if ! { exec {unused_fd}<> /dev/tcp/127.0.0.1/$port; } &>/dev/null; then
|
||||||
PODMAN_REGISTRY_PORT=$port
|
PODMAN_REGISTRY_PORT=$port
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@ -203,6 +222,9 @@ function do_start() {
|
|||||||
-e "REGISTRY_HTTP_TLS_KEY=/auth/domain.key" \
|
-e "REGISTRY_HTTP_TLS_KEY=/auth/domain.key" \
|
||||||
registry:2.6
|
registry:2.6
|
||||||
|
|
||||||
|
# Confirm that registry started and port is active
|
||||||
|
wait_for_port $PODMAN_REGISTRY_PORT
|
||||||
|
|
||||||
# Dump settings. Our caller will use these to access the registry.
|
# Dump settings. Our caller will use these to access the registry.
|
||||||
for v in IMAGE PORT USER PASS; do
|
for v in IMAGE PORT USER PASS; do
|
||||||
echo "PODMAN_REGISTRY_${v}=\"$(eval echo \$PODMAN_REGISTRY_${v})\""
|
echo "PODMAN_REGISTRY_${v}=\"$(eval echo \$PODMAN_REGISTRY_${v})\""
|
||||||
|
@ -76,3 +76,8 @@ func (p *PodmanTestIntegration) StopRemoteService() {}
|
|||||||
// We don't support running API service when local
|
// We don't support running API service when local
|
||||||
func (p *PodmanTestIntegration) StartRemoteService() {
|
func (p *PodmanTestIntegration) StartRemoteService() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Just a stub for compiling with `!remote`.
|
||||||
|
func getRemoteOptions(p *PodmanTestIntegration, args []string) []string {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -17,6 +17,7 @@ var _ = Describe("Podman manifest", func() {
|
|||||||
tempdir string
|
tempdir string
|
||||||
err error
|
err error
|
||||||
podmanTest *PodmanTestIntegration
|
podmanTest *PodmanTestIntegration
|
||||||
|
registry *podmanRegistry.Registry
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -39,10 +40,16 @@ var _ = Describe("Podman manifest", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
AfterEach(func() {
|
AfterEach(func() {
|
||||||
|
// if auth test fails, it will leave a registry running
|
||||||
|
if registry != nil {
|
||||||
|
_ = registry.Stop()
|
||||||
|
}
|
||||||
|
// Also from auth test; don't propagate it to other tests
|
||||||
|
os.Unsetenv("PODMAN")
|
||||||
|
|
||||||
podmanTest.Cleanup()
|
podmanTest.Cleanup()
|
||||||
f := CurrentGinkgoTestDescription()
|
f := CurrentGinkgoTestDescription()
|
||||||
processTestResult(f)
|
processTestResult(f)
|
||||||
|
|
||||||
})
|
})
|
||||||
It("create w/o image", func() {
|
It("create w/o image", func() {
|
||||||
session := podmanTest.Podman([]string{"manifest", "create", "foo"})
|
session := podmanTest.Podman([]string{"manifest", "create", "foo"})
|
||||||
@ -297,7 +304,15 @@ var _ = Describe("Podman manifest", func() {
|
|||||||
registryOptions := &podmanRegistry.Options{
|
registryOptions := &podmanRegistry.Options{
|
||||||
Image: "docker-archive:" + imageTarPath(REGISTRY_IMAGE),
|
Image: "docker-archive:" + imageTarPath(REGISTRY_IMAGE),
|
||||||
}
|
}
|
||||||
registry, err := podmanRegistry.StartWithOptions(registryOptions)
|
|
||||||
|
// registry script invokes $PODMAN; make sure we define that
|
||||||
|
// so it can use our same networking options.
|
||||||
|
opts := strings.Join(podmanTest.MakeOptions(nil, false, false), " ")
|
||||||
|
if IsRemote() {
|
||||||
|
opts = strings.Join(getRemoteOptions(podmanTest, nil), " ")
|
||||||
|
}
|
||||||
|
os.Setenv("PODMAN", podmanTest.PodmanBinary+" "+opts)
|
||||||
|
registry, err = podmanRegistry.StartWithOptions(registryOptions)
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
|
|
||||||
session := podmanTest.Podman([]string{"manifest", "create", "foo"})
|
session := podmanTest.Podman([]string{"manifest", "create", "foo"})
|
||||||
@ -330,6 +345,7 @@ var _ = Describe("Podman manifest", func() {
|
|||||||
|
|
||||||
err = registry.Stop()
|
err = registry.Stop()
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
|
registry = nil
|
||||||
})
|
})
|
||||||
|
|
||||||
It("push with error", func() {
|
It("push with error", func() {
|
||||||
|
Reference in New Issue
Block a user