package com.sequenceiq.it.cloudbreak;
import static spark.Spark.after;
import static spark.Spark.before;
import static spark.Spark.secure;
import static spark.Spark.stop;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ResourceLoader;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import com.google.gson.Gson;
import com.sequenceiq.it.verification.Call;
import com.sequenceiq.it.verification.Verification;
import spark.Response;
public abstract class AbstractMockIntegrationTest extends AbstractCloudbreakIntegrationTest {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMockIntegrationTest.class);
private Gson gson = new Gson();
private Map<Call, Response> requestResponseMap;
@Inject
private ResourceLoader resourceLoader;
@BeforeClass
public void configMockServer() {
requestResponseMap = new HashMap<>();
File keystoreFile = createTempFileFromClasspath("/keystore_server");
secure(keystoreFile.getPath(), "secret", null, null);
}
public Gson gson() {
return gson;
}
protected void initSpark() {
before((req, res) -> res.type("application/json"));
after((request, response) -> requestResponseMap.put(Call.fromRequest(request), response));
}
@AfterClass
public void breakDown() {
stop();
}
public Verification verify(String path, String httpMethod) {
return new Verification(path, httpMethod, requestResponseMap, false);
}
public Verification verifyRegexpPath(String regexpPath, String httpMethod) {
return new Verification(regexpPath, httpMethod, requestResponseMap, true);
}
protected String responseFromJsonFile(String path) {
try (InputStream inputStream = resourceLoader.getResource("/mockresponse/" + path).getInputStream()) {
return IOUtils.toString(inputStream);
} catch (IOException e) {
LOGGER.error("can't read file from path", e);
return "";
}
}
}