You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2013/10/18 02:25:50 UTC
[28/30] AMBARI-3266. Contribute Ambari-SCOM. (Tom Beerbower via
mahadev)
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/main/resources/META-INF/spring-security.xml
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/main/resources/META-INF/spring-security.xml b/contrib/ambari-scom/ambari-scom-server/src/main/resources/META-INF/spring-security.xml
new file mode 100644
index 0000000..3354801
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/main/resources/META-INF/spring-security.xml
@@ -0,0 +1,46 @@
+<!--
+ 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.
+-->
+<beans:beans xmlns="http://www.springframework.org/schema/security"
+ xmlns:beans="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/security
+ http://www.springframework.org/schema/security/spring-security-3.1.xsd">
+
+ <http use-expressions="true"
+ disable-url-rewriting="true" entry-point-ref="ambariEntryPoint">
+ <http-basic entry-point-ref="ambariEntryPoint"/>
+ <intercept-url pattern="/**" access="isAuthenticated()" method="GET"/>
+ <intercept-url pattern="/**" access="hasRole('ADMIN')"/>
+ </http>
+
+ <!--<ldap-server id="ldapServer" root="dc=ambari,dc=apache,dc=org"/>-->
+
+ <authentication-manager>
+
+ <authentication-provider user-service-ref="ambariLocalUserService">
+ <password-encoder ref="passwordEncoder"/>
+ </authentication-provider>
+
+ <authentication-provider ref="ambariLdapAuthenticationProvider"/>
+
+ </authentication-manager>
+
+ <beans:bean id="ambariEntryPoint" class="org.apache.ambari.server.security.AmbariEntryPoint">
+ </beans:bean>
+</beans:beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/main/resources/log4j.properties b/contrib/ambari-scom/ambari-scom-server/src/main/resources/log4j.properties
new file mode 100644
index 0000000..e47ebdc
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/main/resources/log4j.properties
@@ -0,0 +1,37 @@
+# Copyright 2011 The Apache Software Foundation
+#
+# 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.
+
+# Define some default values that can be overridden by system properties
+# Root logger option
+log4j.rootLogger=INFO,file
+
+# Direct log messages to a log file
+log4j.appender.file=org.apache.log4j.RollingFileAppender
+log4j.appender.file.File=/var/log/ambari-server/ambari-server.log
+log4j.appender.file.MaxFileSize=10MB
+log4j.appender.file.MaxBackupIndex=20
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n
+
+# Log config changes
+log4j.logger.configchange=INFO,configchange
+log4j.additivity.configchange=false
+log4j.appender.configchange=org.apache.log4j.FileAppender
+log4j.appender.configchange.File=/var/log/ambari-server/ambari-config-changes.log
+log4j.appender.configchange.layout=org.apache.log4j.PatternLayout
+log4j.appender.configchange.layout.ConversionPattern=%d{ISO8601} %5p - %m%n
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterDefinitionTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterDefinitionTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterDefinitionTest.java
new file mode 100644
index 0000000..848c90f
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterDefinitionTest.java
@@ -0,0 +1,118 @@
+/**
+ * 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.msi;
+
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Set;
+
+/**
+ */
+public class ClusterDefinitionTest {
+ @Test
+ public void testGetServices() throws Exception {
+
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+
+ Set<String> services = clusterDefinition.getServices();
+
+ Assert.assertTrue(services.contains("HDFS"));
+ Assert.assertTrue(services.contains("FLUME"));
+ Assert.assertTrue(services.contains("OOZIE"));
+ Assert.assertTrue(services.contains("MAPREDUCE"));
+ Assert.assertTrue(services.contains("HBASE"));
+ Assert.assertTrue(services.contains("ZOOKEEPER"));
+ Assert.assertTrue(services.contains("HIVE"));
+ Assert.assertTrue(services.contains("WEBHCAT"));
+ }
+
+ @Test
+ public void testGetHosts() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+
+ Set<String> hosts = clusterDefinition.getHosts();
+
+ Assert.assertTrue(hosts.contains("NAMENODE_MASTER.acme.com"));
+ Assert.assertTrue(hosts.contains("SECONDARY_NAMENODE_MASTER.acme.com"));
+ Assert.assertTrue(hosts.contains("FLUME_SERVICE1.acme.com"));
+ Assert.assertTrue(hosts.contains("FLUME_SERVICE2.acme.com"));
+ Assert.assertTrue(hosts.contains("FLUME_SERVICE3.acme.com"));
+ Assert.assertTrue(hosts.contains("HBASE_MASTER.acme.com"));
+ Assert.assertTrue(hosts.contains("HIVE_SERVER_MASTER.acme.com"));
+ Assert.assertTrue(hosts.contains("JOBTRACKER_MASTER.acme.com"));
+ Assert.assertTrue(hosts.contains("OOZIE_SERVER_MASTER.acme.com"));
+ Assert.assertTrue(hosts.contains("slave1.acme.com"));
+ Assert.assertTrue(hosts.contains("slave2.acme.com"));
+ Assert.assertTrue(hosts.contains("slave3.acme.com"));
+ Assert.assertTrue(hosts.contains("WEBHCAT_MASTER.acme.com"));
+ }
+
+ @Test
+ public void testGetComponents() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+
+ Set<String> components = clusterDefinition.getComponents("HDFS");
+ Assert.assertTrue(components.contains("NAMENODE"));
+ Assert.assertTrue(components.contains("SECONDARY_NAMENODE"));
+ Assert.assertTrue(components.contains("DATANODE"));
+
+ components = clusterDefinition.getComponents("MAPREDUCE");
+ Assert.assertTrue(components.contains("JOBTRACKER"));
+ Assert.assertTrue(components.contains("TASKTRACKER"));
+
+ components = clusterDefinition.getComponents("FLUME");
+ Assert.assertTrue(components.contains("FLUME_SERVER"));
+
+ components = clusterDefinition.getComponents("OOZIE");
+ Assert.assertTrue(components.contains("OOZIE_SERVER"));
+
+ components = clusterDefinition.getComponents("WEBHCAT");
+ Assert.assertTrue(components.contains("WEBHCAT_SERVER"));
+
+ components = clusterDefinition.getComponents("HBASE");
+ Assert.assertTrue(components.contains("HBASE_MASTER"));
+ Assert.assertTrue(components.contains("HBASE_REGIONSERVER"));
+
+ components = clusterDefinition.getComponents("ZOOKEEPER");
+ Assert.assertTrue(components.contains("ZOOKEEPER_SERVER"));
+
+ components = clusterDefinition.getComponents("HIVE");
+ Assert.assertTrue(components.contains("HIVE_SERVER"));
+ }
+
+ @Test
+ public void testGetHostComponents() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+
+ Set<String> hostComponents = clusterDefinition.getHostComponents("HDFS", "NAMENODE_MASTER.acme.com");
+
+ Assert.assertTrue(hostComponents.contains("NAMENODE"));
+
+ hostComponents = clusterDefinition.getHostComponents("HDFS", "slave1.acme.com");
+
+ Assert.assertTrue(hostComponents.contains("DATANODE"));
+
+ hostComponents = clusterDefinition.getHostComponents("HDFS", "slave2.acme.com");
+
+ Assert.assertTrue(hostComponents.contains("DATANODE"));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterProviderTest.java
new file mode 100644
index 0000000..a7dc528
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterProviderTest.java
@@ -0,0 +1,99 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ * Tests for ClusterProvider
+ */
+public class ClusterProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+
+ ClusterProvider provider = new ClusterProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(1, resources.size());
+ Assert.assertEquals("myCluster", resources.iterator().next().getPropertyValue(ClusterProvider.CLUSTER_NAME_PROPERTY_ID));
+ }
+
+ @Test
+ public void testGetResourcesWithPredicate() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+
+ ClusterProvider provider = new ClusterProvider(clusterDefinition);
+
+ Predicate predicate = new PredicateBuilder().property(ClusterProvider.CLUSTER_NAME_PROPERTY_ID).equals("myCluster").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+ Resource next = resources.iterator().next();
+ Assert.assertEquals("myCluster", next.getPropertyValue(ClusterProvider.CLUSTER_NAME_PROPERTY_ID));
+ Assert.assertEquals("HDP-1.2.9", next.getPropertyValue(ClusterProvider.CLUSTER_VERSION_PROPERTY_ID));
+
+ predicate = new PredicateBuilder().property(ClusterProvider.CLUSTER_NAME_PROPERTY_ID).equals("non-existent Cluster").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertTrue(resources.isEmpty());
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ClusterProvider provider = new ClusterProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ClusterProvider provider = new ClusterProvider(clusterDefinition);
+
+ provider.updateResources(PropertyHelper.getUpdateRequest(new HashMap<String, Object>(), null), null);
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ClusterProvider provider = new ClusterProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ComponentProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ComponentProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ComponentProviderTest.java
new file mode 100644
index 0000000..0f16912
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ComponentProviderTest.java
@@ -0,0 +1,124 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ * Tests for ComponentProvider.
+ */
+public class ComponentProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ComponentProvider provider = new ComponentProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(16, resources.size());
+ }
+
+ @Test
+ public void testGetResourcesWithPredicate() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ComponentProvider provider = new ComponentProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(ComponentProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("TASKTRACKER").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ predicate = new PredicateBuilder().property(ComponentProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("TASKTRACKER").or().
+ property(ComponentProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("DATANODE").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(2, resources.size());
+
+ predicate = new PredicateBuilder().property(ComponentProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("BadComponent").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertTrue(resources.isEmpty());
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ComponentProvider provider = new ComponentProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ComponentProvider provider = new ComponentProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(ComponentProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("TASKTRACKER").toPredicate();
+
+ HashMap<String, Object> properties = new HashMap<String, Object>();
+
+ properties.put(ComponentProvider.COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ Request updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Running, stateProvider.getState());
+
+ properties.put(ComponentProvider.COMPONENT_STATE_PROPERTY_ID, "INSTALLED");
+
+ updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Stopped, stateProvider.getState());
+
+ properties.put(ComponentProvider.COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Running, stateProvider.getState());
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ComponentProvider provider = new ComponentProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostComponentProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostComponentProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostComponentProviderTest.java
new file mode 100644
index 0000000..582c5bd
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostComponentProviderTest.java
@@ -0,0 +1,165 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ *
+ */
+public class HostComponentProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(26, resources.size());
+ }
+
+ @Test
+ public void testGetResourcesWithPredicate() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostComponentProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID).equals("MAPREDUCE").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(5, resources.size());
+
+ predicate = new PredicateBuilder().property(HostComponentProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID).equals("UnknownHost").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertTrue(resources.isEmpty());
+ }
+
+ @Test
+ public void testGetResourcesCheckState() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostComponentProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("HBASE_REGIONSERVER").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(3, resources.size());
+
+ for (Resource resource : resources) {
+ Assert.assertEquals("STARTED", resource.getPropertyValue(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID));
+ }
+
+ stateProvider.setHealthy(false);
+
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(3, resources.size());
+
+ for (Resource resource : resources) {
+ Assert.assertEquals("INSTALLED", resource.getPropertyValue(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID));
+ }
+ }
+
+ @Test
+ public void testGetResourcesCheckStateFromCategory() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostComponentProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("HBASE_REGIONSERVER").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest("HostRoles"), predicate);
+ Assert.assertEquals(3, resources.size());
+
+ for (Resource resource : resources) {
+ Assert.assertEquals("STARTED", resource.getPropertyValue(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID));
+ }
+
+ stateProvider.setHealthy(false);
+
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(3, resources.size());
+
+ for (Resource resource : resources) {
+ Assert.assertEquals("INSTALLED", resource.getPropertyValue(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID));
+ }
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostComponentProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("HBASE_REGIONSERVER").toPredicate();
+
+ HashMap<String, Object> properties = new HashMap<String, Object>();
+
+ properties.put(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ Request updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Running, stateProvider.getState());
+
+ properties.put(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "INSTALLED");
+
+ updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Stopped, stateProvider.getState());
+
+ properties.put(HostComponentProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Running, stateProvider.getState());
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostComponentProvider provider = new HostComponentProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostProviderTest.java
new file mode 100644
index 0000000..4fc29ac
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/HostProviderTest.java
@@ -0,0 +1,157 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ *
+ */
+public class HostProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(13, resources.size());
+ }
+
+ @Test
+ public void testGetResourcesWithPredicate() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostProvider.HOST_NAME_PROPERTY_ID).equals("NAMENODE_MASTER.acme.com").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ predicate = new PredicateBuilder().property(HostProvider.HOST_NAME_PROPERTY_ID).equals("HBASE_MASTER.acme.com").or().
+ property(HostProvider.HOST_NAME_PROPERTY_ID).equals("slave3.acme.com").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(2, resources.size());
+
+ predicate = new PredicateBuilder().property(HostProvider.HOST_NAME_PROPERTY_ID).equals("unknownHost").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertTrue(resources.isEmpty());
+ }
+
+ @Test
+ public void testGetResourcesHostIP() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostProvider.HOST_NAME_PROPERTY_ID).equals("NAMENODE_MASTER.acme.com").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ Resource resource = resources.iterator().next();
+
+ String ip = (String) resource.getPropertyValue(HostProvider.HOST_IP_PROPERTY_ID);
+
+ Assert.assertEquals("127.0.0.1", ip);
+ }
+
+ @Test
+ public void testGetResourcesCheckState() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostProvider.HOST_NAME_PROPERTY_ID).equals("slave3.acme.com").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ Resource resource = resources.iterator().next();
+
+ Assert.assertEquals("HEALTHY", resource.getPropertyValue(HostProvider.HOST_STATE_PROPERTY_ID));
+
+ stateProvider.setState(StateProvider.State.Unknown);
+
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ resource = resources.iterator().next();
+ Assert.assertEquals("UNHEALTHY", resource.getPropertyValue(HostProvider.HOST_STATE_PROPERTY_ID));
+ }
+
+ @Test
+ public void testGetResourcesCheckStateFromCategory() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(HostProvider.HOST_NAME_PROPERTY_ID).equals("slave3.acme.com").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest("Hosts"), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ Resource resource = resources.iterator().next();
+
+ Assert.assertEquals("HEALTHY", resource.getPropertyValue(HostProvider.HOST_STATE_PROPERTY_ID));
+
+ stateProvider.setState(StateProvider.State.Unknown);
+
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ resource = resources.iterator().next();
+ Assert.assertEquals("UNHEALTHY", resource.getPropertyValue(HostProvider.HOST_STATE_PROPERTY_ID));
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+
+ provider.updateResources(PropertyHelper.getUpdateRequest(new HashMap<String, Object>(), null), null);
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ HostProvider provider = new HostProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/NoOpProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/NoOpProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/NoOpProviderTest.java
new file mode 100644
index 0000000..dabf2b7
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/NoOpProviderTest.java
@@ -0,0 +1,47 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+import java.util.Collections;
+
+/**
+ * NoOpProvider tests.
+ */
+public class NoOpProviderTest {
+
+ @Test
+ public void testGetKeyPropertyIds() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ NoOpProvider provider = new NoOpProvider(Resource.Type.Workflow, clusterDefinition);
+ Assert.assertNotNull(provider.getKeyPropertyIds());
+ }
+
+ @Test
+ public void testCheckPropertyIds() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ NoOpProvider provider = new NoOpProvider(Resource.Type.Workflow, clusterDefinition);
+ Assert.assertTrue(provider.checkPropertyIds(Collections.singleton("id")).isEmpty());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/RequestProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/RequestProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/RequestProviderTest.java
new file mode 100644
index 0000000..8ef3d9d
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/RequestProviderTest.java
@@ -0,0 +1,80 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ * Tests for RequestProvider
+ */
+public class RequestProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ clusterDefinition.getRequestResources().add(new ResourceImpl(Resource.Type.Request));
+
+ RequestProvider provider = new RequestProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(1, resources.size());
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ RequestProvider provider = new RequestProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ RequestProvider provider = new RequestProvider(clusterDefinition);
+
+ provider.updateResources(PropertyHelper.getUpdateRequest(new HashMap<String, Object>(), null), null);
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ RequestProvider provider = new RequestProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ServiceProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ServiceProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ServiceProviderTest.java
new file mode 100644
index 0000000..285859f
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ServiceProviderTest.java
@@ -0,0 +1,168 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ *
+ */
+public class ServiceProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(8, resources.size());
+ }
+
+ @Test
+ public void testGetResourcesWithPredicate() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("MAPREDUCE").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ predicate = new PredicateBuilder().property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("HDFS").or().
+ property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("FLUME").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(2, resources.size());
+
+ predicate = new PredicateBuilder().property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("NO SERVICE").toPredicate();
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertTrue(resources.isEmpty());
+ }
+
+ @Test
+ public void testGetResourcesCheckState() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("MAPREDUCE").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ Resource resource = resources.iterator().next();
+
+ Assert.assertEquals("STARTED", resource.getPropertyValue(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID));
+
+ stateProvider.setHealthy(false);
+
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ resource = resources.iterator().next();
+ Assert.assertEquals("INSTALLED", resource.getPropertyValue(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID));
+ }
+
+ @Test
+ public void testGetResourcesCheckStateFromCategory() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("MAPREDUCE").toPredicate();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest("ServiceInfo"), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ Resource resource = resources.iterator().next();
+
+ Assert.assertEquals("STARTED", resource.getPropertyValue(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID));
+
+ stateProvider.setHealthy(false);
+
+ resources = provider.getResources(PropertyHelper.getReadRequest(), predicate);
+ Assert.assertEquals(1, resources.size());
+
+ resource = resources.iterator().next();
+ Assert.assertEquals("INSTALLED", resource.getPropertyValue(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID));
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ TestStateProvider stateProvider = new TestStateProvider();
+ ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+ Predicate predicate = new PredicateBuilder().property(ServiceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals("MAPREDUCE").toPredicate();
+
+ HashMap<String, Object> properties = new HashMap<String, Object>();
+
+ properties.put(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, "STARTED");
+
+ Request updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Running, stateProvider.getState());
+
+ properties.put(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, "INSTALLED");
+
+ updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Stopped, stateProvider.getState());
+
+ properties.put(ServiceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, "STARTED");
+
+ updateRequest = PropertyHelper.getUpdateRequest(properties, null);
+
+ provider.updateResources(updateRequest, predicate);
+
+ Assert.assertEquals(StateProvider.State.Running, stateProvider.getState());
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ ServiceProvider provider = new ServiceProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TaskProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TaskProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TaskProviderTest.java
new file mode 100644
index 0000000..2fcfec6
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TaskProviderTest.java
@@ -0,0 +1,80 @@
+/**
+ * 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.msi;
+
+import junit.framework.Assert;
+import org.apache.ambari.scom.TestClusterDefinitionProvider;
+import org.apache.ambari.scom.TestHostInfoProvider;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ * Tests for TaskProvider
+ */
+public class TaskProviderTest {
+
+ @Test
+ public void testGetResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ clusterDefinition.getTaskResources().add(new ResourceImpl(Resource.Type.Task));
+
+ TaskProvider provider = new TaskProvider(clusterDefinition);
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ Assert.assertEquals(1, resources.size());
+ }
+
+ @Test
+ public void testCreateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ TaskProvider provider = new TaskProvider(clusterDefinition);
+
+ try {
+ provider.createResources(PropertyHelper.getReadRequest());
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+
+ @Test
+ public void testUpdateResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ TaskProvider provider = new TaskProvider(clusterDefinition);
+
+ provider.updateResources(PropertyHelper.getUpdateRequest(new HashMap<String, Object>(), null), null);
+ }
+
+ @Test
+ public void testDeleteResources() throws Exception {
+ ClusterDefinition clusterDefinition = new ClusterDefinition(new TestStateProvider(), new TestClusterDefinitionProvider(), new TestHostInfoProvider());
+ TaskProvider provider = new TaskProvider(clusterDefinition);
+
+ try {
+ provider.deleteResources(null);
+ Assert.fail("Expected UnsupportedOperationException.");
+ } catch (UnsupportedOperationException e) {
+ //expected
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TestStateProvider.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TestStateProvider.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TestStateProvider.java
new file mode 100644
index 0000000..ad78478
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/TestStateProvider.java
@@ -0,0 +1,73 @@
+/**
+ * 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.msi;
+
+/**
+ * Test state provider.
+ */
+public class TestStateProvider implements StateProvider {
+
+ private State state = State.Running;
+
+ public void setHealthy(boolean healthy) {
+ state = healthy ? State.Running : State.Stopped;
+ }
+
+ public void setState(State state) {
+ this.state = state;
+ }
+
+ public State getState() {
+ return state;
+ }
+
+ @Override
+ public State getRunningState(String hostName, String componentName) {
+ return state;
+ }
+
+ @Override
+ public Process setRunningState(String hostName, String componentName, State state) {
+ this.state = state;
+ return new TestProcess();
+ }
+
+ private class TestProcess implements Process {
+
+ @Override
+ public boolean isRunning() {
+ return false;
+ }
+
+ @Override
+ public int getExitCode() {
+ return 0;
+ }
+
+ @Override
+ public String getOutput() {
+ return "output";
+ }
+
+ @Override
+ public String getError() {
+ return "error";
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/ClusterDefinitionProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/ClusterDefinitionProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/ClusterDefinitionProviderTest.java
new file mode 100644
index 0000000..c59d08b
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/ClusterDefinitionProviderTest.java
@@ -0,0 +1,83 @@
+/**
+ * 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.scom;
+
+import org.apache.ambari.server.configuration.Configuration;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * ClusterDefinitionProvider tests.
+ */
+public class ClusterDefinitionProviderTest {
+
+ public static ClusterDefinitionProvider getProvider(String filename, String clusterName, String versionId) {
+ Properties ambariProperties = new Properties();
+ ambariProperties.setProperty(ClusterDefinitionProvider.SCOM_CLUSTER_DEFINITION_FILENAME, filename);
+ ambariProperties.setProperty(ClusterDefinitionProvider.SCOM_CLUSTER_NAME, clusterName);
+ ambariProperties.setProperty(ClusterDefinitionProvider.SCOM_VERSION_ID, versionId);
+
+ Configuration configuration = new TestConfiguration(ambariProperties);
+
+ ClusterDefinitionProvider streamProvider = new ClusterDefinitionProvider();
+
+ streamProvider.init(configuration);
+
+ return streamProvider;
+ }
+
+ @Test
+ public void testGetFileName() throws Exception {
+ ClusterDefinitionProvider provider = getProvider("myFile", "myCluster", "myVersion");
+ Assert.assertEquals("myFile", provider.getFileName());
+ }
+
+ @Test
+ public void testGetClusterName() throws Exception {
+ ClusterDefinitionProvider provider = getProvider("myFile", "myCluster", "myVersion");
+ Assert.assertEquals("myCluster", provider.getClusterName());
+ }
+
+ @Test
+ public void testGetVersionId() throws Exception {
+ ClusterDefinitionProvider provider = getProvider("myFile", "myCluster", "myVersion");
+ Assert.assertEquals("myVersion", provider.getVersionId());
+ }
+
+ @Test
+ public void testGetInputStream() throws Exception {
+ ClusterDefinitionProvider provider = getProvider("clusterproperties.txt", "myCluster", "myVersion");
+ InputStream inputStream = provider.getInputStream();
+ Assert.assertNotNull(inputStream);
+ }
+
+ private static class TestConfiguration extends Configuration {
+
+ private TestConfiguration(Properties properties) {
+ super(properties);
+ }
+
+ @Override
+ protected void loadSSLParams() {
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLPropertyProviderTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLPropertyProviderTest.java
new file mode 100644
index 0000000..7b18957
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLPropertyProviderTest.java
@@ -0,0 +1,442 @@
+/**
+ * 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.scom;
+
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.internal.TemporalInfoImpl;
+import org.apache.ambari.server.controller.jdbc.ConnectionFactory;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.TemporalInfo;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+/**
+ * SQLPropertyProvider Tests
+ */
+public class SQLPropertyProviderTest {
+
+ private static final String PROPERTY_ID_1 = "metrics/rpc/RpcQueueTime_avg_time";
+ private static final String PROPERTY_ID_2 = "metrics/rpc/RpcSlowResponse_num_ops";
+ private static final String CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "cluster_name");
+ private static final String HOST_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "host_name");
+ private static final String COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "component_name");
+
+ @Test
+ public void testPopulateResources() throws Exception {
+
+ ConnectionFactory connectionFactory = createNiceMock(ConnectionFactory.class);
+ Connection connection = createNiceMock(Connection.class);
+ PreparedStatement statement = createNiceMock(PreparedStatement.class);
+ ResultSet resultSet = createNiceMock(ResultSet.class);
+
+ // set expectations
+ expect(connectionFactory.getConnection()).andReturn(connection).once();
+ expect(connection.prepareStatement((String) anyObject())).andReturn(statement).once();
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999990L);
+ expect(resultSet.getNString("MetricValue")).andReturn("0");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999991L);
+ expect(resultSet.getNString("MetricValue")).andReturn("1");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999992L);
+ expect(resultSet.getNString("MetricValue")).andReturn("2");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999993L);
+ expect(resultSet.getNString("MetricValue")).andReturn("3");
+ expect(resultSet.next()).andReturn(false);
+
+ // replay
+ replay(connectionFactory, connection, statement, resultSet);
+
+ SQLPropertyProvider provider = new SQLPropertyProvider(
+ PropertyHelper.getGangliaPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP1),
+ new TestHostInfoProvider(),
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID,
+ connectionFactory);
+
+ // namenode
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+
+ // only ask for one property
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ temporalInfoMap.put(PROPERTY_ID_1, new TemporalInfoImpl(10L, 20L, 1L));
+ Request request = PropertyHelper.getReadRequest(Collections.singleton(PROPERTY_ID_1), temporalInfoMap);
+
+ Assert.assertEquals(1, provider.populateResources(Collections.singleton(resource), request, null).size());
+
+ Assert.assertTrue(resource.getPropertyValue(PROPERTY_ID_1) instanceof Number[][]);
+
+ Number[][] datapoints = (Number[][]) resource.getPropertyValue(PROPERTY_ID_1);
+
+ for (int i = 0; i < datapoints.length; ++i) {
+ Assert.assertEquals((long) i, datapoints[i][0]);
+ Assert.assertEquals(999990L + i, datapoints[i][1]);
+ }
+
+ // verify
+ verify(connectionFactory, connection, statement, resultSet);
+ }
+
+ @Test
+ public void testPopulateResources_temporalStartTimeOnly() throws Exception {
+
+ ConnectionFactory connectionFactory = createNiceMock(ConnectionFactory.class);
+ Connection connection = createNiceMock(Connection.class);
+ PreparedStatement statement = createNiceMock(PreparedStatement.class);
+ ResultSet resultSet = createNiceMock(ResultSet.class);
+
+ // set expectations
+ expect(connectionFactory.getConnection()).andReturn(connection).once();
+ expect(connection.prepareStatement((String) anyObject())).andReturn(statement).once();
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999990L);
+ expect(resultSet.getNString("MetricValue")).andReturn("0");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999991L);
+ expect(resultSet.getNString("MetricValue")).andReturn("1");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999992L);
+ expect(resultSet.getNString("MetricValue")).andReturn("2");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999993L);
+ expect(resultSet.getNString("MetricValue")).andReturn("3");
+ expect(resultSet.next()).andReturn(false);
+
+ // replay
+ replay(connectionFactory, connection, statement, resultSet);
+
+ TestHostInfoProvider hostProvider = new TestHostInfoProvider();
+
+ SQLPropertyProvider provider = new SQLPropertyProvider(
+ PropertyHelper.getGangliaPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP1),
+ hostProvider,
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID,
+ connectionFactory);
+
+ // namenode
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+
+ // only ask for one property
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ temporalInfoMap.put(PROPERTY_ID_1, new TemporalInfoImpl(10L, -1L, -1L));
+ Request request = PropertyHelper.getReadRequest(Collections.singleton(PROPERTY_ID_1), temporalInfoMap);
+
+ Assert.assertEquals(1, provider.populateResources(Collections.singleton(resource), request, null).size());
+
+ Assert.assertTrue(resource.getPropertyValue(PROPERTY_ID_1) instanceof Number[][]);
+
+ Number[][] datapoints = (Number[][]) resource.getPropertyValue(PROPERTY_ID_1);
+
+ for (int i = 0; i < datapoints.length; ++i) {
+ Assert.assertEquals((long) i, datapoints[i][0]);
+ Assert.assertEquals(999990L + i, datapoints[i][1]);
+ }
+
+ // verify
+ verify(connectionFactory, connection, statement, resultSet);
+ }
+
+ @Test
+ public void testPopulateResources_hostNameProperty() throws Exception {
+
+ ConnectionFactory connectionFactory = createNiceMock(ConnectionFactory.class);
+ Connection connection = createNiceMock(Connection.class);
+ PreparedStatement statement = createNiceMock(PreparedStatement.class);
+ ResultSet resultSet = createNiceMock(ResultSet.class);
+
+ // set expectations
+ expect(connectionFactory.getConnection()).andReturn(connection).once();
+ expect(connection.prepareStatement((String) anyObject())).andReturn(statement).once();
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999990L);
+ expect(resultSet.getNString("MetricValue")).andReturn("0");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999991L);
+ expect(resultSet.getNString("MetricValue")).andReturn("1");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999992L);
+ expect(resultSet.getNString("MetricValue")).andReturn("2");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999993L);
+ expect(resultSet.getNString("MetricValue")).andReturn("3");
+ expect(resultSet.next()).andReturn(false);
+
+ // replay
+ replay(connectionFactory, connection, statement, resultSet);
+
+ TestHostInfoProvider hostProvider = new TestHostInfoProvider();
+
+ SQLPropertyProvider provider = new SQLPropertyProvider(
+ PropertyHelper.getGangliaPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP1),
+ hostProvider,
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID,
+ connectionFactory);
+
+ // namenode
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+
+ // only ask for one property
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ temporalInfoMap.put(PROPERTY_ID_1, new TemporalInfoImpl(10L, -1L, -1L));
+ Request request = PropertyHelper.getReadRequest(Collections.singleton(PROPERTY_ID_1), temporalInfoMap);
+
+ provider.populateResources(Collections.singleton(resource), request, null);
+
+ Assert.assertEquals("domU-12-31-39-0E-34-E1.compute-1.internal", hostProvider.getHostId());
+ Assert.assertNull(hostProvider.getClusterName());
+ Assert.assertNull(hostProvider.getComponentName());
+
+ // verify
+ verify(connectionFactory, connection, statement, resultSet);
+ }
+
+ @Test
+ public void testPopulateResources_noHostNameProperty() throws Exception {
+
+ ConnectionFactory connectionFactory = createNiceMock(ConnectionFactory.class);
+ Connection connection = createNiceMock(Connection.class);
+ PreparedStatement statement = createNiceMock(PreparedStatement.class);
+ ResultSet resultSet = createNiceMock(ResultSet.class);
+
+ // set expectations
+ expect(connectionFactory.getConnection()).andReturn(connection).once();
+ expect(connection.prepareStatement((String) anyObject())).andReturn(statement).once();
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999990L);
+ expect(resultSet.getNString("MetricValue")).andReturn("0");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999991L);
+ expect(resultSet.getNString("MetricValue")).andReturn("1");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999992L);
+ expect(resultSet.getNString("MetricValue")).andReturn("2");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999993L);
+ expect(resultSet.getNString("MetricValue")).andReturn("3");
+ expect(resultSet.next()).andReturn(false);
+
+ // replay
+ replay(connectionFactory, connection, statement, resultSet);
+
+ TestHostInfoProvider hostProvider = new TestHostInfoProvider();
+
+ SQLPropertyProvider provider = new SQLPropertyProvider(
+ PropertyHelper.getGangliaPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP1),
+ hostProvider,
+ CLUSTER_NAME_PROPERTY_ID,
+ null,
+ COMPONENT_NAME_PROPERTY_ID,
+ connectionFactory);
+
+ // namenode
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+
+ // only ask for one property
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ temporalInfoMap.put(PROPERTY_ID_1, new TemporalInfoImpl(10L, -1L, -1L));
+ Request request = PropertyHelper.getReadRequest(Collections.singleton(PROPERTY_ID_1), temporalInfoMap);
+
+ provider.populateResources(Collections.singleton(resource), request, null);
+
+ Assert.assertNull(hostProvider.getHostId());
+ Assert.assertEquals("c1", hostProvider.getClusterName());
+ Assert.assertEquals("DATANODE", hostProvider.getComponentName());
+
+ // verify
+ verify(connectionFactory, connection, statement, resultSet);
+ }
+
+ @Test
+ public void testPopulateResources_pointInTime() throws Exception {
+
+ ConnectionFactory connectionFactory = createNiceMock(ConnectionFactory.class);
+ Connection connection = createNiceMock(Connection.class);
+ PreparedStatement statement = createNiceMock(PreparedStatement.class);
+ ResultSet resultSet = createNiceMock(ResultSet.class);
+
+ // set expectations
+ expect(connectionFactory.getConnection()).andReturn(connection).once();
+ expect(connection.prepareStatement((String) anyObject())).andReturn(statement).once();
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getNString("MetricValue")).andReturn("0");
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999990L);
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getNString("MetricValue")).andReturn("1");
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999991L);
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getNString("MetricValue")).andReturn("2");
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999992L);
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getNString("MetricValue")).andReturn("3");
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999993L);
+ expect(resultSet.next()).andReturn(false);
+
+ // replay
+ replay(connectionFactory, connection, statement, resultSet);
+
+ SQLPropertyProvider provider = new SQLPropertyProvider(
+ PropertyHelper.getGangliaPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP1),
+ new TestHostInfoProvider(),
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID,
+ connectionFactory);
+
+ // namenode
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+
+ // only ask for one property
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ Request request = PropertyHelper.getReadRequest(Collections.singleton(PROPERTY_ID_2), temporalInfoMap);
+
+ Assert.assertEquals(1, provider.populateResources(Collections.singleton(resource), request, null).size());
+
+ // should be the last value of the time series...
+ Assert.assertEquals( 3L, resource.getPropertyValue(PROPERTY_ID_2));
+
+ // verify
+ verify(connectionFactory, connection, statement, resultSet);
+ }
+
+
+ @Test
+ public void testPopulateResources_multi() throws Exception {
+
+ ConnectionFactory connectionFactory = createNiceMock(ConnectionFactory.class);
+ Connection connection = createNiceMock(Connection.class);
+ PreparedStatement statement = createNiceMock(PreparedStatement.class);
+ ResultSet resultSet = createNiceMock(ResultSet.class);
+
+ // set expectations
+ expect(connectionFactory.getConnection()).andReturn(connection).once();
+ expect(connection.prepareStatement((String) anyObject())).andReturn(statement).once();
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999990L);
+ expect(resultSet.getNString("MetricValue")).andReturn("0");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999991L);
+ expect(resultSet.getNString("MetricValue")).andReturn("1");
+ expect(resultSet.next()).andReturn(false);
+
+ expect(statement.executeQuery()).andReturn(resultSet).once();
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999992L);
+ expect(resultSet.getNString("MetricValue")).andReturn("2");
+ expect(resultSet.next()).andReturn(true);
+ expect(resultSet.getLong("RecordTimeStamp")).andReturn(999993L);
+ expect(resultSet.getNString("MetricValue")).andReturn("3");
+ expect(resultSet.next()).andReturn(false);
+
+ // replay
+ replay(connectionFactory, connection, statement, resultSet);
+
+ SQLPropertyProvider provider = new SQLPropertyProvider(
+ PropertyHelper.getGangliaPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP1),
+ new TestHostInfoProvider(),
+ CLUSTER_NAME_PROPERTY_ID,
+ HOST_NAME_PROPERTY_ID,
+ COMPONENT_NAME_PROPERTY_ID,
+ connectionFactory);
+
+ // namenode
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty(CLUSTER_NAME_PROPERTY_ID, "c1");
+ resource.setProperty(HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
+ resource.setProperty(COMPONENT_NAME_PROPERTY_ID, "DATANODE");
+
+ // ask for two properties ... on temporal, one point in time
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ temporalInfoMap.put(PROPERTY_ID_1, new TemporalInfoImpl(10L, 20L, 1L));
+
+ Set<String> propertyIds = new LinkedHashSet<String>();
+ propertyIds.add(PROPERTY_ID_1);
+ propertyIds.add(PROPERTY_ID_2);
+
+ Request request = PropertyHelper.getReadRequest(propertyIds, temporalInfoMap);
+
+ Assert.assertEquals(1, provider.populateResources(Collections.singleton(resource), request, null).size());
+
+ // check the temporal value
+ Assert.assertTrue(resource.getPropertyValue(PROPERTY_ID_1) instanceof Number[][]);
+
+ Number[][] datapoints = (Number[][]) resource.getPropertyValue(PROPERTY_ID_1);
+
+ for (int i = 0; i < datapoints.length; ++i) {
+ Assert.assertEquals((long) i, datapoints[i][0]);
+ Assert.assertEquals(999990L + i, datapoints[i][1]);
+ }
+
+ // check the point in time value ... should be the last value of the time series...
+ Assert.assertEquals( 3L, resource.getPropertyValue(PROPERTY_ID_2));
+
+ // verify
+ verify(connectionFactory, connection, statement, resultSet);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLProviderModuleTest.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLProviderModuleTest.java b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLProviderModuleTest.java
new file mode 100644
index 0000000..bc4cc7d
--- /dev/null
+++ b/contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/scom/SQLProviderModuleTest.java
@@ -0,0 +1,51 @@
+/**
+ * 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.scom;
+
+import org.apache.ambari.server.controller.jmx.JMXPropertyProvider;
+import org.apache.ambari.server.controller.spi.PropertyProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * SQLProviderModule Tests
+ */
+public class SQLProviderModuleTest {
+ @Test
+ public void testCreatePropertyProviders() {
+ SQLProviderModule providerModule = new SQLProviderModule();
+
+ providerModule.createPropertyProviders(Resource.Type.Component);
+
+ List<PropertyProvider> providers = providerModule.getPropertyProviders(Resource.Type.Component);
+
+ Assert.assertTrue(providers.get(0) instanceof JMXPropertyProvider);
+ Assert.assertTrue(providers.get(1) instanceof SQLPropertyProvider);
+
+ providerModule.createPropertyProviders(Resource.Type.HostComponent);
+
+ providers = providerModule.getPropertyProviders(Resource.Type.HostComponent);
+
+ Assert.assertTrue(providers.get(0) instanceof JMXPropertyProvider);
+ Assert.assertTrue(providers.get(1) instanceof SQLPropertyProvider);
+ }
+}