From 5460cd4e91763fab599e1b19d3290f293b015587 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Thu, 20 Aug 2015 20:48:13 +0200 Subject: [PATCH] Add optional getting of mock report when deleting mock Change-Id: I954e484387d3660fdfebad57fc419697b1a0fedd --- .../mockserver/client/RemoteMockServer.groovy | 17 ++++--- .../client/RemoveMockRequestData.groovy | 1 + .../tests/MockServerIntegrationTest.groovy | 48 ++++++++++++------- .../mockserver/server/HttpMockServer.groovy | 4 +- 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy index f462d3f..6afce3d 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy +++ b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy @@ -31,9 +31,9 @@ class RemoteMockServer { } } - List removeMock(String name) { + List removeMock(String name, boolean skipReport = false) { HttpPost removeMockPost = new HttpPost(address) - removeMockPost.entity = buildRemoveMockRequest(new RemoveMockRequestData(name: name)) + removeMockPost.entity = buildRemoveMockRequest(new RemoveMockRequestData(name: name, skipReport: skipReport)) CloseableHttpResponse response = client.execute(removeMockPost) GPathResult responseXml = Util.extractXmlResponse(response) if (responseXml.name() == 'mockRemoved') { @@ -58,14 +58,16 @@ class RemoteMockServer { } private static MockResponse mockResponseFromXml(GPathResult xml) { - return new MockResponse(xml.statusCode.text() as int, xml.text.text(), xml.headers.param.collectEntries { [(it.@name.text()):it.text()] }) + return new MockResponse(xml.statusCode.text() as int, xml.text.text(), xml.headers.param.collectEntries { + [(it.@name.text()): it.text()] + }) } private static MockRequest mockRequestFromXml(GPathResult xml) { return new MockRequest( xml.text.text(), - xml.headers.param.collectEntries { [(it.@name.text()):it.text()] }, - xml.query.param.collectEntries { [(it.@name.text()):it.text()] }, + xml.headers.param.collectEntries { [(it.@name.text()): it.text()] }, + xml.query.param.collectEntries { [(it.@name.text()): it.text()] }, xml.path.elem*.text() ) } @@ -74,6 +76,7 @@ class RemoteMockServer { return new StringEntity("""\ ${data.name} + ${data.skipReport} """, ContentType.create("text/xml", "UTF-8")) } @@ -107,7 +110,9 @@ class RemoteMockServer { CloseableHttpResponse response = client.execute(get) GPathResult xml = Util.extractXmlResponse(response) if (xml.name() == 'mocks') { - return xml.mock.collect { new RegisteredMock(it.name.text(), it.path.text(), it.port.text() as int, it.predicate.text(), it.response.text(), it.responseHeaders.text()) } + return xml.mock.collect { + new RegisteredMock(it.name.text(), it.path.text(), it.port.text() as int, it.predicate.text(), it.response.text(), it.responseHeaders.text()) + } } return [] } diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoveMockRequestData.groovy b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoveMockRequestData.groovy index e2c15c9..1d37545 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoveMockRequestData.groovy +++ b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoveMockRequestData.groovy @@ -7,4 +7,5 @@ import groovy.transform.TypeChecked @TypeChecked class RemoveMockRequestData { String name + boolean skipReport = false } diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy index 435d43d..077a893 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy @@ -1,29 +1,13 @@ package pl.touk.mockserver.tests import groovy.util.slurpersupport.GPathResult -import org.apache.http.client.methods.CloseableHttpResponse -import org.apache.http.client.methods.HttpDelete -import org.apache.http.client.methods.HttpGet -import org.apache.http.client.methods.HttpHead -import org.apache.http.client.methods.HttpOptions -import org.apache.http.client.methods.HttpPatch -import org.apache.http.client.methods.HttpPost -import org.apache.http.client.methods.HttpPut -import org.apache.http.client.methods.HttpTrace +import org.apache.http.client.methods.* 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 import org.apache.http.util.EntityUtils -import pl.touk.mockserver.client.AddMockRequestData -import pl.touk.mockserver.client.InvalidMockDefinition -import pl.touk.mockserver.client.Method -import pl.touk.mockserver.client.MockAlreadyExists -import pl.touk.mockserver.client.MockDoesNotExist -import pl.touk.mockserver.client.MockEvent -import pl.touk.mockserver.client.RegisteredMock -import pl.touk.mockserver.client.RemoteMockServer -import pl.touk.mockserver.client.Util +import pl.touk.mockserver.client.* import pl.touk.mockserver.server.HttpMockServer import spock.lang.Shared import spock.lang.Specification @@ -827,4 +811,32 @@ class MockServerIntegrationTest extends Specification { mockEvents2[0].response.text == '' mockEvents2[0].response.statusCode == 202 } + + @Unroll + def "should return mock report with #mockEvents events when deleting mock with flag skip mock = #skipReport"() { + expect: + remoteMockServer.addMock(new AddMockRequestData( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name()[0..6] == 'request' }''', + response: '''{req -> ""}''', + statusCode: 201, + responseHeaders: '''{req -> ['aaa':'14']}''', + soap: false + )) + when: + HttpPost post1 = new HttpPost('http://localhost:9999/testEndpoint') + post1.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response1 = client.execute(post1) + then: + GPathResult restPostResponse1 = Util.extractXmlResponse(response1) + restPostResponse1.name() == 'goodResponseRest-request' + expect: + remoteMockServer.removeMock('testRest', skipReport).size() == mockEvents + where: + skipReport | mockEvents + false | 1 + true | 0 + } } diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy index ac1a4ff..fc24a49 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -105,11 +105,13 @@ class HttpMockServer { private void removeMock(GPathResult request, HttpExchange ex) { String name = request.name + boolean skipReport = Boolean.parseBoolean(request.skipReport?.toString() ?: 'false') + println "!!!!!!!!! $skipReport" if (!(name in mockNames)) { throw new RuntimeException('mock not registered') } log.info("Removing mock $name") - List mockEvents = childServers.collect { it.removeMock(name) }.flatten() + List mockEvents = skipReport ? [] : childServers.collect { it.removeMock(name) }.flatten() mockNames.remove(name) createResponse(ex, createMockRemovedResponse(mockEvents), 200) }