@Test public void install_and_load_plugins() { PluginInfo info = new PluginInfo("squid"); ImmutableMap<String, ScannerPlugin> plugins = ImmutableMap.of("squid", new ScannerPlugin("squid", 1L, info)); Plugin instance = mock(Plugin.class); when(loader.load(anyMap())).thenReturn(ImmutableMap.of("squid", instance)); when(installer.installRemotes()).thenReturn(plugins); underTest.start(); assertThat(underTest.getPluginInfos()).containsOnly(info); assertThat(underTest.getPluginsByKey()).isEqualTo(plugins); assertThat(underTest.getPluginInfo("squid")).isSameAs(info); assertThat(underTest.getPluginInstance("squid")).isSameAs(instance); underTest.stop(); verify(loader).unload(anyCollection()); }
private String getSensorName(ModuleSensorWrapper sensor) { ClassLoader cl = getSensorClassLoader(sensor); String pluginKey = pluginRepo.getPluginKey(cl); if (pluginKey != null) { return sensor.toString() + " [" + pluginKey + "]"; } return sensor.toString(); }
@Override public void start() { pluginsByKeys = new HashMap<>(installer.installRemotes()); pluginInstancesByKeys = new HashMap<>( loader.load(pluginsByKeys.values().stream() .map(ScannerPlugin::getInfo) .collect(toMap(PluginInfo::getKey, Function.identity())))); // this part is only used by medium tests for (Object[] localPlugin : installer.installLocals()) { String pluginKey = (String) localPlugin[0]; PluginInfo pluginInfo = new PluginInfo(pluginKey); pluginsByKeys.put(pluginKey, new ScannerPlugin(pluginInfo.getKey(), (long) localPlugin[2], pluginInfo)); pluginInstancesByKeys.put(pluginKey, (Plugin) localPlugin[1]); } keysByClassLoader = new HashMap<>(); for (Map.Entry<String, Plugin> e : pluginInstancesByKeys.entrySet()) { keysByClassLoader.put(e.getValue().getClass().getClassLoader(), e.getKey()); } logPlugins(); }
@Test public void fail_if_requesting_missing_plugin() { underTest.start(); try { underTest.getPluginInfo("unknown"); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("Plugin [unknown] does not exist"); } try { underTest.getPluginInstance("unknown"); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("Plugin [unknown] does not exist"); } } }
@Test public void should_provide_list_of_extensions() { when(pluginRepository.getPluginInfos()).thenReturn(Arrays.asList(new PluginInfo("foo"))); when(pluginRepository.getPluginInstance("foo")).thenReturn(newPluginInstance(new FooBarProvider())); ComponentContainer container = new ComponentContainer(); ExtensionInstaller installer = new ExtensionInstaller(mock(SonarRuntime.class), pluginRepository, mode, settings.asConfig()); installer.install(container, new TrueMatcher()); assertThat(container.getComponentByType(Foo.class)).isNotNull(); assertThat(container.getComponentByType(Bar.class)).isNotNull(); }
@Before public void prepare() throws IOException { when(projectAnalysisInfo.analysisDate()).thenReturn(new Date(1234567L)); when(scmProvider.relativePathFromScmRoot(any(Path.class))).thenReturn(Paths.get("dummy/path")); when(scmProvider.revisionId(any(Path.class))).thenReturn("dummy-sha1"); createPublisher(ProjectDefinition.create()); when(pluginRepository.getPluginsByKey()).thenReturn(emptyMap()); }
private void writePlugins(BufferedWriter fileWriter) throws IOException { fileWriter.write("SonarQube plugins:\n"); for (PluginInfo p : pluginRepo.getPluginInfos()) { fileWriter.append(String.format(" - %s %s (%s)", p.getName(), p.getVersion(), p.getKey())).append('\n'); } }
@Test public void should_filter_extensions_to_install() { when(pluginRepository.getPluginInfos()).thenReturn(Arrays.asList(new PluginInfo("foo"))); when(pluginRepository.getPluginInstance("foo")).thenReturn(newPluginInstance(Foo.class, Bar.class)); ComponentContainer container = new ComponentContainer(); ExtensionInstaller installer = new ExtensionInstaller(mock(SonarRuntime.class), pluginRepository, mode, settings.asConfig()); installer.install(container, new FooMatcher()); assertThat(container.getComponentByType(Foo.class)).isNotNull(); assertThat(container.getComponentByType(Bar.class)).isNull(); }
.setRulesUpdatedAt(qp.getRulesUpdatedAt().getTime()).build()); for (Entry<String, ScannerPlugin> pluginEntry : pluginRepository.getPluginsByKey().entrySet()) { builder.putPluginsByKey(pluginEntry.getKey(), ScannerReport.Metadata.Plugin.newBuilder() .setKey(pluginEntry.getKey())
@Test public void shouldOnlyDumpPluginsByDefault() throws Exception { when(pluginRepo.getPluginInfos()).thenReturn(singletonList(new PluginInfo("xoo").setName("Xoo").setVersion(Version.create("1.0")))); ScannerReportWriter writer = new ScannerReportWriter(temp.newFolder()); DefaultInputModule rootModule = new DefaultInputModule(ProjectDefinition.create() .setBaseDir(temp.newFolder()) .setWorkDir(temp.newFolder())); when(store.allModules()).thenReturn(singletonList(rootModule)); when(hierarchy.root()).thenReturn(rootModule); publisher.init(writer); assertThat(writer.getFileStructure().analysisLog()).exists(); assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8)).contains("Xoo 1.0 (xoo)"); verifyZeroInteractions(system2); }
@Test public void should_execute_extension_provider() { when(pluginRepository.getPluginInfos()).thenReturn(Arrays.asList(new PluginInfo("foo"))); when(pluginRepository.getPluginInstance("foo")).thenReturn(newPluginInstance(new FooProvider(), new BarProvider())); ComponentContainer container = new ComponentContainer(); ExtensionInstaller installer = new ExtensionInstaller(mock(SonarRuntime.class), pluginRepository, mode, settings.asConfig()); installer.install(container, new FooMatcher()); assertThat(container.getComponentByType(Foo.class)).isNotNull(); assertThat(container.getComponentByType(Bar.class)).isNull(); }
@Test public void write_metadata() throws Exception { Date date = new Date(); when(qProfiles.findAll()).thenReturn(asList(new QProfile("q1", "Q1", "java", date))); when(pluginRepository.getPluginsByKey()).thenReturn(ImmutableMap.of( "java", new ScannerPlugin("java", 12345L, null), "php", new ScannerPlugin("php", 45678L, null))); File outputDir = temp.newFolder(); ScannerReportWriter writer = new ScannerReportWriter(outputDir); underTest.publish(writer); ScannerReportReader reader = new ScannerReportReader(outputDir); ScannerReport.Metadata metadata = reader.readMetadata(); assertThat(metadata.getAnalysisDate()).isEqualTo(1234567L); assertThat(metadata.getProjectKey()).isEqualTo("root"); assertThat(metadata.getModulesProjectRelativePathByKeyMap()).containsOnly(entry("module", "modulePath"), entry("root", "")); assertThat(metadata.getQprofilesPerLanguageMap()).containsOnly(entry("java", org.sonar.scanner.protocol.output.ScannerReport.Metadata.QProfile.newBuilder() .setKey("q1") .setName("Q1") .setLanguage("java") .setRulesUpdatedAt(date.getTime()) .build())); assertThat(metadata.getPluginsByKey()).containsOnly(entry("java", org.sonar.scanner.protocol.output.ScannerReport.Metadata.Plugin.newBuilder() .setKey("java") .setUpdatedAt(12345) .build()), entry("php", org.sonar.scanner.protocol.output.ScannerReport.Metadata.Plugin.newBuilder() .setKey("php") .setUpdatedAt(45678) .build())); }
private void writePlugins(BufferedWriter fileWriter) throws IOException { fileWriter.write("SonarQube plugins:\n"); for (PluginInfo p : pluginRepo.getPluginInfos()) { fileWriter.append(String.format(" - %s %s (%s)", p.getName(), p.getVersion(), p.getKey())).append('\n'); } }
private String getSensorName(ProjectSensorWrapper sensor) { ClassLoader cl = getSensorClassLoader(sensor); String pluginKey = pluginRepo.getPluginKey(cl); if (pluginKey != null) { return sensor.toString() + " [" + pluginKey + "]"; } return sensor.toString(); }
@Override public void start() { pluginsByKeys = new HashMap<>(installer.installRemotes()); pluginInstancesByKeys = new HashMap<>( loader.load(pluginsByKeys.values().stream() .map(ScannerPlugin::getInfo) .collect(toMap(PluginInfo::getKey, Function.identity())))); // this part is only used by medium tests for (Object[] localPlugin : installer.installLocals()) { String pluginKey = (String) localPlugin[0]; PluginInfo pluginInfo = new PluginInfo(pluginKey); pluginsByKeys.put(pluginKey, new ScannerPlugin(pluginInfo.getKey(), (long) localPlugin[2], pluginInfo)); pluginInstancesByKeys.put(pluginKey, (Plugin) localPlugin[1]); } keysByClassLoader = new HashMap<>(); for (Map.Entry<String, Plugin> e : pluginInstancesByKeys.entrySet()) { keysByClassLoader.put(e.getValue().getClass().getClassLoader(), e.getKey()); } logPlugins(); }
.setRulesUpdatedAt(qp.getRulesUpdatedAt().getTime()).build()); for (Entry<String, ScannerPlugin> pluginEntry : pluginRepository.getPluginsByKey().entrySet()) { builder.putPluginsByKey(pluginEntry.getKey(), ScannerReport.Metadata.Plugin.newBuilder() .setKey(pluginEntry.getKey())
private String getSensorName(ProjectSensorWrapper sensor) { ClassLoader cl = getSensorClassLoader(sensor); String pluginKey = pluginRepo.getPluginKey(cl); if (pluginKey != null) { return sensor.toString() + " [" + pluginKey + "]"; } return sensor.toString(); }
private String getSensorName(ModuleSensorWrapper sensor) { ClassLoader cl = getSensorClassLoader(sensor); String pluginKey = pluginRepo.getPluginKey(cl); if (pluginKey != null) { return sensor.toString() + " [" + pluginKey + "]"; } return sensor.toString(); }