Test CodeOwnerConfigHierarchy when refs/meta/config branch is missing

This increases the test coverage for CodeOwnerConfigHierarchy from 93.5%
to 98.4%.

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I7d4eacf4bfbbad40f4fb0c8ab45c2b935ef4cf25
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerConfigHierarchyTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerConfigHierarchyTest.java
index 79885dc..a99de99 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerConfigHierarchyTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerConfigHierarchyTest.java
@@ -16,6 +16,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.server.project.ProjectCache.illegalState;
 import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
@@ -30,6 +31,8 @@
 import com.google.gerrit.plugins.codeowners.acceptance.testsuite.CodeOwnerConfigOperations;
 import com.google.gerrit.plugins.codeowners.acceptance.testsuite.TestPathExpressions;
 import com.google.gerrit.plugins.codeowners.backend.config.InvalidPluginConfigurationException;
+import com.google.gerrit.server.project.ProjectState;
+import com.google.gerrit.server.restapi.project.DeleteRef;
 import com.google.inject.Inject;
 import java.io.IOException;
 import java.nio.file.Paths;
@@ -57,6 +60,7 @@
   @Mock private Consumer<CodeOwnerConfig.Key> parentCodeOwnersIgnoredCallback;
 
   @Inject private ProjectOperations projectOperations;
+  @Inject private DeleteRef deleteRef;
 
   private CodeOwnerConfigOperations codeOwnerConfigOperations;
   private CodeOwnerConfigHierarchy codeOwnerConfigHierarchy;
@@ -736,6 +740,23 @@
     verifyNoMoreInteractions(visitor);
   }
 
+  @Test
+  public void refsMetaConfigBranchIsMissing() throws Exception {
+    ProjectState projectState = projectCache.get(project).orElseThrow(illegalState(project));
+    deleteRef.deleteSingleRef(projectState, RefNames.REFS_CONFIG);
+
+    // Visit '/foo/bar/baz.md' in master. This would callback for these OWNERS files if they
+    // existed:
+    // 1. '/foo/bar/OWNERS' in master
+    // 2. '/foo/OWNERS' in master
+    // 3. '/OWNERS' in master
+    // 4. '/OWNERS' in refs/meta/config (this is where the default code owners are loaded from)
+    // This test is making sure that trying to load 4. doesn't fail if refs/meta/config doesn't
+    // exist.
+    visit("master", "/foo/bar/baz.md");
+    verifyZeroInteractions(visitor);
+  }
+
   private void visit(String branchName, String path)
       throws InvalidPluginConfigurationException, IOException {
     BranchNameKey branchNameKey = BranchNameKey.create(project, branchName);