package pl.touk.mockserver.client import groovy.util.slurpersupport.GPathResult import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.HttpPost import org.apache.http.entity.ContentType import org.apache.http.entity.StringEntity import org.apache.http.impl.client.CloseableHttpClient import org.apache.http.impl.client.HttpClients class ControlServerClient { private final String address private final CloseableHttpClient client = HttpClients.createDefault() ControlServerClient(String host, int port) { address = "http://$host:$port/serverControl" } void addMock(AddMockRequestData addMockRequestData) { HttpPost addMockPost = new HttpPost(address) addMockPost.entity = buildAddMockRequest(addMockRequestData) CloseableHttpResponse response = client.execute(addMockPost) GPathResult responseXml = Util.extractXmlResponse(response) if (responseXml.name() != 'mockAdded') { if (responseXml.text() == 'mock already registered') { throw new MockAlreadyExists() } throw new InvalidMockDefinitionException(responseXml.text()) } } int removeMock(String name) { HttpPost removeMockPost = new HttpPost(address) removeMockPost.entity = buildRemoveMockRequest(new RemoveMockRequestData(name: name)) CloseableHttpResponse response = client.execute(removeMockPost) GPathResult responseXml = Util.extractXmlResponse(response) if (responseXml.name() == 'mockRemoved') { return responseXml.text() as int } throw new MockDoesNotExist() } private static StringEntity buildRemoveMockRequest(RemoveMockRequestData data) { return new StringEntity("""\ ${data.name} """, ContentType.create("text/xml", "UTF-8")) } private static StringEntity buildAddMockRequest(AddMockRequestData data) { return new StringEntity("""\ ${data.name} ${data.path} ${data.port} ${data.predicate != null ? "${data.predicate}" : ''} ${data.response != null ? "${data.response}" : ''} ${data.soap != null ? "${data.soap}" : ''} ${data.statusCode != null ? "${data.statusCode}" : ''} """, ContentType.create("text/xml", "UTF-8")) } }