コード例 #1
0
def test_mock_value_original_type_enum():
    mollusc_field = make_field(
        name="class",
        enum=make_enum(
            name="Class",
            values=[
                ("UNKNOWN", 0),
                ("GASTROPOD", 1),
                ("BIVALVE", 2),
                ("CEPHALOPOD", 3),
            ],
        ),
    )

    assert mollusc_field.mock_value_original_type == 1

    empty_field = make_field(
        name="empty",
        enum=make_enum(
            name="Empty",
            values=[("UNKNOWN", 0)],
        ),
    )

    assert empty_field.mock_value_original_type == 0
コード例 #2
0
def test_enum_options_dict():
    cephalopod = make_enum("Cephalopod",
                           package="animalia.v1",
                           module="mollusca",
                           options={"allow_alias": True})
    assert isinstance(cephalopod.enum_pb.options, descriptor_pb2.EnumOptions)
    assert cephalopod.options_dict == {"allow_alias": True}

    bivalve = make_enum("Bivalve", package="animalia.v1", module="mollusca")
    assert isinstance(bivalve.enum_pb.options, descriptor_pb2.EnumOptions)
    assert bivalve.options_dict == {}
コード例 #3
0
def test_field_types_recursive():
    enumeration = make_enum('Enumeration')
    innest_msg = make_message(
        'InnestMessage',
        fields=(
            make_field('enumeration', enum=enumeration),
        )
    )
    inner_msg = make_message(
        'InnerMessage',
        fields=(
            make_field('innest_message', message=innest_msg),
        )
    )
    topmost_msg = make_message(
        'TopmostMessage',
        fields=(
            make_field('inner_message', message=inner_msg),
            make_field('uninteresting')
        )
    )

    actual = {t.name for t in topmost_msg.recursive_field_types}
    expected = {t.name for t in (enumeration, innest_msg, inner_msg)}
    assert actual == expected
コード例 #4
0
def test_field_types():
    # Create the inner message.
    inner_msg = make_message(
        'InnerMessage',
        fields=(
            make_field(
                'hidden_message',
                message=make_message('HiddenMessage'),
            ),
        )
    )
    inner_enum = make_enum('InnerEnum')

    # Create the outer message, which contains an Inner as a field.
    fields = (
        make_field('inner_message', message=inner_msg),
        make_field('inner_enum', enum=inner_enum),
        make_field('not_interesting'),
    )
    outer = make_message('Outer', fields=fields)

    # Assert that composite field types are recognized but primitives are not.
    assert len(outer.field_types) == 2
    assert inner_msg in outer.field_types
    assert inner_enum in outer.field_types
コード例 #5
0
def test_enum_value_properties():
    enum_type = make_enum(name='Irrelevant', values=(
        ('RED', 1), ('GREEN', 2), ('BLUE', 3),
    ))
    assert len(enum_type.values) == 3
    for ev, expected in zip(enum_type.values, ('RED', 'GREEN', 'BLUE')):
        assert ev.name == expected
コード例 #6
0
def test_resource_messages():
    # Regular, top level resource
    squid_resource = make_message("Squid", options=make_resource_opts("squid"))
    squid_request = make_message(
        "CreateSquid",
        fields=(make_field('squid', message=squid_resource), ),
    )

    # Nested resource
    squamosa_message = make_message(
        "Squamosa",
        options=make_resource_opts("clam", "squamosa"),
    )
    clam_resource = make_message(
        "Clam",
        options=make_resource_opts("clam"),
        fields=(make_field('squamosa', message=squamosa_message), ),
    )
    clam_request = make_message(
        'CreateClam',
        fields=(
            make_field('clam', message=clam_resource),
            # Red herring, not resources :)
            make_field('zone', 2, enum=make_enum('Zone')),
            make_field('pearls', 3, True, message=make_message('Pearl')),
        ),
    )

    # Some special APIs have request messages that _are_ resources.
    whelk_resource = make_message("Whelk", options=make_resource_opts("whelk"))

    # Not a resource
    octopus_request = make_message(
        "CreateOctopus",
        fields=(make_field('Octopus', message=make_message('Octopus')), ),
    )

    service = make_service('Molluscs',
                           methods=(make_method(
                               f"{message.name}",
                               input_message=message,
                           ) for message in (
                               squid_request,
                               clam_request,
                               whelk_resource,
                               octopus_request,
                           )))

    expected = {
        squid_resource,
        clam_resource,
        whelk_resource,
        squamosa_message,
    }
    actual = service.resource_messages
    assert expected == actual
コード例 #7
0
def test_flattened_ref_types():
    method = make_method(
        'IdentifyMollusc',
        input_message=make_message(
            'IdentifyMolluscRequest',
            fields=(
                make_field(
                    'cephalopod',
                    message=make_message(
                        'Cephalopod',
                        fields=(
                            make_field('mass_kg', type='TYPE_INT32'),
                            make_field(
                                'squid',
                                number=2,
                                message=make_message('Squid'),
                            ),
                            make_field(
                                'clam',
                                number=3,
                                message=make_message('Clam'),
                            ),
                        ),
                    ),
                ),
                make_field(
                    'stratum',
                    enum=make_enum(
                        'Stratum',
                    )
                ),
            ),
        ),
        signatures=('cephalopod.squid,stratum',),
        output_message=make_message('Mollusc'),
    )

    expected_flat_ref_type_names = {
        'IdentifyMolluscRequest',
        'Squid',
        'Stratum',
        'Mollusc',
    }
    actual_flat_ref_type_names = {t.name for t in method.flat_ref_types}
    assert expected_flat_ref_type_names == actual_flat_ref_type_names
コード例 #8
0
def test_enum_ident():
    message = make_enum('Baz', package='foo.v1', module='bar')
    assert str(message.ident) == 'bar.Baz'
    assert message.ident.sphinx == 'foo.v1.bar.Baz'
コード例 #9
0
def test_enum_properties():
    enum_type = make_enum(name='Color')
    assert enum_type.name == 'Color'
コード例 #10
0
def test_resource_messages_dict():
    # Regular, top level resource
    squid_resource = make_message("Squid", options=make_resource_opts("squid"))
    squid_request = make_message(
        "CreateSquid",
        fields=(make_field('squid', message=squid_resource), ),
    )

    # Nested resource
    squamosa_message = make_message(
        "Squamosa",
        options=make_resource_opts("clam", "squamosa"),
    )
    clam_resource = make_message(
        "Clam",
        options=make_resource_opts("clam"),
        fields=(make_field('squamosa', message=squamosa_message), ),
    )
    clam_request = make_message(
        'CreateClam',
        fields=(
            make_field('clam', message=clam_resource),
            # Red herring, not resources :)
            make_field('zone', 2, enum=make_enum('Zone')),
            make_field('pearls', 3, True, message=make_message('Pearl')),
        ),
    )

    # Some special APIs have request messages that _are_ resources.
    whelk_resource = make_message("Whelk", options=make_resource_opts("whelk"))

    # Not a resource
    octopus_request = make_message(
        "CreateOctopus",
        fields=(make_field('Octopus', message=make_message('Octopus')), ),
    )

    service = make_service('Molluscs',
                           methods=(make_method(
                               f"{message.name}",
                               input_message=message,
                           ) for message in (
                               squid_request,
                               clam_request,
                               whelk_resource,
                               octopus_request,
                           )))

    expected = {
        # Service specific
        "squid/{squid}":
        squid_resource,
        "clam/{clam}":
        clam_resource,
        "whelk/{whelk}":
        whelk_resource,
        "clam/{clam}/squamosa/{squamosa}":
        squamosa_message,
        # Common resources
        "cloudresourcemanager.googleapis.com/Project":
        service.common_resources["cloudresourcemanager.googleapis.com/Project"]
        .message_type,
        "cloudresourcemanager.googleapis.com/Organization":
        service.common_resources[
            "cloudresourcemanager.googleapis.com/Organization"].message_type,
        "cloudresourcemanager.googleapis.com/Folder":
        service.common_resources["cloudresourcemanager.googleapis.com/Folder"].
        message_type,
        "cloudbilling.googleapis.com/BillingAccount":
        service.common_resources["cloudbilling.googleapis.com/BillingAccount"].
        message_type,
        "locations.googleapis.com/Location":
        service.common_resources["locations.googleapis.com/Location"].
        message_type
    }
    actual = service.resource_messages_dict
    assert expected == actual
コード例 #11
0
def test_resource_messages():
    # Resources are labeled via an options extension
    def make_resource_opts(*args):
        opts = descriptor_pb2.MessageOptions()
        opts.Extensions[resource_pb2.resource].pattern.append(
            "/".join("{{{arg}}}/{arg}" for arg in args)
        )
        return opts

    # Regular, top level resource
    squid_resource = make_message("Squid", options=make_resource_opts("squid"))
    squid_request = make_message(
        "CreateSquid",
        fields=(
            make_field('squid', message=squid_resource),
        ),
    )

    # Nested resource
    squamosa_message = make_message(
        "Squamosa",
        options=make_resource_opts("clam", "squamosa"),
    )
    clam_resource = make_message(
        "Clam",
        options=make_resource_opts("clam"),
        fields=(
            make_field('squamosa', message=squamosa_message),
        ),
    )
    clam_request = make_message(
        'CreateClam',
        fields=(
            make_field('clam', message=clam_resource),
            # Red herring, not resources :)
            make_field('zone', 2, enum=make_enum('Zone')),
            make_field('pearls', 3, True, message=make_message('Pearl')),
        ),
    )

    # Some special APIs have request messages that _are_ resources.
    whelk_resource = make_message("Whelk", options=make_resource_opts("whelk"))

    # Not a resource
    octopus_request = make_message(
        "CreateOctopus",
        fields=(
            make_field('Octopus', message=make_message('Octopus')),
        ),
    )

    service = make_service(
        'Molluscs',
        methods=(
            make_method(
                f"{message.name}",
                input_message=message,
            )
            for message in (
                squid_request,
                clam_request,
                whelk_resource,
                octopus_request,
            )
        )
    )

    expected = {
        squid_resource,
        clam_resource,
        whelk_resource,
        squamosa_message,
    }
    actual = service.resource_messages
    assert expected == actual