blob: daf2b7e4d761b949f0fedca91b6a29336a22c7f3 [file] [log] [blame]
George Engelbrechtfe63c8c2019-08-31 22:51:29 -06001# -*- coding: utf-8 -*-
2# Copyright 2019 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Payload operations."""
7
8from __future__ import print_function
9
Mike Frysingeref94e4c2020-02-10 23:59:54 -050010import sys
11
George Engelbrechtfe63c8c2019-08-31 22:51:29 -060012from chromite.api import api_config
13from chromite.api import controller
14from chromite.api.controller import payload
15from chromite.api.gen.chromite.api import payload_pb2
16from chromite.api.gen.chromiumos import common_pb2
17from chromite.lib import cros_test_lib
18from chromite.lib.paygen import paygen_payload_lib
19
20
Mike Frysingeref94e4c2020-02-10 23:59:54 -050021assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
22
23
George Engelbrechtfe63c8c2019-08-31 22:51:29 -060024class PayloadApiTests(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
25 """Unittests for SetBinhost."""
26
27 def setUp(self):
28 self.response = payload_pb2.PayloadGenerationResult()
29
30 src_build = payload_pb2.Build(version='1.0.0', bucket='test',
31 channel='test-channel', build_target=
32 common_pb2.BuildTarget(name='cave'))
33
34 src_image = payload_pb2.UnsignedImage(
35 build=src_build, image_type=6, milestone='R70')
36
37 tgt_build = payload_pb2.Build(version='2.0.0', bucket='test',
38 channel='test-channel', build_target=
39 common_pb2.BuildTarget(name='cave'))
40
41 tgt_image = payload_pb2.UnsignedImage(
42 build=tgt_build, image_type=6, milestone='R70')
43
44 self.req = payload_pb2.PayloadGenerationRequest(
Navil Perezf5482be2020-04-09 23:18:14 -060045 tgt_unsigned_image=tgt_image,
46 src_unsigned_image=src_image,
47 bucket='test-destination-bucket',
48 verify=True,
49 keyset='update_signer',
50 dryrun=False)
George Engelbrechtfe63c8c2019-08-31 22:51:29 -060051
52 self.result = payload_pb2.PayloadGenerationResult()
53
54 def testValidateOnly(self):
55 """Sanity check that a validate only call does not execute any logic."""
56
57 res = payload.GeneratePayload(self.req, self.result,
58 self.validate_only_config)
59 self.assertEqual(res, controller.RETURN_CODE_VALID_INPUT)
60
61 def testCallSucceeds(self):
62 """Check that a call is made succesfully."""
63 # Deep patch the paygen lib, this is a full run through service as well.
64 self.PatchObject(paygen_payload_lib, 'PaygenPayload')
65 res = payload.GeneratePayload(self.req, self.result, self.api_config)
66 self.assertEqual(res, controller.RETURN_CODE_SUCCESS)
Michael Mortensen85d38402019-12-12 09:50:29 -070067
68 def testMockError(self):
69 """Test mock error call does not execute any logic, returns error."""
70 patch = self.PatchObject(paygen_payload_lib, 'PaygenPayload')
71
72 res = payload.GeneratePayload(self.req, self.result,
73 self.mock_error_config)
74 patch.assert_not_called()
75 self.assertEqual(controller.RETURN_CODE_COMPLETED_UNSUCCESSFULLY, res)
76
77 def testMockCall(self):
78 """Test mock call does not execute any logic, returns success."""
79 patch = self.PatchObject(paygen_payload_lib, 'PaygenPayload')
80
81 res = payload.GeneratePayload(self.req, self.result,
82 self.mock_call_config)
83 patch.assert_not_called()
84 self.assertEqual(controller.RETURN_CODE_SUCCESS, res)