Fix issues raised in Code Review.

Conflicts:
	src/com/google/enterprise/adaptor/ad/AdServer.java
	test/com/google/enterprise/adaptor/ad/AdServerTest.java
	test/com/google/enterprise/adaptor/ad/MockLdapContext.java
diff --git a/src/com/google/enterprise/adaptor/ad/AdServer.java b/src/com/google/enterprise/adaptor/ad/AdServer.java
index b125701..aaefd1f 100644
--- a/src/com/google/enterprise/adaptor/ad/AdServer.java
+++ b/src/com/google/enterprise/adaptor/ad/AdServer.java
@@ -48,8 +48,8 @@
   private static final Logger LOGGER
       = Logger.getLogger(AdServer.class.getName());
 
-  private LdapContext ldapContext = null;
-  private SearchControls searchCtls;
+  private final LdapContext ldapContext;
+  private final SearchControls searchCtls;
 
   // properties necessary for connection
   private final String hostName;
@@ -109,9 +109,8 @@
     env.put(Context.SECURITY_PRINCIPAL, principal);
     env.put(Context.SECURITY_CREDENTIALS, password);
 
-    String ldapUrl =
-        connectMethod.protocol() + hostName + ":" + port;
-    LOGGER.info("LDAP provider url: " + ldapUrl);
+    String ldapUrl = connectMethod.protocol() + hostName + ":" + port;
+    LOGGER.config("LDAP provider url: " + ldapUrl);
     env.put(Context.PROVIDER_URL, ldapUrl);
     try {
       return new InitialLdapContext(env, null);
@@ -140,7 +139,7 @@
   public void initialize() {
     try {
       connect();
-      sid = AdEntity.getTextSid((byte[])get(
+      sid = AdEntity.getTextSid((byte[]) get(
           "distinguishedName=" + dn, "objectSid;binary", dn));
       invocationID = AdEntity.getTextGuid((byte[]) get(
           "distinguishedName=" + dsServiceName,
diff --git a/test/com/google/enterprise/adaptor/ad/AdServerTest.java b/test/com/google/enterprise/adaptor/ad/AdServerTest.java
index da5d5eb..b80a81a 100644
--- a/test/com/google/enterprise/adaptor/ad/AdServerTest.java
+++ b/test/com/google/enterprise/adaptor/ad/AdServerTest.java
@@ -64,7 +64,6 @@
   @Test
   public void testIAEOnEmptyPrincipal() throws Exception {
     thrown.expect(IllegalArgumentException.class);
-    MockLdapContext ldapContext = new MockLdapContext();
     AdServer adServer = new AdServer(Method.SSL, "hostname", 1234, "", "pw");
   }
 
@@ -123,13 +122,13 @@
         SearchControls searchControls) throws NamingException {
         if (!("dn=empty".equals(filter))) {
           return super.search(base, filter, searchControls);
-        };
+        }
         // prepare "broken" SearchResult
         Vector<SearchResult> brokenSRs = new Vector<SearchResult>();
         brokenSRs.add(new SearchResult("search result name", brokenSRs,
-          new BasicAttributes()));
+            new BasicAttributes()));
         return new MockLdapContext.SearchResultsNamingEnumeration(brokenSRs);
-      };
+      }
     };
     addStandardKeysAndResults(ldapContext);
     ldapContext.addSearchResult("dn=empty", "attr1", "basedn", "val1");
@@ -146,9 +145,9 @@
         SearchControls searchControls) throws NamingException {
         if (!("dn=empty".equals(filter))) {
           return super.search(base, filter, searchControls);
-        };
+        }
         throw new NamingException("Gotcha");
-      };
+      }
     };
     addStandardKeysAndResults(ldapContext);
     ldapContext.addSearchResult("dn=empty", "attr1", "basedn", "val1");
@@ -162,9 +161,9 @@
     thrown.expect(RuntimeException.class);
     MockLdapContext ldapContext = new MockLdapContext() {
       @Override
-        public Attributes getAttributes(String name) throws NamingException {
+      public Attributes getAttributes(String name) throws NamingException {
         throw new NamingException("Can't connect");
-      };
+      }
     };
     addStandardKeysAndResults(ldapContext);
     ldapContext.addSearchResult("dn=empty", "attr1", "basedn", "val1");
@@ -210,6 +209,29 @@
   }
 
   @Test
+  public void testSetControlsThrowsException() throws Exception {
+    MockLdapContext ldapContext = new MockLdapContext() {
+      @Override
+      public void setRequestControls(Control[] requestControls)
+          throws NamingException {
+        controls = requestControls;
+        throw new NamingException("testing exception path");
+      }
+    };
+    addStandardKeysAndResults(ldapContext);
+    // populate additional attributes with values we can test
+    final String filter = "ou=Users";
+    final String userDn = "DN_for_default_naming_context";
+    ldapContext.addSearchResult(filter, "cn", userDn, "user1")
+               .addSearchResult(filter, "primaryGroupId", userDn, "users");
+    AdServer adServer = new AdServer("localhost", ldapContext);
+    adServer.initialize();
+    Set<AdEntity> resultSet = adServer.search(filter, false,
+        new String[] { "cn", "primaryGroupId", "objectGUID;binary" });
+    assertEquals(0, resultSet.size());
+  }
+
+  @Test
   public void testSearchReturnsOneDeletedUser() throws Exception {
     MockLdapContext ldapContext = new MockLdapContext();
     addStandardKeysAndResults(ldapContext);
@@ -385,8 +407,8 @@
     int len = s.length();
     byte[] data = new byte[len / 2];
     for (int i = 0; i < len; i += 2) {
-        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
-                             + Character.digit(s.charAt(i+1), 16));
+      data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+                           + Character.digit(s.charAt(i+1), 16));
     }
     return data;
   }
diff --git a/test/com/google/enterprise/adaptor/ad/MockLdapContext.java b/test/com/google/enterprise/adaptor/ad/MockLdapContext.java
index 1cfcf68..cfc87ac 100644
--- a/test/com/google/enterprise/adaptor/ad/MockLdapContext.java
+++ b/test/com/google/enterprise/adaptor/ad/MockLdapContext.java
@@ -25,16 +25,14 @@
 import javax.naming.ldap.InitialLdapContext;
 
 /**
- * Mock of {@link Config}.
+ * Mock of {@link LdapContext}.
  */
 public class MockLdapContext extends InitialLdapContext {
   private BasicAttributes attributes = new BasicAttributes();
   private Hashtable<String, Object> searchResults
       = new Hashtable<String, Object>();
-  private Control[] controls = new Control[0];
-
-  // A hack to throw exactly 2 exceptions on calls to setRequestControls()
-  static int numberOfTimesSetRequestControlsWasCalled = 0;
+  @VisibleForTesting
+  Control[] controls = new Control[0];
 
   public MockLdapContext() throws NamingException {
   }
@@ -122,17 +120,11 @@
     return controls;
   };
 
-  /** Sets the controls (which this class does nothing with)
-   *
-   * <p>throws Exceptions exactly once, to test the Exception processing code.
-   */
+  /** Sets the controls (which this class does nothing with) */
   @Override
   public void setRequestControls(Control[] requestControls)
       throws NamingException {
     controls = requestControls;
-    if (++numberOfTimesSetRequestControlsWasCalled == 2) {
-      throw new NamingException("calling setRequestControls for second time");
-    }
   };
 
   @VisibleForTesting