@Override protected void initialize() { super.initialize(); coreExtensionRepository.loadedCoreExtensions() .map(CoreExtension::getName) .forEach(this::initPlugin); }
private void checkCoreExtensionExists(Page page) { String coreExtensionName = page.getPluginKey(); checkState(coreExtensionRepository.isInstalled(coreExtensionName), "Page '%s' references Core Extension '%s' which is not installed", page.getName(), coreExtensionName); }
public void load() { Set<CoreExtension> coreExtensions = serviceLoaderWrapper.load(getClass().getClassLoader()); ensureNoDuplicateName(coreExtensions); coreExtensionRepository.setLoadedCoreExtensions(coreExtensions); if (!coreExtensions.isEmpty()) { LOG.info("Loaded core extensions: {}", coreExtensions.stream().map(CoreExtension::getName).collect(Collectors.joining(", "))); } }
private void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) { String coreExtensionName = coreExtension.getName(); try { List<Object> providerKeys = addDeclaredExtensions(container, extensionFilter, additionalSideFilter, coreExtension); addProvidedExtensions(container, additionalSideFilter, coreExtensionName, providerKeys); LOG.debug("Installed core extension: " + coreExtensionName); coreExtensionRepository.installed(coreExtension); } catch (Exception e) { throw new RuntimeException("Failed to load core extension " + coreExtensionName, e); } }
private void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) { String coreExtensionName = coreExtension.getName(); try { List<Object> providerKeys = addDeclaredExtensions(container, extensionFilter, additionalSideFilter, coreExtension); addProvidedExtensions(container, additionalSideFilter, coreExtensionName, providerKeys); LOG.debug("Installed core extension: " + coreExtensionName); coreExtensionRepository.installed(coreExtension); } catch (Exception e) { throw new RuntimeException("Failed to load core extension " + coreExtensionName, e); } }
/** * @param container the container into which extensions will be installed * @param extensionFilter filters extensions added to {@link CoreExtension.Context}. When it returns false, the * extension is ignored as if it had never been added to the context. * @param additionalSideFilter applied on top of filtering on {@link #supportedAnnotationType} to decide whether * extension should be added to container as an object or only as a PropertyDefinition. */ public void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter) { coreExtensionRepository.loadedCoreExtensions() .forEach(coreExtension -> install(container, extensionFilter, additionalSideFilter, coreExtension)); }
@Test public void return_content_of_folder_of_installed_core_extension() throws Exception { system.coreExtensionStream = IOUtils.toInputStream("bar"); when(coreExtensionRepository.isInstalled("coreext")).thenReturn(true); Response response = call("/static/coreext/foo/bar.txt"); assertThat(response.isSuccessful()).isTrue(); assertThat(response.body().string()).isEqualTo("bar"); assertThat(system.coreExtensionResource).isEqualTo("static/foo/bar.txt"); }
@Test public void load_sets_loaded_core_extensions_into_repository() { Set<CoreExtension> coreExtensions = IntStream.range(0, 1 + new Random().nextInt(5)) .mapToObj(i -> newCoreExtension("core_ext_" + i)) .collect(Collectors.toSet()); when(serviceLoaderWrapper.load(any())).thenReturn(coreExtensions); underTest.load(); verify(serviceLoaderWrapper).load(CoreExtensionsLoader.class.getClassLoader()); verify(coreExtensionRepository).setLoadedCoreExtensions(coreExtensions); verifyNoMoreInteractions(serviceLoaderWrapper, coreExtensionRepository); }
@Before public void before() { PluginRepository pluginRepository = mock(PluginRepository.class); List<PluginInfo> plugins = singletonList(newPlugin("checkstyle")); when(pluginRepository.getPluginInfos()).thenReturn(plugins); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); Stream<CoreExtension> coreExtensions = Stream.of(newCoreExtension("coreext"), newCoreExtension("othercorext")); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(coreExtensions); underTest = new ServerI18n(pluginRepository, system2, coreExtensionRepository); underTest.doStart(getClass().getClassLoader()); }
@Test public void return_content_of_folder_of_installed_core_extension_over_installed_plugin_in_case_of_key_conflict() throws Exception { system.coreExtensionStream = IOUtils.toInputStream("bar of plugin"); when(coreExtensionRepository.isInstalled("samekey")).thenReturn(true); system.coreExtensionStream = IOUtils.toInputStream("bar of core extension"); when(coreExtensionRepository.isInstalled("samekey")).thenReturn(true); Response response = call("/static/samekey/foo/bar.txt"); assertThat(response.isSuccessful()).isTrue(); assertThat(response.body().string()).isEqualTo("bar of core extension"); assertThat(system.pluginResource).isNull(); assertThat(system.coreExtensionResource).isEqualTo("static/foo/bar.txt"); }
@Test public void load_has_no_effect_if_there_is_no_ServiceLoader_for_CoreExtension_class() { when(serviceLoaderWrapper.load(any())).thenReturn(Collections.emptySet()); underTest.load(); verify(serviceLoaderWrapper).load(CoreExtensionsLoader.class.getClassLoader()); verify(coreExtensionRepository).setLoadedCoreExtensions(Collections.emptySet()); verifyNoMoreInteractions(serviceLoaderWrapper, coreExtensionRepository); }
@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 void init(Page... pages) { PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused")); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); ws = new WsActionTester(new SettingsAction(pageRepository, settings.asConfig(), userSessionRule)); pageRepository.start(); }
public void load() { Set<CoreExtension> coreExtensions = serviceLoaderWrapper.load(getClass().getClassLoader()); ensureNoDuplicateName(coreExtensions); coreExtensionRepository.setLoadedCoreExtensions(coreExtensions); if (!coreExtensions.isEmpty()) { LOG.info("Loaded core extensions: {}", coreExtensions.stream().map(CoreExtension::getName).collect(Collectors.joining(", "))); } }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_does_not_install_extensions_annotated_with_expected_annotation_but_filtered_out(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(), t -> t != Latitude.class); assertAddedExtensions(container, WestSideClass.class); assertPropertyDefinitions(container); }
private void initWithPages(Page... pages) { PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused").setVersion(Version.create("1.0"))); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); pageRepository.start(); ws = new WsActionTester(new OrganizationAction(dbClient, defaultOrganizationProvider, userSession, pageRepository, billingValidations)); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_PropertyDefinition_from_annotation_no_matter_annotations_even_if_filtered_out(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(), t -> false); assertAddedExtensions(container, 0); assertPropertyDefinitions(container, "westKey", "eastKey", "otherKey", "latitudeKey", "blankKey"); }
PluginRepository pluginRepository = system.getPluginRepository(); boolean coreExtension = coreExtensionRepository.isInstalled(pluginKey); if (!coreExtension && !pluginRepository.hasPlugin(pluginKey)) { silentlySendError(response, SC_NOT_FOUND);
@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); }
private void init(org.sonar.api.web.page.Page[] pages, ResourceTypeTree[] resourceTypeTrees) { when(dbClient.getDatabase().getDialect()).thenReturn(new H2()); when(server.getVersion()).thenReturn("6.42"); PluginRepository pluginRepository = mock(PluginRepository.class); when(pluginRepository.hasPlugin(any())).thenReturn(true); when(pluginRepository.getPluginInfo(any())).thenReturn(new PluginInfo("unused").setVersion(Version.create("1.0"))); CoreExtensionRepository coreExtensionRepository = mock(CoreExtensionRepository.class); when(coreExtensionRepository.isInstalled(any())).thenReturn(false); PageRepository pageRepository = new PageRepository(pluginRepository, coreExtensionRepository, new PageDefinition[] {context -> { for (Page page : pages) { context.addPage(page); } }}); pageRepository.start(); GlobalAction wsAction = new GlobalAction(pageRepository, settings.asConfig(), new ResourceTypes(resourceTypeTrees), server, webServer, dbClient, organizationFlags, defaultOrganizationProvider, branchFeature, userSession, editionProvider); ws = new WsActionTester(wsAction); wsAction.start(); }