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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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,
    )
Ejemplo n.º 5
0
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"],
    )
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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"],
    )
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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"))
Ejemplo n.º 13
0
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)
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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"],
    )
Ejemplo n.º 17
0
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"],
    )