Add mock report when deleting mock

This commit is contained in:
Dominik Adam Przybysz 2014-12-14 20:43:56 +01:00
parent d476478192
commit 0b4f4e0cf8
11 changed files with 224 additions and 26 deletions

View file

@ -31,17 +31,32 @@ class ControlServerClient {
}
}
int removeMock(String name) {
List<MockEvent> 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
return responseXml.'mockEvent'.collect {
new MockEvent(mockRequestFromXml(it.request), mockResponseFromXml(it.response))
}
}
throw new MockDoesNotExist()
}
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()] })
}
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.path.elem*.text()
)
}
private static StringEntity buildRemoveMockRequest(RemoveMockRequestData data) {
return new StringEntity("""\
<removeMock>
@ -70,8 +85,8 @@ class ControlServerClient {
HttpGet get = new HttpGet(address)
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)}
if (xml.name() == 'mocks') {
return xml.mock.collect { new RegisteredMock(it.name.text(), it.path.text(), it.port.text() as int) }
}
return []
}

View file

@ -0,0 +1,18 @@
package pl.touk.mockserver.client
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.TypeChecked
@EqualsAndHashCode
@CompileStatic
@TypeChecked
class MockEvent {
final MockRequest request
final MockResponse response
MockEvent(MockRequest request, MockResponse response) {
this.request = request
this.response = response
}
}

View file

@ -0,0 +1,22 @@
package pl.touk.mockserver.client
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.TypeChecked
@CompileStatic
@TypeChecked
@EqualsAndHashCode
class MockRequest {
final String text
final Map<String, String> headers
final Map<String, String> query
final List<String> path
MockRequest(String text, Map<String, String> headers, Map<String, String> query, List<String> path) {
this.text = text
this.headers = headers
this.query = query
this.path = path
}
}

View file

@ -0,0 +1,20 @@
package pl.touk.mockserver.client
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.TypeChecked
@CompileStatic
@TypeChecked
@EqualsAndHashCode
class MockResponse {
final int statusCode
final String text
final Map<String, String> headers
MockResponse(int statusCode, String text, Map<String, String> headers) {
this.statusCode = statusCode
this.text = text
this.headers = headers
}
}

View file

@ -1,4 +1,4 @@
package pl.touk.mockserver.server
package pl.touk.mockserver.tests
import groovy.util.slurpersupport.GPathResult
import org.apache.http.client.methods.*
@ -8,10 +8,10 @@ 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.*
import pl.touk.mockserver.server.HttpMockServer
import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Unroll
import pl.touk.mockserver.client.Util
class MockServerIntegrationTest extends Specification {
@ -49,7 +49,7 @@ class MockServerIntegrationTest extends Specification {
GPathResult restPostResponse = Util.extractXmlResponse(response)
restPostResponse.name() == 'goodResponseRest-request'
expect:
controlServerClient.removeMock('testRest') == 1
controlServerClient.removeMock('testRest')?.size() == 1
}
def "should add soap mock on endpoint"() {
@ -71,10 +71,10 @@ class MockServerIntegrationTest extends Specification {
soapPostResponse.name() == 'Envelope'
soapPostResponse.Body.'goodResponseSoap-request'.size() == 1
expect:
controlServerClient.removeMock('testSoap') == 1
controlServerClient.removeMock('testSoap')?.size() == 1
}
def "should not remove mock when it does not exist"() {
def "should throw exception when try to remove mock when it does not exist"() {
when:
controlServerClient.removeMock('testSoap')
then:
@ -89,7 +89,7 @@ class MockServerIntegrationTest extends Specification {
soap: true
))
and:
controlServerClient.removeMock('testSoap') == 0
controlServerClient.removeMock('testSoap') == []
when:
controlServerClient.removeMock('testSoap')
then:
@ -144,7 +144,7 @@ class MockServerIntegrationTest extends Specification {
soap: true
))
and:
controlServerClient.removeMock('testSoap') == 0
controlServerClient.removeMock('testSoap') == []
and:
controlServerClient.addMock(new AddMockRequestData(
name: 'testSoap',
@ -637,5 +637,78 @@ class MockServerIntegrationTest extends Specification {
restPostResponse.name == 'goodResponse-15'
}
//TODO def "should get mock report"(){}
def "should get mock report when deleting mock"() {
expect:
controlServerClient.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
))
controlServerClient.addMock(new AddMockRequestData(
name: 'testRest2',
path: 'testEndpoint',
port: 9999,
predicate: '''{req -> req.xml.name() == 'reqXYZ' }''',
response: '''{req -> "<goodResponseRest/>"}''',
statusCode: 202,
responseHeaders: '''{req -> ['aaa':'15']}''',
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'
when:
HttpPost post2 = new HttpPost('http://localhost:9999/testEndpoint/hello')
post2.entity = new StringEntity('<request15/>', ContentType.create("text/xml", "UTF-8"))
CloseableHttpResponse response2 = client.execute(post2)
then:
GPathResult restPostResponse2 = Util.extractXmlResponse(response2)
restPostResponse2.name() == 'goodResponseRest-request15'
when:
HttpPost post3 = new HttpPost('http://localhost:9999/testEndpoint?id=123')
post3.entity = new StringEntity('<reqXYZ/>', ContentType.create("text/xml", "UTF-8"))
CloseableHttpResponse response3 = client.execute(post3)
then:
GPathResult restPostResponse3 = Util.extractXmlResponse(response3)
restPostResponse3.name() == 'goodResponseRest'
when:
List<MockEvent> mockHistories1 = controlServerClient.removeMock('testRest')
then:
mockHistories1.size() == 2
mockHistories1[0].request.text == '<request/>'
!mockHistories1[0].request.headers?.keySet()?.empty
mockHistories1[0].request.query == [:]
mockHistories1[0].request.path == ['testEndpoint']
!mockHistories1[0].response.headers?.keySet()?.empty
mockHistories1[0].response.text == '<goodResponseRest-request/>'
mockHistories1[0].response.statusCode == 201
mockHistories1[1].request.text == '<request15/>'
!mockHistories1[1].request.headers?.keySet()?.empty
mockHistories1[1].request.query == [:]
mockHistories1[1].request.path == ['testEndpoint', 'hello']
!mockHistories1[1].response.headers?.keySet()?.empty
mockHistories1[1].response.text == '<goodResponseRest-request15/>'
mockHistories1[1].response.statusCode == 201
when:
List<MockEvent> mockHistories2 = controlServerClient.removeMock('testRest2')
then:
mockHistories2.size() == 1
mockHistories2[0].request.text == '<reqXYZ/>'
!mockHistories2[0].request.headers?.keySet()?.empty
mockHistories2[0].request.query == [id: '123']
mockHistories2[0].request.path == ['testEndpoint']
mockHistories2[0].response.headers.aaa == '15'
mockHistories2[0].response.text == '<goodResponseRest/>'
mockHistories2[0].response.statusCode == 202
}
}

View file

@ -1,4 +1,4 @@
package pl.touk.mockserver.server
package pl.touk.mockserver.tests
import groovy.util.slurpersupport.GPathResult
import org.apache.http.client.HttpClient
@ -10,6 +10,7 @@ import org.apache.http.impl.client.HttpClients
import pl.touk.mockserver.client.AddMockRequestData
import pl.touk.mockserver.client.ControlServerClient
import pl.touk.mockserver.client.Util
import pl.touk.mockserver.server.HttpMockServer
import spock.lang.Specification
class ServerMockPT extends Specification {
@ -38,7 +39,7 @@ class ServerMockPT extends Specification {
restPost.entity = new StringEntity("<request$current/>", ContentType.create("text/xml", "UTF-8"))
CloseableHttpResponse response = client.execute(restPost)
responses[current] = Util.extractXmlResponse(response)
assert controlServerClient.removeMock("testRest$current") == 1
assert controlServerClient.removeMock("testRest$current").size() == 1
})
}
when: