package com.sequenceiq.cloudbreak.init;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.test.util.ReflectionTestUtils;
import com.sequenceiq.cloudbreak.TestUtil;
import com.sequenceiq.cloudbreak.domain.Blueprint;
import com.sequenceiq.cloudbreak.repository.BlueprintRepository;
import com.sequenceiq.cloudbreak.service.blueprint.BlueprintUtils;
import com.sequenceiq.cloudbreak.util.JsonUtil;
@RunWith(MockitoJUnitRunner.class)
public class BlueprintUpdateServiceTest {
private static final String JSON = "{\"blueprint\":{\"Blueprints\":{\"blueprint_name\":\"hdp-etl-edw-tp\","
+ "\"stack_name\":\"HDP\",\"stack_version\":\"2.5\"},\"configurations\":[{\"core-site\":{\"fs.trash.interval\":\"4320\"}},{\"hdfs-site\":"
+ "{\"dfs.namenode.safemode.threshold-pct\":\"0.99\"}},{\"hive-site\":{\"hive.exec.compress.output\":\"true\",\"hive.merge.mapfiles\""
+ ":\"true\",\"hive.server2.tez.initialize.default.sessions\":\"true\"}},{\"mapred-site\":{\"mapreduce.job.reduce.slowstart.completedmaps\""
+ ":\"0.7\",\"mapreduce.map.output.compress\":\"true\",\"mapreduce.output.fileoutputformat.compress\":\"true\"}},{\"yarn-site\""
+ ":{\"yarn.acl.enable\":\"true\"}}],\"host_groups\":[{\"name\":\"master\",\"configurations\":[],\"components\":[{\"name\""
+ ":\"APP_TIMELINE_SERVER\"},{\"name\":\"HCAT\"},{\"name\":\"HDFS_CLIENT\"},{\"name\":\"HISTORYSERVER\"},{\"name\":\"HIVE_CLIENT\"}"
+ ",{\"name\":\"HIVE_METASTORE\"},{\"name\":\"HIVE_SERVER\"},{\"name\":\"JOURNALNODE\"},{\"name\":\"LIVY_SERVER\"},{\"name\""
+ ":\"MAPREDUCE2_CLIENT\"},{\"name\":\"METRICS_COLLECTOR\"},{\"name\":\"METRICS_GRAFANA\"},{\"name\":\"METRICS_MONITOR\"},"
+ "{\"name\":\"MYSQL_SERVER\"},{\"name\":\"NAMENODE\"},{\"name\":\"PIG\"},{\"name\":\"RESOURCEMANAGER\"},{\"name\":\"SECONDARY_NAMENODE\"}"
+ ",{\"name\":\"SPARK2_CLIENT\"},{\"name\":\"SPARK2_JOBHISTORYSERVER\"},{\"name\":\"SQOOP\"},{\"name\":\"TEZ_CLIENT\"},"
+ "{\"name\":\"WEBHCAT_SERVER\"},{\"name\":\"YARN_CLIENT\"},{\"name\":\"ZEPPELIN_MASTER\"},{\"name\":\"ZOOKEEPER_CLIENT\"},"
+ "{\"name\":\"ZOOKEEPER_SERVER\"}],\"cardinality\":\"1\"},{\"name\":\"worker\",\"configurations\":[],\"components\":["
+ "{\"name\":\"DATANODE\"},{\"name\":\"METRICS_MONITOR\"},{\"name\":\"NODEMANAGER\"}],\"cardinality\":\"1+\"}]},\"inputs\": []}";
@InjectMocks
private BlueprintUpdateService underTest;
@Mock
private BlueprintRepository blueprintRepository;
@Mock
private BlueprintUtils blueprintUtils;
@Before
public void setUp() throws IOException {
when(blueprintRepository.save(any(Blueprint.class))).thenReturn(new Blueprint());
when(blueprintUtils.convertStringToJsonNode(anyString())).thenReturn(JsonUtil.readTree(JSON));
when(blueprintUtils.isBlueprintNamePreConfigured(anyString(), any())).thenCallRealMethod();
}
@Test
public void updateDefaultBlueprintTestWhenOnlyOneDefaultIsConfigure() throws IOException {
when(blueprintRepository.findAll()).thenReturn(Arrays.asList(TestUtil.blueprint("testloader1")));
ReflectionTestUtils.setField(underTest, "blueprintArray", Arrays.asList("testloader1", "testloader", "testloader"));
when(blueprintUtils.readDefaultBlueprintFromFile(anyObject())).thenReturn(JSON);
when(blueprintUtils.countHostGroups(anyObject())).thenReturn(2);
when(blueprintRepository.save(any(Blueprint.class))).thenReturn(new Blueprint());
underTest.onApplicationEvent(null);
verify(blueprintRepository, times(1)).save(any(Blueprint.class));
}
@Test
public void updateDefaultBlueprintTestWhenEveryDefaultIsConfigure() throws IOException {
when(blueprintRepository.findAll()).thenReturn(Arrays.asList(
TestUtil.blueprint("testloader1"),
TestUtil.blueprint("testloader2"),
TestUtil.blueprint("testloader3")
));
ReflectionTestUtils.setField(underTest, "blueprintArray", Arrays.asList("testloader1", "testloader2", "testloader3"));
when(blueprintUtils.readDefaultBlueprintFromFile(anyObject())).thenReturn(JSON);
when(blueprintUtils.countHostGroups(anyObject())).thenReturn(2);
when(blueprintRepository.save(any(Blueprint.class))).thenReturn(new Blueprint());
underTest.onApplicationEvent(null);
verify(blueprintRepository, times(3)).save(any(Blueprint.class));
}
}