AMBARI-21307 Added unit test for the LdapFacade

Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f637b527
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f637b527
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f637b527

Branch: refs/heads/feature-branch-AMBARI-21307
Commit: f637b52731529407c9af10905cae72e01dc0bf86
Parents: 748302f
Author: lpuskas <lpus...@apache.org>
Authored: Thu Oct 12 16:53:31 2017 +0200
Committer: lpuskas <lpus...@apache.org>
Committed: Thu Oct 12 19:25:52 2017 +0200

----------------------------------------------------------------------
 .../services/AmbariConfigurationService.java    |   2 +-
 .../ldap/domain/AmbariLdapConfiguration.java    |  22 ++
 .../server/ldap/service/AmbariLdapFacade.java   |  10 +-
 .../ldap/service/AmbariLdapFacadeTest.java      | 215 +++++++++++++++++++
 4 files changed, 245 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f637b527/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariConfigurationService.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariConfigurationService.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariConfigurationService.java
index 492509f..38ae766 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariConfigurationService.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariConfigurationService.java
@@ -150,7 +150,7 @@ public class AmbariConfigurationService extends BaseService 
{
   @PUT
   @Path("{configurationId}")
   @Produces(MediaType.TEXT_PLAIN)
-  @ApiOperation(value = "Updates ambari configuration resources - Not 
implemented yet",
+  @ApiOperation(value = "Updates ambari configuration resources ",
     nickname = "AmbariConfigurationService#updateAmbariConfiguration")
   @ApiImplicitParams({
     @ApiImplicitParam(dataType = AMBARI_CONFIGURATION_REQUEST_TYPE, paramType 
= PARAM_TYPE_BODY),

http://git-wip-us.apache.org/repos/asf/ambari/blob/f637b527/ambari-server/src/main/java/org/apache/ambari/server/ldap/domain/AmbariLdapConfiguration.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/ldap/domain/AmbariLdapConfiguration.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/ldap/domain/AmbariLdapConfiguration.java
index d071ebe..8b26cd3 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/ldap/domain/AmbariLdapConfiguration.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/ldap/domain/AmbariLdapConfiguration.java
@@ -19,6 +19,8 @@ import java.util.Map;
 
 import javax.inject.Inject;
 
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -174,4 +176,24 @@ public class AmbariLdapConfiguration {
   public String toString() {
     return configurationMap.toString();
   }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+
+    if (o == null || getClass() != o.getClass()) return false;
+
+    AmbariLdapConfiguration that = (AmbariLdapConfiguration) o;
+
+    return new EqualsBuilder()
+      .append(configurationMap, that.configurationMap)
+      .isEquals();
+  }
+
+  @Override
+  public int hashCode() {
+    return new HashCodeBuilder(17, 37)
+      .append(configurationMap)
+      .toHashCode();
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f637b527/ambari-server/src/main/java/org/apache/ambari/server/ldap/service/AmbariLdapFacade.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/ldap/service/AmbariLdapFacade.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/ldap/service/AmbariLdapFacade.java
index c75b0c4..bbfbc8e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/ldap/service/AmbariLdapFacade.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/ldap/service/AmbariLdapFacade.java
@@ -33,7 +33,7 @@ public class AmbariLdapFacade implements LdapFacade {
   /**
    * Additional parameters expected to be provided along with the configuration
    */
-  private enum Parameters {
+  protected enum Parameters {
     TEST_USER_NAME("ambari.ldap.test.user.name"),
     TEST_USER_PASSWORD("ambari.ldap.test.user.password");
 
@@ -43,7 +43,7 @@ public class AmbariLdapFacade implements LdapFacade {
       this.parameterKey = parameterKey;
     }
 
-    private String getParameterKey() {
+    public String getParameterKey() {
       return parameterKey;
     }
 
@@ -62,6 +62,7 @@ public class AmbariLdapFacade implements LdapFacade {
   @Override
   public void checkConnection(AmbariLdapConfiguration ambariLdapConfiguration) 
throws AmbariLdapException {
     try {
+
       ldapConfigurationService.checkConnection(ambariLdapConfiguration);
       LOGGER.info("Validating LDAP connection related configuration: SUCCESS");
 
@@ -80,12 +81,15 @@ public class AmbariLdapFacade implements LdapFacade {
     LOGGER.info("Detecting LDAP configuration attributes ...");
 
     try {
-
+      LOGGER.info("Detecting user attributes ....");
       // decorate the configuration with detected user attributes
       ambariLdapConfiguration = 
ldapAttributeDetectionService.detectLdapUserAttributes(ambariLdapConfiguration);
 
+      LOGGER.info("Detecting group attributes ....");
       // decorate the configuration with detected group attributes
       ambariLdapConfiguration = 
ldapAttributeDetectionService.detectLdapGroupAttributes(ambariLdapConfiguration);
+
+      LOGGER.info("Attribute detection finished.");
       return ambariLdapConfiguration;
 
     } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f637b527/ambari-server/src/test/java/org/apache/ambari/server/ldap/service/AmbariLdapFacadeTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/ldap/service/AmbariLdapFacadeTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/ldap/service/AmbariLdapFacadeTest.java
new file mode 100644
index 0000000..8552f86
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/ldap/service/AmbariLdapFacadeTest.java
@@ -0,0 +1,215 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.ldap.service;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ambari.server.ldap.domain.AmbariLdapConfigKeys;
+import org.apache.ambari.server.ldap.domain.AmbariLdapConfiguration;
+import org.apache.ambari.server.ldap.domain.AmbariLdapConfigurationFactory;
+import 
org.apache.ambari.server.ldap.domain.TestAmbariAmbariLdapConfigurationFactory;
+import org.easymock.Capture;
+import org.easymock.EasyMock;
+import org.easymock.EasyMockRule;
+import org.easymock.EasyMockSupport;
+import org.easymock.Mock;
+import org.easymock.MockType;
+import org.easymock.TestSubject;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+/**
+ * Unit test suite for the LdapFacade operations.
+ */
+public class AmbariLdapFacadeTest extends EasyMockSupport {
+
+  @Rule
+  public EasyMockRule mocks = new EasyMockRule(this);
+
+  @Mock(type = MockType.STRICT)
+  public LdapConfigurationService ldapConfigurationServiceMock;
+
+  @Mock(type = MockType.STRICT)
+  public LdapAttributeDetectionService ldapAttributeDetectionServiceMock;
+
+  private AmbariLdapConfigurationFactory ambariLdapConfigurationFactory;
+
+
+  @TestSubject
+  private LdapFacade ldapFacade = new AmbariLdapFacade();
+
+  private AmbariLdapConfiguration ambariLdapConfiguration;
+
+
+  private Capture<AmbariLdapConfiguration> ambariLdapConfigurationCapture;
+
+  @Before
+  public void before() {
+    ambariLdapConfigurationFactory = new 
TestAmbariAmbariLdapConfigurationFactory();
+    ambariLdapConfiguration = 
ambariLdapConfigurationFactory.createLdapConfiguration(Maps.newHashMap());
+    ambariLdapConfigurationCapture = Capture.newInstance();
+
+
+    resetAll();
+  }
+
+  /**
+   * Tests whether the facade method call delegates to the proper service call.
+   * The thest is success if the same instance is passed to the service.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testShouldConfigurationCheckDelegateToTheRightServiceCall() 
throws Exception {
+    // GIVEN
+    // the mocks are set up
+    
ldapConfigurationServiceMock.checkConnection(EasyMock.capture(ambariLdapConfigurationCapture));
+    replayAll();
+    // WHEN
+    // the facade method is called
+    ldapFacade.checkConnection(ambariLdapConfiguration);
+
+    // THEN
+    // the captured configuration instance is the same the facade method got 
called with
+    Assert.assertEquals("The configuration instance souldn't change before 
passing it to the service",
+      ambariLdapConfiguration, ambariLdapConfigurationCapture.getValue());
+  }
+
+  @Test(expected = AmbariLdapException.class)
+  public void testShouldConfigurationCheckFailureResultInAmbariLdapException() 
throws Exception {
+    // GIVEN
+    
ldapConfigurationServiceMock.checkConnection(EasyMock.anyObject(AmbariLdapConfiguration.class));
+    EasyMock.expectLastCall().andThrow(new AmbariLdapException("Testing ..."));
+    replayAll();
+
+    // WHEN
+    ldapFacade.checkConnection(ambariLdapConfiguration);
+
+    // THEN
+    // exception is thrown
+
+  }
+
+  @Test
+  public void testShouldLdapAttributesCheckDelegateToTheRightServiceCalls() 
throws Exception {
+    // GIVEN
+
+    Map<String, Object> parameters = Maps.newHashMap();
+    
parameters.put(AmbariLdapFacade.Parameters.TEST_USER_NAME.getParameterKey(), 
"testUser");
+    
parameters.put(AmbariLdapFacade.Parameters.TEST_USER_PASSWORD.getParameterKey(),
 "testPassword");
+
+
+    Capture<String> testUserCapture = Capture.newInstance();
+    Capture<String> testPasswordCapture = Capture.newInstance();
+    Capture<String> userDnCapture = Capture.newInstance();
+
+    
EasyMock.expect(ldapConfigurationServiceMock.checkUserAttributes(EasyMock.capture(testUserCapture),
 EasyMock.capture(testPasswordCapture),
+      EasyMock.capture(ambariLdapConfigurationCapture))).andReturn("userDn");
+
+    
EasyMock.expect(ldapConfigurationServiceMock.checkGroupAttributes(EasyMock.capture(userDnCapture),
+      
EasyMock.capture(ambariLdapConfigurationCapture))).andReturn(Sets.newHashSet("userGroup"));
+
+    replayAll();
+
+    // WHEN
+    Set<String> testUserGroups = ldapFacade.checkLdapAttributes(parameters, 
ambariLdapConfiguration);
+
+    // THEN
+    Assert.assertEquals("testUser", testUserCapture.getValue());
+    Assert.assertEquals("testPassword", testPasswordCapture.getValue());
+    Assert.assertEquals("userDn", userDnCapture.getValue());
+
+    Assert.assertTrue(testUserGroups.contains("userGroup"));
+
+  }
+
+  @Test(expected = AmbariLdapException.class)
+  public void testShouldAttributeCheckFailuresResultInAmbariLdapException() 
throws Exception {
+    // GIVEN
+    Map<String, Object> parameters = Maps.newHashMap();
+    
parameters.put(AmbariLdapFacade.Parameters.TEST_USER_NAME.getParameterKey(), 
"testUser");
+    
parameters.put(AmbariLdapFacade.Parameters.TEST_USER_PASSWORD.getParameterKey(),
 "testPassword");
+
+    
EasyMock.expect(ldapConfigurationServiceMock.checkUserAttributes(EasyMock.anyString(),
 EasyMock.anyString(),
+      EasyMock.anyObject(AmbariLdapConfiguration.class))).andThrow(new 
AmbariLdapException("Testing ..."));
+
+    replayAll();
+
+    // WHEN
+    Set<String> testUserGroups = ldapFacade.checkLdapAttributes(parameters, 
ambariLdapConfiguration);
+    // THEN
+    // Exception is thrown
+  }
+
+  @Test
+  public void testShouldLdapAttributeDetectionDelegateToTheRightServiceCalls() 
throws Exception {
+
+    // configuration map with user attributes detected
+    Map<String, Object> userConfigMap = Maps.newHashMap();
+    userConfigMap.put(AmbariLdapConfigKeys.USER_NAME_ATTRIBUTE.key(), "uid");
+    AmbariLdapConfiguration userAttrDecoratedConfig = 
ambariLdapConfigurationFactory.createLdapConfiguration(userConfigMap);
+
+    // configuration map with user+group attributes detected
+    Map<String, Object> groupConfigMap = Maps.newHashMap(userConfigMap);
+    groupConfigMap.put(AmbariLdapConfigKeys.GROUP_NAME_ATTRIBUTE.key(), "dn");
+    AmbariLdapConfiguration groupAttrDecoratedConfig = 
ambariLdapConfigurationFactory.createLdapConfiguration(groupConfigMap);
+
+    Capture<AmbariLdapConfiguration> userAttrDetectionConfigCapture = 
Capture.newInstance();
+    Capture<AmbariLdapConfiguration> groupAttrDetectionConfigCapture = 
Capture.newInstance();
+
+    // GIVEN
+    
EasyMock.expect(ldapAttributeDetectionServiceMock.detectLdapUserAttributes(EasyMock.capture(userAttrDetectionConfigCapture)))
+      .andReturn(userAttrDecoratedConfig);
+
+    
EasyMock.expect(ldapAttributeDetectionServiceMock.detectLdapGroupAttributes(EasyMock.capture(groupAttrDetectionConfigCapture)))
+      .andReturn(groupAttrDecoratedConfig);
+
+    replayAll();
+
+    // WHEN
+    AmbariLdapConfiguration detected = 
ldapFacade.detectAttributes(ambariLdapConfiguration);
+
+    // THEN
+    Assert.assertEquals("User attribute detection called with the wrong 
configuration", ambariLdapConfiguration,
+      userAttrDetectionConfigCapture.getValue());
+
+    Assert.assertEquals("Group attribute detection called with the wrong 
configuration", userAttrDecoratedConfig,
+      groupAttrDetectionConfigCapture.getValue());
+
+    Assert.assertEquals("Attribute detection returned an invalid 
configuration", groupAttrDecoratedConfig, detected);
+
+  }
+
+  @Test(expected = AmbariLdapException.class)
+  public void 
testShouldAttributeDetectionFailuresResultInAmbariLdapException() throws 
Exception {
+    // GIVEN
+    
EasyMock.expect(ldapAttributeDetectionServiceMock.detectLdapUserAttributes(EasyMock.anyObject(AmbariLdapConfiguration.class)))
+      .andThrow(new AmbariLdapException("Testing ..."));
+
+    replayAll();
+
+    // WHEN
+    ldapFacade.detectAttributes(ambariLdapConfiguration);
+
+    // THEN
+    // Exception is thrown
+  }
+}
\ No newline at end of file

Reply via email to