public ImmutableList<PluginMatchingResult<VulnDetector>> getVulnDetectors(
      ReconnaissanceReport reconnaissanceReport) {
    return tsunamiPlugins.entrySet().stream()
        .filter(entry -> isVulnDetector(entry.getKey()))
        .map(entry -> matchAllVulnDetectors(entry.getKey(), entry.getValue(), reconnaissanceReport))
        .flatMap(Streams::stream)
        .collect(toImmutableList());
  }
@Test
  public void
      getVulnDetectors_whenRemotePluginsInstalledNoFiltering_returnsAllRemoteTsunamiPlugins()
          throws Exception {
    NetworkService fakeNetworkService1 =
        NetworkService.newBuilder()
            .setNetworkEndpoint(NetworkEndpointUtils.forIpAndPort("1.1.1.1", 80))
            .setTransportProtocol(TransportProtocol.TCP)
            .setServiceName("http")
            .build();
    NetworkService fakeNetworkService2 =
        NetworkService.newBuilder()
            .setNetworkEndpoint(NetworkEndpointUtils.forIpAndPort("1.1.1.1", 443))
            .setTransportProtocol(TransportProtocol.TCP)
            .setServiceName("https")
            .build();
    ReconnaissanceReport fakeReconnaissanceReport =
        ReconnaissanceReport.newBuilder()
            .setTargetInfo(TargetInfo.getDefaultInstance())
            .addNetworkServices(fakeNetworkService1)
            .addNetworkServices(fakeNetworkService2)
            .build();
    PluginManager pluginManager =
        Guice.createInjector(
                new FakeServiceFingerprinterBootstrapModule(),
                new FakeRemoteVulnDetectorLoadingModule(2))
            .getInstance(PluginManager.class);

    ImmutableList<PluginMatchingResult<VulnDetector>> remotePlugins =
        pluginManager.getVulnDetectors(fakeReconnaissanceReport);

    assertThat(
            remotePlugins.stream()
                .map(pluginMatchingResult -> pluginMatchingResult.tsunamiPlugin().getClass()))
        .containsExactly(FakeRemoteVulnDetector.class, FakeRemoteVulnDetector.class);
  }