Esempio n. 1
0
    def testSerialization(self, sample=None):
        """Make sure the RDFValue instance can be serialized."""
        if sample is None:
            sample = self.GenerateSample()

        # Serializing to a string must produce a string.
        serialized = serialization.ToBytes(sample)
        self.assertIsInstance(serialized, bytes)

        # Ensure we can parse it again.

        rdfvalue_object = serialization.FromBytes(self.rdfvalue_class,
                                                  serialized)
        self.CheckRDFValue(rdfvalue_object, sample)

        # Serializing to data store must produce something the data store can
        # handle.
        serialized = serialization.ToWireFormat(sample)
        protobuf_type = serialization.GetProtobufType(type(sample))

        if protobuf_type == "bytes":
            self.assertIsInstance(serialized, bytes)
        elif protobuf_type == "string":
            self.assertIsInstance(serialized, Text)
        elif protobuf_type in ["unsigned_integer", "integer"]:
            self.assertIsInstance(serialized, int)
        else:
            self.fail("%s has no valid protobuf_type" % self.rdfvalue_class)

        # Ensure we can parse it again.
        rdfvalue_object = serialization.FromWireFormat(self.rdfvalue_class,
                                                       serialized)
        self.CheckRDFValue(rdfvalue_object, sample)
Esempio n. 2
0
  def GetValue(self, ignore_error=True):
    """Extracts and returns a single value from a DataBlob."""
    if self.HasField("none"):
      return None

    field_names = [
        "integer", "string", "data", "boolean", "list", "dict", "rdf_value",
        "float", "set"
    ]

    values = [getattr(self, x) for x in field_names if self.HasField(x)]

    if len(values) != 1:
      return None

    if self.HasField("boolean"):
      return bool(values[0])

    # Unpack RDFValues.
    if self.HasField("rdf_value"):
      try:
        rdf_class = rdfvalue.RDFValue.classes[self.rdf_value.name]
        return serialization.FromBytes(rdf_class, self.rdf_value.data)
      except (ValueError, KeyError) as e:
        if ignore_error:
          logging.exception("Error during GetValue() of %s", self)
          return e

        raise

    elif self.HasField("list"):
      return [x.GetValue() for x in self.list.content]

    elif self.HasField("set"):
      return set([x.GetValue() for x in self.set.content])

    else:
      return values[0]
Esempio n. 3
0
 def testBytes(self):
     self.assertIs(
         serialization.FromBytes(bool, serialization.ToBytes(True)), True)
     self.assertIs(
         serialization.FromBytes(bool, serialization.ToBytes(False)), False)