diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd
index 809cb44..6636b53 100644
--- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd
+++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd
@@ -23,6 +23,7 @@
+
diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
index 152a293..1f96dc8 100644
--- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
+++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
@@ -110,6 +110,7 @@
+
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 6476a96..5bb550b 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
@@ -1071,7 +1071,8 @@ class MockServerIntegrationTest extends Specification {
imports: [
new ImportAlias(alias: 'aaa', fullClassName: 'bbb'),
new ImportAlias(alias: 'ccc', fullClassName: 'bla')
- ]
+ ],
+ preserveHistory: true
))
remoteMockServer.removeMock('testRest5')
when:
@@ -1082,7 +1083,7 @@ class MockServerIntegrationTest extends Specification {
then:
List mockReport = remoteMockServer.listMocks()
mockReport.size() == 5
- assertMockReport(mockReport[0], [name: 'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST, schema: 'schema2.xsd'])
+ assertMockReport(mockReport[0], [name: 'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST, schema: 'schema2.xsd', preserveHistory: true])
assertMockReport(mockReport[1], [name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '' }''', responseHeaders: '{ _ -> [a: "b"] }', soap: false, statusCode: 200, method: Method.POST])
assertMockReport(mockReport[2], [name: 'testRest3', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST])
assertMockReport(mockReport[3], [name: 'testRest4', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: true, statusCode: 204, method: Method.PUT])
@@ -1091,4 +1092,26 @@ class MockServerIntegrationTest extends Specification {
mockReport[0].imports.find { it.alias == 'ccc' }?.fullClassName == 'bla'
}
+ def "should add mock without history"() {
+ expect:
+ remoteMockServer.addMock(new AddMock(
+ name: 'testRest',
+ path: 'testEndpoint',
+ port: 9999,
+ predicate: '''{req -> req.xml.name() == 'request'}''',
+ response: '''{req -> ""}''',
+ soap: false,
+ preserveHistory: false
+ ))
+ when:
+ HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint')
+ restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8"))
+ CloseableHttpResponse response = client.execute(restPost)
+ then:
+ GPathResult restPostResponse = Util.extractXmlResponse(response)
+ restPostResponse.name() == 'goodResponseRest-request'
+ expect:
+ remoteMockServer.removeMock('testRest')?.size() == 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 171d72a..3ec1ece 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
@@ -74,21 +74,22 @@ class HttpMockServer {
void listMocks(HttpExchange ex) {
Mocks mockListing = new Mocks(
- mocks: listMocks().collect {
- new MockReport(
- name: it.name,
- path: it.path,
- port: it.port,
- predicate: it.predicateClosureText,
- response: it.responseClosureText,
- responseHeaders: it.responseHeadersClosureText,
- soap: it.soap,
- method: it.method,
- statusCode: it.statusCode as int,
- schema: it.schema,
- imports: it.imports.collect { new ImportAlias(alias: it.key, fullClassName: it.value) }
- )
- }
+ mocks: listMocks().collect {
+ new MockReport(
+ name: it.name,
+ path: it.path,
+ port: it.port,
+ predicate: it.predicateClosureText,
+ response: it.responseClosureText,
+ responseHeaders: it.responseHeadersClosureText,
+ soap: it.soap,
+ method: it.method,
+ statusCode: it.statusCode as int,
+ schema: it.schema,
+ imports: it.imports.collect { new ImportAlias(alias: it.key, fullClassName: it.value) },
+ preserveHistory: it.preserveHistory
+ )
+ }
)
createResponse(ex, mockListing, 200)
}
@@ -150,6 +151,7 @@ class HttpMockServer {
mock.method = request.method
mock.responseHeaders = request.responseHeaders
mock.schema = request.schema
+ mock.preserveHistory = request.preserveHistory != false
return mock
}
@@ -163,6 +165,7 @@ class HttpMockServer {
mock.method = co.method ? Method.valueOf(co.method) : null
mock.responseHeaders = co.responseHeaders ?: null
mock.schema = co.schema ?: null
+ mock.preserveHistory = co.preserveHistory != false
return mock
}
@@ -188,7 +191,7 @@ class HttpMockServer {
mockNames.remove(name)
configuration.remove(name)
MockRemoved mockRemoved = new MockRemoved(
- mockEvents: createMockEventReports(mockEvents)
+ mockEvents: createMockEventReports(mockEvents)
)
createResponse(ex, mockRemoved, 200)
}
@@ -196,23 +199,23 @@ class HttpMockServer {
private static List createMockEventReports(List mockEvents) {
return mockEvents.collect {
new MockEventReport(
- request: new MockRequestReport(
- text: it.request.text,
- headers: new MockRequestReport.Headers(headers: it.request.headers.collect {
- new Parameter(name: it.key, value: it.value)
- }),
- queryParams: new MockRequestReport.QueryParams(queryParams: it.request.query.collect {
- new Parameter(name: it.key, value: it.value)
- }),
- path: new MockRequestReport.Path(pathParts: it.request.path)
- ),
- response: new MockResponseReport(
- statusCode: it.response.statusCode,
- text: it.response.text,
- headers: new MockResponseReport.Headers(headers: it.response.headers.collect {
- new Parameter(name: it.key, value: it.value)
- })
- )
+ request: new MockRequestReport(
+ text: it.request.text,
+ headers: new MockRequestReport.Headers(headers: it.request.headers.collect {
+ new Parameter(name: it.key, value: it.value)
+ }),
+ queryParams: new MockRequestReport.QueryParams(queryParams: it.request.query.collect {
+ new Parameter(name: it.key, value: it.value)
+ }),
+ path: new MockRequestReport.Path(pathParts: it.request.path)
+ ),
+ response: new MockResponseReport(
+ statusCode: it.response.statusCode,
+ text: it.response.text,
+ headers: new MockResponseReport.Headers(headers: it.response.headers.collect {
+ new Parameter(name: it.key, value: it.value)
+ })
+ )
)
}
}
@@ -225,7 +228,7 @@ class HttpMockServer {
log.trace("Peeking mock $name")
List mockEvents = childServers.values().collect { it.peekMock(name) }.flatten() as List
MockPeeked mockPeeked = new MockPeeked(
- mockEvents: createMockEventReports(mockEvents)
+ mockEvents: createMockEventReports(mockEvents)
)
createResponse(ex, mockPeeked, 200)
}
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
index 6511078..db67f47 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
@@ -34,6 +34,7 @@ class Mock implements Comparable {
String schema
private Validator validator
Map imports = [:]
+ boolean preserveHistory = true
Mock(String name, String path, int port) {
if (!(name)) {
@@ -60,7 +61,9 @@ class Mock implements Comparable {
}
} catch (Exception e) {
MockResponse response = new MockResponse(400, e.message, [:])
- history << new MockEvent(request, response)
+ if(preserveHistory) {
+ history << new MockEvent(request, response)
+ }
return response
}
}
@@ -69,7 +72,9 @@ class Mock implements Comparable {
String response = soap ? wrapSoap(responseText) : responseText
Map headers = responseHeaders(request)
MockResponse mockResponse = new MockResponse(statusCode, response, headers)
- history << new MockEvent(request, mockResponse)
+ if(preserveHistory) {
+ history << new MockEvent(request, mockResponse)
+ }
return mockResponse
}