You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/01/05 17:54:04 UTC

ambari git commit: AMBARI-19365. Executing ambari-server unit tests with JDK 1.8 results in unit test failures (rlevas)

Repository: ambari
Updated Branches:
  refs/heads/trunk 381b474d6 -> 5e72ee6f2


AMBARI-19365. Executing ambari-server unit tests with JDK 1.8 results in unit test failures (rlevas)


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

Branch: refs/heads/trunk
Commit: 5e72ee6f2c6ebcda105e521d819f95ffde1b245e
Parents: 381b474
Author: Robert Levas <rl...@hortonworks.com>
Authored: Thu Jan 5 12:53:53 2017 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Thu Jan 5 12:53:59 2017 -0500

----------------------------------------------------------------------
 .../controller/utilities/KerberosChecker.java   |  50 +++++----
 .../utilities/LoginContextHelper.java           |  56 ++++++++++
 .../utilities/KerberosCheckerTest.java          |  43 +++-----
 .../system/impl/JvmMetricsSourceTest.java       |  75 ++++++++++++-
 .../AmbariBasicAuthenticationFilterTest.java    |  37 ++-----
 .../server/upgrade/UpgradeCatalog222Test.java   |   4 +-
 .../view/persistence/DataStoreImplTest.java     | 110 +++++++++----------
 7 files changed, 235 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/KerberosChecker.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/KerberosChecker.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/KerberosChecker.java
index e0a3d55..2ca9735 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/KerberosChecker.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/KerberosChecker.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -35,19 +35,25 @@ import com.sun.security.auth.callback.TextCallbackHandler;
 
 public class KerberosChecker {
 
-  private static final String HTTP_SPNEGO_STANDARD_ENTRY =
-    "com.sun.security.jgss.krb5.initiate";
+  static final String HTTP_SPNEGO_STANDARD_ENTRY =
+      "com.sun.security.jgss.krb5.initiate";
   private static final String KRB5_LOGIN_MODULE =
-    "com.sun.security.auth.module.Krb5LoginModule";
+      "com.sun.security.auth.module.Krb5LoginModule";
   public static final String JAVA_SECURITY_AUTH_LOGIN_CONFIG =
-    "java.security.auth.login.config";
+      "java.security.auth.login.config";
 
-  static Logger LOG = LoggerFactory.getLogger(KerberosChecker.class);
+  private static Logger LOG = LoggerFactory.getLogger(KerberosChecker.class);
 
   @Inject
   static Configuration config;
 
   /**
+   * Used to help create new LoginContext instances
+   */
+  @Inject
+  static LoginContextHelper loginContextHelper;
+
+  /**
    * Checks Ambari Server with a Kerberos principal and keytab to allow views
    * to authenticate via SPNEGO against cluster components.
    *
@@ -61,14 +67,14 @@ public class KerberosChecker {
       String jaasConfPath = System.getProperty(JAVA_SECURITY_AUTH_LOGIN_CONFIG);
 
       javax.security.auth.login.Configuration jaasConf =
-        javax.security.auth.login.Configuration.getConfiguration();
+          javax.security.auth.login.Configuration.getConfiguration();
 
       AppConfigurationEntry[] jaasConfEntries =
-        jaasConf.getAppConfigurationEntry(HTTP_SPNEGO_STANDARD_ENTRY);
+          jaasConf.getAppConfigurationEntry(HTTP_SPNEGO_STANDARD_ENTRY);
 
       if (jaasConfEntries == null) {
         LOG.warn("Can't find " + HTTP_SPNEGO_STANDARD_ENTRY + " entry in " +
-        jaasConfPath);
+            jaasConfPath);
       } else {
         boolean krb5LoginModulePresent = false;
         for (AppConfigurationEntry ace : jaasConfEntries) {
@@ -83,41 +89,39 @@ public class KerberosChecker {
                   LOG.warn(keytabPath + " doesn't exist.");
                 } else if (!keytabFile.canRead()) {
                   LOG.warn("Unable to read " + keytabPath +
-                    " Please check the file access permissions for user " +
-                    System.getProperty("user.name"));
+                      " Please check the file access permissions for user " +
+                      System.getProperty("user.name"));
                 }
               } else {
                 LOG.warn("Can't find keyTab option in " + KRB5_LOGIN_MODULE +
-                  " module of " + HTTP_SPNEGO_STANDARD_ENTRY + " entry in " +
-                  jaasConfPath);              }
+                    " module of " + HTTP_SPNEGO_STANDARD_ENTRY + " entry in " +
+                    jaasConfPath);
+              }
 
               if (!options.containsKey("principal")) {
                 LOG.warn("Can't find principal option in " + KRB5_LOGIN_MODULE +
-                  " module of " + HTTP_SPNEGO_STANDARD_ENTRY + " entry in " +
-                  jaasConfPath);
+                    " module of " + HTTP_SPNEGO_STANDARD_ENTRY + " entry in " +
+                    jaasConfPath);
               }
             }
           }
         }
         if (!krb5LoginModulePresent) {
           LOG.warn("Can't find " + KRB5_LOGIN_MODULE + " module in " +
-          HTTP_SPNEGO_STANDARD_ENTRY + " entry in " + jaasConfPath);
+              HTTP_SPNEGO_STANDARD_ENTRY + " entry in " + jaasConfPath);
         }
       }
 
-      TextCallbackHandler textHandler = new TextCallbackHandler();
       try {
-        LoginContext loginContext = new LoginContext(HTTP_SPNEGO_STANDARD_ENTRY,
-          textHandler);
+        LoginContext loginContext = loginContextHelper.createLoginContext(HTTP_SPNEGO_STANDARD_ENTRY);
 
         loginContext.login();
         loginContext.logout();
-      }
-      catch (LoginException le) {
+      } catch (LoginException le) {
         LOG.error(le.getMessage());
         throw new AmbariException(
-          "Ambari Server Kerberos credentials check failed. \n" +
-          "Check KDC availability and JAAS configuration in " + jaasConfPath);
+            "Ambari Server Kerberos credentials check failed. \n" +
+                "Check KDC availability and JAAS configuration in " + jaasConfPath);
       }
 
       LOG.info("Ambari Server Kerberos credentials check passed.");

http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/LoginContextHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/LoginContextHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/LoginContextHelper.java
new file mode 100644
index 0000000..1a675ae
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/LoginContextHelper.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.controller.utilities;
+
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import com.google.inject.Singleton;
+
+/**
+ * LoginContextHelper is a helper class used for helping to use and manage {@link LoginContext} instances.
+ */
+@Singleton
+public class LoginContextHelper {
+
+  /**
+   * Create a new {@link LoginContext}
+   *
+   * @param krb5ModuleEntryName the relevant com.sun.security.auth.module.Krb5LoginModule entry name
+   * @param callbackHandler     a callback handler
+   * @return a new {@link LoginContext}
+   * @throws LoginException see {@link LoginContext#LoginContext(String, CallbackHandler)}
+   */
+  public LoginContext createLoginContext(String krb5ModuleEntryName, CallbackHandler callbackHandler)
+      throws LoginException {
+    return new LoginContext(krb5ModuleEntryName, callbackHandler);
+  }
+
+  /**
+   * Create a new {@link LoginContext}
+   *
+   * @param krb5ModuleEntryName the relevant com.sun.security.auth.module.Krb5LoginModule entry name
+   * @return a new {@link LoginContext}
+   * @throws LoginException see {@link LoginContext#LoginContext(String, CallbackHandler)}
+   */
+  public LoginContext createLoginContext(String krb5ModuleEntryName) throws LoginException {
+    return new LoginContext(krb5ModuleEntryName);
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/KerberosCheckerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/KerberosCheckerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/KerberosCheckerTest.java
index 570a50b..44e1927 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/KerberosCheckerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/KerberosCheckerTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -18,47 +18,38 @@
 
 package org.apache.ambari.server.controller.utilities;
 
-import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
-import static org.powermock.api.easymock.PowerMock.expectNew;
-import static org.powermock.api.easymock.PowerMock.replay;
-import static org.powermock.api.easymock.PowerMock.verifyAll;
 
-import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.login.LoginContext;
 import javax.security.auth.login.LoginException;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.Configuration;
+import org.easymock.EasyMockSupport;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({LoginContext.class, KerberosChecker.class})
-public class KerberosCheckerTest {
+public class KerberosCheckerTest extends EasyMockSupport {
 
   @Test
   public void testCheckPassed() throws Exception {
-    Configuration config =  createMock(Configuration.class);
-    LoginContext lc =  createMock(LoginContext.class);
+    Configuration config = createMock(Configuration.class);
+    LoginContextHelper loginContextHelper = createMock(LoginContextHelper.class);
+    LoginContext lc = createMock(LoginContext.class);
 
     expect(config.isKerberosJaasConfigurationCheckEnabled()).andReturn(true).once();
 
-    expectNew(LoginContext.class, new Class<?>[] { String.class, CallbackHandler.class },
-      isA(String.class), isA(CallbackHandler.class) )
-      .andReturn(lc);
+    expect(loginContextHelper.createLoginContext(KerberosChecker.HTTP_SPNEGO_STANDARD_ENTRY)).andReturn(lc).once();
+
     lc.login();
     expectLastCall().once();
     lc.logout();
     expectLastCall().once();
 
-    replay(config, LoginContext.class, lc);
+    replayAll();
 
     KerberosChecker.config = config;
+    KerberosChecker.loginContextHelper = loginContextHelper;
     KerberosChecker.checkJaasConfiguration();
 
     verifyAll();
@@ -66,23 +57,19 @@ public class KerberosCheckerTest {
 
   @Test(expected = AmbariException.class)
   public void testCheckFailed() throws Exception {
-    Configuration config =  createMock(Configuration.class);
-    LoginContext lc =  createMock(LoginContext.class);
+    Configuration config = createMock(Configuration.class);
+    LoginContextHelper loginContextHelper = createMock(LoginContextHelper.class);
 
     expect(config.isKerberosJaasConfigurationCheckEnabled()).andReturn(true).once();
 
-    expectNew(LoginContext.class, new Class<?>[] { String.class, CallbackHandler.class },
-      isA(String.class), isA(CallbackHandler.class) )
-      .andReturn(lc);
-    lc.login();
-    expectLastCall().andThrow(new LoginException()).once();
+    expect(loginContextHelper.createLoginContext(KerberosChecker.HTTP_SPNEGO_STANDARD_ENTRY)).andThrow(new LoginException()).once();
 
-    replay(config, LoginContext.class, lc);
+    replayAll();
 
     KerberosChecker.config = config;
+    KerberosChecker.loginContextHelper = loginContextHelper;
     KerberosChecker.checkJaasConfiguration();
 
     verifyAll();
   }
-
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/JvmMetricsSourceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/JvmMetricsSourceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/JvmMetricsSourceTest.java
index a6aa5d5..4bc930b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/JvmMetricsSourceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/JvmMetricsSourceTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -18,19 +18,88 @@
 
 package org.apache.ambari.server.metric.system.impl;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import org.apache.ambari.server.metrics.system.MetricsSink;
 import org.apache.ambari.server.metrics.system.impl.JvmMetricsSource;
 import org.apache.ambari.server.metrics.system.impl.MetricsConfiguration;
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.junit.Assume;
 import org.junit.Test;
 
 public class JvmMetricsSourceTest {
 
   @Test
-  public void testJvmSourceInit() {
+  public void testJvmSourceInit_PreJVM1_8() {
+    Assume.assumeThat(System.getProperty("java.version"), new LessThanVersionMatcher("1.8"));
+    testJvmSourceInit(39);
+  }
+
+  @Test
+  public void testJvmSourceInit_JVM1_8() {
+    Assume.assumeThat(System.getProperty("java.version"), new VersionMatcher("1.8"));
+    testJvmSourceInit(40);
+  }
+
+  private void testJvmSourceInit(int metricsSize) {
     JvmMetricsSource jvmMetricsSource = new JvmMetricsSource();
     MetricsConfiguration configuration = MetricsConfiguration.getMetricsConfiguration();
     MetricsSink sink = new TestAmbariMetricsSinkImpl();
     jvmMetricsSource.init(configuration, sink);
-    org.junit.Assert.assertEquals(jvmMetricsSource.getMetrics().size(), 39);
+    org.junit.Assert.assertEquals(jvmMetricsSource.getMetrics().size(), metricsSize);
+  }
+
+  /* ****************************************************************
+   * Matcher classes used in Assume checks
+   * **************************************************************** */
+  private class VersionMatcher extends BaseMatcher<String> {
+    private final float version;
+
+    VersionMatcher(String version) {
+      this.version = Float.parseFloat(version);
+    }
+
+    @Override
+    public boolean matches(Object o) {
+      return parseVersion((String) o) == this.version;
+    }
+
+    float parseVersion(String versionString) {
+      Pattern p = Pattern.compile("(\\d+(?:\\.\\d+)).*");
+      Matcher matcher = p.matcher(versionString);
+      if (matcher.matches()) {
+        return Float.parseFloat(matcher.group(1));
+      } else {
+        return 0f;
+      }
+    }
+
+    @Override
+    public void describeTo(Description description) {
+
+    }
+
+    public float getVersion() {
+      return version;
+    }
+  }
+
+  private class LessThanVersionMatcher extends VersionMatcher {
+
+    LessThanVersionMatcher(String version) {
+      super(version);
+    }
+
+    @Override
+    public boolean matches(Object o) {
+      return parseVersion((String) o) < getVersion();
+    }
+
+    @Override
+    public void describeTo(Description description) {
+
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
index 7e36128..6775211 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariBasicAuthenticationFilterTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -18,11 +18,8 @@
 package org.apache.ambari.server.security.authentication;
 
 import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -38,21 +35,15 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import org.apache.ambari.server.security.AmbariEntryPoint;
-import org.apache.ambari.server.security.authorization.AuthorizationHelper;
 import org.apache.ambari.server.security.authorization.PermissionHelper;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.easymock.EasyMockSupport;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.crypto.codec.Base64;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(AuthorizationHelper.class)
-public class AmbariBasicAuthenticationFilterTest {
+public class AmbariBasicAuthenticationFilterTest extends EasyMockSupport {
 
   private AmbariBasicAuthenticationFilter underTest;
 
@@ -68,7 +59,6 @@ public class AmbariBasicAuthenticationFilterTest {
     permissionHelper = createMock(PermissionHelper.class);
     entryPoint = createMock(AmbariEntryPoint.class);
     underTest = new AmbariBasicAuthenticationFilter(null, entryPoint, mockedAuditLogger, permissionHelper);
-    replay(entryPoint);
   }
 
   @Test
@@ -84,11 +74,11 @@ public class AmbariBasicAuthenticationFilterTest {
     expectLastCall().times(1);
     filterChain.doFilter(request, response);
     expectLastCall();
-    replay(mockedAuditLogger, request, filterChain);
+    replayAll();
     // WHEN
     underTest.doFilter(request, response, filterChain);
     // THEN
-    verify(mockedAuditLogger, request, filterChain);
+    verifyAll();
   }
 
   @Test
@@ -97,26 +87,21 @@ public class AmbariBasicAuthenticationFilterTest {
     HttpServletRequest request = createMock(HttpServletRequest.class);
     HttpServletResponse response = createMock(HttpServletResponse.class);
     Authentication authentication = createMock(Authentication.class);
-    PowerMock.mockStatic(AuthorizationHelper.class);
 
     Map<String, List<String>> roles = new HashMap<>();
     roles.put("a", Arrays.asList("r1", "r2", "r3"));
     expect(permissionHelper.getPermissionLabels(authentication))
-      .andReturn(roles);
-    expect(AuthorizationHelper.getAuthorizationNames(authentication))
-      .andReturn(Arrays.asList("perm1", "perm2"));
-    expect(AuthorizationHelper.getAuthenticatedName()).andReturn("perm1");
+        .andReturn(roles);
     expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4");
     expect(authentication.getName()).andReturn("admin");
     expect(mockedAuditLogger.isEnabled()).andReturn(true);
     mockedAuditLogger.log(anyObject(AuditEvent.class));
     expectLastCall().times(1);
-    replay(mockedAuditLogger, request, authentication, permissionHelper);
-    PowerMock.replayAll();
+    replayAll();
     // WHEN
     underTest.onSuccessfulAuthentication(request, response, authentication);
     // THEN
-    verify(mockedAuditLogger, request);
+    verifyAll();
   }
 
   @Test
@@ -127,14 +112,14 @@ public class AmbariBasicAuthenticationFilterTest {
     AuthenticationException authEx = createMock(AuthenticationException.class);
     expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4");
     expect(request.getHeader("Authorization")).andReturn(
-      "Basic " + new String(Base64.encode("admin:admin".getBytes("UTF-8"))));
+        "Basic " + new String(Base64.encode("admin:admin".getBytes("UTF-8"))));
     expect(mockedAuditLogger.isEnabled()).andReturn(true);
     mockedAuditLogger.log(anyObject(AuditEvent.class));
     expectLastCall().times(1);
-    replay(mockedAuditLogger, request, authEx);
+    replayAll();
     // WHEN
     underTest.onUnsuccessfulAuthentication(request, response, authEx);
     // THEN
-    verify(mockedAuditLogger, request, authEx);
+    verifyAll();
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
index 9d4fb3e..82ba149 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java
@@ -43,6 +43,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 
 import javax.persistence.EntityManager;
 
@@ -1083,7 +1084,8 @@ public class UpgradeCatalog222Test {
     final Service kafkaService = createStrictMock(Service.class);
     final Service hbaseService = createStrictMock(Service.class);
     final Map<String, Cluster> clusterMap = Collections.singletonMap("c1", cluster);
-    final Map<String, Service> services = new HashMap<>();
+    // Use a TreeMap so we can assume a particular order when iterating over the services.
+    final Map<String, Service> services = new TreeMap<>();
     services.put(stormServiceName, stormService);
     services.put(kafkaServiceName, kafkaService);
     services.put(hbaseServiceName, hbaseService);

http://git-wip-us.apache.org/repos/asf/ambari/blob/5e72ee6f/ambari-server/src/test/java/org/apache/ambari/server/view/persistence/DataStoreImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/persistence/DataStoreImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/persistence/DataStoreImplTest.java
index 60643b3..a1c910d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/persistence/DataStoreImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/persistence/DataStoreImplTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -7,7 +7,7 @@
  * "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
+ *     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,
@@ -80,23 +80,23 @@ import com.google.inject.Module;
 @PrepareForTest(JpaHelper.class)
 public class DataStoreImplTest {
   private final static String xml = "<view>\n" +
-    "    <name>MY_VIEW</name>\n" +
-    "    <label>My View!</label>\n" +
-    "    <version>1.0.0</version>\n" +
-    "    <instance>\n" +
-    "        <name>INSTANCE1</name>\n" +
-    "    </instance>\n" +
-    "    <persistence>\n" +
-    "      <entity>\n" +
-    "        <class>org.apache.ambari.server.view.persistence.DataStoreImplTest$TestEntity</class>\n" +
-    "        <id-property>id</id-property>\n" +
-    "      </entity>\n" +
-    "      <entity>\n" +
-    "        <class>org.apache.ambari.server.view.persistence.DataStoreImplTest$TestSubEntity</class>\n" +
-    "        <id-property>id</id-property>\n" +
-    "      </entity>\n" +
-    "    </persistence>" +
-    "</view>";
+      "    <name>MY_VIEW</name>\n" +
+      "    <label>My View!</label>\n" +
+      "    <version>1.0.0</version>\n" +
+      "    <instance>\n" +
+      "        <name>INSTANCE1</name>\n" +
+      "    </instance>\n" +
+      "    <persistence>\n" +
+      "      <entity>\n" +
+      "        <class>org.apache.ambari.server.view.persistence.DataStoreImplTest$TestEntity</class>\n" +
+      "        <id-property>id</id-property>\n" +
+      "      </entity>\n" +
+      "      <entity>\n" +
+      "        <class>org.apache.ambari.server.view.persistence.DataStoreImplTest$TestSubEntity</class>\n" +
+      "        <id-property>id</id-property>\n" +
+      "      </entity>\n" +
+      "    </persistence>" +
+      "</view>";
 
   @Test
   public void testStore_create() throws Exception {
@@ -128,7 +128,7 @@ public class DataStoreImplTest {
       @Override
       public Object answer() throws Throwable {
         ((DynamicEntity) EasyMock.getCurrentArguments()[0])
-          .set("DS_id", 99); // for TestSubEntity
+            .set("DS_id", 99); // for TestSubEntity
         return null;
       }
     });
@@ -139,7 +139,7 @@ public class DataStoreImplTest {
       @Override
       public Object answer() throws Throwable {
         ((DynamicEntity) EasyMock.getCurrentArguments()[0])
-          .set("DS_id", 100); // for TestEntity
+            .set("DS_id", 100); // for TestEntity
         return null;
       }
     });
@@ -215,7 +215,7 @@ public class DataStoreImplTest {
 
     DataStoreImpl dataStore = getDataStore(entityManagerFactory, jpaDynamicHelper, classLoader, schemaManager);
 
-    StringBuffer sb = new StringBuffer();
+    StringBuilder sb = new StringBuilder();
     for (int i = 0; i < 5000; ++i) {
       sb.append("A");
     }
@@ -352,8 +352,14 @@ public class DataStoreImplTest {
 
     dataStore.store(new TestEntity(100, "foo", new TestSubEntity(99, "bar")));
 
-    Assert.assertEquals(entityClassCapture.getValue(), typeCapture.getValue().getJavaClass());
-    Assert.assertEquals(entityClassCapture2.getValue(), typeCapture2.getValue().getJavaClass());
+    if ((entityClassCapture.getValue() != typeCapture.getValue().getJavaClass()) &&
+        (entityClassCapture.getValue() != typeCapture2.getValue().getJavaClass())) {
+      Assert.fail();
+    }
+    if ((entityClassCapture2.getValue() != typeCapture.getValue().getJavaClass()) &&
+        (entityClassCapture2.getValue() != typeCapture2.getValue().getJavaClass())) {
+      Assert.fail();
+    }
 
     // verify mocks
     verify(entityManagerFactory, entityManager, jpaDynamicHelper, transaction, schemaManager, dynamicEntity, jpaEntityManager, session, databaseLogin, dynamicSubEntity);
@@ -396,13 +402,13 @@ public class DataStoreImplTest {
 
     entityManager.close();
 
-    StringBuffer sb = new StringBuffer();
+    StringBuilder sb = new StringBuilder();
     for (int i = 0; i < 5000; ++i) {
       sb.append("A");
     }
     String longString = sb.toString();
 
-    expect(dynamicEntity.set("DS_id", 99)).andReturn(dynamicEntity).once();
+    expect(dynamicEntity.set("DS_id", 99)).andReturn(dynamicEntity).anyTimes();
 
     transaction.begin();
     expect(transaction.isActive()).andReturn(true).anyTimes();
@@ -470,7 +476,10 @@ public class DataStoreImplTest {
 
     dataStore.remove(new TestEntity(99, "foo", new TestSubEntity("bar")));
 
-    Assert.assertEquals(entityClassCapture.getValue(), typeCapture.getValue().getJavaClass());
+    if ((entityClassCapture.getValue() != typeCapture.getValue().getJavaClass()) &&
+        (entityClassCapture.getValue() != typeCapture2.getValue().getJavaClass())) {
+      Assert.fail();
+    }
 
     // verify mocks
     verify(entityManagerFactory, entityManager, jpaDynamicHelper, transaction, schemaManager, dynamicEntity, jpaEntityManager, session, databaseLogin);
@@ -521,7 +530,11 @@ public class DataStoreImplTest {
 
     TestEntity entity = dataStore.find(TestEntity.class, 99);
 
-    Assert.assertEquals(entityClassCapture.getValue(), typeCapture.getValue().getJavaClass());
+    // Ensure the requested class type is one of the available types....
+    if ((entityClassCapture.getValue() != typeCapture.getValue().getJavaClass()) &&
+        (entityClassCapture.getValue() != typeCapture2.getValue().getJavaClass())) {
+      Assert.fail();
+    }
     Assert.assertEquals(99, (int) entity.getId());
     Assert.assertEquals("foo", entity.getName());
 
@@ -559,7 +572,7 @@ public class DataStoreImplTest {
 
     expect(entityManagerFactory.createEntityManager()).andReturn(entityManager).anyTimes();
     expect(entityManager.createQuery(
-      "SELECT e FROM DS_DataStoreImplTest$TestEntity_1 e WHERE e.DS_id=99")).andReturn(query);
+        "SELECT e FROM DS_DataStoreImplTest$TestEntity_1 e WHERE e.DS_id=99")).andReturn(query);
     entityManager.close();
 
     expect(query.getResultList()).andReturn(Collections.singletonList(dynamicEntity));
@@ -619,7 +632,7 @@ public class DataStoreImplTest {
 
     expect(entityManagerFactory.createEntityManager()).andReturn(entityManager).anyTimes();
     expect(entityManager.createQuery(
-      "SELECT e FROM DS_DataStoreImplTest$TestEntity_1 e WHERE e.DS_name='foo'")).andReturn(query);
+        "SELECT e FROM DS_DataStoreImplTest$TestEntity_1 e WHERE e.DS_name='foo'")).andReturn(query);
     entityManager.close();
 
     List<DynamicEntity> entityList = new LinkedList<DynamicEntity>();
@@ -646,7 +659,7 @@ public class DataStoreImplTest {
 
     // replay mocks
     replay(entityManagerFactory, entityManager, jpaDynamicHelper,
-      dynamicEntity1, dynamicEntity2, dynamicEntity3, query, schemaManager, jpaEntityManager, session, databaseLogin);
+        dynamicEntity1, dynamicEntity2, dynamicEntity3, query, schemaManager, jpaEntityManager, session, databaseLogin);
 
     DataStoreImpl dataStore = getDataStore(entityManagerFactory, jpaDynamicHelper, classLoader, schemaManager);
 
@@ -660,14 +673,14 @@ public class DataStoreImplTest {
 
     // verify mocks
     verify(entityManagerFactory, entityManager, jpaDynamicHelper,
-      dynamicEntity1, dynamicEntity2, dynamicEntity3, query, schemaManager, jpaEntityManager, session, databaseLogin);
+        dynamicEntity1, dynamicEntity2, dynamicEntity3, query, schemaManager, jpaEntityManager, session, databaseLogin);
   }
 
   private DataStoreImpl getDataStore(EntityManagerFactory entityManagerFactory,
                                      JPADynamicHelper jpaDynamicHelper,
                                      DynamicClassLoader classLoader,
                                      SchemaManager schemaManager)
-    throws Exception {
+      throws Exception {
     ViewConfig viewConfig = ViewConfigTest.getConfig(xml);
     ViewEntity viewDefinition = ViewEntityTest.getViewEntity(viewConfig);
 
@@ -677,7 +690,7 @@ public class DataStoreImplTest {
     setPersistenceEntities(viewInstanceEntity);
 
     Injector injector = Guice.createInjector(
-      new TestModule(viewInstanceEntity, entityManagerFactory, jpaDynamicHelper, classLoader, schemaManager));
+        new TestModule(viewInstanceEntity, entityManagerFactory, jpaDynamicHelper, classLoader, schemaManager));
     return injector.getInstance(DataStoreImpl.class);
   }
 
@@ -709,13 +722,13 @@ public class DataStoreImplTest {
     public TestEntity() {
     }
 
-    public TestEntity(int id, String name, TestSubEntity subEntity) {
+    TestEntity(int id, String name, TestSubEntity subEntity) {
       this.id = id;
       this.name = name;
       this.subEntity = subEntity;
     }
 
-    public TestEntity(String name, TestSubEntity subEntity) {
+    TestEntity(String name, TestSubEntity subEntity) {
       this.name = name;
       this.subEntity = subEntity;
     }
@@ -756,11 +769,11 @@ public class DataStoreImplTest {
     public TestSubEntity() {
     }
 
-    public TestSubEntity(String name) {
+    TestSubEntity(String name) {
       this.name = name;
     }
 
-    public TestSubEntity(Integer id, String name) {
+    TestSubEntity(Integer id, String name) {
       this.id = id;
       this.name = name;
     }
@@ -794,27 +807,6 @@ public class DataStoreImplTest {
     }
 
     Integer id = null;
-    String f1;
-    String f2;
-    String f3;
-    String f4;
-    String f5;
-    String f6;
-    String f7;
-    String f8;
-    String f9;
-    String f10;
-    String f11;
-    String f12;
-    String f13;
-    String f14;
-    String f15;
-    String f16;
-    String f17;
-    String f18;
-    String f19;
-    String f20;
-    String f21;
 
     public Integer getId() {
       return id;