Search in sources :

Example 1 with HostGroupAdjustmentJson

use of com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson in project cloudbreak by hortonworks.

the class AmbariClusterHostServiceTypeTest method testUpdateHostsForDownscaleCannotGoBelowReplication.

@Test
public void testUpdateHostsForDownscaleCannotGoBelowReplication() throws CloudbreakSecuritySetupException {
    HostGroupAdjustmentJson json = new HostGroupAdjustmentJson();
    json.setHostGroup("slave_1");
    json.setScalingAdjustment(-1);
    AmbariClient ambariClient = mock(AmbariClient.class);
    HostMetadata metadata1 = mock(HostMetadata.class);
    HostMetadata metadata2 = mock(HostMetadata.class);
    HostMetadata metadata3 = mock(HostMetadata.class);
    Set<HostMetadata> hostsMetaData = new HashSet<>();
    List<HostMetadata> hostsMetadataList = asList(metadata1, metadata2, metadata3);
    hostsMetaData.addAll(hostsMetadataList);
    HostGroup hostGroup = new HostGroup();
    hostGroup.setHostMetadata(hostsMetaData);
    hostGroup.setName("slave_1");
    when(ambariClientProvider.getAmbariClient(any(HttpClientConfig.class), anyInt(), any(Cluster.class))).thenReturn(ambariClient);
    when(ambariClient.getComponentsCategory("multi-node-yarn", "slave_1")).thenReturn(singletonMap("DATANODE", "SLAVE"));
    when(hostGroupService.getByClusterIdAndName(anyLong(), anyString())).thenReturn(hostGroup);
    when(statusToPollGroupConverter.convert(any(Status.class))).thenReturn(PollGroup.POLLABLE);
    underTest.updateHosts(stack.getId(), json);
    verify(flowManager, times(1)).triggerClusterDownscale(stack.getId(), json);
    verify(blueprintValidator, times(1)).validateHostGroupScalingRequest(stack.getCluster().getBlueprint(), hostGroup, json.getScalingAdjustment());
}
Also used : Status(com.sequenceiq.cloudbreak.api.model.Status) HttpClientConfig(com.sequenceiq.cloudbreak.client.HttpClientConfig) HostGroup(com.sequenceiq.cloudbreak.domain.HostGroup) Cluster(com.sequenceiq.cloudbreak.domain.Cluster) HostGroupAdjustmentJson(com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson) AmbariClient(com.sequenceiq.ambari.client.AmbariClient) HostMetadata(com.sequenceiq.cloudbreak.domain.HostMetadata) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 2 with HostGroupAdjustmentJson

use of com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson in project cloudbreak by hortonworks.

the class AmbariClusterHostServiceTypeTest method testUpdateHostsForDownscaleFilterOneHost.

@Test
public void testUpdateHostsForDownscaleFilterOneHost() throws CloudbreakSecuritySetupException {
    HostGroupAdjustmentJson json = new HostGroupAdjustmentJson();
    json.setHostGroup("slave_1");
    json.setScalingAdjustment(-1);
    AmbariClient ambariClient = mock(AmbariClient.class);
    HostMetadata metadata1 = mock(HostMetadata.class);
    InstanceMetaData instanceMetaData1 = mock(InstanceMetaData.class);
    HostMetadata metadata2 = mock(HostMetadata.class);
    InstanceMetaData instanceMetaData2 = mock(InstanceMetaData.class);
    HostMetadata metadata3 = mock(HostMetadata.class);
    InstanceMetaData instanceMetaData3 = mock(InstanceMetaData.class);
    HostMetadata metadata4 = mock(HostMetadata.class);
    InstanceMetaData instanceMetaData4 = mock(InstanceMetaData.class);
    Set<HostMetadata> hostsMetaData = new HashSet<>(asList(metadata1, metadata2, metadata3, metadata4));
    HostGroup hostGroup = new HostGroup();
    hostGroup.setHostMetadata(hostsMetaData);
    hostGroup.setName("slave_1");
    Map<String, Map<Long, Long>> dfsSpace = new HashMap<>();
    dfsSpace.put("node2", singletonMap(85_000L, 15_000L));
    dfsSpace.put("node1", singletonMap(90_000L, 10_000L));
    dfsSpace.put("node3", singletonMap(80_000L, 20_000L));
    dfsSpace.put("node4", singletonMap(80_000L, 11_000L));
    when(metadata1.getHostName()).thenReturn("node1");
    when(metadata2.getHostName()).thenReturn("node2");
    when(metadata3.getHostName()).thenReturn("node3");
    when(metadata4.getHostName()).thenReturn("node4");
    when(instanceMetaData1.getAmbariServer()).thenReturn(false);
    when(instanceMetaData2.getAmbariServer()).thenReturn(false);
    when(instanceMetaData3.getAmbariServer()).thenReturn(false);
    when(instanceMetaData4.getAmbariServer()).thenReturn(false);
    when(ambariClientProvider.getAmbariClient(any(HttpClientConfig.class), anyInt(), any(Cluster.class))).thenReturn(ambariClient);
    when(ambariClient.getComponentsCategory("multi-node-yarn", "slave_1")).thenReturn(singletonMap("DATANODE", "SLAVE"));
    when(ambariClient.getBlueprintMap(cluster.getBlueprint().getAmbariName())).thenReturn(singletonMap("slave_1", singletonList("DATANODE")));
    when(ambariClient.getDFSSpace()).thenReturn(dfsSpace);
    when(instanceMetadataRepository.findHostInStack(stack.getId(), "node1")).thenReturn(instanceMetaData1);
    when(instanceMetadataRepository.findHostInStack(stack.getId(), "node2")).thenReturn(instanceMetaData2);
    when(instanceMetadataRepository.findHostInStack(stack.getId(), "node3")).thenReturn(instanceMetaData3);
    when(instanceMetadataRepository.findHostInStack(stack.getId(), "node4")).thenReturn(instanceMetaData4);
    when(hostGroupService.getByClusterIdAndName(anyLong(), anyString())).thenReturn(hostGroup);
    when(statusToPollGroupConverter.convert(any(Status.class))).thenReturn(PollGroup.POLLABLE);
    underTest.updateHosts(stack.getId(), json);
    verify(flowManager, times(1)).triggerClusterDownscale(stack.getId(), json);
    verify(blueprintValidator, times(1)).validateHostGroupScalingRequest(stack.getCluster().getBlueprint(), hostGroup, json.getScalingAdjustment());
}
Also used : Status(com.sequenceiq.cloudbreak.api.model.Status) HttpClientConfig(com.sequenceiq.cloudbreak.client.HttpClientConfig) HashMap(java.util.HashMap) HostGroup(com.sequenceiq.cloudbreak.domain.HostGroup) Cluster(com.sequenceiq.cloudbreak.domain.Cluster) HostGroupAdjustmentJson(com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson) Matchers.anyString(org.mockito.Matchers.anyString) InstanceMetaData(com.sequenceiq.cloudbreak.domain.InstanceMetaData) Map(java.util.Map) HashMap(java.util.HashMap) Collections.singletonMap(java.util.Collections.singletonMap) AmbariClient(com.sequenceiq.ambari.client.AmbariClient) HostMetadata(com.sequenceiq.cloudbreak.domain.HostMetadata) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 3 with HostGroupAdjustmentJson

use of com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson in project cloudbreak by hortonworks.

the class AmbariClusterHostServiceTypeTest method testUpdateHostsDoesntAcceptScalingAdjustmentsWithDifferentSigns.

@Test
public void testUpdateHostsDoesntAcceptScalingAdjustmentsWithDifferentSigns() throws Exception {
    // GIVEN
    HostGroupAdjustmentJson hga1 = new HostGroupAdjustmentJson();
    hga1.setHostGroup("slave_1");
    hga1.setScalingAdjustment(-2);
    when(hostGroupService.getByClusterIdAndName(anyLong(), anyString())).thenReturn(new HostGroup());
    thrown.expect(BadRequestException.class);
    thrown.expectMessage("The host group must contain at least 1 host after the decommission: [hostGroup: 'slave_1', current hosts: 0, " + "decommissions requested: 2]");
    // WHEN
    underTest.updateHosts(stack.getId(), hga1);
}
Also used : HostGroup(com.sequenceiq.cloudbreak.domain.HostGroup) HostGroupAdjustmentJson(com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson) Test(org.junit.Test)

Example 4 with HostGroupAdjustmentJson

use of com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson in project cloudbreak by hortonworks.

the class AmbariClusterHostServiceTypeTest method testUpdateHostsForDownscaleFilterAllHosts.

@Test
public void testUpdateHostsForDownscaleFilterAllHosts() throws CloudbreakSecuritySetupException {
    HostGroupAdjustmentJson json = new HostGroupAdjustmentJson();
    json.setHostGroup("slave_1");
    json.setScalingAdjustment(-1);
    AmbariClient ambariClient = mock(AmbariClient.class);
    HostMetadata metadata1 = mock(HostMetadata.class);
    HostMetadata metadata2 = mock(HostMetadata.class);
    HostMetadata metadata3 = mock(HostMetadata.class);
    Set<HostMetadata> hostsMetaData = new HashSet<>(asList(metadata1, metadata2, metadata3));
    HostGroup hostGroup = new HostGroup();
    hostGroup.setHostMetadata(hostsMetaData);
    hostGroup.setName("slave_1");
    when(ambariClientProvider.getAmbariClient(any(HttpClientConfig.class), anyInt(), any(Cluster.class))).thenReturn(ambariClient);
    when(ambariClient.getComponentsCategory("multi-node-yarn", "slave_1")).thenReturn(singletonMap("DATANODE", "SLAVE"));
    when(hostGroupService.getByClusterIdAndName(anyLong(), anyString())).thenReturn(hostGroup);
    when(statusToPollGroupConverter.convert(any(Status.class))).thenReturn(PollGroup.POLLABLE);
    underTest.updateHosts(stack.getId(), json);
}
Also used : Status(com.sequenceiq.cloudbreak.api.model.Status) HttpClientConfig(com.sequenceiq.cloudbreak.client.HttpClientConfig) HostGroup(com.sequenceiq.cloudbreak.domain.HostGroup) Cluster(com.sequenceiq.cloudbreak.domain.Cluster) HostGroupAdjustmentJson(com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson) AmbariClient(com.sequenceiq.ambari.client.AmbariClient) HostMetadata(com.sequenceiq.cloudbreak.domain.HostMetadata) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 5 with HostGroupAdjustmentJson

use of com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson in project cloudbreak by hortonworks.

the class AmbariClusterHostServiceTypeTest method testUpdateHostsDoesntAcceptZeroScalingAdjustments.

@Test
public void testUpdateHostsDoesntAcceptZeroScalingAdjustments() throws Exception {
    // GIVEN
    HostGroupAdjustmentJson hga1 = new HostGroupAdjustmentJson();
    hga1.setHostGroup("slave_1");
    hga1.setScalingAdjustment(0);
    when(hostGroupService.getByClusterIdAndName(anyLong(), anyString())).thenReturn(new HostGroup());
    thrown.expect(BadRequestException.class);
    thrown.expectMessage("No scaling adjustments specified. Nothing to do.");
    // WHEN
    underTest.updateHosts(stack.getId(), hga1);
}
Also used : HostGroup(com.sequenceiq.cloudbreak.domain.HostGroup) HostGroupAdjustmentJson(com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson) Test(org.junit.Test)

Aggregations

HostGroupAdjustmentJson (com.sequenceiq.cloudbreak.api.model.HostGroupAdjustmentJson)16 Test (org.junit.Test)11 Cluster (com.sequenceiq.cloudbreak.domain.Cluster)9 HostGroup (com.sequenceiq.cloudbreak.domain.HostGroup)9 HashSet (java.util.HashSet)8 AmbariClient (com.sequenceiq.ambari.client.AmbariClient)6 Status (com.sequenceiq.cloudbreak.api.model.Status)6 HttpClientConfig (com.sequenceiq.cloudbreak.client.HttpClientConfig)6 HostMetadata (com.sequenceiq.cloudbreak.domain.HostMetadata)6 InstanceMetaData (com.sequenceiq.cloudbreak.domain.InstanceMetaData)6 UpdateClusterJson (com.sequenceiq.cloudbreak.api.model.UpdateClusterJson)5 Collections.singletonMap (java.util.Collections.singletonMap)4 HashMap (java.util.HashMap)4 Map (java.util.Map)4 Matchers.anyString (org.mockito.Matchers.anyString)4 IntegrationTestContext (com.sequenceiq.it.IntegrationTestContext)3 AbstractCloudbreakIntegrationTest (com.sequenceiq.it.cloudbreak.AbstractCloudbreakIntegrationTest)3 Parameters (org.testng.annotations.Parameters)3 Test (org.testng.annotations.Test)3 StackV1Endpoint (com.sequenceiq.cloudbreak.api.endpoint.v1.StackV1Endpoint)2