| # Copyright 2012 the V8 project authors. All rights reserved. |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are |
| # met: |
| # |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * Redistributions in binary form must reproduce the above |
| # copyright notice, this list of conditions and the following |
| # disclaimer in the documentation and/or other materials provided |
| # with the distribution. |
| # * Neither the name of Google Inc. nor the names of its |
| # contributors may be used to endorse or promote products derived |
| # from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| |
| from . import context |
| from . import testcase |
| |
| class WorkPacket(object): |
| def __init__(self, peer=None, context=None, tests=None, binaries=None, |
| base_revision=None, patch=None, pubkey=None): |
| self.peer = peer |
| self.context = context |
| self.tests = tests |
| self.binaries = binaries |
| self.base_revision = base_revision |
| self.patch = patch |
| self.pubkey_fingerprint = pubkey |
| |
| def Pack(self, binaries_dict): |
| """ |
| Creates a JSON serializable object containing the data of this |
| work packet. |
| """ |
| need_libv8 = False |
| binaries = [] |
| for shell in self.peer.shells: |
| prefetched_binary = binaries_dict[shell] |
| binaries.append({"name": shell, |
| "blob": prefetched_binary[0], |
| "sign": prefetched_binary[1]}) |
| if prefetched_binary[2]: |
| need_libv8 = True |
| if need_libv8: |
| libv8 = binaries_dict["libv8.so"] |
| binaries.append({"name": "libv8.so", |
| "blob": libv8[0], |
| "sign": libv8[1]}) |
| tests = [] |
| test_map = {} |
| for t in self.peer.tests: |
| test_map[t.id] = t |
| tests.append(t.PackTask()) |
| result = { |
| "binaries": binaries, |
| "pubkey": self.pubkey_fingerprint, |
| "context": self.context.Pack(), |
| "base_revision": self.base_revision, |
| "patch": self.patch, |
| "tests": tests |
| } |
| return result, test_map |
| |
| @staticmethod |
| def Unpack(packed): |
| """ |
| Creates a WorkPacket object from the given packed representation. |
| """ |
| binaries = packed["binaries"] |
| pubkey_fingerprint = packed["pubkey"] |
| ctx = context.Context.Unpack(packed["context"]) |
| base_revision = packed["base_revision"] |
| patch = packed["patch"] |
| tests = [ testcase.TestCase.UnpackTask(t) for t in packed["tests"] ] |
| return WorkPacket(context=ctx, tests=tests, binaries=binaries, |
| base_revision=base_revision, patch=patch, |
| pubkey=pubkey_fingerprint) |