Пример #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)
Пример #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())
Пример #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.")
Пример #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)
Пример #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)
Пример #6
0
    def ProtoCreateAndSerializeSetValue():
      s = knowledge_base_pb2.User()
      for k, v in self.USER_ACCOUNT.iteritems():
        setattr(s, k, v)

      s.SerializeToString()
Пример #7
0
 def ProtoCreateAndSerialize():
   s = knowledge_base_pb2.User(**self.USER_ACCOUNT)
   s.SerializeToString()
Пример #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)
Пример #9
0
 def ProtoCreateAndSerializeFromProto():
   s = knowledge_base_pb2.User()
   s.ParseFromString(test_proto)
   self.assertEqual(s.SerializeToString(), test_proto)
Пример #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)