|
@@ -27,6 +27,7 @@ import org.apache.ambari.server.AmbariException;
|
|
|
import org.apache.ambari.server.actionmanager.ActionManager;
|
|
|
import org.apache.ambari.server.actionmanager.HostRoleCommand;
|
|
|
import org.apache.ambari.server.agent.AgentEnv;
|
|
|
+import org.apache.ambari.server.agent.CommandReport;
|
|
|
import org.apache.ambari.server.agent.DiskInfo;
|
|
|
import org.apache.ambari.server.agent.HostInfo;
|
|
|
import org.apache.ambari.server.api.services.AmbariMetaInfo;
|
|
@@ -45,6 +46,8 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
|
|
|
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
|
|
|
import org.apache.ambari.server.orm.entities.HostVersionEntity;
|
|
|
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
|
|
|
+import org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction;
|
|
|
+import org.apache.ambari.server.stack.StackManager;
|
|
|
import org.apache.ambari.server.state.Cluster;
|
|
|
import org.apache.ambari.server.state.Clusters;
|
|
|
import org.apache.ambari.server.state.ConfigHelper;
|
|
@@ -59,9 +62,11 @@ import org.junit.After;
|
|
|
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 java.lang.reflect.Field;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.LinkedHashMap;
|
|
@@ -89,8 +94,6 @@ import static org.junit.Assert.fail;
|
|
|
/**
|
|
|
* ClusterStackVersionResourceProvider tests.
|
|
|
*/
|
|
|
-//@RunWith(PowerMockRunner.class)
|
|
|
-@PrepareForTest(AmbariManagementControllerImpl.class)
|
|
|
public class ClusterStackVersionResourceProviderTest {
|
|
|
|
|
|
private Injector injector;
|
|
@@ -121,6 +124,7 @@ public class ClusterStackVersionResourceProviderTest {
|
|
|
// Create instances of mocks
|
|
|
repositoryVersionDAOMock = createNiceMock(RepositoryVersionDAO.class);
|
|
|
configHelper = createNiceMock(ConfigHelper.class);
|
|
|
+
|
|
|
// Initialize injector
|
|
|
InMemoryDefaultTestModule module = new InMemoryDefaultTestModule();
|
|
|
injector = Guice.createInjector(Modules.override(module).with(new MockModule()));
|
|
@@ -234,11 +238,126 @@ public class ClusterStackVersionResourceProviderTest {
|
|
|
verify(managementController, response, clusters);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Tests manual finalization scenario
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @Test
|
|
|
+ public void testUpdateResources() throws Exception {
|
|
|
+ Resource.Type type = Resource.Type.ClusterStackVersion;
|
|
|
+
|
|
|
+ AmbariManagementController managementController = createMock(AmbariManagementController.class);
|
|
|
+ Clusters clusters = createNiceMock(Clusters.class);
|
|
|
+ Cluster cluster = createNiceMock(Cluster.class);
|
|
|
+ StackId stackId = new StackId("HDP", "2.0.1");
|
|
|
+
|
|
|
+ final Host host1 = createNiceMock("host1", Host.class);
|
|
|
+ final Host host2 = createNiceMock("host2", Host.class);
|
|
|
+ expect(host1.getHostName()).andReturn("host1").anyTimes();
|
|
|
+ expect(host1.getOsFamily()).andReturn("redhat6").anyTimes();
|
|
|
+ expect(host2.getHostName()).andReturn("host2").anyTimes();
|
|
|
+ expect(host2.getOsFamily()).andReturn("redhat6").anyTimes();
|
|
|
+ replay(host1, host2);
|
|
|
+ Map<String, Host> hostsForCluster = new HashMap<String, Host>() {{
|
|
|
+ put(host1.getHostName(), host1);
|
|
|
+ put(host2.getHostName(), host2);
|
|
|
+ }};
|
|
|
+
|
|
|
+ ServiceComponentHost sch = createMock(ServiceComponentHost.class);
|
|
|
+ List<ServiceComponentHost> schs = Collections.singletonList(sch);
|
|
|
+
|
|
|
+ RepositoryVersionEntity repoVersion = new RepositoryVersionEntity();
|
|
|
+ repoVersion.setOperatingSystems(operatingSystemsJson);
|
|
|
+
|
|
|
+ ServiceOsSpecific.Package hivePackage = new ServiceOsSpecific.Package();
|
|
|
+ hivePackage.setName("hive");
|
|
|
+ List<ServiceOsSpecific.Package> packages = Collections.singletonList(hivePackage);
|
|
|
+
|
|
|
+ ActionManager actionManager = createNiceMock(ActionManager.class);
|
|
|
+
|
|
|
+ RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
|
|
|
+ ResourceProviderFactory resourceProviderFactory = createNiceMock(ResourceProviderFactory.class);
|
|
|
+ ResourceProvider csvResourceProvider = createNiceMock(ClusterStackVersionResourceProvider.class);
|
|
|
+
|
|
|
+ CommandReport report = createNiceMock(CommandReport.class);
|
|
|
+ FinalizeUpgradeAction finalizeUpgradeAction = createNiceMock(FinalizeUpgradeAction.class);
|
|
|
+
|
|
|
+ AbstractControllerResourceProvider.init(resourceProviderFactory);
|
|
|
+
|
|
|
+ Map<String, Map<String, String>> hostConfigTags = new HashMap<String, Map<String, String>>();
|
|
|
+ expect(configHelper.getEffectiveDesiredTags(anyObject(ClusterImpl.class), anyObject(String.class))).andReturn(hostConfigTags);
|
|
|
+
|
|
|
+ expect(managementController.getClusters()).andReturn(clusters).anyTimes();
|
|
|
+ expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
|
|
|
+ expect(managementController.getAuthName()).andReturn("admin").anyTimes();
|
|
|
+ expect(managementController.getActionManager()).andReturn(actionManager).anyTimes();
|
|
|
+ expect(managementController.getJdkResourceUrl()).andReturn("/JdkResourceUrl").anyTimes();
|
|
|
+ expect(managementController.getPackagesForServiceHost(anyObject(ServiceInfo.class),
|
|
|
+ (Map<String, String>) anyObject(List.class), anyObject(String.class))).andReturn(packages).anyTimes();
|
|
|
+
|
|
|
+ expect(resourceProviderFactory.getHostResourceProvider(anyObject(Set.class), anyObject(Map.class),
|
|
|
+ eq(managementController))).andReturn(csvResourceProvider).anyTimes();
|
|
|
+
|
|
|
+ expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster);
|
|
|
+ expect(clusters.getHostsForCluster(anyObject(String.class))).andReturn(hostsForCluster);
|
|
|
+
|
|
|
+ expect(cluster.getCurrentStackVersion()).andReturn(stackId);
|
|
|
+ expect(cluster.getServiceComponentHosts(anyObject(String.class))).andReturn(schs).anyTimes();
|
|
|
+
|
|
|
+ expect(sch.getServiceName()).andReturn("HIVE").anyTimes();
|
|
|
+
|
|
|
+ expect(repositoryVersionDAOMock.findByDisplayName(anyObject(String.class))).andReturn(repoVersion);
|
|
|
+
|
|
|
+ expect(actionManager.getRequestTasks(anyLong())).andReturn(Collections.<HostRoleCommand>emptyList()).anyTimes();
|
|
|
+
|
|
|
+ expect(finalizeUpgradeAction.execute(null)).andReturn(report);
|
|
|
+
|
|
|
+ expect(report.getStdOut()).andReturn("Dummy stdout");
|
|
|
+ expect(report.getStdErr()).andReturn("Dummy stderr");
|
|
|
+ expect(report.getStatus()).andReturn("COMPLETED");
|
|
|
+
|
|
|
+ // replay
|
|
|
+ replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,
|
|
|
+ cluster, repositoryVersionDAOMock, configHelper, sch, actionManager, finalizeUpgradeAction, report);
|
|
|
+
|
|
|
+ ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
|
|
|
+ type,
|
|
|
+ PropertyHelper.getPropertyIds(type),
|
|
|
+ PropertyHelper.getKeyPropertyIds(type),
|
|
|
+ managementController);
|
|
|
+
|
|
|
+ injector.injectMembers(provider);
|
|
|
+
|
|
|
+ // Have to inject instance manually because injection via DI fails
|
|
|
+ Field field = ClusterStackVersionResourceProvider.class.getDeclaredField("finalizeUpgradeAction");
|
|
|
+ field.setAccessible(true);
|
|
|
+ field.set((ClusterStackVersionResourceProvider)provider, finalizeUpgradeAction);
|
|
|
+
|
|
|
+ // add the property map to a set for the request. add more maps for multiple creates
|
|
|
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
|
|
|
+
|
|
|
+ // add properties to the request map
|
|
|
+ properties.put(ClusterStackVersionResourceProvider.CLUSTER_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
|
|
|
+ properties.put(ClusterStackVersionResourceProvider.CLUSTER_STACK_VERSION_STATE_PROPERTY_ID, "CURRENT");
|
|
|
+ properties.put(ClusterStackVersionResourceProvider.CLUSTER_STACK_VERSION_REPOSITORY_VERSION_PROPERTY_ID, "HDP-2.2.2.0-2561");
|
|
|
+
|
|
|
+ // create the request
|
|
|
+ Request request = PropertyHelper.getUpdateRequest(properties, null);
|
|
|
+
|
|
|
+ provider.updateResources(request, null);
|
|
|
+
|
|
|
+ // verify
|
|
|
+ verify(managementController, response);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public class MockModule extends AbstractModule {
|
|
|
@Override
|
|
|
protected void configure() {
|
|
|
bind(RepositoryVersionDAO.class).toInstance(repositoryVersionDAOMock);
|
|
|
bind(ConfigHelper.class).toInstance(configHelper);
|
|
|
+ //bind(FinalizeUpgradeAction.class).toInstance(finalizeUpgradeAction);
|
|
|
}
|
|
|
}
|
|
|
}
|