|
21 | 21 |
|
22 | 22 | import gc |
23 | 23 | import logging |
| 24 | +import tempfile |
24 | 25 | import unittest |
25 | 26 | import unittest.mock |
26 | 27 |
|
27 | 28 | from apache_beam.options import pipeline_options |
28 | 29 | from apache_beam.runners.portability import sdk_container_builder |
29 | 30 |
|
| 31 | +try: |
| 32 | + from google.cloud.devtools import cloudbuild_v1 |
| 33 | +except ImportError: |
| 34 | + cloudbuild_v1 = None |
| 35 | + |
30 | 36 |
|
31 | 37 | class SdkContainerBuilderTest(unittest.TestCase): |
32 | 38 | def tearDown(self): |
@@ -120,6 +126,41 @@ def test_container_image_name_uses_forward_slashes(self): |
120 | 126 | f' got: {container_image_name}' |
121 | 127 | ) |
122 | 128 |
|
| 129 | + @unittest.skipIf( |
| 130 | + cloudbuild_v1 is None, 'GCP Cloud Build dependencies are not installed') |
| 131 | + def test_cloud_builder_assign_machine_type(self): |
| 132 | + """Verify Cloud Build machine_type is correctly set on BuildOptions.""" |
| 133 | + from google.cloud.devtools.cloudbuild_v1 import types as cloud_build_types |
| 134 | + |
| 135 | + with tempfile.TemporaryDirectory() as temp_dir: |
| 136 | + options = pipeline_options.PipelineOptions([ |
| 137 | + '--project=test-project', |
| 138 | + '--temp_location=gs://test-bucket/temp', |
| 139 | + '--cloud_build_machine_type=n1-highcpu-8', |
| 140 | + '--no_auth', # Avoid fetching credential for unit testing |
| 141 | + ]) |
| 142 | + builder = sdk_container_builder._SdkContainerImageCloudBuilder(options) |
| 143 | + builder._temp_src_dir = temp_dir |
| 144 | + builder._upload_to_gcs = unittest.mock.MagicMock() |
| 145 | + |
| 146 | + mock_cloudbuild_client = unittest.mock.MagicMock() |
| 147 | + mock_build_response = unittest.mock.MagicMock() |
| 148 | + mock_build_response.metadata.build.id = 'dummy-id' |
| 149 | + mock_build_response.metadata.build.log_url = 'http://dummy.url' |
| 150 | + mock_cloudbuild_client.create_build.return_value = mock_build_response |
| 151 | + mock_cloudbuild_client.get_build.return_value = cloud_build_types.Build( |
| 152 | + status=cloud_build_types.Build.Status.SUCCESS) |
| 153 | + builder._cloudbuild_client = mock_cloudbuild_client |
| 154 | + |
| 155 | + builder._invoke_docker_build_and_push( |
| 156 | + 'gcr.io/test-project/prebuilt_beam_sdk:latest') |
| 157 | + |
| 158 | + mock_cloudbuild_client.create_build.assert_called_once() |
| 159 | + create_build_request = mock_cloudbuild_client.create_build.call_args[0][0] |
| 160 | + self.assertEqual( |
| 161 | + create_build_request.build.options.machine_type, |
| 162 | + cloud_build_types.BuildOptions.MachineType.N1_HIGHCPU_8) |
| 163 | + |
123 | 164 |
|
124 | 165 | if __name__ == '__main__': |
125 | 166 | # Run the tests. |
|
0 commit comments