Add optional getting of mock report when deleting mock

Change-Id: I954e484387d3660fdfebad57fc419697b1a0fedd
This commit is contained in:
Dominik Adam Przybysz 2015-08-20 20:48:13 +02:00
parent dbdefeb614
commit 5460cd4e91
4 changed files with 45 additions and 25 deletions

View file

@ -31,9 +31,9 @@ class RemoteMockServer {
} }
} }
List<MockEvent> removeMock(String name) { List<MockEvent> removeMock(String name, boolean skipReport = false) {
HttpPost removeMockPost = new HttpPost(address) 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) CloseableHttpResponse response = client.execute(removeMockPost)
GPathResult responseXml = Util.extractXmlResponse(response) GPathResult responseXml = Util.extractXmlResponse(response)
if (responseXml.name() == 'mockRemoved') { if (responseXml.name() == 'mockRemoved') {
@ -58,7 +58,9 @@ class RemoteMockServer {
} }
private static MockResponse mockResponseFromXml(GPathResult xml) { 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) { private static MockRequest mockRequestFromXml(GPathResult xml) {
@ -74,6 +76,7 @@ class RemoteMockServer {
return new StringEntity("""\ return new StringEntity("""\
<removeMock> <removeMock>
<name>${data.name}</name> <name>${data.name}</name>
<skipReport>${data.skipReport}</skipReport>
</removeMock> </removeMock>
""", ContentType.create("text/xml", "UTF-8")) """, ContentType.create("text/xml", "UTF-8"))
} }
@ -107,7 +110,9 @@ class RemoteMockServer {
CloseableHttpResponse response = client.execute(get) CloseableHttpResponse response = client.execute(get)
GPathResult xml = Util.extractXmlResponse(response) GPathResult xml = Util.extractXmlResponse(response)
if (xml.name() == 'mocks') { 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 [] return []
} }

View file

@ -7,4 +7,5 @@ import groovy.transform.TypeChecked
@TypeChecked @TypeChecked
class RemoveMockRequestData { class RemoveMockRequestData {
String name String name
boolean skipReport = false
} }

View file

@ -1,29 +1,13 @@
package pl.touk.mockserver.tests package pl.touk.mockserver.tests
import groovy.util.slurpersupport.GPathResult import groovy.util.slurpersupport.GPathResult
import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.*
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.entity.ContentType import org.apache.http.entity.ContentType
import org.apache.http.entity.StringEntity import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.CloseableHttpClient import org.apache.http.impl.client.CloseableHttpClient
import org.apache.http.impl.client.HttpClients import org.apache.http.impl.client.HttpClients
import org.apache.http.util.EntityUtils import org.apache.http.util.EntityUtils
import pl.touk.mockserver.client.AddMockRequestData import pl.touk.mockserver.client.*
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.server.HttpMockServer import pl.touk.mockserver.server.HttpMockServer
import spock.lang.Shared import spock.lang.Shared
import spock.lang.Specification import spock.lang.Specification
@ -827,4 +811,32 @@ class MockServerIntegrationTest extends Specification {
mockEvents2[0].response.text == '<goodResponseRest/>' mockEvents2[0].response.text == '<goodResponseRest/>'
mockEvents2[0].response.statusCode == 202 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 -> "<goodResponseRest-${req.xml.name()}/>"}''',
statusCode: 201,
responseHeaders: '''{req -> ['aaa':'14']}''',
soap: false
))
when:
HttpPost post1 = new HttpPost('http://localhost:9999/testEndpoint')
post1.entity = new StringEntity('<request/>', 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
}
} }

View file

@ -105,11 +105,13 @@ class HttpMockServer {
private void removeMock(GPathResult request, HttpExchange ex) { private void removeMock(GPathResult request, HttpExchange ex) {
String name = request.name String name = request.name
boolean skipReport = Boolean.parseBoolean(request.skipReport?.toString() ?: 'false')
println "!!!!!!!!! $skipReport"
if (!(name in mockNames)) { if (!(name in mockNames)) {
throw new RuntimeException('mock not registered') throw new RuntimeException('mock not registered')
} }
log.info("Removing mock $name") log.info("Removing mock $name")
List<MockEvent> mockEvents = childServers.collect { it.removeMock(name) }.flatten() List<MockEvent> mockEvents = skipReport ? [] : childServers.collect { it.removeMock(name) }.flatten()
mockNames.remove(name) mockNames.remove(name)
createResponse(ex, createMockRemovedResponse(mockEvents), 200) createResponse(ex, createMockRemovedResponse(mockEvents), 200)
} }