package com.sequenceiq.cloudbreak.cloud.mock; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import javax.annotation.PostConstruct; import javax.net.ssl.SSLContext; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.google.gson.Gson; import com.mashape.unirest.http.ObjectMapper; import com.mashape.unirest.http.Unirest; import com.sequenceiq.cloudbreak.cloud.Setup; import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext; import com.sequenceiq.cloudbreak.cloud.model.CloudCredential; import com.sequenceiq.cloudbreak.cloud.model.CloudStack; import com.sequenceiq.cloudbreak.cloud.model.FileSystem; import com.sequenceiq.cloudbreak.cloud.model.Image; import com.sequenceiq.cloudbreak.cloud.notification.PersistenceNotifier; import com.sequenceiq.cloudbreak.common.type.ImageStatus; import com.sequenceiq.cloudbreak.common.type.ImageStatusResult; @Service public class MockSetup implements Setup { private static final Logger LOGGER = LoggerFactory.getLogger(MockSetup.class); private static final int FINISHED_PROGRESS_VALUE = 100; @PostConstruct public void setUp() { setObjectMapper(); disableSSLCheck(); } private void setObjectMapper() { final Gson gson = new Gson(); Unirest.setObjectMapper(new ObjectMapper() { public <T> T readValue(String value, Class<T> valueType) { return gson.fromJson(value, valueType); } public String writeValue(Object value) { return gson.toJson(value); } }); } private void disableSSLCheck() { try { SSLContext sslcontext = SSLContexts.custom() .loadTrustMaterial(null, new TrustSelfSignedStrategy()) .build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext); CloseableHttpClient httpclient = HttpClients.custom() .setSSLSocketFactory(sslsf) .build(); Unirest.setHttpClient(httpclient); } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) { throw new RuntimeException("can't create ssl settings"); } } @Override public void prepareImage(AuthenticatedContext authenticatedContext, CloudStack stack, Image image) { LOGGER.debug("prepare image has been executed"); } @Override public ImageStatusResult checkImageStatus(AuthenticatedContext authenticatedContext, CloudStack stack, Image image) { return new ImageStatusResult(ImageStatus.CREATE_FINISHED, FINISHED_PROGRESS_VALUE); } @Override public void prerequisites(AuthenticatedContext authenticatedContext, CloudStack stack, PersistenceNotifier persistenceNotifier) { LOGGER.debug("setup prerequisites invoked.."); } @Override public void validateFileSystem(CloudCredential credential, FileSystem fileSystem) throws Exception { } }