コード例 #1
0
ファイル: benchmark_test.py プロジェクト: rainser/grr
  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
ファイル: benchmark_test.py プロジェクト: rainser/grr
  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
ファイル: client_test.py プロジェクト: cdstelly/grr
  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
ファイル: benchmark_test.py プロジェクト: rainser/grr
    def ProtoCreateAndSerializeSetValue():
      s = knowledge_base_pb2.User()
      for k, v in self.USER_ACCOUNT.iteritems():
        setattr(s, k, v)

      s.SerializeToString()
コード例 #7
0
ファイル: benchmark_test.py プロジェクト: rainser/grr
 def ProtoCreateAndSerialize():
   s = knowledge_base_pb2.User(**self.USER_ACCOUNT)
   s.SerializeToString()
コード例 #8
0
ファイル: benchmark_test.py プロジェクト: rainser/grr
    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
ファイル: benchmark_test.py プロジェクト: rainser/grr
 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)