Ejemplo n.º 1
0
def test_attrs_fail(init_kwargs_patch, error_type):
    """Verifying that validators are applied because we overwrite attrs init."""
    init_kwargs = GOOD_INIT_KWARGS.copy()
    init_kwargs.update(init_kwargs_patch)

    with pytest.raises(error_type):
        metadata.MetadataWriter(**init_kwargs)()
Ejemplo n.º 2
0
def test_write_metadata_default_output_modes(filename, force_overwrite,
                                             expected_mode):
    test = metadata.MetadataWriter(suppress_output=False)(filename)
    if force_overwrite:
        test.force_overwrite()

    assert test._output_mode == expected_mode
Ejemplo n.º 3
0
def test_metadata_output_file_parent_dir_does_not_exist(tmpdir):
    metadata_file = os.path.join(str(tmpdir), "missing_dir", "metadata")

    with pytest.raises(BadUserArgumentError) as excinfo:
        metadata.MetadataWriter(suppress_output=False)(metadata_file)

    excinfo.match(
        r"Parent directory for requested metdata file does not exist.")
Ejemplo n.º 4
0
def test_write_or_suppress_metadata_file(tmpdir, suppress):
    my_metadata = {"some": "data", "for": "this metadata"}
    output_file = tmpdir.join("metadata")
    writer_factory = metadata.MetadataWriter(suppress_output=suppress)
    writer = writer_factory(str(output_file))

    with writer:
        writer.write_metadata(**my_metadata)

    if suppress:
        assert not output_file.isfile()
    else:
        assert json.loads(output_file.read()) == my_metadata
Ejemplo n.º 5
0
def test_write_or_suppress_metadata_stdout(capsys, suppress):
    my_metadata = {"some": "data", "for": "this metadata"}
    writer_factory = metadata.MetadataWriter(suppress_output=suppress)
    writer = writer_factory("-")

    with writer:
        writer.write_metadata(**my_metadata)

    out, _err = capsys.readouterr()
    if suppress:
        assert out == ""
    else:
        assert json.loads(out) == my_metadata
Ejemplo n.º 6
0
def test_write_or_suppress_metadata_file_open_close(tmpdir):
    my_metadata = {"some": "data", "for": "this metadata"}
    output_file = tmpdir.join("metadata")
    writer_factory = metadata.MetadataWriter(suppress_output=False)
    writer = writer_factory(str(output_file))

    writer.open()
    try:
        writer.write_metadata(**my_metadata)
    finally:
        writer.close()

    assert json.loads(output_file.read()) == my_metadata
Ejemplo n.º 7
0
def test_append_metadata_file(tmpdir):
    initial_data = "some data"
    my_metadata = {"some": "data", "for": "this metadata"}
    output_file = tmpdir.join("metadata")
    output_file.write_binary((initial_data + os.linesep).encode("utf-8"))

    with metadata.MetadataWriter(suppress_output=False)(
            str(output_file)) as writer:
        writer.write_metadata(**my_metadata)

    lines = output_file.readlines()
    assert len(lines) == 2
    assert lines[0].strip() == initial_data
    assert json.loads(lines[1].strip()) == my_metadata
Ejemplo n.º 8
0
def test_overwrite_metdata_file(tmpdir):
    initial_data = "some data"
    my_metadata = {"some": "data", "for": "this metadata"}
    output_file = tmpdir.join("metadata")
    output_file.write(initial_data + os.linesep)

    overwrite_writer = metadata.MetadataWriter(suppress_output=False)(
        str(output_file))
    overwrite_writer.force_overwrite()

    with overwrite_writer as writer:
        writer.write_metadata(**my_metadata)

    lines = output_file.readlines()
    assert len(lines) == 1
    assert json.loads(lines[0].strip()) == my_metadata
Ejemplo n.º 9
0
def test_overwrite_metdata_file_multiuse(tmpdir):
    initial_data = "some data"
    my_metadata = {"some": "data", "for": "this metadata"}
    output_file = tmpdir.join("metadata")
    output_file.write(initial_data + os.linesep)

    long_lived_writer = metadata.MetadataWriter(suppress_output=False)(
        str(output_file))
    long_lived_writer.force_overwrite()

    assert long_lived_writer._output_mode == "wb"

    with long_lived_writer as writer:
        writer.write_metadata(**my_metadata)

    assert long_lived_writer._output_mode == "ab"

    with long_lived_writer as writer:
        writer.write_metadata(**my_metadata)

    lines = output_file.readlines()
    assert len(lines) == 2
    assert json.loads(lines[0].strip()) == my_metadata
    assert lines[0] == lines[1]
Ejemplo n.º 10
0
def build_expected_good_args(from_file=False):  # pylint: disable=too-many-locals
    encrypt = "-e"
    decrypt = "-d"
    suppress_metadata = " -S"
    short_input = " -i -"
    long_input = " --input -"
    short_output = " -o -"
    long_output = " --output -"
    valid_io = short_input + short_output
    mkp_1 = " -w provider=ex_provider_1 key=ex_mk_id_1"
    mkp_1_parsed = {"provider": "ex_provider_1", "key": ["ex_mk_id_1"]}
    mkp_2 = " -w provider=ex_provider_2 key=ex_mk_id_2"
    mkp_2_parsed = {"provider": "ex_provider_2", "key": ["ex_mk_id_2"]}
    default_encrypt = encrypt + suppress_metadata + valid_io + mkp_1
    good_args = []

    # encrypt/decrypt
    for encrypt_flag in (encrypt, "--encrypt"):
        good_args.append((encrypt_flag + suppress_metadata + valid_io + mkp_1, "action", "encrypt"))
    for decrypt_flag in (decrypt, "--decrypt"):
        good_args.append((decrypt_flag + suppress_metadata + valid_io + mkp_1, "action", "decrypt"))

    # wrapping key config
    good_args.append((default_encrypt, "wrapping_keys", [mkp_1_parsed]))
    good_args.append((default_encrypt + mkp_2, "wrapping_keys", [mkp_1_parsed, mkp_2_parsed]))

    # input/output
    for input_flag in (short_input, long_input):
        good_args.append((encrypt + suppress_metadata + input_flag + short_output + mkp_1, "input", "-"))
    for output_flag in (short_output, long_output):
        good_args.append((encrypt + suppress_metadata + output_flag + short_input + mkp_1, "output", "-"))

    # encryption context
    good_args.append((default_encrypt, "encryption_context", {}))
    good_args.append(
        (default_encrypt + " -c some=data not=secret", "encryption_context", {"some": "data", "not": "secret"})
    )
    if from_file:
        good_args.append(
            (
                default_encrypt + ' -c "key with a space=value with a space"',
                "encryption_context",
                {"key with a space": "value with a space"},
            )
        )
    else:
        good_args.append(
            (
                default_encrypt + ' -c "key with a space=value with a space"',
                "encryption_context",
                {"key with a space": "value with a space"},
            )
        )

    # algorithm
    algorithm_name = "AES_128_GCM_IV12_TAG16"
    good_args.append((default_encrypt, "algorithm", None))
    good_args.append((default_encrypt + " --algorithm " + algorithm_name, "algorithm", algorithm_name))

    # frame length
    good_args.append((default_encrypt, "frame_length", None))
    good_args.append((default_encrypt + " --frame-length 99", "frame_length", 99))

    # max length
    good_args.append((default_encrypt, "max_length", None))
    good_args.append((default_encrypt + " --max-length 99", "max_length", 99))

    # interactive
    good_args.append((default_encrypt, "interactive", False))
    good_args.append((default_encrypt + " --interactive", "interactive", True))

    # no-overwrite
    good_args.append((default_encrypt, "no_overwrite", False))
    good_args.append((default_encrypt + " --no-overwrite", "no_overwrite", True))

    # suffix
    good_args.append((default_encrypt + " --suffix .MY_SPECIAL_SUFFIX", "suffix", ".MY_SPECIAL_SUFFIX"))
    good_args.append((default_encrypt + " --suffix", "suffix", ""))

    # recursive
    good_args.append((default_encrypt, "recursive", False))
    for recursive_flag in (" -r", " -R", " --recursive"):
        good_args.append((default_encrypt + recursive_flag, "recursive", True))

    # logging verbosity
    good_args.append((default_encrypt, "verbosity", None))
    for count in (1, 2, 3, 4):
        good_args.append((default_encrypt + " -" + "v" * count, "verbosity", count))

    # metadata output
    good_args.append((default_encrypt, "metadata_output", metadata.MetadataWriter(suppress_output=True)()))
    good_args.append(
        (
            encrypt + valid_io + mkp_1 + " --metadata-output -",
            "metadata_output",
            metadata.MetadataWriter(suppress_output=False)(output_file="-"),
        )
    )

    return good_args
Ejemplo n.º 11
0

@pytest.fixture
def patch_json_ready_header(mocker):
    mocker.patch.object(io_handling, "json_ready_header")
    return io_handling.json_ready_header


@pytest.fixture
def patch_json_ready_header_auth(mocker):
    mocker.patch.object(io_handling, "json_ready_header_auth")
    return io_handling.json_ready_header_auth


GOOD_IOHANDLER_KWARGS = dict(
    metadata_writer=metadata.MetadataWriter(True)(),
    interactive=False,
    no_overwrite=False,
    decode_input=False,
    encode_output=False,
    required_encryption_context={},
    required_encryption_context_keys=[],
)


@pytest.fixture
def standard_handler():
    return io_handling.IOHandler(**GOOD_IOHANDLER_KWARGS)


def test_stdout():
Ejemplo n.º 12
0
def test_custom_fail(init_kwargs, call_kwargs, error_type, error_message):
    with pytest.raises(error_type) as excinfo:
        metadata.MetadataWriter(**init_kwargs)(**call_kwargs)

    excinfo.match(error_message)
Ejemplo n.º 13
0
def test_attrs_good(init_kwargs, call_kwargs):
    metadata.MetadataWriter(**init_kwargs)(**call_kwargs)