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
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 == {}
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
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
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
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
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
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'
def test_enum_properties(): enum_type = make_enum(name='Color') assert enum_type.name == 'Color'
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
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