def test_run_tag_entrypoint_local_success(mock_local_executor, hookspy): args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", ] mock_skopeo_login = mock.MagicMock() mock_local_executor.return_value.skopeo_login = mock_skopeo_login mock_local_executor.return_value.__enter__.return_value = mock_local_executor.return_value mock_tag_images = mock.MagicMock() mock_local_executor.return_value.tag_images = mock_tag_images tag_images.tag_images_main(args) mock_local_executor.assert_called_once_with() mock_skopeo_login.assert_called_once_with("quay.io", None, None) mock_tag_images.assert_called_once_with("quay.io/repo/souce-image:1", ["quay.io/repo/target-image:1"], False) assert hookspy == [ ("task_start", {}), ( "quay_images_tagged", { "dest_refs": ["quay.io/repo/target-image:1"], "source_ref": "quay.io/repo/souce-image:1", }, ), ("task_stop", { "failed": False }), ]
def test_run_tag_entrypoint_remote_success(mock_remote_executor): args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--remote-exec", "--ssh-remote-host", "127.0.0.1", "--ssh-reject-unknown-host", "--ssh-username", "dummy", "--ssh-password", "123456", "--ssh-key-filename", "/path/to/file.key", ] mock_skopeo_login = mock.MagicMock() mock_remote_executor.return_value.skopeo_login = mock_skopeo_login mock_remote_executor.return_value.__enter__.return_value = mock_remote_executor.return_value mock_tag_images = mock.MagicMock() mock_remote_executor.return_value.tag_images = mock_tag_images tag_images.tag_images_main(args) mock_remote_executor.assert_called_once_with("127.0.0.1", "dummy", "/path/to/file.key", "123456", None, False) mock_skopeo_login.assert_called_once_with("quay.io", None, None) mock_tag_images.assert_called_once_with("quay.io/repo/souce-image:1", ["quay.io/repo/target-image:1"], False)
def test_arg_parser_missing_quay_user_or_password(): missing_password = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--quay-user", "robot_user", ] with pytest.raises(ValueError, match="Both user and password must be present.*"): tag_images.tag_images_main(missing_password) missing_user = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--quay-password", "robot_token", ] with pytest.raises(ValueError, match="Both user and password must be present.*"): tag_images.tag_images_main(missing_user)
def test_arg_parser_required_args(mock_tag_images): required_args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", ] tag_images.tag_images_main(required_args) assert mock_tag_images.call_args == mock.call( source_ref="quay.io/repo/souce-image:1", all_arch=False, quay_user=None, quay_password=None, remote_exec=False, ssh_remote_host=None, ssh_remote_host_port=None, ssh_reject_unknown_host=False, ssh_username=None, ssh_password=None, ssh_key_filename=None, send_umb_msg=False, umb_cert=None, umb_client_key=None, umb_ca_cert=None, umb_topic="VirtualTopic.eng.pub.quay_tag_image", dest_refs=["quay.io/repo/target-image:1"], umb_urls=None, )
def test_arg_parser_required_args(mock_tag_images): required_args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", ] tag_images.tag_images_main(required_args) assert mock_tag_images.call_args == mock.call( source_ref="quay.io/repo/souce-image:1", all_arch=False, quay_user=None, quay_password=None, source_quay_user=None, source_quay_password=None, remote_exec=False, ssh_remote_host=None, ssh_remote_host_port=None, ssh_reject_unknown_host=False, ssh_username=None, ssh_password=None, ssh_key_filename=None, container_exec=False, container_image=None, docker_url="unix://var/run/docker.sock", docker_timeout=None, docker_verify_tls=False, docker_cert_path=None, registry_username=None, registry_password=None, dest_refs=["quay.io/repo/target-image:1"], )
def test_arg_parser_required_missing_dest(mock_tag_images): missing_dest = ["dummy", "--source-ref", "quay.io/repo/souce-image:1"] with pytest.raises(SystemExit) as system_error: tag_images.tag_images_main(missing_dest) assert system_error.type == SystemExit assert system_error.value.code == 2 mock_tag_images.assert_not_called()
def test_arg_parser_full_args(mock_tag_images): full_args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--quay-user", "robot_user", "--quay-password", "robot_token", "--remote-exec", "--ssh-remote-host", "127.0.0.1", "--ssh-remote-host-port", "5000", "--ssh-reject-unknown-host", "--ssh-username", "dummy", "--ssh-password", "123456", "--ssh-key-filename", "/path/to/file.key", "--send-umb-msg", "--umb-url", "amqps://url:5671", "--umb-cert", "/path/to/file.crt", "--umb-client-key", "/path/to/umb.key", "--umb-ca-cert", "/path/to/ca_cert.crt", "--umb-topic", "VirtualTopic.eng.pub.tagimage", ] tag_images.tag_images_main(full_args) assert mock_tag_images.call_args == mock.call( source_ref="quay.io/repo/souce-image:1", all_arch=False, quay_user="******", quay_password="******", remote_exec=True, ssh_remote_host="127.0.0.1", ssh_remote_host_port=5000, ssh_reject_unknown_host=True, ssh_username="******", ssh_password="******", ssh_key_filename="/path/to/file.key", send_umb_msg=True, umb_cert="/path/to/file.crt", umb_client_key="/path/to/umb.key", umb_ca_cert="/path/to/ca_cert.crt", umb_topic="VirtualTopic.eng.pub.tagimage", dest_refs=["quay.io/repo/target-image:1"], umb_urls=["amqps://url:5671"], )
def test_arg_parser_missing_container_image(): missing_umb_url = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--container-exec", ] with pytest.raises(ValueError, match="Container image is missing when.*"): tag_images.tag_images_main(missing_umb_url)
def test_arg_parser_missing_hostname(): missing_hostname = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--remote-exec", ] with pytest.raises(ValueError, match="Remote host is missing.*"): tag_images.tag_images_main(missing_hostname)
def test_arg_parser_missing_umb_cert(): missing_umb_url = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--send-umb-msg", "--umb-url", "amqps://url1:5671", ] with pytest.raises(ValueError, match="A path to a client certificate.*"): tag_images.tag_images_main(missing_umb_url)
def test_arg_parser_missing_umb_url(): missing_umb_url = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--send-umb-msg", "--umb-cert", "/path/to/file.crt", ] with pytest.raises(ValueError, match="UMB URL must be specified.*"): tag_images.tag_images_main(missing_umb_url)
def test_run_tag_entrypoint_send_umb(mock_amq_producer, mock_local_executor): args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--send-umb-msg", "--umb-url", "amqps://url:5671", "--umb-cert", "/path/to/file.crt", "--umb-client-key", "/path/to/umb.key", "--umb-ca-cert", "/path/to/ca_cert.crt", "--umb-topic", "VirtualTopic.eng.pub.tagimage", ] module_mock.AMQProducer = mock_amq_producer mock_skopeo_login = mock.MagicMock() mock_local_executor.return_value.skopeo_login = mock_skopeo_login mock_tag_images = mock.MagicMock() mock_local_executor.return_value.tag_images = mock_tag_images mock_send_msg = mock.MagicMock() mock_amq_producer.return_value.send_msg = mock_send_msg tag_images.tag_images_main(args) mock_local_executor.assert_called_once_with() mock_skopeo_login.assert_called_once_with(None, None) mock_tag_images.assert_called_once_with("quay.io/repo/souce-image:1", ["quay.io/repo/target-image:1"], False) mock_amq_producer.assert_called_once_with( urls=["amqps://url:5671"], certificate="/path/to/file.crt", private_key="/path/to/umb.key", topic="VirtualTopic.eng.pub.tagimage", trusted_certificates="/path/to/ca_cert.crt", ) expected = { "source_ref": "quay.io/repo/souce-image:1", "dest_refs": ["quay.io/repo/target-image:1"], } mock_send_msg.assert_called_once_with(expected, json.dumps(expected).encode("utf-8"))
def test_arg_parser_env_variables(mock_tag_images): full_args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--source-quay-user", "robot_user_for_source", "--quay-user", "robot_user", "--remote-exec", "--ssh-remote-host", "127.0.0.1", "--ssh-reject-unknown-host", "--ssh-username", "dummy", "--ssh-key-filename", "/path/to/file.key", "--registry-username", "registry_user", ] tag_images.tag_images_main(full_args) assert mock_tag_images.call_args == mock.call( source_ref="quay.io/repo/souce-image:1", all_arch=False, quay_user="******", quay_password="******", source_quay_user="******", source_quay_password="******", remote_exec=True, ssh_remote_host="127.0.0.1", ssh_remote_host_port=None, ssh_reject_unknown_host=True, ssh_username="******", ssh_password="******", ssh_key_filename="/path/to/file.key", container_exec=False, container_image=None, docker_url="unix://var/run/docker.sock", docker_timeout=None, docker_verify_tls=False, docker_cert_path=None, registry_username="******", registry_password="******", dest_refs=["quay.io/repo/target-image:1"], )
def test_run_tag_entrypoint_container_success(mock_container_executor): args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--container-exec", "--container-image", "quay.io/some/image:1", "--docker-url", "some-url.com", "--docker-timeout", "120", "--docker-verify-tls", "--docker-cert-path", "/some/path", "--registry-username", "registry-user", "--registry-password", "registry-passwd", ] mock_skopeo_login = mock.MagicMock() mock_container_executor.return_value.skopeo_login = mock_skopeo_login mock_container_executor.return_value.__enter__.return_value = ( mock_container_executor.return_value) mock_tag_images = mock.MagicMock() mock_container_executor.return_value.tag_images = mock_tag_images tag_images.tag_images_main(args) mock_container_executor.assert_called_once_with( "quay.io/some/image:1", "some-url.com", 120, True, "/some/path", "registry-user", "registry-passwd", ) mock_skopeo_login.assert_called_once_with("quay.io", None, None) mock_tag_images.assert_called_once_with("quay.io/repo/souce-image:1", ["quay.io/repo/target-image:1"], False)
def test_run_tag_entrypoint_local_success(mock_local_executor): args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", ] mock_skopeo_login = mock.MagicMock() mock_local_executor.return_value.skopeo_login = mock_skopeo_login mock_tag_images = mock.MagicMock() mock_local_executor.return_value.tag_images = mock_tag_images tag_images.tag_images_main(args) mock_local_executor.assert_called_once_with() mock_skopeo_login.assert_called_once_with(None, None) mock_tag_images.assert_called_once_with("quay.io/repo/souce-image:1", ["quay.io/repo/target-image:1"], False)
def test_arg_parser_multiple_args(mock_tag_images): multi_args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--dest-ref", "quay.io/repo/target-image:2", "--send-umb-msg", "--umb-url", "amqps://url1:5671", "--umb-url", "amqps://url2:5671", "--umb-cert", "/path/to/file.crt", ] tag_images.tag_images_main(multi_args) assert mock_tag_images.call_args == mock.call( source_ref="quay.io/repo/souce-image:1", all_arch=False, quay_user=None, quay_password=None, remote_exec=False, ssh_remote_host=None, ssh_remote_host_port=None, ssh_reject_unknown_host=False, ssh_username=None, ssh_password=None, ssh_key_filename=None, send_umb_msg=True, umb_cert="/path/to/file.crt", umb_client_key=None, umb_ca_cert=None, umb_topic="VirtualTopic.eng.pub.quay_tag_image", dest_refs=[ "quay.io/repo/target-image:1", "quay.io/repo/target-image:2" ], umb_urls=["amqps://url1:5671", "amqps://url2:5671"], )
def test_arg_parser_full_args(mock_tag_images): full_args = [ "dummy", "--source-ref", "quay.io/repo/souce-image:1", "--dest-ref", "quay.io/repo/target-image:1", "--source-quay-user", "robot_user_for_source", "--source-quay-password", "robot_token_for_source", "--quay-user", "robot_user", "--quay-password", "robot_token", "--remote-exec", "--ssh-remote-host", "127.0.0.1", "--ssh-remote-host-port", "5000", "--ssh-reject-unknown-host", "--ssh-username", "dummy", "--ssh-password", "123456", "--ssh-key-filename", "/path/to/file.key", "--container-exec", "--container-image", "quay.io/namespace/image:1", "--docker-url", "https://some-url.com", "--docker-timeout", "120", "--docker-verify-tls", "--docker-cert-path", "/some/path", "--registry-username", "registry_user", "--registry-password", "registry_passwd", ] tag_images.tag_images_main(full_args) assert mock_tag_images.call_args == mock.call( source_ref="quay.io/repo/souce-image:1", all_arch=False, quay_user="******", quay_password="******", source_quay_user="******", source_quay_password="******", remote_exec=True, ssh_remote_host="127.0.0.1", ssh_remote_host_port=5000, ssh_reject_unknown_host=True, ssh_username="******", ssh_password="******", ssh_key_filename="/path/to/file.key", container_exec=True, container_image="quay.io/namespace/image:1", docker_url="https://some-url.com", docker_timeout="120", docker_verify_tls=True, docker_cert_path="/some/path", registry_username="******", registry_password="******", dest_refs=["quay.io/repo/target-image:1"], )