def build(self): """ Build the entire application Returns ------- dict Returns the path to where each resource was built as a map of resource's LogicalId to the path string """ build_graph = self._get_build_graph() build_strategy = DefaultBuildStrategy(build_graph, self._build_dir, self._build_function, self._build_layer) if self._parallel: if self._cached: build_strategy = ParallelBuildStrategy( build_graph, CachedBuildStrategy(build_graph, build_strategy, self._base_dir, self._build_dir, self._cache_dir, self._is_building_specific_resource)) else: build_strategy = ParallelBuildStrategy(build_graph, build_strategy) elif self._cached: build_strategy = CachedBuildStrategy( build_graph, build_strategy, self._base_dir, self._build_dir, self._cache_dir, self._is_building_specific_resource) return build_strategy.build()
def test_redundant_cached_should_be_clean(self): with osutils.mkdir_temp() as temp_base_dir: build_dir = Path(temp_base_dir, ".aws-sam", "build") build_dir.mkdir(parents=True) build_graph = BuildGraph(str(build_dir.resolve())) cache_dir = Path(temp_base_dir, ".aws-sam", "cache") cache_dir.mkdir(parents=True) redundant_cache_folder = Path(cache_dir, "redundant") redundant_cache_folder.mkdir(parents=True) cached_build_strategy = CachedBuildStrategy(build_graph, Mock(), temp_base_dir, build_dir, cache_dir, True) cached_build_strategy._clean_redundant_cached() self.assertTrue(not redundant_cache_folder.exists())
def test_build_call(self, mock_layer_build, mock_function_build, mock_rmtree, mock_copy_tree, mock_path): given_build_function = Mock() given_build_layer = Mock() given_build_dir = "build_dir" default_build_strategy = DefaultBuildStrategy( self.build_graph, given_build_dir, given_build_function, given_build_layer ) cache_build_strategy = CachedBuildStrategy( self.build_graph, default_build_strategy, "base_dir", given_build_dir, "cache_dir", True ) cache_build_strategy.build() mock_function_build.assert_called() mock_layer_build.assert_called()
def test_if_cached_invalid_with_no_cached_folder(self, build_layer_mock, build_function_mock, copytree_mock): with osutils.mkdir_temp() as temp_base_dir: build_dir = Path(temp_base_dir, ".aws-sam", "build") build_dir.mkdir(parents=True) cache_dir = Path(temp_base_dir, ".aws-sam", "cache") cache_dir.mkdir(parents=True) build_function_mock.return_value = { "HelloWorldPython": "artifact1", "HelloWorldPython2": "artifact2" } build_layer_mock.return_value = {"SumLayer": "artifact3"} build_graph_path = Path(build_dir.parent, "build.toml") build_graph_path.write_text( CachedBuildStrategyTest.BUILD_GRAPH_CONTENTS) build_graph = BuildGraph(str(build_dir)) cached_build_strategy = CachedBuildStrategy( build_graph, DefaultBuildStrategy, temp_base_dir, build_dir, cache_dir, True) cached_build_strategy.build_single_function_definition( build_graph.get_function_build_definitions()[0]) cached_build_strategy.build_single_layer_definition( build_graph.get_layer_build_definitions()[0]) build_function_mock.assert_called_once() build_layer_mock.assert_called_once() self.assertEqual(copytree_mock.call_count, 2)
def test_if_cached_valid_when_build_single_function_definition( self, dir_checksum_mock, exists_mock, copytree_mock): pass with osutils.mkdir_temp() as temp_base_dir: build_dir = Path(temp_base_dir, ".aws-sam", "build") build_dir.mkdir(parents=True) cache_dir = Path(temp_base_dir, ".aws-sam", "cache") cache_dir.mkdir(parents=True) exists_mock.return_value = True dir_checksum_mock.return_value = CachedBuildStrategyTest.SOURCE_MD5 build_graph_path = Path(build_dir.parent, "build.toml") build_graph_path.write_text( CachedBuildStrategyTest.BUILD_GRAPH_CONTENTS) build_graph = BuildGraph(str(build_dir)) cached_build_strategy = CachedBuildStrategy( build_graph, DefaultBuildStrategy, temp_base_dir, build_dir, cache_dir, True) func1 = Mock() func1.name = "func1_name" func2 = Mock() func2.name = "func2_name" build_definition = build_graph.get_function_build_definitions()[0] layer_definition = build_graph.get_layer_build_definitions()[0] build_graph.put_function_build_definition(build_definition, func1) build_graph.put_function_build_definition(build_definition, func2) layer = Mock() layer.name = "layer_name" build_graph.put_layer_build_definition(layer_definition, layer) cached_build_strategy.build_single_function_definition( build_definition) cached_build_strategy.build_single_layer_definition( layer_definition) self.assertEqual(copytree_mock.call_count, 3)