blob: 824b9bfc84310806bbcb5c2d57a5d96c6f5c6667 [file] [log] [blame]
Alex Klein2966e302019-01-17 13:29:38 -07001# -*- 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"""Image service tests."""
7
8from __future__ import print_function
9
Alex Klein56355682019-02-07 10:36:54 -070010import mock
Alex Klein2966e302019-01-17 13:29:38 -070011import os
12
Alex Klein7107bdd2019-03-14 17:14:31 -060013from chromite.api.gen.chromite.api import image_pb2
Alex Kleinb7cdbe62019-02-22 11:41:32 -070014from chromite.api.controller import image as image_controller
Alex Klein56355682019-02-07 10:36:54 -070015from chromite.lib import constants
Alex Klein2966e302019-01-17 13:29:38 -070016from chromite.lib import cros_test_lib
17from chromite.lib import osutils
Alex Kleinb7cdbe62019-02-22 11:41:32 -070018from chromite.service import image as image_service
Alex Klein2966e302019-01-17 13:29:38 -070019
20
Alex Klein56355682019-02-07 10:36:54 -070021class CreateTest(cros_test_lib.MockTestCase):
22 """Create image tests."""
23
24 def testArgumentValidation(self):
25 """Test the argument validation."""
26 input_proto = image_pb2.CreateImageRequest()
27 output_proto = image_pb2.CreateImageResult()
28
29 # No board should cause it to fail.
Alex Kleinb7cdbe62019-02-22 11:41:32 -070030 with self.assertRaises(image_controller.InvalidArgumentError):
31 image_controller.Create(input_proto, output_proto)
Alex Klein56355682019-02-07 10:36:54 -070032
33 def testImageTypeHandling(self):
34 """Test the image type handling."""
Alex Kleinb7cdbe62019-02-22 11:41:32 -070035 build_patch = self.PatchObject(image_service, 'Build', return_value=False)
Alex Klein56355682019-02-07 10:36:54 -070036 input_proto = image_pb2.CreateImageRequest()
37 input_proto.build_target.name = 'board'
38 output_proto = image_pb2.CreateImageResult()
39
40 # Should default to the base image.
Alex Kleinb7cdbe62019-02-22 11:41:32 -070041 image_controller.Create(input_proto, output_proto)
Alex Klein56355682019-02-07 10:36:54 -070042 build_patch.assert_called_with(images=[constants.IMAGE_TYPE_BASE],
43 board=u'board', config=mock.ANY)
44
45 # Should be using a value that's provided.
46 input_proto.image_types.append(image_pb2.Image.DEV)
Alex Kleinb7cdbe62019-02-22 11:41:32 -070047 image_controller.Create(input_proto, output_proto)
Alex Klein56355682019-02-07 10:36:54 -070048 build_patch.assert_called_with(images=[constants.IMAGE_TYPE_DEV],
49 board=u'board', config=mock.ANY)
50
51 input_proto.image_types.append(image_pb2.Image.BASE)
52 input_proto.image_types.append(image_pb2.Image.TEST)
53 expected_images = [constants.IMAGE_TYPE_BASE, constants.IMAGE_TYPE_DEV,
54 constants.IMAGE_TYPE_TEST]
Alex Kleinb7cdbe62019-02-22 11:41:32 -070055 image_controller.Create(input_proto, output_proto)
Alex Klein56355682019-02-07 10:36:54 -070056 build_patch.assert_called_with(images=expected_images, board=u'board',
57 config=mock.ANY)
58
Alex Kleinb7cdbe62019-02-22 11:41:32 -070059
Alex Klein2966e302019-01-17 13:29:38 -070060class ImageTest(cros_test_lib.MockTempDirTestCase):
61 """Image service tests."""
62
63 def setUp(self):
64 self.image_path = os.path.join(self.tempdir, 'image.bin')
65 self.board = 'board'
66 self.result_directory = os.path.join(self.tempdir, 'results')
67
68 osutils.SafeMakedirs(self.result_directory)
69 osutils.Touch(self.image_path)
70
71 def testTestArgumentValidation(self):
72 """Test function argument validation tests."""
Alex Kleinb7cdbe62019-02-22 11:41:32 -070073 self.PatchObject(image_service, 'Test', return_value=True)
Alex Klein2966e302019-01-17 13:29:38 -070074 input_proto = image_pb2.TestImageRequest()
75 output_proto = image_pb2.TestImageResult()
76
77 # Nothing provided.
Alex Kleinb7cdbe62019-02-22 11:41:32 -070078 with self.assertRaises(image_controller.InvalidArgumentError):
79 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -070080
81 # Just one argument.
82 input_proto.build_target.name = self.board
Alex Kleinb7cdbe62019-02-22 11:41:32 -070083 with self.assertRaises(image_controller.InvalidArgumentError):
84 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -070085
86 # Two arguments provided.
87 input_proto.result.directory = self.result_directory
Alex Kleinb7cdbe62019-02-22 11:41:32 -070088 with self.assertRaises(image_controller.InvalidArgumentError):
89 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -070090
91 # Invalid image path.
92 input_proto.image.path = '/invalid/image/path'
Alex Kleinb7cdbe62019-02-22 11:41:32 -070093 with self.assertRaises(image_controller.InvalidArgumentError):
94 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -070095
96 # All valid arguments.
97 input_proto.image.path = self.image_path
Alex Kleinb7cdbe62019-02-22 11:41:32 -070098 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -070099
100 def testTestOutputHandling(self):
101 """Test function output tests."""
102 input_proto = image_pb2.TestImageRequest()
103 input_proto.image.path = self.image_path
104 input_proto.build_target.name = self.board
105 input_proto.result.directory = self.result_directory
106 output_proto = image_pb2.TestImageResult()
107
Alex Kleinb7cdbe62019-02-22 11:41:32 -0700108 self.PatchObject(image_service, 'Test', return_value=True)
109 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -0700110 self.assertTrue(output_proto.success)
111
Alex Kleinb7cdbe62019-02-22 11:41:32 -0700112 self.PatchObject(image_service, 'Test', return_value=False)
113 image_controller.Test(input_proto, output_proto)
Alex Klein2966e302019-01-17 13:29:38 -0700114 self.assertFalse(output_proto.success)