Do not send ACLs and Groups to GSA if markAllDocsAsPublic is true.

If markAllDocsAsPublic is true, feeding ACLs and Groups serves no
purpose.  This modifies DocIdSender to return immediately if
pushNamedResources() or pushGroupDefinitions() are called when
markAllDocsAsPublic is true.

When I added tests for this, I found some of the tests for
pushing named resources and groups normally were deficient,
so I beefed them up a bit.

Code Review: http://codereview.appspot.com/108400046
diff --git a/src/com/google/enterprise/adaptor/DocIdSender.java b/src/com/google/enterprise/adaptor/DocIdSender.java
index 05eafa4..9776094 100644
--- a/src/com/google/enterprise/adaptor/DocIdSender.java
+++ b/src/com/google/enterprise/adaptor/DocIdSender.java
@@ -142,6 +142,11 @@
   public DocId pushNamedResources(Map<DocId, Acl> resources,
                                   ExceptionHandler handler)
       throws InterruptedException {
+    if (config.markAllDocsAsPublic()) {
+      log.finest("Ignoring attempt to send ACLs to the GSA because "
+                 + "markAllDocsAsPublic is true.");
+      return null;
+    }
     List<AclItem> acls = new ArrayList<AclItem>(resources.size());
     for (Map.Entry<DocId, Acl> me : resources.entrySet()) {
       acls.add(new AclItem(me.getKey(), me.getValue()));
@@ -202,6 +207,11 @@
       Map<GroupPrincipal, ? extends Collection<Principal>> defs,
       boolean caseSensitive, ExceptionHandler handler) 
       throws InterruptedException {
+    if (config.markAllDocsAsPublic()) {
+      log.finest("Ignoring attempt to send groups to the GSA because "
+                 + "markAllDocsAsPublic is true.");
+      return null;
+    }
     return pushGroupDefinitionsInternal(defs, caseSensitive, handler);
   }
 
diff --git a/test/com/google/enterprise/adaptor/DocIdSenderTest.java b/test/com/google/enterprise/adaptor/DocIdSenderTest.java
index 81dec24..2f8aee0 100644
--- a/test/com/google/enterprise/adaptor/DocIdSenderTest.java
+++ b/test/com/google/enterprise/adaptor/DocIdSenderTest.java
@@ -275,7 +275,7 @@
     }
 
     config.setValue("feed.maxUrls", "2");
-    docIdSender.pushGroupDefinitions(groups, false, null);
+    assertNull(docIdSender.pushGroupDefinitions(groups, false, null));
 
     assertEquals(2, fileMaker.i);
     assertEquals(goldenGroups, fileMaker.groupses);
@@ -289,11 +289,59 @@
   }
 
   @Test
+  public void testPushGroupsAllDocsPublic() throws Exception {
+    // Order of iteration matters
+    Map<GroupPrincipal, Collection<Principal>> groups
+        = new TreeMap<GroupPrincipal, Collection<Principal>>();
+    groups.put(new GroupPrincipal("g1"),
+        Arrays.asList(new UserPrincipal("u1"), new GroupPrincipal("g2")));
+    groups.put(new GroupPrincipal("g2"),
+        Arrays.asList(new UserPrincipal("u2"), new GroupPrincipal("g3")));
+    groups.put(new GroupPrincipal("g3"),
+        Arrays.asList(new UserPrincipal("u3"), new GroupPrincipal("g4")));
+    groups = Collections.unmodifiableMap(groups);
+
+    config.setValue("adaptor.markAllDocsAsPublic", "true");
+    assertNull(docIdSender.pushGroupDefinitions(groups, false, null));
+
+    assertEquals(0, fileMaker.i);
+    assertTrue(fileMaker.groupses.isEmpty());
+    assertTrue(fileArchiver.failedFeeds.isEmpty());
+  }
+
+  @Test
   public void testNamedResources() throws Exception {
     config.setValue("feed.name", "testing");
     assertNull(docIdSender.pushNamedResources(
         Collections.singletonMap(new DocId("test"), Acl.EMPTY),
         new NeverRetryExceptionHandler()));
+    assertEquals(1, fileMaker.i);
+    assertEquals(Collections.singletonList(Collections.singletonList(
+        new DocIdSender.AclItem(new DocId("test"), Acl.EMPTY)
+    )), fileMaker.recordses);
+    assertEquals(Arrays.asList(new String[] {
+      "0"
+    }), fileSender.xmlStrings);
+    assertEquals(Arrays.asList(new String[] {
+      "0"
+    }), fileArchiver.feeds);
+    assertTrue(fileMaker.groupses.isEmpty());
+    assertTrue(fileArchiver.failedFeeds.isEmpty());
+  }
+
+  @Test
+  public void testNamedResourcesAllDocsPublic() throws Exception {
+    config.setValue("adaptor.markAllDocsAsPublic", "true");
+    config.setValue("feed.name", "testing");
+    assertNull(docIdSender.pushNamedResources(
+        Collections.singletonMap(new DocId("test"), Acl.EMPTY),
+        new NeverRetryExceptionHandler()));
+    assertEquals(0, fileMaker.i);
+    assertTrue(fileMaker.recordses.isEmpty());
+    assertTrue(fileMaker.groupses.isEmpty());
+    assertTrue(fileSender.xmlStrings.isEmpty());
+    assertTrue(fileArchiver.feeds.isEmpty());
+    assertTrue(fileArchiver.failedFeeds.isEmpty());
   }
 
   @Test