Home | History | Annotate | Download | only in objects
      1 # Copyright 2012 the V8 project authors. All rights reserved.
      2 # Redistribution and use in source and binary forms, with or without
      3 # modification, are permitted provided that the following conditions are
      4 # met:
      5 #
      6 #     * Redistributions of source code must retain the above copyright
      7 #       notice, this list of conditions and the following disclaimer.
      8 #     * Redistributions in binary form must reproduce the above
      9 #       copyright notice, this list of conditions and the following
     10 #       disclaimer in the documentation and/or other materials provided
     11 #       with the distribution.
     12 #     * Neither the name of Google Inc. nor the names of its
     13 #       contributors may be used to endorse or promote products derived
     14 #       from this software without specific prior written permission.
     15 #
     16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 
     29 from . import context
     30 from . import testcase
     31 
     32 class WorkPacket(object):
     33   def __init__(self, peer=None, context=None, tests=None, binaries=None,
     34                base_revision=None, patch=None, pubkey=None):
     35     self.peer = peer
     36     self.context = context
     37     self.tests = tests
     38     self.binaries = binaries
     39     self.base_revision = base_revision
     40     self.patch = patch
     41     self.pubkey_fingerprint = pubkey
     42 
     43   def Pack(self, binaries_dict):
     44     """
     45     Creates a JSON serializable object containing the data of this
     46     work packet.
     47     """
     48     need_libv8 = False
     49     binaries = []
     50     for shell in self.peer.shells:
     51       prefetched_binary = binaries_dict[shell]
     52       binaries.append({"name": shell,
     53                        "blob": prefetched_binary[0],
     54                        "sign": prefetched_binary[1]})
     55       if prefetched_binary[2]:
     56         need_libv8 = True
     57     if need_libv8:
     58       libv8 = binaries_dict["libv8.so"]
     59       binaries.append({"name": "libv8.so",
     60                        "blob": libv8[0],
     61                        "sign": libv8[1]})
     62     tests = []
     63     test_map = {}
     64     for t in self.peer.tests:
     65       test_map[t.id] = t
     66       tests.append(t.PackTask())
     67     result = {
     68       "binaries": binaries,
     69       "pubkey": self.pubkey_fingerprint,
     70       "context": self.context.Pack(),
     71       "base_revision": self.base_revision,
     72       "patch": self.patch,
     73       "tests": tests
     74     }
     75     return result, test_map
     76 
     77   @staticmethod
     78   def Unpack(packed):
     79     """
     80     Creates a WorkPacket object from the given packed representation.
     81     """
     82     binaries = packed["binaries"]
     83     pubkey_fingerprint = packed["pubkey"]
     84     ctx = context.Context.Unpack(packed["context"])
     85     base_revision = packed["base_revision"]
     86     patch = packed["patch"]
     87     tests = [ testcase.TestCase.UnpackTask(t) for t in packed["tests"] ]
     88     return WorkPacket(context=ctx, tests=tests, binaries=binaries,
     89                       base_revision=base_revision, patch=patch,
     90                       pubkey=pubkey_fingerprint)
     91