blob: a67e26c58ab818b8e51c96807234a7d3d868c609 [file] [log] [blame]
LaMont Jones8a1644f2019-04-16 14:30:17 -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"""Unittests for Android operations."""
7
8from __future__ import print_function
9
10from chromite.api.controller import android
11from chromite.api.gen.chromite.api import android_pb2
12from chromite.api.gen.chromiumos import common_pb2
David Burgerff1a92c2019-07-09 00:27:54 +000013# TODO(crbug/904939): implement service/android.py
14from chromite.cbuildbot import commands
LaMont Jones8a1644f2019-04-16 14:30:17 -060015from chromite.lib import constants
16from chromite.lib import cros_build_lib
17from chromite.lib import cros_test_lib
18from chromite.lib import osutils
19
20class MarkStableTest(cros_test_lib.MockTestCase):
21 """Unittests for MarkStable."""
22
23 def setUp(self):
David Burgerff1a92c2019-07-09 00:27:54 +000024 self.command = self.PatchObject(commands, 'MarkAndroidAsStable')
LaMont Jones8a1644f2019-04-16 14:30:17 -060025
26 self.input_proto = android_pb2.MarkStableRequest()
27 self.input_proto.tracking_branch = 'tracking-branch'
28 self.input_proto.package_name = 'android-package-name'
29 self.input_proto.android_build_branch = 'android_build_branch'
David Burgerff1a92c2019-07-09 00:27:54 +000030 self.board1 = self.input_proto.boards.add()
LaMont Jones8a1644f2019-04-16 14:30:17 -060031 self.board1.name = 'board1'
David Burgerff1a92c2019-07-09 00:27:54 +000032 self.board2 = self.input_proto.boards.add()
LaMont Jones8a1644f2019-04-16 14:30:17 -060033 self.board2.name = 'board2'
34
35 def testFailsIfTrackingBranchMissing(self):
36 """Fails if tracking_branch is missing."""
37 self.input_proto.tracking_branch = ''
38 output_proto = android_pb2.MarkStableResponse()
39 with self.assertRaises(cros_build_lib.DieSystemExit):
40 android.MarkStable(self.input_proto, output_proto)
David Burgerff1a92c2019-07-09 00:27:54 +000041 self.command.assert_not_called()
LaMont Jones8a1644f2019-04-16 14:30:17 -060042
43 def testFailsIfPackageNameMissing(self):
44 """Fails if package_name is missing."""
45 self.input_proto.package_name = ''
46 output_proto = android_pb2.MarkStableResponse()
47 with self.assertRaises(cros_build_lib.DieSystemExit):
48 android.MarkStable(self.input_proto, output_proto)
David Burgerff1a92c2019-07-09 00:27:54 +000049 self.command.assert_not_called()
LaMont Jones8a1644f2019-04-16 14:30:17 -060050
51 def testFailsIfAndroidBuildBranchMissing(self):
52 """Fails if android_build_branch is missing."""
53 self.input_proto.android_build_branch = ''
54 output_proto = android_pb2.MarkStableResponse()
55 with self.assertRaises(cros_build_lib.DieSystemExit):
56 android.MarkStable(self.input_proto, output_proto)
David Burgerff1a92c2019-07-09 00:27:54 +000057 self.command.assert_not_called()
LaMont Jones8a1644f2019-04-16 14:30:17 -060058
59 def testCallsCommandCorrectly(self):
60 """Test that commands.MarkAndroidAsStable is called correctly."""
61 output_proto = android_pb2.MarkStableResponse()
62 self.input_proto.android_version = 'android-version'
63 self.input_proto.android_gts_build_branch = 'gts-branch'
David Burgerff1a92c2019-07-09 00:27:54 +000064 self.command.return_value = 'cat/android-1.2.3'
LaMont Jones8a1644f2019-04-16 14:30:17 -060065 atom = common_pb2.PackageInfo()
66 atom.category = 'cat'
67 atom.package_name = 'android'
68 atom.version = '1.2.3'
69 android.MarkStable(self.input_proto, output_proto)
David Burgerff1a92c2019-07-09 00:27:54 +000070 self.command.assert_called_once_with(
71 buildroot=self.input_proto.buildroot,
LaMont Jones8a1644f2019-04-16 14:30:17 -060072 tracking_branch=self.input_proto.tracking_branch,
73 android_package=self.input_proto.package_name,
74 android_build_branch=self.input_proto.android_build_branch,
David Burgerff1a92c2019-07-09 00:27:54 +000075 boards=self.input_proto.boards,
LaMont Jones8a1644f2019-04-16 14:30:17 -060076 android_version=self.input_proto.android_version,
77 android_gts_build_branch=self.input_proto.android_gts_build_branch)
78 self.assertEqual(output_proto.android_atom, atom)
79 self.assertEqual(output_proto.status,
80 android_pb2.MARK_STABLE_STATUS_SUCCESS)
81
82 def testHandlesEarlyExit(self):
83 """Test that early exit is handled correctly."""
84 output_proto = android_pb2.MarkStableResponse()
85 self.input_proto.android_version = 'android-version'
86 self.input_proto.android_gts_build_branch = 'gts-branch'
David Burgerff1a92c2019-07-09 00:27:54 +000087 self.command.return_value = ''
LaMont Jones8a1644f2019-04-16 14:30:17 -060088 android.MarkStable(self.input_proto, output_proto)
David Burgerff1a92c2019-07-09 00:27:54 +000089 self.command.assert_called_once_with(
90 buildroot=self.input_proto.buildroot,
LaMont Jones8a1644f2019-04-16 14:30:17 -060091 tracking_branch=self.input_proto.tracking_branch,
92 android_package=self.input_proto.package_name,
93 android_build_branch=self.input_proto.android_build_branch,
David Burgerff1a92c2019-07-09 00:27:54 +000094 boards=self.input_proto.boards,
LaMont Jones8a1644f2019-04-16 14:30:17 -060095 android_version=self.input_proto.android_version,
96 android_gts_build_branch=self.input_proto.android_gts_build_branch)
97 self.assertEqual(output_proto.status,
98 android_pb2.MARK_STABLE_STATUS_EARLY_EXIT)
99
100 def testHandlesPinnedUprevError(self):
101 """Test that pinned error is handled correctly."""
102 output_proto = android_pb2.MarkStableResponse()
103 self.input_proto.android_version = 'android-version'
104 self.input_proto.android_gts_build_branch = 'gts-branch'
David Burgerff1a92c2019-07-09 00:27:54 +0000105 self.command.side_effect = commands.AndroidIsPinnedUprevError('pin/xx-1.1')
LaMont Jones8a1644f2019-04-16 14:30:17 -0600106 atom = common_pb2.PackageInfo()
107 atom.category = 'pin'
108 atom.package_name = 'xx'
109 atom.version = '1.1'
110 android.MarkStable(self.input_proto, output_proto)
David Burgerff1a92c2019-07-09 00:27:54 +0000111 self.command.assert_called_once_with(
112 buildroot=self.input_proto.buildroot,
LaMont Jones8a1644f2019-04-16 14:30:17 -0600113 tracking_branch=self.input_proto.tracking_branch,
114 android_package=self.input_proto.package_name,
115 android_build_branch=self.input_proto.android_build_branch,
David Burgerff1a92c2019-07-09 00:27:54 +0000116 boards=self.input_proto.boards,
LaMont Jones8a1644f2019-04-16 14:30:17 -0600117 android_version=self.input_proto.android_version,
118 android_gts_build_branch=self.input_proto.android_gts_build_branch)
119 self.assertEqual(output_proto.android_atom, atom)
120 self.assertEqual(output_proto.status,
121 android_pb2.MARK_STABLE_STATUS_PINNED)
122
123
124class UnpinVersionTest(cros_test_lib.MockTestCase):
125 """Unittests for UnpinVersion."""
126
127 def testCallsUnlink(self):
128 """SetAndroid calls service with correct args."""
129 safeunlink = self.PatchObject(osutils, 'SafeUnlink')
130 self.PatchObject(constants, '_FindSourceRoot', return_value='SRCROOT')
131
132 # This has the side effect of making sure that input and output proto are
133 # not actually used.
134 android.UnpinVersion(None, None)
135 safeunlink.assert_called_once_with(android.ANDROIDPIN_MASK_PATH)