system-config/testinfra/test_mirror.py
Tony Breeds 92d2bb7f6b [testinfra] Add port into curl's --resolve arg.
The curl manpage explains that port isn't optional:

 --resolve <[+]host:port:addr[,addr]...>
   Provide a custom address for a specific host and port pair.  Us‐
   ing  this, you can make the curl requests(s) use a specified ad‐
   dress and prevent the otherwise normally resolved address to  be
   used.  Consider  it a sort of /etc/hosts alternative provided on
   the command line. The port number should be the number used  for
   the  specific  protocol  the host will be used for. It means you
   need several entries if you want to provide address for the same
   host but different ports.

Change-Id: I40117768bbc149678a69905a8f6ecd3519301ce1
2023-10-31 17:14:37 -05:00

99 lines
3.7 KiB
Python

# Copyright 2019 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
testinfra_hosts = ['mirror01.openafs.provider.opendev.org',
'mirror02.openafs.provider.opendev.org']
def test_apache(host):
apache = host.service('apache2')
assert apache.is_running
def _run_cmd(host, port, scheme='https', url='', curl_opt=''):
hostname = host.backend.get_hostname()
return f'curl {curl_opt} --resolve {hostname}:{port}:127.0.0.1 {scheme}://{hostname}:{port}{url}'
def test_base_mirror(host):
# base mirror
cmd = host.run(_run_cmd(host, 443))
assert '<a href="debian/">' in cmd.stdout
# mirrors still respond on http
cmd = host.run(_run_cmd(host, 80, scheme='http'))
assert '<a href="debian/">' in cmd.stdout
def test_proxy_mirror(host):
# pypi proxy mirror
cmd = host.run(_run_cmd(host, 4443, url='/pypi/simple/setuptools'))
assert 'setuptools' in cmd.stdout
cmd = host.run(_run_cmd(host, 8080, scheme='http', url='/pypi/simple/setuptools'))
assert 'setuptools' in cmd.stdout
def test_dockerv2_mirror(host):
# Docker v2 mirror
# NOTE(ianw) 2022-07 : this gets back a 401 .json; maybe something
# better we could do?
cmd = host.run(_run_cmd(host, 4445, url='/v2/'))
assert 'UNAUTHORIZED' in cmd.stdout
cmd = host.run(_run_cmd(host, 8082, scheme='http', url='/v2/'))
assert 'UNAUTHORIZED' in cmd.stdout
def test_quay_mirror(host):
# QuayRegistryMirror
cmd = host.run(_run_cmd(host, 4447, url='/'))
assert 'Quay' in cmd.stdout
cmd = host.run(_run_cmd(host, 8084, scheme='http', url='/'))
assert 'Quay' in cmd.stdout
# TODO test RHRegistryMirror
def test_galaxy_mirror(host):
cmd = host.run(_run_cmd(host, 4448, url='/'))
assert 'Galaxy NG' in cmd.stdout
cmd = host.run(_run_cmd(host, 8085, scheme='http', url='/'))
assert 'Galaxy NG' in cmd.stdout
hostname = host.backend.get_hostname()
# Ensure API properly answers
cmd = host.run(_run_cmd(host, 4448, url='/api/'))
assert 'galaxy_ng_version' in cmd.stdout
# TODO(clarkb) fix the testing of galaxy api proxying.
# Galaxy completely redid their apis in v3 and the tests below are
# no longer valid.
## Ensure we get data out of a specific collection
#cmd = host.run(_run_cmd(host, 4448, url='/api/v2/collections/community/general/'))
#assert 'https://{}:4448/api/'.format(hostname) in cmd.stdout
#answer = json.loads(cmd.stdout)
#version_uri = answer['latest_version']['href'].replace('https://{}:4448'.format(hostname), '')
## Ensure we get a correct download URI
#cmd = host.run(_run_cmd(host, 4448, url=version_uri))
#assert 'https://{}:4448/api/'.format(hostname) in cmd.stdout
#answer = json.loads(cmd.stdout)
#download_uri = answer['download_url']
#assert download_uri.startswith('https://{}:4448/download/community-general'.format(hostname))
## Download a file and check we get an actual archive
#download_uri = download_uri.replace('https://{}:4448'.format(hostname), '')
#host.run(_run_cmd(host, 4448, url=download_uri, curl_opt='-sL --output /tmp/output.tar.gz'))
#check_file = host.run('file /tmp/output.tar.gz')
#assert 'gzip compressed data' in check_file.stdout