package com.sequenceiq.cloudbreak.service.image;
import static com.sequenceiq.cloudbreak.cloud.model.Orchestrator.orchestrator;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean;
import com.sequenceiq.cloudbreak.api.model.InstanceGroupType;
import com.sequenceiq.cloudbreak.cloud.PlatformParameters;
import com.sequenceiq.cloudbreak.cloud.model.TagSpecification;
import com.sequenceiq.cloudbreak.cloud.model.AvailabilityZone;
import com.sequenceiq.cloudbreak.cloud.model.AvailabilityZones;
import com.sequenceiq.cloudbreak.cloud.model.DiskType;
import com.sequenceiq.cloudbreak.cloud.model.DiskTypes;
import com.sequenceiq.cloudbreak.cloud.model.Platform;
import com.sequenceiq.cloudbreak.cloud.model.PlatformImage;
import com.sequenceiq.cloudbreak.cloud.model.PlatformOrchestrator;
import com.sequenceiq.cloudbreak.cloud.model.Region;
import com.sequenceiq.cloudbreak.cloud.model.Regions;
import com.sequenceiq.cloudbreak.cloud.model.ScriptParams;
import com.sequenceiq.cloudbreak.cloud.model.StackParamValidation;
import com.sequenceiq.cloudbreak.cloud.model.VmType;
import com.sequenceiq.cloudbreak.cloud.model.VmTypes;
import com.sequenceiq.cloudbreak.common.type.OrchestratorConstants;
import com.sequenceiq.cloudbreak.util.FileReaderUtils;
import freemarker.template.Configuration;
import freemarker.template.TemplateException;
public class UserDataBuilderTest {
private static UserDataBuilder userDataBuilder = new UserDataBuilder();
@Before
public void setup() throws IOException, TemplateException {
FreeMarkerConfigurationFactoryBean factoryBean = new FreeMarkerConfigurationFactoryBean();
factoryBean.setPreferFileSystemAccess(false);
factoryBean.setTemplateLoaderPath("classpath:/");
factoryBean.afterPropertiesSet();
Configuration configuration = factoryBean.getObject();
userDataBuilder.setFreemarkerConfiguration(configuration);
UserDataBuilderParams params = new UserDataBuilderParams();
params.setCustomData("date >> /tmp/time.txt");
ReflectionTestUtils.setField(userDataBuilder, "userDataBuilderParams", params);
}
@Test
public void testBuildUserDataAzure() throws IOException {
String expectedGwScript = FileReaderUtils.readFileFromClasspath("azure-gateway-init.sh");
String expectedCoreScript = FileReaderUtils.readFileFromClasspath("azure-core-init.sh");
Map<InstanceGroupType, String> userdata = userDataBuilder.buildUserData(Platform.platform("AZURE"), "ssh-rsa public", "priv-key".getBytes(),
"ssh-rsa test", "cloudbreak", getPlatformParameters(), true, "pass");
Assert.assertEquals(expectedGwScript, userdata.get(InstanceGroupType.GATEWAY));
Assert.assertEquals(expectedCoreScript, userdata.get(InstanceGroupType.CORE));
}
public PlatformParameters getPlatformParameters() {
return new PlatformParameters() {
@Override
public ScriptParams scriptParams() {
return new ScriptParams("sd", 98);
}
@Override
public DiskTypes diskTypes() {
return new DiskTypes(new ArrayList<>(), DiskType.diskType(""), new HashMap<>());
}
@Override
public Regions regions() {
return new Regions(new ArrayList<>(), Region.region(""));
}
@Override
public AvailabilityZones availabilityZones() {
return new AvailabilityZones(new HashMap<>());
}
@Override
public String resourceDefinition(String resource) {
return "";
}
@Override
public List<StackParamValidation> additionalStackParameters() {
return new ArrayList<>();
}
@Override
public PlatformOrchestrator orchestratorParams() {
return new PlatformOrchestrator(Arrays.asList(orchestrator(OrchestratorConstants.SALT), orchestrator(OrchestratorConstants.SWARM)),
orchestrator(OrchestratorConstants.SALT));
}
@Override
public PlatformImage images() {
return new PlatformImage(new ArrayList<>(), imageRegex());
}
@Override
public String imageRegex() {
return "";
}
@Override
public TagSpecification tagSpecification() {
return null;
}
@Override
public VmTypes vmTypes(Boolean extended) {
return new VmTypes(new ArrayList<>(), VmType.vmType(""));
}
@Override
public Map<AvailabilityZone, VmTypes> vmTypesPerAvailabilityZones(Boolean extended) {
return Collections.emptyMap();
}
};
}
}