Merge pull request #14845 from edsantiago/registry_sanitize

manifest_test: safer registry setup and teardown
This commit is contained in:
openshift-ci[bot]
2022-07-08 08:32:16 +00:00
committed by GitHub
3 changed files with 46 additions and 3 deletions

View File

@ -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})\""

View File

@ -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
}

View File

@ -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() {