@Test public void withWl() { final PrefixSource entrySource = new ArrayListPrefixSource(Arrays.asList("/org/apache", "/org/sonatype")); Mockito.when(wlManager.getPrefixSourceFor(Mockito.any(MavenProxyRepository.class))) .thenReturn(entrySource); // WL will be built, not every request should be allowed final ProxyRequestFilterImpl filter = new ProxyRequestFilterImpl(eventBus, applicationStatusSource, wlManager); // ping (this would happen on event) filter.buildPathMatcherFor(mavenProxyRepository); // +1 doTestAllowed(filter, "/org/apache/maven/foo/1.0/foo-1.0.jar", true); // +1 doTestAllowed(filter, "/org/sonatype/maven/foo/1.0/foo-1.0.jar", true); // -1 com doTestAllowed(filter, "/com/sonatype/maven/foo/1.0/foo-1.0.jar", false); // -1 not in WL doTestAllowed( filter, "/.meta/prefix.txt", false); // this file is handled in AbstractMavenRepository, using // UID attributes to test for IsHidden attribute }
@Override protected YumRepository doRun() throws Exception { String repositoryId = getRepositoryId(); if (!StringUtils.isEmpty(repositoryId)) { checkState( yumRegistry.isRegistered(repositoryId), "Metadata regeneration can only be run on repositories that have an enabled 'Yum: Generate Metadata' capability"); Yum yum = yumRegistry.get(repositoryId); checkState( yum.getNexusRepository().getRepositoryKind().isFacetAvailable(HostedRepository.class), "Metadata generation can only be run on hosted repositories"); } setDefaults(); LOG.debug("Generating Yum-Repository for '{}' ...", getRpmDir()); try { getRepoDir().mkdirs(); File rpmListFile = createRpmListFile(); commandLineExecutor.exec(buildCreateRepositoryCommand(rpmListFile)); if (isUseAbsoluteUrls() && StringUtils.isNotBlank(getRpmUrl())) { replaceUrlInRepomdXml(); } } catch (IOException e) { LOG.warn("Yum metadata generation failed", e); throw new IOException("Yum metadata generation failed", e); } // TODO dubious Thread.sleep(100); final Repository repository = findRepository(); if (repository != null) { final MavenRepository mavenRepository = repository.adaptToFacet(MavenRepository.class); if (mavenRepository != null) { try { routingManager.forceUpdatePrefixFile(mavenRepository); } catch (Exception e) { logger.warn("Could not update Whitelist for repository '{}'", mavenRepository, e); } } } regenerateMetadataForGroups(); return new YumRepositoryImpl(getRepoDir(), repositoryId, getVersion()); }
protected void buildPathMatcherFor(final MavenProxyRepository mavenProxyRepository) { try { final PrefixSource prefixSource = manager.getPrefixSourceFor(mavenProxyRepository); if (prefixSource.supported()) { final PathMatcher pathMatcher = new PathMatcher(prefixSource.readEntries(), Integer.MAX_VALUE); pathMatchers.put(mavenProxyRepository.getId(), pathMatcher); } else { dropPathMatcherFor(mavenProxyRepository); } } catch (IOException e) { getLogger().warn("Could not build PathMatcher for {}!", mavenProxyRepository, e); dropPathMatcherFor(mavenProxyRepository); } }
@Test public void flippingProxyModeUpdatesWL() throws Exception { // at this point, NexusStartedEvent was fired, and hence, WL's should be inited final Manager wm = lookup(Manager.class); final MavenProxyRepository proxy1 = getRepositoryRegistry().getRepositoryWithFacet(PROXY1_REPO_ID, MavenProxyRepository.class); assertThat(proxy1.getProxyMode(), equalTo(ProxyMode.BLOCKED_MANUAL)); waitForRoutingBackgroundUpdates(); // let's check states { // proxy1 final RoutingStatus proxy1status = wm.getStatusFor(proxy1); // this repo is Blocked assertThat(proxy1status.getPublishingStatus().getStatus(), equalTo(PStatus.NOT_PUBLISHED)); assertThat( proxy1status.getDiscoveryStatus().getStatus(), equalTo(DStatus.ENABLED_NOT_POSSIBLE)); assertThat(proxy1status.getDiscoveryStatus().getLastDiscoveryStrategy(), is("none")); // Remark: the combination of those three above simply means "discovery never tried against // it" // yet. } { // group final RoutingStatus groupStatus = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(GROUP_REPO_ID, MavenGroupRepository.class)); // not all members have WL, unpublished assertThat(groupStatus.getPublishingStatus().getStatus(), equalTo(PStatus.NOT_PUBLISHED)); // message should refer to proxy1 as reason of not publishing group WL assertThat( groupStatus.getPublishingStatus().getLastPublishedMessage(), containsString(proxy1.getName())); assertThat(groupStatus.getDiscoveryStatus().getStatus(), equalTo(DStatus.NOT_A_PROXY)); } { // let's flip proxy1 now proxy1.setProxyMode(ProxyMode.ALLOW); getApplicationConfiguration().saveConfiguration(); Thread.yield(); wairForAsyncEventsToCalmDown(); waitForRoutingBackgroundUpdates(); } // let's check states again, now with enabled proxy1 { // proxy1 final RoutingStatus proxy1status = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(PROXY1_REPO_ID, MavenProxyRepository.class)); // this repo is Out of Service assertThat(proxy1status.getPublishingStatus().getStatus(), equalTo(PStatus.PUBLISHED)); assertThat(proxy1status.getDiscoveryStatus().getStatus(), equalTo(DStatus.SUCCESSFUL)); assertThat( proxy1status.getDiscoveryStatus().getLastDiscoveryStrategy(), is(RemotePrefixFileStrategy.ID)); } { // group final RoutingStatus groupStatus = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(GROUP_REPO_ID, MavenGroupRepository.class)); assertThat(groupStatus.getPublishingStatus().getStatus(), equalTo(PStatus.PUBLISHED)); assertThat(groupStatus.getDiscoveryStatus().getStatus(), equalTo(DStatus.NOT_A_PROXY)); } { // let's flip proxy1 now back proxy1.setProxyMode(ProxyMode.BLOCKED_MANUAL); getApplicationConfiguration().saveConfiguration(); Thread.yield(); wairForAsyncEventsToCalmDown(); waitForRoutingBackgroundUpdates(); } // let's check states again, now with enabled proxy1 { // proxy1 final RoutingStatus proxy1status = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(PROXY1_REPO_ID, MavenProxyRepository.class)); // this repo is blocked assertThat(proxy1status.getPublishingStatus().getStatus(), equalTo(PStatus.PUBLISHED)); assertThat( proxy1status.getDiscoveryStatus().getStatus(), equalTo(DStatus.ENABLED_NOT_POSSIBLE)); assertThat(proxy1status.getDiscoveryStatus().getLastDiscoveryStrategy(), is("none")); } { // group final RoutingStatus groupStatus = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(GROUP_REPO_ID, MavenGroupRepository.class)); assertThat(groupStatus.getPublishingStatus().getStatus(), equalTo(PStatus.PUBLISHED)); assertThat(groupStatus.getDiscoveryStatus().getStatus(), equalTo(DStatus.NOT_A_PROXY)); } }
@Test public void manuallyBlockedRepositoryDoesNotAffectWLInitialization() throws Exception { // at this point, NexusStartedEvent was fired, and hence, WL's should be inited final Manager wm = lookup(Manager.class); final MavenProxyRepository proxy1 = getRepositoryRegistry().getRepositoryWithFacet(PROXY1_REPO_ID, MavenProxyRepository.class); assertThat(proxy1.getProxyMode(), equalTo(ProxyMode.BLOCKED_MANUAL)); waitForRoutingBackgroundUpdates(); // let's check states { // proxy1 final RoutingStatus proxy1status = wm.getStatusFor(proxy1); // this repo is Out of Service assertThat(proxy1status.getPublishingStatus().getStatus(), equalTo(PStatus.NOT_PUBLISHED)); assertThat( proxy1status.getDiscoveryStatus().getStatus(), equalTo(DStatus.ENABLED_NOT_POSSIBLE)); assertThat(proxy1status.getDiscoveryStatus().getLastDiscoveryStrategy(), is("none")); // Remark: the combination of those three above simply means "discovery never tried against // it" // yet. } { // proxy2 final RoutingStatus proxy2status = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(PROXY2_REPO_ID, MavenProxyRepository.class)); // this repo should be good assertThat(proxy2status.getPublishingStatus().getStatus(), equalTo(PStatus.PUBLISHED)); assertThat(proxy2status.getDiscoveryStatus().getStatus(), equalTo(DStatus.SUCCESSFUL)); } { // hosted final RoutingStatus hostedStatus = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(HOSTED_REPO_ID, MavenHostedRepository.class)); // this repo should be good assertThat(hostedStatus.getPublishingStatus().getStatus(), equalTo(PStatus.PUBLISHED)); assertThat(hostedStatus.getDiscoveryStatus().getStatus(), equalTo(DStatus.NOT_A_PROXY)); } { // group final RoutingStatus groupStatus = wm.getStatusFor( getRepositoryRegistry() .getRepositoryWithFacet(GROUP_REPO_ID, MavenGroupRepository.class)); // not all members have WL, unpublished assertThat(groupStatus.getPublishingStatus().getStatus(), equalTo(PStatus.NOT_PUBLISHED)); // message should refer to proxy1 as reason of not publishing group WL assertThat( groupStatus.getPublishingStatus().getLastPublishedMessage(), containsString(proxy1.getName())); assertThat(groupStatus.getDiscoveryStatus().getStatus(), equalTo(DStatus.NOT_A_PROXY)); } }