class StructGrrMessage(rdf_structs.RDFProtoStruct): """A serialization agnostic GrrMessage.""" type_description = type_info.TypeDescriptorSet( rdf_structs.ProtoString( name="session_id", field_number=1, description="Every Flow has a unique session id."), rdf_structs.ProtoUnsignedInteger( name="request_id", field_number=2, description="This message is in response to this request number"), rdf_structs.ProtoUnsignedInteger( name="response_id", field_number=3, description="Responses for each request."), rdf_structs.ProtoString( name="name", field_number=4, description=("This is the name of the client action that will be " "executed. It is set by the flow and is executed by " "the client.")), rdf_structs.ProtoBinary( name="args", field_number=5, description="This field contains an encoded rdfvalue."), rdf_structs.ProtoString( name="source", field_number=6, description=("Client name where the message came from (This is " "copied from the MessageList)")), )
class UnionTest(structs.RDFProtoStruct): union_field = "struct_flavor" type_description = type_info.TypeDescriptorSet( structs.ProtoEnum( name="struct_flavor", field_number=1, enum_name="Type", enum=dict(FIRST=1, SECOND=2, THIRD=3), default=3, description="An union enum field"), structs.ProtoFloat( name="first", field_number=2, description="A float number", default=1.1), structs.ProtoString( name="second", field_number=3, default="string", description="A string value"), structs.ProtoUnsignedInteger( name="third", field_number=4, default=5, description="An integer value"),)
class SqliteTestStruct(rdf_structs.RDFProtoStruct): """Custom struct for testing schema generation.""" type_description = type_info.TypeDescriptorSet( rdf_structs.ProtoString(name="string_field", field_number=1), rdf_structs.ProtoBinary(name="bytes_field", field_number=2), rdf_structs.ProtoUnsignedInteger(name="uint_field", field_number=3), rdf_structs.ProtoSignedInteger(name="int_field", field_number=4), rdf_structs.ProtoFloat(name="float_field", field_number=5), rdf_structs.ProtoDouble(name="double_field", field_number=6), rdf_structs.ProtoEnum(name="enum_field", field_number=7, enum_name="EnumField", enum={ "FIRST": 1, "SECOND": 2 }), rdf_structs.ProtoBoolean(name="bool_field", field_number=8), rdf_structs.ProtoRDFValue(name="urn_field", field_number=9, rdf_type="RDFURN"), rdf_structs.ProtoRDFValue(name="time_field", field_number=10, rdf_type="RDFDatetime"), rdf_structs.ProtoRDFValue(name="time_field_seconds", field_number=11, rdf_type="RDFDatetimeSeconds"), rdf_structs.ProtoRDFValue(name="duration_field", field_number=12, rdf_type="Duration"), rdf_structs.ProtoEmbedded(name="embedded_field", field_number=13, nested=TestEmbeddedStruct))
def testStructDefinition(self): """Ensure that errors in struct definitions are raised.""" # A descriptor without a field number should raise. self.assertRaises(type_info.TypeValueError, structs.ProtoEmbedded, name="name") # Adding a duplicate field number should raise. self.assertRaises( type_info.TypeValueError, TestStruct.AddDescriptor, structs.ProtoUnsignedInteger(name="int", field_number=2)) # Adding a descriptor which is not a Proto* descriptor is not allowed for # Struct fields: self.assertRaises(type_info.TypeValueError, TestStruct.AddDescriptor, type_info.String(name="int"))
class TestStruct(structs.RDFProtoStruct): """A test struct object.""" type_description = type_info.TypeDescriptorSet( structs.ProtoString( name="foobar", field_number=1, default="string", description="A string value", labels=[structs.SemanticDescriptor.Labels.HIDDEN]), structs.ProtoUnsignedInteger( name="int", field_number=2, default=5, description="An integer value"), structs.ProtoList( structs.ProtoString( name="repeated", field_number=3, description="A repeated string value")), # We can serialize an arbitrary RDFValue. This will be serialized into a # binary string and parsed on demand. structs.ProtoRDFValue( name="urn", field_number=6, default=rdfvalue.RDFURN("www.google.com"), rdf_type="RDFURN", description="An arbitrary RDFValue field."), structs.ProtoEnum( name="type", field_number=7, enum_name="Type", enum=dict(FIRST=1, SECOND=2, THIRD=3), default=3, description="An enum field"), structs.ProtoFloat( name="float", field_number=8, description="A float number", default=1.1),)
class PartialTest1(structs.RDFProtoStruct): """This is a protobuf with fewer fields than TestStruct.""" type_description = type_info.TypeDescriptorSet( structs.ProtoUnsignedInteger(name="int", field_number=2), )