Exemple #1
0
  def testDecode2(self):
    """Test decoding performance.

    This benchmarks the lazy decoding feature where a large protobuf is decoded
    but only a few fields are examined.
    """

    s = knowledge_base_pb2.User(**self.USER_ACCOUNT)

    data = s.SerializeToString()

    def ProtoDecode():
      new_s = knowledge_base_pb2.User()
      new_s.ParseFromString(data)

      self.assertEqual(new_s.username, "user")
      self.assertEqual(new_s.username.__class__, unicode)

    def RDFStructDecode():
      new_s = rdf_client.User()
      new_s.ParseFromString(data)

      self.assertEqual(new_s.username, "user")
      self.assertEqual(new_s.username.__class__, unicode)

    self.TimeIt(RDFStructDecode)
    self.TimeIt(ProtoDecode)
Exemple #2
0
    def testTimeEncoding(self):
        fast_proto = rdf_client.User(username="******")

        datetime = rdfvalue.RDFDatetime.FromHumanReadable(
            "2013-04-05 16:00:03")

        # Check that we can coerce an int to an RDFDatetime.
        # TODO(hanuszczak): Yeah, but why would we...?
        fast_proto.last_logon = datetime.AsMicrosecondsSinceEpoch()

        self.assertEqual(fast_proto.last_logon, datetime)

        # Check that this is backwards compatible with the old protobuf library.
        proto = knowledge_base_pb2.User()
        proto.ParseFromString(fast_proto.SerializeToBytes())

        # Old implementation should just see the last_logon field as an integer.
        self.assertIsInstance(proto.last_logon, int)
        self.assertEqual(proto.last_logon, datetime.AsMicrosecondsSinceEpoch())

        # fast protobufs interoperate with old serialized formats.
        serialized_data = proto.SerializeToString()
        fast_proto = rdf_client.User.FromSerializedBytes(serialized_data)
        self.assertIsInstance(fast_proto.last_logon, rdfvalue.RDFDatetime)
        self.assertEqual(fast_proto.last_logon,
                         datetime.AsMicrosecondsSinceEpoch())
Exemple #3
0
  def testObjectCreation(self):
    """Compare the speed of object creation to raw protobufs."""
    test_proto = knowledge_base_pb2.User(**self.USER_ACCOUNT)
    test_proto = test_proto.SerializeToString()

    def RDFStructCreateAndSerialize():
      s = rdf_client.User(**self.USER_ACCOUNT)
      s.SerializeToString()

    def RDFStructCreateAndSerializeSetValue():
      s = rdf_client.User()
      for k, v in self.USER_ACCOUNT.iteritems():
        setattr(s, k, v)

      s.SerializeToString()

    def RDFStructCreateAndSerializeFromProto():
      s = rdf_client.User.FromSerializedString(test_proto)
      s.SerializeToString()

    def ProtoCreateAndSerialize():
      s = knowledge_base_pb2.User(**self.USER_ACCOUNT)
      s.SerializeToString()

    def ProtoCreateAndSerializeSetValue():
      s = knowledge_base_pb2.User()
      for k, v in self.USER_ACCOUNT.iteritems():
        setattr(s, k, v)

      s.SerializeToString()

    def ProtoCreateAndSerializeFromProto():
      s = knowledge_base_pb2.User()
      s.ParseFromString(test_proto)
      self.assertEqual(s.SerializeToString(), test_proto)

    self.TimeIt(RDFStructCreateAndSerialize,
                "SProto Create from keywords and serialize.")

    self.TimeIt(RDFStructCreateAndSerializeSetValue,
                "SProto Create, Set And Serialize")

    self.TimeIt(RDFStructCreateAndSerializeFromProto,
                "SProto from serialized and serialize.")

    self.TimeIt(ProtoCreateAndSerialize,
                "Protobuf from keywords and serialize.")

    self.TimeIt(ProtoCreateAndSerializeSetValue,
                "Protobuf Create, Set and serialize")

    self.TimeIt(ProtoCreateAndSerializeFromProto,
                "Protobuf from serialized and serialize.")
Exemple #4
0
  def testCompatibility(self):
    proto = knowledge_base_pb2.User(username="******")
    proto.desktop = "User Desktop 1"

    serialized = proto.SerializeToString()

    rdf_from_serialized = rdf_client.User.FromSerializedString(serialized)

    self.assertEqual(rdf_from_serialized.username, proto.username)
    self.assertEqual(rdf_from_serialized.desktop, proto.desktop)

    rdf_direct = rdf_client.User(username="******", desktop="User Desktop 1")

    self.assertRDFValuesEqual(rdf_from_serialized, rdf_direct)
Exemple #5
0
    def testTimeEncoding(self):
        fast_proto = rdf_client.User(username="******")

        # Check that we can coerce an int to an RDFDatetime.
        fast_proto.last_logon = 1365177603180131

        self.assertEqual(str(fast_proto.last_logon), "2013-04-05 16:00:03")
        self.assertEqual(type(fast_proto.last_logon), rdfvalue.RDFDatetime)

        # Check that this is backwards compatible with the old protobuf library.
        proto = knowledge_base_pb2.User()
        proto.ParseFromString(fast_proto.SerializeToString())

        # Old implementation should just see the last_logon field as an integer.
        self.assertEqual(proto.last_logon, 1365177603180131)
        self.assertEqual(type(proto.last_logon), long)

        # fast protobufs interoperate with old serialized formats.
        serialized_data = proto.SerializeToString()
        fast_proto = rdf_client.User.FromSerializedString(serialized_data)
        self.assertEqual(fast_proto.last_logon, 1365177603180131)
        self.assertEqual(type(fast_proto.last_logon), rdfvalue.RDFDatetime)
Exemple #6
0
    def ProtoCreateAndSerializeSetValue():
      s = knowledge_base_pb2.User()
      for k, v in self.USER_ACCOUNT.iteritems():
        setattr(s, k, v)

      s.SerializeToString()
Exemple #7
0
 def ProtoCreateAndSerialize():
   s = knowledge_base_pb2.User(**self.USER_ACCOUNT)
   s.SerializeToString()
Exemple #8
0
    def ProtoDecode():
      new_s = knowledge_base_pb2.User()
      new_s.ParseFromString(data)

      self.assertEqual(new_s.username, "user")
      self.assertEqual(new_s.username.__class__, unicode)
Exemple #9
0
 def ProtoCreateAndSerializeFromProto():
   s = knowledge_base_pb2.User()
   s.ParseFromString(test_proto)
   self.assertEqual(s.SerializeToString(), test_proto)
Exemple #10
0
        def ProtoDecode():
            new_s = knowledge_base_pb2.User()
            new_s.ParseFromString(data)

            self.assertEqual(new_s.username, "user")
            self.assertIsInstance(new_s.username, Text)