def test_unit(kctx: kitipy.Context, report: bool, coverage: bool): # Be sure the SSH container used for tests purpose is up and running. # @TODO: add a common way to kitipy to wait for a port to be open kctx.invoke(kitipy.docker.tasks.up) expected_services = len(kctx.stack.config['services']) # @TODO: this won't work as is with Swarm, find how to generalize that sort of tests tester = lambda kctx: expected_services == kctx.stack.count_running_services( ) kitipy.wait_for(tester, interval=1, max_checks=5, label="Waiting for services start up...") # Host key might change if docker-compose down is used between two test run, # thus we start by removing any existing host key. kctx.local("ssh-keygen -R '[127.0.0.1]:2022' 1>/dev/null 2>&1") kctx.local("ssh-keygen -R '[127.0.0.1]:2023' 1>/dev/null 2>&1") kctx.local("ssh-keygen -R testhost 1>/dev/null 2>&1") # Ensure the private key has the right chmod or the task might fail. os.chmod("tests/.ssh/id_rsa", 0o0600) # Ensure first that we're actually able to connect to SSH hosts, or # tests will fail anyway. kctx.local('ssh -F tests/.ssh/config testhost /bin/true 1>/dev/null 2>&1') kctx.local('ssh -F tests/.ssh/config jumphost /bin/true 1>/dev/null 2>&1') kctx.local( 'ssh -F tests/.ssh/config testhost-via-jumphost /bin/true 1>/dev/null 2>&1' ) report_name = 'unit.xml' if report else None pytest(kctx, report_name, coverage, 'tests/unit/ -vv')
def test_all(kctx: kitipy.Context, report: bool, coverage: bool): """Execute all the tests suites.""" kctx.invoke(test_unit) kctx.invoke(test_tasks)