Пример #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 = jobs_pb2.User(**self.USER_ACCOUNT)

    data = s.SerializeToString()

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

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

    def RDFStructDecode():
      new_s = rdfvalue.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 testObjectCreation(self):
    """Compare the speed of object creation to raw protobufs."""
    test_proto = jobs_pb2.User(**self.USER_ACCOUNT)
    test_proto = test_proto.SerializeToString()

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

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

      s.SerializeToString()

    def RDFStructCreateAndSerializeFromProto():
      s = rdfvalue.User(test_proto)
      s.SerializeToString()

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

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

      s.SerializeToString()

    def ProtoCreateAndSerializeFromProto():
      s = jobs_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.")
Пример #3
0
  def testCompatibility(self):
    proto = jobs_pb2.User(username="******")
    proto.special_folders.desktop = "User Desktop 1"

    serialized = proto.SerializeToString()

    fast_proto = rdf_client.User(serialized)

    self.assertEqual(fast_proto.username, proto.username)
    self.assertEqual(fast_proto.special_folders.desktop,
                     proto.special_folders.desktop)

    # Serialized RDFValue and protobuf have same fields.
    self.assertRDFValueEqualToProto(fast_proto, proto)
Пример #4
0
    def testCompatibility(self):
        proto = jobs_pb2.User(username="******")
        proto.special_folders.desktop = "User Desktop 1"

        serialized = proto.SerializeToString()

        fast_proto = rdfvalue.User(serialized)

        self.assertEqual(fast_proto.username, proto.username)
        self.assertEqual(fast_proto.special_folders.desktop,
                         proto.special_folders.desktop)

        # Serialized form of both should be the same.
        self.assertProtoEqual(fast_proto, proto)
Пример #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 = jobs_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(serialized_data)
    self.assertEqual(fast_proto.last_logon, 1365177603180131)
    self.assertEqual(type(fast_proto.last_logon), rdfvalue.RDFDatetime)
Пример #6
0
 def ProtoCreateAndSerializeFromProto():
   s = jobs_pb2.User()
   s.ParseFromString(test_proto)
   self.assertEqual(s.SerializeToString(), test_proto)
Пример #7
0
    def ProtoCreateAndSerializeSetValue():
      s = jobs_pb2.User()
      for k, v in self.USER_ACCOUNT.iteritems():
        setattr(s, k, v)

      s.SerializeToString()
Пример #8
0
 def ProtoCreateAndSerialize():
   s = jobs_pb2.User(**self.USER_ACCOUNT)
   s.SerializeToString()
Пример #9
0
    def ProtoDecode():
      new_s = jobs_pb2.User()
      new_s.ParseFromString(data)

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