private static void startLevel3(ComponentContainer level3) { level3.getComponentByType(CECoreExtensionsInstaller.class) .install(level3, hasPlatformLevel(3), noAdditionalSideFilter()); level3.startComponents(); }
private static void startLevel2(ComponentContainer level2) { level2.getComponentByType(CECoreExtensionsInstaller.class) .install(level2, hasPlatformLevel(2), noAdditionalSideFilter()); level2.startComponents(); }
@Override public PlatformLevel start() { // ensuring the HistoryTable exists must be the first thing done when this level is started getOptional(MigrationHistoryTable.class).ifPresent(MigrationHistoryTable::start); ComponentContainer container = getContainer(); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); coreExtensionsInstaller.install(container, hasPlatformLevel(2), noAdditionalSideFilter()); return super.start(); } }
@Override public PlatformLevel start() { ComponentContainer container = getContainer(); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); coreExtensionsInstaller.install(container, hasPlatformLevel(3), noAdditionalSideFilter()); return super.start(); } }
private static void startLevel4(ComponentContainer level4) { level4.getComponentByType(CECoreExtensionsInstaller.class) .install(level4, hasPlatformLevel4OrNone(), noAdditionalSideFilter()); level4.getComponentByType(ServerExtensionInstaller.class) .installExtensions(level4); level4.startComponents(); PlatformEditionProvider editionProvider = level4.getComponentByType(PlatformEditionProvider.class); Loggers.get(ComputeEngineContainerImpl.class) .info("Running {} edition", editionProvider.get().map(EditionProvider.Edition::getLabel).orElse("")); }
@Test public void install_provides_new_Configuration_when_getBootConfiguration_is_called_and_there_is_none_in_container() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); // verify each core extension gets its own configuration assertThat(contextCaptor.getAllValues()) .hasSameElementsAs(ImmutableSet.copyOf(contextCaptor.getAllValues())); }
private static void startLevel1(ComponentContainer level1) { level1.getComponentByType(CoreExtensionsLoader.class) .load(); level1.getComponentByType(CECoreExtensionsInstaller.class) .install(level1, hasPlatformLevel(1), noAdditionalSideFilter()); level1.startComponents(); }
@Override public PlatformLevel start() { get(CoreExtensionsLoader.class) .load(); get(WebCoreExtensionsInstaller.class) .install(getContainer(), hasPlatformLevel(1), noAdditionalSideFilter()); return super.start(); } }
@Test public void install_provides_runtime_from_constructor_in_context() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); assertThat(contextCaptor.getAllValues()) .extracting(CoreExtension.Context::getRuntime) .containsOnly(sonarRuntime); }
@Override public PlatformLevel start() { ComponentContainer container = getContainer(); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); coreExtensionsInstaller.install(container, hasPlatformLevel4OrNone(), noAdditionalSideFilter()); ServerExtensionInstaller extensionInstaller = get(ServerExtensionInstaller.class); extensionInstaller.installExtensions(container); super.start(); return this; } }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_providers_to_container_and_install_extensions_they_provide_when_annotated_with_expected_annotation(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSideProvider.class, PartiallyWestSideProvider.class, EastSideProvider.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, WestSideProvider.class, WestSideProvided.class, PartiallyWestSideProvider.class); assertPropertyDefinitions(container); }
@Test public void install_calls_load_method_on_all_loaded_CoreExtension() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); CoreExtension coreExtension3 = newCoreExtension(); CoreExtension coreExtension4 = newCoreExtension(); List<CoreExtension> coreExtensions = ImmutableList.of(coreExtension1, coreExtension2, coreExtension3, coreExtension4); InOrder inOrder = Mockito.inOrder(coreExtension1, coreExtension2, coreExtension3, coreExtension4); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(coreExtensions.stream()); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); inOrder.verify(coreExtension1).load(contextCaptor.capture()); inOrder.verify(coreExtension2).load(contextCaptor.capture()); inOrder.verify(coreExtension3).load(contextCaptor.capture()); inOrder.verify(coreExtension4).load(contextCaptor.capture()); // verify each core extension gets its own Context assertThat(contextCaptor.getAllValues()) .hasSameElementsAs(ImmutableSet.copyOf(contextCaptor.getAllValues())); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_installs_extensions_annotated_with_expected_annotation(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSideClass.class, EastSideClass.class, OtherSideClass.class, Latitude.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, WestSideClass.class, Latitude.class); assertPropertyDefinitions(container); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_PropertyDefinition_from_annotation_no_matter_annotations(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSidePropertyDefinition.class, EastSidePropertyDefinition.class, OtherSidePropertyDefinition.class, LatitudePropertyDefinition.class, BlankPropertyDefinition.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, WestSidePropertyDefinition.class, LatitudePropertyDefinition.class); assertPropertyDefinitions(container, "westKey", "eastKey", "otherKey", "latitudeKey", "blankKey"); }
@Test public void install_provides_Configuration_from_container_when_getBootConfiguration_is_called() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); Configuration configuration = new MapSettings().asConfig(); ComponentContainer container = new ComponentContainer(); container.add(configuration); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); assertThat(contextCaptor.getAllValues()) .extracting(CoreExtension.Context::getBootConfiguration) .containsOnly(configuration); }
@Test public void install_only_adds_ServerSide_annotated_extension_to_container() { when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of( new CoreExtension() { @Override public String getName() { return "foo"; } @Override public void load(Context context) { context.addExtensions(CeClass.class, ScannerClass.class, WebServerClass.class, NoAnnotationClass.class, OtherAnnotationClass.class, MultipleAnnotationClass.class); } })); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertThat(container.getPicoContainer().getComponentAdapters()) .hasSize(ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 2); assertThat(container.getComponentByType(WebServerClass.class)).isNotNull(); assertThat(container.getComponentByType(MultipleAnnotationClass.class)).isNotNull(); }
@Test public void install_only_adds_ScannerSide_annotated_extension_to_container() { when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of( new CoreExtension() { @Override public String getName() { return "foo"; } @Override public void load(Context context) { context.addExtensions(CeClass.class, ScannerClass.class, WebServerClass.class, NoAnnotationClass.class, OtherAnnotationClass.class, MultipleAnnotationClass.class); } })); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertThat(container.getPicoContainer().getComponentAdapters()) .hasSize(ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 2); assertThat(container.getComponentByType(ScannerClass.class)).isNotNull(); assertThat(container.getComponentByType(MultipleAnnotationClass.class)).isNotNull(); }
@Test public void install_only_adds_ComputeEngineSide_annotated_extension_to_container() { when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of( new CoreExtension() { @Override public String getName() { return "foo"; } @Override public void load(Context context) { context.addExtensions(CeClass.class, ScannerClass.class, WebServerClass.class, NoAnnotationClass.class, OtherAnnotationClass.class, MultipleAnnotationClass.class); } })); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertThat(container.getPicoContainer().getComponentAdapters()) .hasSize(ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 2); assertThat(container.getComponentByType(CeClass.class)).isNotNull(); assertThat(container.getComponentByType(MultipleAnnotationClass.class)).isNotNull(); }
@Test public void install_has_no_effect_if_CoreExtensionRepository_has_no_loaded_CoreExtension() { ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, 0); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_PropertyDefinition_with_extension_name_as_default_category(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { PropertyDefinition propertyDefinitionNoCategory = PropertyDefinition.builder("fooKey").build(); PropertyDefinition propertyDefinitionWithCategory = PropertyDefinition.builder("barKey").category("donut").build(); List<Object> extensions = ImmutableList.of(propertyDefinitionNoCategory, propertyDefinitionWithCategory); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, 0); assertPropertyDefinitions(container, coreExtension, propertyDefinitionNoCategory, propertyDefinitionWithCategory); }