Do not reject '*' as email if allowed email domains are configured

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: Ifdb65a252a588c67e2d9b1cdd8c9a6cbcdbc1862
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java
index fdd4da2..cf9a16b 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java
@@ -377,6 +377,10 @@
       return true;
     }
 
+    if (email.equals(ALL_USERS_WILDCARD)) {
+      return true;
+    }
+
     int emailAtIndex = email.lastIndexOf('@');
     if (emailAtIndex >= 0 && emailAtIndex < email.length() - 1) {
       String emailDomain = email.substring(emailAtIndex + 1);
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java
index 609411f..357c5d8 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java
@@ -43,6 +43,7 @@
 import com.google.gerrit.plugins.codeowners.backend.CodeOwnerConfigImportMode;
 import com.google.gerrit.plugins.codeowners.backend.CodeOwnerConfigImportType;
 import com.google.gerrit.plugins.codeowners.backend.CodeOwnerConfigReference;
+import com.google.gerrit.plugins.codeowners.backend.CodeOwnerResolver;
 import com.google.gerrit.plugins.codeowners.backend.CodeOwnerSet;
 import com.google.gerrit.plugins.codeowners.backend.findowners.FindOwnersBackend;
 import com.google.gerrit.plugins.codeowners.backend.findowners.FindOwnersCodeOwnerConfigParser;
@@ -99,6 +100,35 @@
   }
 
   @Test
+  public void canUploadConfigWhichAssignsCodeOwnershipToAllUsers() throws Exception {
+    testCanUploadConfigWhichAssignsCodeOwnershipToAllUsers();
+  }
+
+  @Test
+  @GerritConfig(name = "plugin.code-owners.allowedEmailDomain", value = "example.com")
+  public void canUploadConfigWhichAssignsCodeOwnershipToAllUsers_restrictedAllowedEmailDomain()
+      throws Exception {
+    testCanUploadConfigWhichAssignsCodeOwnershipToAllUsers();
+  }
+
+  private void testCanUploadConfigWhichAssignsCodeOwnershipToAllUsers() throws Exception {
+    CodeOwnerConfig.Key codeOwnerConfigKey = createCodeOwnerConfigKey("/");
+
+    // Create a code owner config without issues that assigns code ownership to all users.
+    PushOneCommit.Result r =
+        createChange(
+            "Add code owners",
+            codeOwnerConfigOperations.codeOwnerConfig(codeOwnerConfigKey).getJGitFilePath(),
+            format(
+                CodeOwnerConfig.builder(codeOwnerConfigKey, TEST_REVISION)
+                    .addCodeOwnerSet(
+                        CodeOwnerSet.createWithoutPathExpressions(
+                            CodeOwnerResolver.ALL_USERS_WILDCARD))
+                    .build()));
+    assertOkWithHints(r, "code owner config files validated, no issues found");
+  }
+
+  @Test
   public void canSubmitConfigWithoutIssues() throws Exception {
     CodeOwnerConfig.Key codeOwnerConfigKey = createCodeOwnerConfigKey("/");
 
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java
index f390336..0ac0deb 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolverTest.java
@@ -334,6 +334,8 @@
     assertThat(codeOwnerResolver.get().isEmailDomainAllowed("foo")).isFalse();
     assertThat(codeOwnerResolver.get().isEmailDomainAllowed("foo@example.com@example.org"))
         .isFalse();
+    assertThat(codeOwnerResolver.get().isEmailDomainAllowed(CodeOwnerResolver.ALL_USERS_WILDCARD))
+        .isTrue();
   }
 
   @Test
@@ -346,6 +348,8 @@
     assertThat(codeOwnerResolver.get().isEmailDomainAllowed("foo")).isTrue();
     assertThat(codeOwnerResolver.get().isEmailDomainAllowed("foo@example.com@example.org"))
         .isTrue();
+    assertThat(codeOwnerResolver.get().isEmailDomainAllowed(CodeOwnerResolver.ALL_USERS_WILDCARD))
+        .isTrue();
   }
 
   @Test