def test_wrong_name(self):
    trait = self.get_test_trait()
    trait.state_list.append(
        schema.Field('a_field', 1000, '', schema.Field.DataType.INT32, None))
    trait.extends = schema.Trait('super_trait', 1000, '')
    trait.extends.state_list.append(
        schema.Field('b_field', 1000, '', schema.Field.DataType.INT32, None))

    self.assert_invalid(extends_validator.ExtendsValidator,
                        'missing field b_field')
  def test_wrong_type(self):
    trait = self.get_test_trait()
    trait.state_list.append(
        schema.Field('a_field', 1000, '', schema.Field.DataType.INT32, None))
    trait.extends = schema.Trait('super_trait', 1000, '')
    trait.extends.state_list.append(
        schema.Field('a_field', 1000, '', schema.Field.DataType.FLOAT, None))

    self.assert_invalid(extends_validator.ExtendsValidator,
                        'types for field a_field do not match')
Example #3
0
    def test_bad_map(self):

        map_key = schema.Field('key', 1, '', schema.Field.DataType.UINT64,
                               None)

        field = schema.Field('invalid_map', 1000, '',
                             schema.Field.DataType.STRUCT, None)
        field.is_map = True
        field.map_key = map_key
        self.get_test_trait().state_list.append(field)

        self.assert_invalid(map_validator.MapValidator,
                            '64 bit keys are not allowed in map keys.')
Example #4
0
    def test_wrong_struct_type(self):
        trait = self.get_test_trait()
        sub_field = schema.Field('a_field', 1000, '',
                                 schema.Field.DataType.STRUCT, None)
        sub_field.metadata = self.get_test_struct()
        trait.state_list.append(sub_field)

        super_field = schema.Field('a_field', 1000, '',
                                   schema.Field.DataType.STRUCT, None)
        super_field.metadata = schema.Struct('SomeStruct', 1, '')

        trait.extends = schema.Trait('super_trait', 1000, '')
        trait.extends.state_list.append(super_field)

        self.assert_invalid(extends_validator.ExtendsValidator,
                            'types for field a_field do not match')
 def test_bad_underscore(self):
     self.get_test_trait().state_list.append(
         schema.Field('badUnderScore', 1000, '',
                      schema.Field.DataType.STRING, None))
     self.assert_invalid(
         name_inflection_validator.NameInflectionValidator,
         'incorrect name inflection; expected.*bad_under_score')
Example #6
0
    def test_field_added_to_trait_without_min_version(self):

        added_field = schema.Field('new_field', 1000, '',
                                   schema.Field.DataType.INT32, None)
        self.get_test_trait().state_list.append(added_field)

        self.assert_invalid(added_object_validator.AddedObjectValidator,
                            self.NEW_OBJECT_ADDED_ERR_MSG)
    def test_nullable_enum(self):

        field = schema.Field('nullable_enum', 1000, '',
                             schema.Field.DataType.ENUM, None)
        field.metadata = self.get_test_enum()
        field.is_nullable = True
        self.get_test_trait().state_list.append(field)

        self.assert_invalid(nullable_validator.NullableValidator,
                            'Enums cannot be nullable')
    def test_nullable_array(self):

        field = schema.Field('nullable_array', 1000, '',
                             schema.Field.DataType.STRUCT, None)
        field.is_array = True
        field.metadata = self.get_test_struct()
        field.is_nullable = True
        self.get_test_trait().state_list.append(field)

        self.assert_invalid(nullable_validator.NullableValidator,
                            'Arrays cannot be nullable')
Example #9
0
    def test_field_added_to_prod_trait_without_increment_trait_version(self):

        self.get_test_trait().stability = schema.Stability.PROD
        self.get_previous_test_trait().stability = schema.Stability.PROD

        added_field = schema.Field('new_field', 1000, '',
                                   schema.Field.DataType.INT32, None)
        added_field.min_version = self.get_test_trait().version
        self.get_test_trait().state_list.append(added_field)

        self.assert_invalid(added_object_validator.AddedObjectValidator,
                            self.NEW_OBJECT_ON_PROD_ERR_MSG)
Example #10
0
    def test_field_added_to_prod_trait_correctly(self):
        self.get_test_trait().version = 2
        self.get_previous_test_trait().version = 1

        self.get_test_trait().stability = schema.Stability.PROD
        self.get_previous_test_trait().stability = schema.Stability.PROD

        added_field = schema.Field('new_field', 1000, '',
                                   schema.Field.DataType.INT32, None)
        added_field.min_version = 2

        self.assert_valid(added_object_validator.AddedObjectValidator)
    def test_bad_fixed_width(self):
        trait = self.get_test_trait()
        field = schema.Field('some_float', 1000, '')
        field.data_type = schema.Field.DataType.FLOAT
        field.precision = 0.01
        field.max_value = 20.0
        field.min_value = -10.0
        field.fixed_width = 128

        trait.state_list.append(field)

        self.assert_invalid(number_validator.NumberValidator,
                            'Fixed width must be')
    def test_bad_min_max(self):
        trait = self.get_test_trait()
        field = schema.Field('some_float', 1000, '')
        field.data_type = schema.Field.DataType.FLOAT
        field.precision = 0.01
        field.max_value = 20.0
        field.min_value = 20.0
        field.fixed_width = 32

        trait.state_list.append(field)

        self.assert_invalid(number_validator.NumberValidator,
                            r'Max < min \+ precision')
    def test_too_big(self):
        trait = self.get_test_trait()
        field = schema.Field('some_float', 1000, '')
        field.data_type = schema.Field.DataType.FLOAT
        field.precision = 0.0000000001
        field.max_value = 2**32
        field.min_value = -2**32
        field.fixed_width = 32

        trait.state_list.append(field)

        self.assert_invalid(number_validator.NumberValidator,
                            'fixed_encoding_width > 64')
Example #14
0
    def test_writable_array(self):

        field = schema.Field('writable_array', 1000, '',
                             schema.Field.DataType.STRUCT, None)
        field.is_array = True
        field.metadata = self.get_test_struct()
        field.struct_type = field.metadata
        field.writable = True
        self.get_test_trait().state_list.append(field)

        self.assert_invalid(
            read_write_validator.ReadWriteValidator,
            'Field writable_array in TestTrait is writable. '
            'Arrays of structs must not be writable')
  def test_invalid_min_version_on_state_field(self):

    trait = self.get_test_trait()
    trait.version = 2

    field = schema.Field('invalid_version', 1000, '',
                         schema.Field.DataType.STRUCT, None)
    field.min_version = 3

    trait.state_list.append(field)

    self.assert_invalid(min_version_validator.MinVersionValidator,
                        'Fields cannot have a min_version > trait '
                        'version.')
Example #16
0
    def test_trait_referencing_old_trait(self):
        trait = schema.Trait('Test2Trait', 2, '')
        trait.version = 2
        self.get_test_vendor().trait_list.append(trait)

        struct = schema.Struct('Test2Struct', 2, '')
        trait.struct_list.append(struct)

        field = schema.Field('field', 1000, '')
        field.struct_type = struct

        self.get_test_trait().state_list.append(field)

        trait.stability = schema.Stability.ALPHA
        self.get_test_trait().stability = schema.Stability.BETA

        self.assert_valid(
            stability_reference_validator.StabilityReferenceValidator)
Example #17
0
    def test_trait_referencing_current_trait(self):
        trait = schema.Trait('Test2Trait', 2, '')
        trait.version = 2
        self.get_test_vendor().trait_list.append(trait)

        struct = schema.Struct('Test2Struct', 2, '')
        trait.struct_list.append(struct)

        field = schema.Field('field', 1000, '')
        field.struct_type = struct

        self.get_test_trait().state_list.append(field)
        self.get_test_trait().version_map = schema.VersionMap()
        self.get_test_trait().version_map._parsed_map = {2: {'Test2Trait': 2}}  # pylint: disable=protected-access

        trait.stability = schema.Stability.ALPHA
        self.get_test_trait().stability = schema.Stability.BETA

        self.assert_invalid(
            stability_reference_validator.StabilityReferenceValidator,
            r'.*Traits can only reference Traits.*')
Example #18
0
    def gen_test_schema(self):
        schema_obj = schema.Schema()

        vendor = schema.Vendor('test', 0xfe00, '')
        schema_obj.vendor_list.append(vendor)

        resource = schema.Resource('TestResource', 0x0001, '')
        resource.file = schema.File('test_resource', 1, '')
        resource.version = 2
        vendor.resource_list.append(resource)

        iface = schema.Interface('TestIface', 0x0001, '')
        iface.file = schema.File('test_iface', 1, '')
        vendor.interface_list.append(iface)

        trait = schema.Trait('TestTrait', 1, '')
        trait.file = schema.File('test_trait', 1, '')
        vendor.trait_list.append(trait)

        typespace = schema.Typespace('TestTypespace', 1, '')
        typespace.file = schema.File('test_typespace', 1, '')
        vendor.typespace_list.append(typespace)

        trait.version = 2
        trait.stability = schema.Stability.ALPHA

        field = schema.Field('test_field', 1, '', schema.Field.DataType.INT32,
                             None)
        trait.state_list.append(field)

        resource_component = schema.ResourceComponent('test_component', 1, '')
        resource_component.trait = trait
        resource.component_list.append(resource_component)

        interface_component = schema.InterfaceComponent(
            'test_component', 1, '')
        interface_component.trait = trait
        iface.component_list.append(interface_component)

        group = schema.Group('test_group', 1, '')
        group.interface = iface
        resource.group_list.append(group)

        struct = schema.Struct('TestStruct', 1, '')
        trait.struct_list.append(struct)

        enum = schema.Enum('TestEnum', 1, '')
        enum.pair_list.append(schema.EnumPair('TEST_ENUM_UNSPECIFIED', 0, ''))
        enum.pair_list.append(schema.EnumPair('TEST_ENUM_ONE', 1, ''))
        enum.pair_list.append(schema.EnumPair('TEST_ENUM_TWO', 2, ''))
        trait.enum_list.append(enum)

        event = schema.Event('TestEvent', 1, '')
        event.field_list.append(field)
        trait.event_list.append(event)

        response = schema.CommandResponse('TestRequestResponse', 1, '')
        response.field_list.append(field)

        command = schema.Command('TestRequest', 1, '')
        command.parameter_list.append(field)
        trait.command_list.append(command)

        command.response = response
        response.parent = command

        return schema_obj
 def test_large_tag(self):
   self.get_test_trait().state_list.append(
       schema.Field('large_tag', 256, '', schema.Field.DataType.STRING, None))
   self.assert_invalid(one_byte_field_tag_validator.OneByteFieldTagValidator,
                       'Field tags must be in range 1-255; got 256')