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)
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("""\
<removeMock>
<name>${data.name}</name>
<skipReport>${data.skipReport}</skipReport>
</removeMock>
""", 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 []
}

View file

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

View file

@ -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 == '<goodResponseRest/>'
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) {
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<MockEvent> mockEvents = childServers.collect { it.removeMock(name) }.flatten()
List<MockEvent> mockEvents = skipReport ? [] : childServers.collect { it.removeMock(name) }.flatten()
mockNames.remove(name)
createResponse(ex, createMockRemovedResponse(mockEvents), 200)
}