Make namespace optional and log what namespace is set to If the namespace is not set we use the hostname as a namespace. Solves: Jira GER-1637 Change-Id: I67d1c46f79696ad0e4644fb6dc67e905de2bf698
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java index dfd8f9d..5224a50 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java +++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EiffelConfig.java
@@ -14,14 +14,17 @@ package com.googlesource.gerrit.plugins.eventseiffel.config; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.server.config.PluginConfigFactory; import com.google.inject.Inject; import com.google.inject.Singleton; +import java.util.Optional; import org.eclipse.jgit.lib.Config; @Singleton public class EiffelConfig { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Provider implements com.google.inject.Provider<EiffelConfig> { private static final String EIFFELEVENT = "EiffelEvent"; @@ -40,13 +43,19 @@ } } - private final String nameSpace; + private final Optional<String> nameSpace; public EiffelConfig(String nameSpace) { - this.nameSpace = nameSpace; + if (nameSpace == null) { + this.nameSpace = Optional.empty(); + logger.atInfo().log("namespace is not set in the config"); + } else { + this.nameSpace = Optional.of(nameSpace); + logger.atInfo().log("namespace is set to: %d", nameSpace); + } } - public String nameSpace() { + public Optional<String> nameSpace() { return nameSpace; } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java index 07522fd..dc7eb92 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java +++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventFactory.java
@@ -42,6 +42,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Optional; import java.util.UUID; public class EiffelEventFactory { @@ -61,7 +62,7 @@ private final String webUrl; private final String pluginName; private final String sshAddress; - private final String nameSpace; + private final Optional<String> nameSpace; @Inject public Provider( @@ -105,7 +106,7 @@ String pluginVersion, String webUrl, String configuredSshAddress, - String nameSpace) { + Optional<String> nameSpace) { StringBuilder purl = new StringBuilder(PURL_BASE + pluginName); if (pluginVersion != null) { purl.append("@" + pluginVersion); @@ -113,7 +114,7 @@ this.packageUrl = purl.toString(); this.host = URI.create(webUrl).getHost(); this.pluginName = pluginName; - this.nameSpace = nameSpace; + this.nameSpace = nameSpace.orElse(host); StringBuilder commitEndpoint = new StringBuilder(); commitEndpoint.append(webUrl); @@ -132,7 +133,7 @@ } cloneUrl.append("%s"); projectCloneUrl = cloneUrl.toString(); - tagPURLTemplate = "pkg:generic/" + nameSpace + "/%s@%s?vcs_url=git%%2B%s%%40%s"; + tagPURLTemplate = "pkg:generic/" + this.nameSpace + "/%s@%s?vcs_url=git%%2B%s%%40%s"; } private String parseSshAddress(String webUrl, String configuredSshAddress) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java index ce326f4..c847bb0 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
@@ -24,7 +24,6 @@ import com.google.gerrit.entities.RefNames; import com.google.gerrit.extensions.api.projects.TagInput; import com.google.inject.Provider; -import com.googlesource.gerrit.plugins.eventseiffel.config.EiffelConfig; import com.googlesource.gerrit.plugins.eventseiffel.eiffel.EventKey; import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey; import com.googlesource.gerrit.plugins.eventseiffel.eiffel.api.EventStorageException; @@ -189,15 +188,8 @@ @Override public EiffelEventFactory get() { - return new EiffelEventFactory(PLUGIN_NAME, VERSION, WEB_URL, "*:" + SSH_PORT, NAMESPACE); - } - } - - public static class TestEiffelConfigProvider implements Provider<EiffelConfig> { - - @Override - public EiffelConfig get() { - return new EiffelConfig(NAMESPACE); + return new EiffelEventFactory( + PLUGIN_NAME, VERSION, WEB_URL, "*:" + SSH_PORT, Optional.of(NAMESPACE)); } } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java index ab53d14..126eb50 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
@@ -320,9 +320,7 @@ bind(EventListenersConfig.class).toProvider(TestEventListenerConfigProvider.class); DynamicSet.bind(binder(), RevisionCreatedListener.class).to(PatchsetCreatedListener.class); DynamicSet.bind(binder(), GitReferenceUpdatedListener.class).to(RefUpdateListener.class); - bind(EiffelConfig.class) - .toProvider(EiffelEventsTest.TestEiffelConfigProvider.class) - .in(Scopes.SINGLETON); + bind(EiffelConfig.class).toProvider(EiffelConfig.Provider.class).in(Scopes.SINGLETON); } } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java index 2941b38..4fcdb78 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
@@ -20,6 +20,8 @@ import com.google.gerrit.acceptance.PushOneCommit; import com.google.gerrit.acceptance.TestPlugin; +import com.google.gerrit.acceptance.UseLocalDisk; +import com.google.gerrit.acceptance.config.GlobalPluginConfig; import com.google.gerrit.extensions.common.AccountInfo; import com.google.inject.AbstractModule; import com.google.inject.Scopes; @@ -40,6 +42,8 @@ import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeSubmittedEventInfo; import com.googlesource.gerrit.plugins.eventseiffel.mapping.EiffelEventFactory; import com.googlesource.gerrit.plugins.eventseiffel.mapping.EiffelEventMapper; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.time.Instant; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.revwalk.RevCommit; @@ -266,14 +270,25 @@ assertEquals(0, TestEventHub.EVENTS.size()); } + @Test + @UseLocalDisk + @GlobalPluginConfig(pluginName = PLUGIN_NAME, name = "EiffelEvent.namespace", value = NAMESPACE) + public void artcQueuedscsHandledWithCustomNameSpace() throws Exception { + assertArtcQueuedScsHandled(false, NAMESPACE); + } + private void assertArtcQueuedScsHandled(boolean annotated) throws Exception { + assertArtcQueuedScsHandled(annotated, "localhost"); + } + + private void assertArtcQueuedScsHandled(boolean annotated, String nameSpace) throws Exception { setScsHandled(); String ref = createTagRef(getHead(repo(), "HEAD").getName(), annotated) .substring(Constants.R_TAGS.length()); - ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref)); + ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref, nameSpace)); CompositionDefinedEventKey cd = - CompositionDefinedEventKey.create(tagCompositionName(project.get()), ref); + CompositionDefinedEventKey.create(tagCompositionName(project.get(), nameSpace), ref); eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false); assertEquals(2, TestEventHub.EVENTS.size()); @@ -298,10 +313,22 @@ assertEquals(expected, actual); } + protected static String tagCompositionName(String projectName) { + return tagCompositionName(projectName, "localhost"); + } + + protected static String tagCompositionName(String projectName, String nameSpace) { + return "scmtag/git/" + nameSpace + "/" + URLEncoder.encode(projectName, StandardCharsets.UTF_8); + } + protected static String tagPURL(String projectName, String tagName) { + return tagPURL(projectName, tagName, "localhost"); + } + + protected static String tagPURL(String projectName, String tagName, String nameSpace) { return String.format( TAG_PURL_TEMPLATE, - NAMESPACE, + nameSpace, projectName, tagName, String.format("ssh://%s/%s", HOST_NAME, projectName), @@ -318,9 +345,7 @@ bind(EventMappingConfig.class).toProvider(EventMappingConfig.Provider.class); bind(EiffelEventMapper.class); bind(EiffelEventParser.class); - bind(EiffelConfig.class) - .toProvider(EiffelEventsTest.TestEiffelConfigProvider.class) - .in(Scopes.SINGLETON); + bind(EiffelConfig.class).toProvider(EiffelConfig.Provider.class).in(Scopes.SINGLETON); bind(EiffelEventFactory.class) .toProvider(EiffelEventFactory.Provider.class) .in(Scopes.SINGLETON);