From 0f45ccd82ae3b235c0574a2b04645f0682358c95 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Sat, 19 Sep 2015 20:27:29 +0200 Subject: [PATCH 01/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 597ea07..14dc337 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.0 + 2.0.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index ccb2253..f41dfe5 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.0 + 2.0.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 6585e7e..f1eefd8 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.0 + 2.0.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index a786ce6..2c35d90 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.0 + 2.0.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 6ca3180..da7b792 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ pl.touk.mockserver http-mock-server pom - 2.0.0 + 2.0.1-SNAPSHOT mockserver-client mockserver From aabc9d75f213d803263bea4cdb85396db152e8b8 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Sat, 19 Sep 2015 20:54:52 +0200 Subject: [PATCH 02/80] Update version in Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f76ca67..38a4b1f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM java:8 -ADD mockserver/target/mockserver-1.1.1-SNAPSHOT-jar-with-dependencies.jar /mockserver.jar +ADD mockserver/target/mockserver-2.0.0-jar-with-dependencies.jar /mockserver.jar EXPOSE 9999 From 9a14f9bfabbbba7aba4427403b8c37dfce295ade Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 13:46:52 +0200 Subject: [PATCH 03/80] Add request validation against xsd Change-Id: Iadf618e50d01dd92bf9eed5b8ed98138b56c20c9 --- .../xsd/pl/touk/mockserver/api/request.xsd | 1 + .../xsd/pl/touk/mockserver/api/response.xsd | 1 + .../client/InvalidMockRequestSchema.groovy | 9 ++ .../pl/touk/mockserver/client/Util.groovy | 3 + .../tests/MockServerIntegrationTest.groovy | 124 +++++++++++++++++- .../src/test/resources/schema1.xsd | 19 +++ .../src/test/resources/schema2.xsd | 12 ++ .../mockserver/server/HttpMockServer.groovy | 9 +- .../pl/touk/mockserver/server/Mock.groovy | 33 +++++ .../touk/mockserver/server/MockRequest.groovy | 4 + 10 files changed, 205 insertions(+), 10 deletions(-) create mode 100644 mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy create mode 100644 mockserver-tests/src/test/resources/schema1.xsd create mode 100644 mockserver-tests/src/test/resources/schema2.xsd 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 fb4afca..10c7190 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 @@ -21,6 +21,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 21ffd9b..9e630dc 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 @@ -108,6 +108,7 @@ + diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy new file mode 100644 index 0000000..ff3d401 --- /dev/null +++ b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy @@ -0,0 +1,9 @@ +package pl.touk.mockserver.client + +import groovy.transform.CompileStatic +import groovy.transform.TypeChecked + +@CompileStatic +@TypeChecked +class InvalidMockRequestSchema extends RuntimeException { +} diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy index 966625f..3a427d6 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy +++ b/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy @@ -42,6 +42,9 @@ class Util { if (message == 'mock not registered') { throw new MockDoesNotExist() } + if (message == 'mock request schema is invalid schema') { + throw new InvalidMockRequestSchema() + } throw new InvalidMockDefinition(message) } 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 3dd7ec4..fa61e4a 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 @@ -7,11 +7,10 @@ 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.api.request.AddMock import pl.touk.mockserver.api.common.Method +import pl.touk.mockserver.api.request.AddMock import pl.touk.mockserver.api.response.MockEventReport import pl.touk.mockserver.api.response.MockReport -import pl.touk.mockserver.api.response.Parameter import pl.touk.mockserver.client.* import pl.touk.mockserver.server.HttpMockServer import spock.lang.Shared @@ -146,6 +145,20 @@ class MockServerIntegrationTest extends Specification { thrown(MockAlreadyExists) } + def "should not add mock when schema does not exist"() { + when: + remoteMockServer.addMock(new AddMock( + name: 'test', + path: 'testEndpoint2', + port: 9998, + response: '''{req -> ""}''', + soap: false, + schema: 'ble.xsd' + )) + then: + thrown(InvalidMockRequestSchema) + } + def "should not add mock with empty name"() { when: remoteMockServer.addMock(new AddMock( @@ -634,21 +647,22 @@ class MockServerIntegrationTest extends Specification { remoteMockServer.addMock(new AddMock( name: 'testRest', path: 'testEndpoint', - port: 9999 + port: 9999, + schema: 'schema2.xsd' )) remoteMockServer.removeMock('testRest5') when: List mockReport = remoteMockServer.listMocks() then: mockReport.size() == 5 - assertMockReport(mockReport[0], [name:'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST]) + 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[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]) assertMockReport(mockReport[4], [name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST]) } - private void assertMockReport( MockReport mockReport, Map props) { + private static void assertMockReport(MockReport mockReport, Map props) { props.each { assert mockReport."${it.key}" == it.value } @@ -820,9 +834,9 @@ class MockServerIntegrationTest extends Specification { mockEvents2.size() == 1 mockEvents2[0].request.text == '' !mockEvents2[0].request.headers?.headers?.empty - mockEvents2[0].request.queryParams.queryParams.find{it.name == 'id'}?.value == '123' + mockEvents2[0].request.queryParams.queryParams.find { it.name == 'id' }?.value == '123' mockEvents2[0].request.path.pathParts == ['testEndpoint'] - mockEvents2[0].response.headers.headers.find {it.name == 'aaa'}?.value == '15' + mockEvents2[0].response.headers.headers.find { it.name == 'aaa' }?.value == '15' mockEvents2[0].response.text == '' mockEvents2[0].response.statusCode == 202 } @@ -881,4 +895,100 @@ class MockServerIntegrationTest extends Specification { '''{req -> System.exit (-1); req.xml.name() == 'request'}''' ] } + + def "should validate request against multiple schema files"() { + expect: + remoteMockServer.addMock(new AddMock( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + schema: 'schema1.xsd', + response: '''{req -> ''}''', + soap: false + )) + when: + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity('15unknown', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then: + response.statusLine.statusCode == 400 + Util.extractStringResponse(response).contains('''Value 'unknown' is not facet-valid with respect to enumeration '[test, prod, preprod]'.''') + when: + HttpPost restPost2 = new HttpPost('http://localhost:9999/testEndpoint') + restPost2.entity = new StringEntity('15test', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response2 = client.execute(restPost2) + then: + Util.consumeResponse(response2) + response2.statusLine.statusCode == 200 + expect: + remoteMockServer.removeMock('testRest')?.size() == 2 + } + + def "should validate soap request"() { + expect: + remoteMockServer.addMock(new AddMock( + name: 'testSoap', + path: 'testEndpoint', + port: 9999, + schema: 'schema1.xsd', + response: '''{req -> ''}''', + soap: true + )) + when: + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity(Util.soap('15unknown'), ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then: + response.statusLine.statusCode == 400 + Util.extractStringResponse(response).contains('''Value 'unknown' is not facet-valid with respect to enumeration '[test, prod, preprod]'.''') + when: + HttpPost restPost2 = new HttpPost('http://localhost:9999/testEndpoint') + restPost2.entity = new StringEntity(Util.soap('15test'), ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response2 = client.execute(restPost2) + then: + Util.consumeResponse(response2) + response2.statusLine.statusCode == 200 + expect: + remoteMockServer.removeMock('testSoap')?.size() == 2 + } + + def "should validate soap request with namespace in envelope"() { + expect: + remoteMockServer.addMock(new AddMock( + name: 'testSoap', + path: 'testEndpoint', + port: 9999, + schema: 'schema1.xsd', + response: '''{req -> ''}''', + soap: true + )) + when: + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity(''' + + 15unknown + +''', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then: + response.statusLine.statusCode == 400 + Util.extractStringResponse(response).contains('''Value 'unknown' is not facet-valid with respect to enumeration '[test, prod, preprod]'.''') + when: + HttpPost restPost2 = new HttpPost('http://localhost:9999/testEndpoint') + restPost2.entity = new StringEntity(''' + + 15test + +''', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response2 = client.execute(restPost2) + then: + Util.consumeResponse(response2) + response2.statusLine.statusCode == 200 + expect: + remoteMockServer.removeMock('testSoap')?.size() == 2 + } } diff --git a/mockserver-tests/src/test/resources/schema1.xsd b/mockserver-tests/src/test/resources/schema1.xsd new file mode 100644 index 0000000..4ca340a --- /dev/null +++ b/mockserver-tests/src/test/resources/schema1.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/mockserver-tests/src/test/resources/schema2.xsd b/mockserver-tests/src/test/resources/schema2.xsd new file mode 100644 index 0000000..611d010 --- /dev/null +++ b/mockserver-tests/src/test/resources/schema2.xsd @@ -0,0 +1,12 @@ + + + + + + + + + + + + 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 0b601ff..8eaab6d 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -64,7 +64,8 @@ class HttpMockServer { responseHeaders: it.responseHeadersClosureText, soap: it.soap, method: it.method, - statusCode: it.statusCode as int + statusCode: it.statusCode as int, + schema: it.schema ) } ) @@ -95,6 +96,7 @@ class HttpMockServer { mock.statusCode = request.statusCode mock.method = request.method mock.responseHeaders = request.responseHeaders + mock.schema = request.schema return mock } @@ -135,12 +137,12 @@ class HttpMockServer { 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) + 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 { + headers: new MockResponseReport.Headers(headers: it.response.headers.collect { new Parameter(name: it.key, value: it.value) }) ) @@ -162,6 +164,7 @@ class HttpMockServer { } private static void createErrorResponse(HttpExchange ex, Exception e) { + log.warn('Exception occured', e) createResponse(ex, new ExceptionOccured(value: e.message), 400) } 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 32bad68..15b538f 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -5,6 +5,10 @@ import groovy.transform.PackageScope import groovy.util.logging.Slf4j import pl.touk.mockserver.api.common.Method +import javax.xml.XMLConstants +import javax.xml.transform.stream.StreamSource +import javax.xml.validation.SchemaFactory +import javax.xml.validation.Validator import java.util.concurrent.CopyOnWriteArrayList @PackageScope @@ -25,6 +29,8 @@ class Mock implements Comparable { Method method = Method.POST int counter = 0 final List history = new CopyOnWriteArrayList<>() + String schema + private Validator validator Mock(String name, String path, int port) { if (!(name)) { @@ -41,6 +47,20 @@ class Mock implements Comparable { MockResponse apply(MockRequest request) { log.debug("Mock $name invoked") + if (validator) { + try { + log.debug('Validating...') + if (soap) { + validator.validate(new StreamSource(new StringReader(request.textWithoutSoap))) + } else { + validator.validate(new StreamSource(new StringReader(request.text))) + } + } catch (Exception e) { + MockResponse response = new MockResponse(400, e.message, [:]) + history << new MockEvent(request, response) + return response + } + } ++counter String responseText = response(request) String response = soap ? wrapSoap(responseText) : responseText @@ -106,4 +126,17 @@ class Mock implements Comparable { int compareTo(Mock o) { return name.compareTo(o.name) } + + void setSchema(String schema) { + this.schema = schema + if (schema) { + try { + validator = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) + .newSchema(new File(this.class.getResource("/$schema").path)) + .newValidator() + } catch (Exception e) { + throw new RuntimeException('mock request schema is invalid schema', e) + } + } + } } diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy index c4ebe01..f8dc561 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy @@ -4,6 +4,7 @@ import com.sun.net.httpserver.Headers import groovy.json.JsonSlurper import groovy.transform.PackageScope import groovy.util.slurpersupport.GPathResult +import groovy.xml.XmlUtil @PackageScope class MockRequest { @@ -69,4 +70,7 @@ class MockRequest { } as Map } + String getTextWithoutSoap() { + return XmlUtil.serialize(soap) + } } From faf8f8006a8cb51e5492eeb08970bc69c6d43c87 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 14:16:26 +0200 Subject: [PATCH 04/80] Describe schema validation parameter Change-Id: I45e2a2d5af6317c626d797613028693635e3c936 --- README.md | 57 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 9f46938..366ef30 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,24 @@ # HTTP MOCK SERVER -## Create server jar (in mockserver directory) +## Create server jar ``` +cd mockserver mvn clean package assembly:single ``` -## Start server on port (default 9999) +## Start server ``` java -jar mockserver--jar-with-dependencies.jar [PORT] ``` -## Create mock on server via client +Default port is 9999. + +## Create mock on server + +### Via client ```java RemoteMockServer remoteMockServer = new RemoteMockServer('localhost', ) @@ -27,11 +32,13 @@ remoteMockServer.addMock(new AddMock( soap: ..., statusCode: ..., method: ..., - responseHeaders: ... + responseHeaders: ..., + schema: ... )) ``` - -or via sending POST request to localhost:/serverControl +### Via HTTP + +Send POST request to localhost:/serverControl ```xml @@ -45,9 +52,12 @@ or via sending POST request to localhost:/serverControl ... ... ... + ... ``` +### Parameters + * name - name of mock, must be unique * path - path on which mock should be created * port - inteer, port on which mock should be created, cannot be the same as mock server port @@ -57,17 +67,19 @@ or via sending POST request to localhost:/serverControl * statusCode - integer, status code of response when predicate is satisfied, default 200 * method - POST|PUT|DELETE|GET|TRACE|OPTION|HEAD, expected http method of request, default POST * responseHeaders - groovyClosure as string which must evaluate to Map which will be added to response headers, default { _ -> [:] } +* schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator + +### Closures request properties In closures input parameter (called req) contains properties: - * text - request body as java.util.String * headers - java.util.Map with request headers * query - java.util.Map with query parameters * xml - groovy.util.slurpersupport.GPathResult created from request body (if request body is valid xml) * soap - groovy.util.slurpersupport.GPathResult created from request body without Envelope and Body elements (if request body is valid soap xml) * json - java.lang.Object created from request body (if request body is valid json) -* path - java.util.List with not empty parts of request path +* path - java.util.List with not empty parts of request path Response if success: @@ -81,14 +93,17 @@ Response with error message if failure: ... ``` -## Mock could be peeked to get get report of its invocations. -Via client: +## Peek mock +Mock could be peeked to get get report of its invocations. + +### Via client ```java List mockEvents = remoteMockServer.peekMock('...') ``` -Via sending POST request to localhost:/serverControl +### Via HTTP +Send POST request to localhost:/serverControl ```xml @@ -134,14 +149,17 @@ Response with error message if failure: ... ``` -## When mock was used it could be unregistered by name. It also optionally returns report of mock invocations if second parameter is true. -Via client: +## Remove mock + +When mock was used it could be unregistered by name. It also optionally returns report of mock invocations if second parameter is true. + +### Via client ```java List mockEvents = remoteMockServer.removeMock('...', ...) ``` - -Via sending POST request to localhost:/serverControl +### Via HTTP +Send POST request to localhost:/serverControl ```xml @@ -188,22 +206,23 @@ If skipReport is set to true then response will be: ``` - Response with error message if failure: ```xml ... ``` +## List mocks definitions -## List of current registered mocks could be retrieved: -Via client: +### Via client ```java List mocks = remoteMockServer.listMocks() ``` -or via sending GET request to localhost:/serverControl +### Via HTTP + +Send GET request to localhost:/serverControl Response: From 3e695fcb78b8a8955f1331e10e823846a075eb70 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:01:44 +0200 Subject: [PATCH 05/80] Create full docker with static name Change-Id: Id376cf70702371a7cd6496dab9ce85b7fdc643a3 --- Dockerfile | 8 ++++++-- README.md | 2 +- buildImage.sh | 3 +-- docker-compose.yml | 2 ++ mockserver/pom.xml | 5 ++++- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 38a4b1f..fc44fd1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,11 @@ FROM java:8 -ADD mockserver/target/mockserver-2.0.0-jar-with-dependencies.jar /mockserver.jar +ADD mockserver/target/mockserver-full.jar /mockserver.jar EXPOSE 9999 -CMD java -jar /mockserver.jar +RUN mkdir /externalSchema + +VOLUME /externalSchema + +CMD java -cp /mockserver.jar:/externalSchema -jar /mockserver.jar diff --git a/README.md b/README.md index 366ef30..ff776e7 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ mvn clean package assembly:single ## Start server ``` -java -jar mockserver--jar-with-dependencies.jar [PORT] +java -jar mockserver.jar [PORT] ``` Default port is 9999. diff --git a/buildImage.sh b/buildImage.sh index ada5685..7916512 100755 --- a/buildImage.sh +++ b/buildImage.sh @@ -1,6 +1,5 @@ #!/bin/sh -mvn clean install -mvn -f mockserver/pom.xml package assembly:single +mvn -f mockserver/pom.xml clean package assembly:single docker build -t mockserver . diff --git a/docker-compose.yml b/docker-compose.yml index 89a125a..6cb6ea7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,3 +2,5 @@ mocks: image: mockserver ports: - "9999:9999" + volumes: + - /tmp:/externalSchema diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 2c35d90..e572886 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -1,5 +1,6 @@ - + http-mock-server pl.touk.mockserver @@ -46,6 +47,8 @@ jar-with-dependencies + mockserver-full + false From 1a5e0e5e17ab518ad208ecd300ba98704345e618 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:07:00 +0200 Subject: [PATCH 06/80] Change scm in pom Change-Id: I22f0eed1f3e23d2ffd5de32377d08dd04def2778 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index da7b792..cab07bf 100644 --- a/pom.xml +++ b/pom.xml @@ -27,8 +27,8 @@ - scm:git:ssh://gerrit.touk.pl:29418/integracja/http-mock-server - scm:git:ssh://gerrit.touk.pl:29418/integracja/http-mock-server + scm:git:ssh://git@github.com:TouK/http-mock-server.git + scm:git:ssh://git@github.com:TouK/http-mock-server.git HEAD From 70c0f678ef62f04c1cd929b65935d08328255193 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:09:54 +0200 Subject: [PATCH 07/80] Let all modules release without asking Change-Id: Ide781016b656ddbf392ae75bb8de7f45bd7e91b8 --- pom.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pom.xml b/pom.xml index cab07bf..080698a 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,8 @@ 1.7.7 1.0.13 1.16.6 + + true @@ -94,6 +96,14 @@ + + org.apache.maven.plugins + maven-release-plugin + 2.5.2 + + true + + From f4dde98f175905616478728b87591134ebbcbee3 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:15:00 +0200 Subject: [PATCH 08/80] Fix connection in scm Change-Id: If051253e6ffc95ed789b2e173a7bb78d38160ce9 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 080698a..cdf1bcd 100644 --- a/pom.xml +++ b/pom.xml @@ -29,8 +29,8 @@ - scm:git:ssh://git@github.com:TouK/http-mock-server.git - scm:git:ssh://git@github.com:TouK/http-mock-server.git + scm:git:git@github.com:TouK/http-mock-server.git + scm:git:git@github.com:TouK/http-mock-server.git HEAD From 6b90bbdc819f68e6001547c65755132d53f8a0b4 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:29:14 +0200 Subject: [PATCH 09/80] [maven-release-plugin] prepare release http-mock-server-2.1.0 Change-Id: I4a700aa706a0de0f358635c30248778f8a6521ad --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 5 ++--- pom.xml | 4 ++-- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 14dc337..3a57b94 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.1-SNAPSHOT + 2.1.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index f41dfe5..375ab6b 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.1-SNAPSHOT + 2.1.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index f1eefd8..9bc3391 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.0.1-SNAPSHOT + 2.1.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index e572886..94e82d3 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -1,10 +1,9 @@ - + http-mock-server pl.touk.mockserver - 2.0.1-SNAPSHOT + 2.1.0 4.0.0 diff --git a/pom.xml b/pom.xml index cdf1bcd..21e4986 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ pl.touk.mockserver http-mock-server pom - 2.0.1-SNAPSHOT + 2.1.0 mockserver-client mockserver @@ -31,7 +31,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.1.0 From e104672d83b4aec4838613426e0bbfdec074a05e Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:29:20 +0200 Subject: [PATCH 10/80] [maven-release-plugin] prepare for next development iteration Change-Id: I227f5f5d3528f06c34333f582063d85da60b2335 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 3a57b94..0b85a82 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.0 + 2.1.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 375ab6b..3dc3d2f 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.0 + 2.1.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 9bc3391..2cf1d44 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.0 + 2.1.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 94e82d3..4bcadaa 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.0 + 2.1.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 21e4986..615bf9f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ pl.touk.mockserver http-mock-server pom - 2.1.0 + 2.1.1-SNAPSHOT mockserver-client mockserver @@ -31,7 +31,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.1.0 + HEAD From e17e20fadb07fb03098ba04340d43984c50ece49 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:47:13 +0200 Subject: [PATCH 11/80] Change parent pom and repository Change-Id: I7527e7f0da8fe0c0b4809074008ec97b93894992 --- pom.xml | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 615bf9f..81e2639 100644 --- a/pom.xml +++ b/pom.xml @@ -2,6 +2,12 @@ 4.0.0 + + pl.touk + top + 1.0.7 + + pl.touk.mockserver http-mock-server pom @@ -107,17 +113,19 @@ - + + + Dominik Przybysz + alien11689@gmail.com + + + + - touk.nexus.release - TouK Virtual Repository - http://nexus.touk.pl/nexus/content/repositories/releases + touk + TouK Open source repository + https://philanthropist.touk.pl/nexus/content/repositories/releases - - touk.nexus.snapshots - TouK Virtual Repository - http://nexus.touk.pl/nexus/content/repositories/snapshots - - + From 631a6515104ec75104cdc68c8d3b21439764501c Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:49:25 +0200 Subject: [PATCH 12/80] [maven-release-plugin] prepare release http-mock-server-2.1.1 Change-Id: Ib3b2ee456709c9c9ba1dab867f0db2b83c0e05c0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 0b85a82..29e5f4a 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1-SNAPSHOT + 2.1.1 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 3dc3d2f..e06e381 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1-SNAPSHOT + 2.1.1 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 2cf1d44..a5ce51f 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1-SNAPSHOT + 2.1.1 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 4bcadaa..c15c9b7 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1-SNAPSHOT + 2.1.1 4.0.0 diff --git a/pom.xml b/pom.xml index 81e2639..8d5b443 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.1.1-SNAPSHOT + 2.1.1 mockserver-client mockserver @@ -37,7 +37,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.1.1 From 2b4ca48d798680ddb84f8e426f329778eb957f6e Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 15:49:31 +0200 Subject: [PATCH 13/80] [maven-release-plugin] prepare for next development iteration Change-Id: I78090933a7aae4f9a53e3b688407dd2f7f7e988b --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 29e5f4a..ad7b62a 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1 + 2.1.2-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index e06e381..eac180e 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1 + 2.1.2-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index a5ce51f..0d25c06 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1 + 2.1.2-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index c15c9b7..76da791 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.1 + 2.1.2-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 8d5b443..bf7d049 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.1.1 + 2.1.2-SNAPSHOT mockserver-client mockserver @@ -37,7 +37,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.1.1 + HEAD From 54739cff85fe80b5221156d18645b21c9df3b28c Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 16:06:05 +0200 Subject: [PATCH 14/80] Add info about remote respoitory to README Change-Id: Ia316e81b64c361620031f7bbc0031e81aad05e7b --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index ff776e7..8f4977d 100644 --- a/README.md +++ b/README.md @@ -242,3 +242,24 @@ Response: ... ``` + +## Remote repository + +Mockserver is available at `philanthropist.touk.pl`. + +Just add repository to maven pom: + +```xml + + ... + + ... + + touk + https://philanthropist.touk.pl/nexus/content/repositories/releases + + ... + + ... + +``` From 261126d58b5de62d8426289adb3ad525f02d49bb Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sat, 24 Oct 2015 16:47:45 +0200 Subject: [PATCH 15/80] Add info about docker to README Change-Id: I93b5a78cdce42c17a97423d65fb7ca05ecf19ced --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 8f4977d..a06f405 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,23 @@ mvn clean package assembly:single ## Start server +### Native start + ``` java -jar mockserver.jar [PORT] ``` Default port is 9999. +### Start with docker + +Docker and docker-compose is needed. + +``` +./buildImage.sh +docker-compose up -d +``` + ## Create mock on server ### Via client From 493bb8fd912dcff166ac1d9a060e38c1cb9e7862 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 22 Dec 2015 15:24:06 +0100 Subject: [PATCH 16/80] Add imports support in closures --- .../xsd/pl/touk/mockserver/api/common.xsd | 29 ++- .../xsd/pl/touk/mockserver/api/request.xsd | 79 +++--- .../xsd/pl/touk/mockserver/api/response.xsd | 227 +++++++++--------- .../tests/MockServerIntegrationTest.groovy | 46 +++- .../mockserver/server/HttpMockServer.groovy | 16 +- .../pl/touk/mockserver/server/Mock.groovy | 11 +- 6 files changed, 237 insertions(+), 171 deletions(-) diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd index a48f724..ac21246 100644 --- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd +++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd @@ -1,17 +1,22 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 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 10c7190..809cb44 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 @@ -1,52 +1,53 @@ - + - + - + - + - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + - - - + - - - - - + + + + + - - - - - - - - - - - - - - - + + + + + + + + + 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 9e630dc..152a293 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 @@ -1,135 +1,136 @@ - + - + - + - + - + - + - - - - - + + + + + - - - + + + + + + + + + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - - - + - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + - - - + - - - + + + + + + + + + - + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 fa61e4a..1412de1 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,17 +1,31 @@ package pl.touk.mockserver.tests import groovy.util.slurpersupport.GPathResult -import org.apache.http.client.methods.* +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.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.api.common.ImportAlias import pl.touk.mockserver.api.common.Method import pl.touk.mockserver.api.request.AddMock import pl.touk.mockserver.api.response.MockEventReport import pl.touk.mockserver.api.response.MockReport -import pl.touk.mockserver.client.* +import pl.touk.mockserver.client.InvalidMockDefinition +import pl.touk.mockserver.client.InvalidMockRequestSchema +import pl.touk.mockserver.client.MockAlreadyExists +import pl.touk.mockserver.client.MockDoesNotExist +import pl.touk.mockserver.client.RemoteMockServer +import pl.touk.mockserver.client.Util import pl.touk.mockserver.server.HttpMockServer import spock.lang.Shared import spock.lang.Specification @@ -611,7 +625,7 @@ class MockServerIntegrationTest extends Specification { restPostResponse.name == 'goodResponse-1' } - def "should get list mocks"() { + def "should get list of mocks"() { given: remoteMockServer.addMock(new AddMock( name: 'testRest2', @@ -648,7 +662,8 @@ class MockServerIntegrationTest extends Specification { name: 'testRest', path: 'testEndpoint', port: 9999, - schema: 'schema2.xsd' + schema: 'schema2.xsd', + imports: [new ImportAlias(alias: 'aaa', fullClassName: 'bbb')] )) remoteMockServer.removeMock('testRest5') when: @@ -660,6 +675,7 @@ class MockServerIntegrationTest extends Specification { 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]) assertMockReport(mockReport[4], [name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST]) + mockReport[0].imports.find { it.alias == 'aaa' }?.fullClassName == 'bbb' } private static void assertMockReport(MockReport mockReport, Map props) { @@ -991,4 +1007,26 @@ class MockServerIntegrationTest extends Specification { expect: remoteMockServer.removeMock('testSoap')?.size() == 2 } + + def "should add mock with alias"() { + expect: + remoteMockServer.addMock(new AddMock( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> ""}''', + soap: false, + imports: [new ImportAlias(alias: 'AAA', fullClassName: 'javax.xml.XMLConstants')] + )) + 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-xmlns' + expect: + remoteMockServer.removeMock('testRest')?.size() == 1 + } } 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 8eaab6d..c25b990 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -2,11 +2,21 @@ package pl.touk.mockserver.server import com.sun.net.httpserver.HttpExchange import groovy.util.logging.Slf4j +import pl.touk.mockserver.api.common.ImportAlias import pl.touk.mockserver.api.request.AddMock import pl.touk.mockserver.api.request.MockServerRequest import pl.touk.mockserver.api.request.PeekMock import pl.touk.mockserver.api.request.RemoveMock -import pl.touk.mockserver.api.response.* +import pl.touk.mockserver.api.response.ExceptionOccured +import pl.touk.mockserver.api.response.MockAdded +import pl.touk.mockserver.api.response.MockEventReport +import pl.touk.mockserver.api.response.MockPeeked +import pl.touk.mockserver.api.response.MockRemoved +import pl.touk.mockserver.api.response.MockReport +import pl.touk.mockserver.api.response.MockRequestReport +import pl.touk.mockserver.api.response.MockResponseReport +import pl.touk.mockserver.api.response.Mocks +import pl.touk.mockserver.api.response.Parameter import javax.xml.bind.JAXBContext import java.util.concurrent.ConcurrentHashMap @@ -65,7 +75,8 @@ class HttpMockServer { soap: it.soap, method: it.method, statusCode: it.statusCode as int, - schema: it.schema + schema: it.schema, + imports: it.imports.collect { new ImportAlias(alias: it.key, fullClassName: it.value) } ) } ) @@ -90,6 +101,7 @@ class HttpMockServer { private static Mock mockFromRequest(AddMock request) { Mock mock = new Mock(request.name, request.path, request.port) + mock.imports = request.imports?.collectEntries { [(it.alias): it.fullClassName] } ?: [:] mock.predicate = request.predicate mock.response = request.response mock.soap = request.soap 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 15b538f..6511078 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -3,6 +3,8 @@ package pl.touk.mockserver.server import groovy.transform.EqualsAndHashCode import groovy.transform.PackageScope import groovy.util.logging.Slf4j +import org.codehaus.groovy.control.CompilerConfiguration +import org.codehaus.groovy.control.customizers.ImportCustomizer import pl.touk.mockserver.api.common.Method import javax.xml.XMLConstants @@ -31,6 +33,7 @@ class Mock implements Comparable { final List history = new CopyOnWriteArrayList<>() String schema private Validator validator + Map imports = [:] Mock(String name, String path, int port) { if (!(name)) { @@ -88,7 +91,13 @@ class Mock implements Comparable { if (predicate ==~ /(?m).*System\s*\.\s*exit\s*\(.*/) { throw new RuntimeException('System.exit is forbidden') } - GroovyShell sh = new GroovyShell(this.class.classLoader); + CompilerConfiguration compilerConfiguration = new CompilerConfiguration() + ImportCustomizer customizer = new ImportCustomizer() + imports.each { + customizer.addImport(it.key, it.value) + } + compilerConfiguration.addCompilationCustomizers(customizer) + GroovyShell sh = new GroovyShell(this.class.classLoader, compilerConfiguration); return sh.evaluate(predicate) as Closure } From d272f7014187e4eb18110790255bf64c58571892 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 22 Dec 2015 15:25:58 +0100 Subject: [PATCH 17/80] [maven-release-plugin] prepare release http-mock-server-2.2.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index ad7b62a..06cf7e7 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.2-SNAPSHOT + 2.2.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index eac180e..997ed8a 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.2-SNAPSHOT + 2.2.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 0d25c06..43ad941 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.2-SNAPSHOT + 2.2.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 76da791..967e9f5 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.1.2-SNAPSHOT + 2.2.0 4.0.0 diff --git a/pom.xml b/pom.xml index bf7d049..c486df6 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.1.2-SNAPSHOT + 2.2.0 mockserver-client mockserver @@ -37,7 +37,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.2.0 From c02e93edc3f5f12d37c0cfcc0982706c613e295b Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 22 Dec 2015 15:26:02 +0100 Subject: [PATCH 18/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 06cf7e7..54d04a6 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.0 + 2.2.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 997ed8a..3402631 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.0 + 2.2.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 43ad941..8d190c9 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.0 + 2.2.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 967e9f5..2c49f48 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.0 + 2.2.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index c486df6..567f106 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.2.0 + 2.2.1-SNAPSHOT mockserver-client mockserver @@ -37,7 +37,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.2.0 + HEAD From 44f44ee392835edbd91d64c212242898a2013769 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 23 Dec 2015 11:14:49 +0100 Subject: [PATCH 19/80] Add mocks configuration dump and restore --- Dockerfile | 2 +- README.md | 168 +++++++++++++++--- .../mockserver/client/RemoteMockServer.groovy | 13 +- .../tests/MockServerIntegrationTest.groovy | 62 +++++++ .../mockserver/server/HttpMockServer.groovy | 59 +++++- .../pl/touk/mockserver/server/Main.groovy | 13 +- 6 files changed, 285 insertions(+), 32 deletions(-) diff --git a/Dockerfile b/Dockerfile index fc44fd1..87dd9dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,4 +8,4 @@ RUN mkdir /externalSchema VOLUME /externalSchema -CMD java -cp /mockserver.jar:/externalSchema -jar /mockserver.jar +CMD java -cp /mockserver.jar:/externalSchema pl.touk.mockserver.server.Main diff --git a/README.md b/README.md index a06f405..139c19e 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,71 @@ [![Build Status](https://img.shields.io/travis/TouK/http-mock-server/master.svg?style=flat)](https://travis-ci.org/TouK/http-mock-server) -# HTTP MOCK SERVER +HTTP MOCK SERVER +================ -## Create server jar +Http Mock Server allows to mock HTTP request using groovy closures. + +Create server jar +----------------- ``` cd mockserver mvn clean package assembly:single ``` -## Start server +Start server +------------ ### Native start ``` -java -jar mockserver.jar [PORT] +java -jar mockserver-full.jar [PORT] [CONFIGURATION_FILE] ``` Default port is 9999. +If configuration file is passed then port must be defined. + +Configuration file is groovy configuration script e.g. : + +```groovy +testRest2 { + port=9998 + response='{ req -> \'\' }' + responseHeaders='{ _ -> [a: "b"] }' + path='testEndpoint' + predicate='{ req -> req.xml.name() == \'request1\'}' + name='testRest2' +} +testRest4 { + soap=true + port=9999 + path='testEndpoint' + name='testRest4' + method='PUT' + statusCode=204 +} +testRest3 { + port=9999 + path='testEndpoint2' + name='testRest3' +} +testRest6 { + port=9999 + path='testEndpoint2' + name='testRest6' +} +testRest { + imports { + aaa='bbb' + ccc='bla' + } + port=10001 + path='testEndpoint' + name='testRest' +} +``` + ### Start with docker Docker and docker-compose is needed. @@ -28,7 +75,8 @@ Docker and docker-compose is needed. docker-compose up -d ``` -## Create mock on server +Create mock on server +--------------------- ### Via client @@ -47,11 +95,11 @@ remoteMockServer.addMock(new AddMock( schema: ... )) ``` + ### Via HTTP Send POST request to localhost:/serverControl - ```xml ... @@ -64,33 +112,35 @@ Send POST request to localhost:/serverControl ... ... ... + ``` ### Parameters -* name - name of mock, must be unique -* path - path on which mock should be created -* port - inteer, port on which mock should be created, cannot be the same as mock server port -* predicate - groovy closure as string which must evaluate to true, when request object will be given to satisfy mock, optional, default {_ -> true} -* response - groovy closure as string which must evaluate to string which will be response of mock when predicate is satisfied, optional, default { _ -> '' } -* soap - true or false, is request and response should be wrapped in soap Envelope and Body elements, default false -* statusCode - integer, status code of response when predicate is satisfied, default 200 -* method - POST|PUT|DELETE|GET|TRACE|OPTION|HEAD, expected http method of request, default POST -* responseHeaders - groovyClosure as string which must evaluate to Map which will be added to response headers, default { _ -> [:] } -* schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator +- name - name of mock, must be unique +- path - path on which mock should be created +- port - inteer, port on which mock should be created, cannot be the same as mock server port +- predicate - groovy closure as string which must evaluate to true, when request object will be given to satisfy mock, optional, default {_ -> true} +- response - groovy closure as string which must evaluate to string which will be response of mock when predicate is satisfied, optional, default { _ -> '' } +- soap - true or false, is request and response should be wrapped in soap Envelope and Body elements, default false +- statusCode - integer, status code of response when predicate is satisfied, default 200 +- method - POST|PUT|DELETE|GET|TRACE|OPTION|HEAD, expected http method of request, default POST +- responseHeaders - groovyClosure as string which must evaluate to Map which will be added to response headers, default { _ -> \[:] } +- schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator +- imports - list of imports for closures (each import is separate tag); `alias` is the name of `fullClassName` available in closure; `fullClassName` must be available on classpath of mock server ### Closures request properties In closures input parameter (called req) contains properties: -* text - request body as java.util.String -* headers - java.util.Map with request headers -* query - java.util.Map with query parameters -* xml - groovy.util.slurpersupport.GPathResult created from request body (if request body is valid xml) -* soap - groovy.util.slurpersupport.GPathResult created from request body without Envelope and Body elements (if request body is valid soap xml) -* json - java.lang.Object created from request body (if request body is valid json) -* path - java.util.List with not empty parts of request path +- text - request body as java.util.String +- headers - java.util.Map with request headers +- query - java.util.Map with query parameters +- xml - groovy.util.slurpersupport.GPathResult created from request body (if request body is valid xml) +- soap - groovy.util.slurpersupport.GPathResult created from request body without Envelope and Body elements (if request body is valid soap xml) +- json - java.lang.Object created from request body (if request body is valid json) +- path - java.util.List with not empty parts of request path Response if success: @@ -104,7 +154,9 @@ Response with error message if failure: ... ``` -## Peek mock +Peek mock +--------- + Mock could be peeked to get get report of its invocations. ### Via client @@ -114,6 +166,7 @@ List mockEvents = remoteMockServer.peekMock('...') ``` ### Via HTTP + Send POST request to localhost:/serverControl ```xml @@ -160,7 +213,8 @@ Response with error message if failure: ... ``` -## Remove mock +Remove mock +----------- When mock was used it could be unregistered by name. It also optionally returns report of mock invocations if second parameter is true. @@ -169,7 +223,9 @@ When mock was used it could be unregistered by name. It also optionally returns ```java List mockEvents = remoteMockServer.removeMock('...', ...) ``` + ### Via HTTP + Send POST request to localhost:/serverControl ```xml @@ -223,7 +279,8 @@ Response with error message if failure: ... ``` -## List mocks definitions +List mocks definitions +---------------------- ### Via client @@ -249,12 +306,69 @@ Response: ... ... ... + ... ``` -## Remote repository +Get mocks configuration +----------------------- + +### Via client + +```java +ConfigObject mocks = remoteMockServer.getConfiguration() +``` + +### Via HTTP + +Send GET request to localhost:/serverControl/configuration + +Response: + +```groovy +testRest2 { + port=9998 + response='{ req -> \'\' }' + responseHeaders='{ _ -> [a: "b"] }' + path='testEndpoint' + predicate='{ req -> req.xml.name() == \'request1\'}' + name='testRest2' +} +testRest4 { + soap=true + port=9999 + path='testEndpoint' + name='testRest4' + method='PUT' + statusCode=204 +} +testRest3 { + port=9999 + path='testEndpoint2' + name='testRest3' +} +testRest6 { + port=9999 + path='testEndpoint2' + name='testRest6' +} +testRest { + imports { + aaa='bbb' + ccc='bla' + } + port=10001 + path='testEndpoint' + name='testRest' +} +``` + +This response could be saved to file and passed as it is during mock server creation. + +Remote repository +----------------- Mockserver is available at `philanthropist.touk.pl`. 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 ffbc9a0..91ebc33 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 @@ -11,7 +11,11 @@ import pl.touk.mockserver.api.request.AddMock import pl.touk.mockserver.api.request.MockServerRequest import pl.touk.mockserver.api.request.PeekMock import pl.touk.mockserver.api.request.RemoveMock -import pl.touk.mockserver.api.response.* +import pl.touk.mockserver.api.response.MockEventReport +import pl.touk.mockserver.api.response.MockPeeked +import pl.touk.mockserver.api.response.MockRemoved +import pl.touk.mockserver.api.response.MockReport +import pl.touk.mockserver.api.response.Mocks import javax.xml.bind.JAXBContext @@ -47,6 +51,13 @@ class RemoteMockServer { return mockPeeked.mockEvents ?: [] } + ConfigObject getConfiguration() { + HttpGet get = new HttpGet(address + '/configuration') + CloseableHttpResponse response = client.execute(get) + String configuration = Util.extractStringResponse(response) + return new ConfigSlurper().parse(configuration) + } + private static StringEntity buildRemoveMockRequest(RemoveMock data) { return new StringEntity(marshallRequest(data), ContentType.create("text/xml", "UTF-8")) } 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 1412de1..6476a96 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 @@ -1029,4 +1029,66 @@ class MockServerIntegrationTest extends Specification { expect: remoteMockServer.removeMock('testRest')?.size() == 1 } + + def "should get configuration of mocks and reconfigure new mock server based on it"() { + given: + remoteMockServer.addMock(new AddMock( + name: 'testRest2', + path: 'testEndpoint', + port: 9998, + predicate: '''{ req -> req.xml.name() == 'request1'}''', + response: '''{ req -> '' }''', + responseHeaders: '{ _ -> [a: "b"] }' + )) + remoteMockServer.addMock(new AddMock( + name: 'testRest4', + path: 'testEndpoint', + port: 9999, + soap: true, + statusCode: 204, + method: Method.PUT + )) + remoteMockServer.addMock(new AddMock( + name: 'testRest3', + path: 'testEndpoint2', + port: 9999 + )) + remoteMockServer.addMock(new AddMock( + name: 'testRest5', + path: 'testEndpoint', + port: 9999 + )) + remoteMockServer.addMock(new AddMock( + name: 'testRest6', + path: 'testEndpoint2', + port: 9999 + )) + remoteMockServer.addMock(new AddMock( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + schema: 'schema2.xsd', + imports: [ + new ImportAlias(alias: 'aaa', fullClassName: 'bbb'), + new ImportAlias(alias: 'ccc', fullClassName: 'bla') + ] + )) + remoteMockServer.removeMock('testRest5') + when: + ConfigObject configObject = remoteMockServer.configuration + httpMockServer.stop() + httpMockServer = new HttpMockServer(9000, configObject) + + 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[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]) + assertMockReport(mockReport[4], [name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST]) + mockReport[0].imports.find { it.alias == 'aaa' }?.fullClassName == 'bbb' + mockReport[0].imports.find { it.alias == 'ccc' }?.fullClassName == 'bla' + } + } 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 c25b990..171d72a 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -3,6 +3,7 @@ package pl.touk.mockserver.server import com.sun.net.httpserver.HttpExchange import groovy.util.logging.Slf4j import pl.touk.mockserver.api.common.ImportAlias +import pl.touk.mockserver.api.common.Method import pl.touk.mockserver.api.request.AddMock import pl.touk.mockserver.api.request.MockServerRequest import pl.touk.mockserver.api.request.PeekMock @@ -30,18 +31,27 @@ class HttpMockServer { private final HttpServerWraper httpServerWraper private final Map childServers = new ConcurrentHashMap<>() private final Set mockNames = new CopyOnWriteArraySet<>() + private final ConfigObject configuration = new ConfigObject() private static final JAXBContext requestJaxbContext = JAXBContext.newInstance(AddMock.package.name, AddMock.classLoader) - HttpMockServer(int port = 9999) { + HttpMockServer(int port = 9999, ConfigObject initialConfiguration = new ConfigObject()) { httpServerWraper = new HttpServerWraper(port) + initialConfiguration.values()?.each { ConfigObject co -> + addMock(co) + } + httpServerWraper.createContext('/serverControl', { HttpExchange ex -> try { if (ex.requestMethod == 'GET') { - listMocks(ex) + if (ex.requestURI.path == '/serverControl/configuration') { + createResponse(ex, configuration.prettyPrint(), 200) + } else { + listMocks(ex) + } } else if (ex.requestMethod == 'POST') { MockServerRequest request = requestJaxbContext.createUnmarshaller().unmarshal(ex.requestBody) as MockServerRequest if (request instanceof AddMock) { @@ -95,10 +105,41 @@ class HttpMockServer { Mock mock = mockFromRequest(request) HttpServerWraper child = getOrCreateChildServer(mock.port) child.addMock(mock) + saveConfiguration(request) mockNames << name createResponse(ex, new MockAdded(), 200) } + private void addMock(ConfigObject co) { + String name = co.name + if (name in mockNames) { + throw new RuntimeException('mock already registered') + } + Mock mock = mockFromConfig(co) + HttpServerWraper child = getOrCreateChildServer(mock.port) + child.addMock(mock) + configuration.put(name, co) + mockNames << name + } + + private void saveConfiguration(AddMock request) { + ConfigObject mockDefinition = new ConfigObject() + request.metaPropertyValues.findAll { it.name != 'class' && it.value }.each { + if (it.name == 'imports') { + ConfigObject configObject = new ConfigObject() + it.value.each { ImportAlias imp -> + configObject.put(imp.alias, imp.fullClassName) + } + mockDefinition.put(it.name, configObject) + } else if (it.name == 'method') { + mockDefinition.put(it.name, it.value.name()) + } else { + mockDefinition.put(it.name, it.value) + } + } + configuration.put(request.name, mockDefinition) + } + private static Mock mockFromRequest(AddMock request) { Mock mock = new Mock(request.name, request.path, request.port) mock.imports = request.imports?.collectEntries { [(it.alias): it.fullClassName] } ?: [:] @@ -112,6 +153,19 @@ class HttpMockServer { return mock } + private static Mock mockFromConfig(ConfigObject co) { + Mock mock = new Mock(co.name, co.path, co.port) + mock.imports = co.imports + mock.predicate = co.predicate ?: null + mock.response = co.response ?: null + mock.soap = co.soap ?: null + mock.statusCode = co.statusCode ?: null + mock.method = co.method ? Method.valueOf(co.method) : null + mock.responseHeaders = co.responseHeaders ?: null + mock.schema = co.schema ?: null + return mock + } + private HttpServerWraper getOrCreateChildServer(int mockPort) { HttpServerWraper child = childServers[mockPort] if (!child) { @@ -132,6 +186,7 @@ class HttpMockServer { it.removeMock(name) }.flatten() as List mockNames.remove(name) + configuration.remove(name) MockRemoved mockRemoved = new MockRemoved( mockEvents: createMockEventReports(mockEvents) ) diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy index 759a11a..aba7f6e 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy @@ -5,7 +5,7 @@ import groovy.util.logging.Slf4j @Slf4j class Main { static void main(String[] args) { - HttpMockServer httpMockServer = args.length == 1 ? new HttpMockServer(args[0] as int) : new HttpMockServer() + HttpMockServer httpMockServer = startMockServer(args) Runtime.runtime.addShutdownHook(new Thread({ log.info('Http server is stopping...') @@ -17,4 +17,15 @@ class Main { Thread.sleep(10000) } } + + private static HttpMockServer startMockServer(String... args) { + switch (args.length) { + case 1: + return new HttpMockServer(args[0] as int) + case 2: + return new HttpMockServer(args[0] as int, new ConfigSlurper().parse(new File(args[1]).toURI().toURL())) + default: + return new HttpMockServer() + } + } } From da9cfc0ffbe642e82725862697e3efca2612272a Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 23 Dec 2015 11:15:24 +0100 Subject: [PATCH 20/80] [maven-release-plugin] prepare release http-mock-server-2.3.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 54d04a6..9d531a9 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.1-SNAPSHOT + 2.3.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 3402631..bb79c32 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.1-SNAPSHOT + 2.3.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 8d190c9..afcb37c 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.1-SNAPSHOT + 2.3.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 2c49f48..caa2d6d 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.2.1-SNAPSHOT + 2.3.0 4.0.0 diff --git a/pom.xml b/pom.xml index 567f106..dc3663f 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.2.1-SNAPSHOT + 2.3.0 mockserver-client mockserver @@ -37,7 +37,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.3.0 From ba820bfcf28f6ef19b1ebbd517a23b972a23b773 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 23 Dec 2015 11:15:28 +0100 Subject: [PATCH 21/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- pom.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 9d531a9..42865c4 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.0 + 2.3.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index bb79c32..cc0bc0d 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.0 + 2.3.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index afcb37c..3540d04 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.0 + 2.3.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index caa2d6d..11ff86d 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.0 + 2.3.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index dc3663f..8f06801 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.3.0 + 2.3.1-SNAPSHOT mockserver-client mockserver @@ -37,7 +37,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.3.0 + HEAD From 23e2813e2b854ce7ed465a51e780d81f9ee6e31a Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 23 Dec 2015 11:42:24 +0100 Subject: [PATCH 22/80] Add link to docker hub --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 139c19e..c9ee033 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ testRest { } ``` -### Start with docker +### Build with docker Docker and docker-compose is needed. @@ -75,6 +75,10 @@ Docker and docker-compose is needed. docker-compose up -d ``` +### Docker repoository + +Built image is available at https://hub.docker.com/r/alien11689/mockserver/ + Create mock on server --------------------- From f110ffe8a958fbf0842e26a8153858c663ec8860 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Tue, 15 Dec 2015 05:42:22 +0100 Subject: [PATCH 23/80] Add benchmark in separate project Change-Id: Ib0d29c334cf46744e33fa609eedce52892740af7 --- performance-tests/pom.xml | 67 ++++++++++++++++ .../mockserver/client/MockserverTest.java | 80 +++++++++++++++++++ pom.xml | 1 + 3 files changed, 148 insertions(+) create mode 100644 performance-tests/pom.xml create mode 100644 performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml new file mode 100644 index 0000000..2987f78 --- /dev/null +++ b/performance-tests/pom.xml @@ -0,0 +1,67 @@ + + + + http-mock-server + pl.touk.mockserver + 2.1.2-SNAPSHOT + + 4.0.0 + + mockserver-performance-tests + + + + pl.touk.mockserver + mockserver + ${project.version} + + + pl.touk.mockserver + mockserver-client + ${project.version} + + + org.openjdk.jmh + jmh-core + 1.11.2 + test + + + org.openjdk.jmh + jmh-generator-annprocess + 1.11.2 + test + + + + + + + org.codehaus.mojo + exec-maven-plugin + + + run-benchmarks + integration-test + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + + + + + \ No newline at end of file diff --git a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java new file mode 100644 index 0000000..44e6910 --- /dev/null +++ b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java @@ -0,0 +1,80 @@ +package pl.touk.mockserver.client; + +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.BenchmarkParams; +import org.openjdk.jmh.infra.ThreadParams; +import pl.touk.mockserver.api.request.AddMock; +import pl.touk.mockserver.server.HttpMockServer; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@OutputTimeUnit(TimeUnit.SECONDS) +public class MockserverTest { + HttpMockServer httpMockServer; + + @Setup + public void prepareMockServer(BenchmarkParams params) { + try { + httpMockServer = new HttpMockServer(9999); + } catch (Exception e) { + //OK + } + } + + @TearDown + public void stopMockServer() { + try { + httpMockServer.stop(); + } catch (Exception e) { + } + } + + @State(Scope.Thread) + public static class TestState { + RemoteMockServer remoteMockServer; + HttpClient httpClient; + int current; + + @Setup + public void prepareMockServer(ThreadParams params) { + remoteMockServer = new RemoteMockServer("localhost", 9999); + httpClient = HttpClients.createDefault(); + current = params.getThreadIndex(); + } + } + + + @Benchmark + @Measurement(iterations = 60) + @Fork(warmups = 1, value = 1) + @BenchmarkMode({Mode.AverageTime, Mode.Throughput}) + @Warmup(iterations = 10) + @Threads(4) + public void shouldHandleManyRequestsSimultaneously(TestState testState) throws IOException { + int current = testState.current; + int endpointNumber = current % 10; + int port = 9000 + (current % 7); + AddMock addMock = new AddMock(); + addMock.setName("testRest" + current); + addMock.setPath("testEndpoint" + endpointNumber); + addMock.setPort(port); + addMock.setPredicate("{req -> req.xml.name() == 'request" + current + "' }"); + addMock.setResponse("{req -> ''}"); + testState.remoteMockServer.addMock(addMock); + HttpPost restPost = new HttpPost("http://localhost:" + port + "/testEndpoint" + endpointNumber); + restPost.setEntity(new StringEntity("", ContentType.create("text/xml", "UTF-8"))); + CloseableHttpResponse response = (CloseableHttpResponse) testState.httpClient.execute(restPost); + String stringResponse = Util.extractStringResponse(response); + testState.remoteMockServer.removeMock("testRest" + current, true); + assert stringResponse.equals(""); + } + +} diff --git a/pom.xml b/pom.xml index 8f06801..fdceb5f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ mockserver mockserver-tests mockserver-api + performance-tests From d6b9abfe05e7770839ec1ba59bd30f13a491b440 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 16 Dec 2015 08:37:58 +0100 Subject: [PATCH 24/80] Add maven compiler plugin --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index fdceb5f..b5a145b 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,14 @@ clean install + + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + org.codehaus.gmavenplus gmavenplus-plugin From 159f0a4987bbaedfe47146f470ee373b770c508b Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Wed, 16 Dec 2015 20:00:50 +0100 Subject: [PATCH 25/80] Small fixes Change-Id: I985d91d6d8ac2ff88760f5011e75711ad7c68649 --- .../mockserver/client/MockserverTest.java | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java index 44e6910..f762284 100644 --- a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java +++ b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java @@ -8,6 +8,7 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.BenchmarkParams; +import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.infra.ThreadParams; import pl.touk.mockserver.api.request.AddMock; import pl.touk.mockserver.server.HttpMockServer; @@ -22,19 +23,12 @@ public class MockserverTest { @Setup public void prepareMockServer(BenchmarkParams params) { - try { - httpMockServer = new HttpMockServer(9999); - } catch (Exception e) { - //OK - } + httpMockServer = new HttpMockServer(9999); } @TearDown public void stopMockServer() { - try { - httpMockServer.stop(); - } catch (Exception e) { - } + httpMockServer.stop(); } @State(Scope.Thread) @@ -51,14 +45,13 @@ public class MockserverTest { } } - @Benchmark - @Measurement(iterations = 60) - @Fork(warmups = 1, value = 1) - @BenchmarkMode({Mode.AverageTime, Mode.Throughput}) - @Warmup(iterations = 10) + @Measurement(iterations = 10) + @Fork(value = 2) + @BenchmarkMode({Mode.AverageTime, Mode.Throughput, Mode.SampleTime}) + @Warmup(iterations = 5) @Threads(4) - public void shouldHandleManyRequestsSimultaneously(TestState testState) throws IOException { + public void shouldHandleManyRequestsSimultaneously(TestState testState, Blackhole bh) throws IOException { int current = testState.current; int endpointNumber = current % 10; int port = 9000 + (current % 7); @@ -75,6 +68,7 @@ public class MockserverTest { String stringResponse = Util.extractStringResponse(response); testState.remoteMockServer.removeMock("testRest" + current, true); assert stringResponse.equals(""); + bh.consume(stringResponse); } } From 229f2d02d31d52a3d12811fe9844533a381ce590 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Wed, 16 Dec 2015 20:07:47 +0100 Subject: [PATCH 26/80] Add params Change-Id: I30d8d140a0ac01db9a5fbc184616fff487852109 --- .../test/java/pl/touk/mockserver/client/MockserverTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java index f762284..a917b90 100644 --- a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java +++ b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java @@ -21,6 +21,9 @@ import java.util.concurrent.TimeUnit; public class MockserverTest { HttpMockServer httpMockServer; + @Param({"9000", "8000"}) + int initialPort; + @Setup public void prepareMockServer(BenchmarkParams params) { httpMockServer = new HttpMockServer(9999); @@ -54,7 +57,7 @@ public class MockserverTest { public void shouldHandleManyRequestsSimultaneously(TestState testState, Blackhole bh) throws IOException { int current = testState.current; int endpointNumber = current % 10; - int port = 9000 + (current % 7); + int port = initialPort + (current % 7); AddMock addMock = new AddMock(); addMock.setName("testRest" + current); addMock.setPath("testEndpoint" + endpointNumber); From bfc547721e3e8b1f45f0bd22fc0ad6e8c31571f2 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Wed, 16 Dec 2015 20:30:49 +0100 Subject: [PATCH 27/80] Add logger configuration Change-Id: I8a7c4ac0e09eb114845547202aa27792741cf549 --- performance-tests/src/test/resources/logback.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 performance-tests/src/test/resources/logback.xml diff --git a/performance-tests/src/test/resources/logback.xml b/performance-tests/src/test/resources/logback.xml new file mode 100644 index 0000000..b37e533 --- /dev/null +++ b/performance-tests/src/test/resources/logback.xml @@ -0,0 +1,15 @@ + + + + %highlight(%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n) + + + + + %msg%n + + + + + + \ No newline at end of file From 951a0f1b56815f7b61334f0c39179790e3f241dc Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Wed, 16 Dec 2015 20:30:49 +0100 Subject: [PATCH 28/80] Add logger configuration Change-Id: I8a7c4ac0e09eb114845547202aa27792741cf549 --- .../touk/mockserver/tests/ServerMockPT.groovy | 59 ------------------- performance-tests/pom.xml | 10 ++-- pom.xml | 35 +++++++---- 3 files changed, 30 insertions(+), 74 deletions(-) delete mode 100644 mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy deleted file mode 100644 index a696a98..0000000 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy +++ /dev/null @@ -1,59 +0,0 @@ -package pl.touk.mockserver.tests - -import org.apache.http.client.HttpClient -import org.apache.http.client.methods.CloseableHttpResponse -import org.apache.http.client.methods.HttpPost -import org.apache.http.entity.ContentType -import org.apache.http.entity.StringEntity -import org.apache.http.impl.client.HttpClients -import pl.touk.mockserver.api.request.AddMock -import pl.touk.mockserver.client.RemoteMockServer -import pl.touk.mockserver.client.Util -import pl.touk.mockserver.server.HttpMockServer -import spock.lang.Specification -import spock.lang.Timeout - -import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit - -class ServerMockPT extends Specification { - - @Timeout(value = 90) - def "should handle many request simultaneously"() { - given: - HttpClient client = HttpClients.createDefault() - HttpMockServer httpMockServer = new HttpMockServer() - RemoteMockServer controlServerClient = new RemoteMockServer("localhost", 9999) - int requestAmount = 1000 - String[] responses = new String[requestAmount] - ExecutorService executorService = Executors.newCachedThreadPool() - when: - for (int i = 0; i < requestAmount; ++i) { - int current = i - executorService.submit { - int endpointNumber = current % 10 - int port = 9000 + (current % 7) - controlServerClient.addMock(new AddMock( - name: "testRest$current", - path: "testEndpoint$endpointNumber", - port: port, - predicate: """{req -> req.xml.name() == 'request$current'}""", - response: """{req -> ""}""" - )) - HttpPost restPost = new HttpPost("http://localhost:$port/testEndpoint$endpointNumber") - restPost.entity = new StringEntity("", ContentType.create("text/xml", "UTF-8")) - CloseableHttpResponse response = client.execute(restPost) - responses[current] = Util.extractStringResponse(response) - controlServerClient.removeMock("testRest$current", true) - } - } - executorService.shutdown() - executorService.awaitTermination(90, TimeUnit.SECONDS) - then: - responses.eachWithIndex { res, i -> assert res && new XmlSlurper().parseText(res).name() == "goodResponse$i" as String } - cleanup: - executorService.shutdown() - httpMockServer.stop() - } -} diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 2987f78..205a3b6 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -5,7 +5,7 @@ http-mock-server pl.touk.mockserver - 2.1.2-SNAPSHOT + 2.3.1-SNAPSHOT 4.0.0 @@ -25,22 +25,22 @@ org.openjdk.jmh jmh-core - 1.11.2 - test org.openjdk.jmh jmh-generator-annprocess - 1.11.2 - test + + 1.4.0 + org.codehaus.mojo exec-maven-plugin + ${exec-maven-plugin.version} run-benchmarks diff --git a/pom.xml b/pom.xml index b5a145b..a245f8a 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,9 @@ 1.16.6 true + 1.11.2 + 2.5.2 + 1.4 @@ -84,24 +87,36 @@ mockserver-api ${project.version} + + org.openjdk.jmh + jmh-core + ${jmh.version} + test + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + test + clean install - - maven-compiler-plugin - 2.3.2 - - 1.8 - 1.8 - - + + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + org.codehaus.gmavenplus gmavenplus-plugin - 1.4 + ${gmavenplus-plugin.version} @@ -114,7 +129,7 @@ org.apache.maven.plugins maven-release-plugin - 2.5.2 + ${maven-release-plugin.version} true From 7a13cb2ce5251f2d9dfd71bf867046196d37ab6c Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Mon, 28 Dec 2015 09:18:02 +0100 Subject: [PATCH 29/80] Add profile with performance tests --- performance-tests/pom.xml | 61 ++++++++++--------- .../mockserver/client/MockserverTest.java | 23 ++++--- 2 files changed, 47 insertions(+), 37 deletions(-) diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 205a3b6..de44e56 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -35,33 +35,38 @@ 1.4.0 - - - - org.codehaus.mojo - exec-maven-plugin - ${exec-maven-plugin.version} - - - run-benchmarks - integration-test - - exec - - - test - java - - -classpath - - org.openjdk.jmh.Main - .* - - - - - - - + + + performance-test + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + run-benchmarks + integration-test + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + + + + + \ No newline at end of file diff --git a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java index a917b90..233a5f7 100644 --- a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java +++ b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java @@ -6,8 +6,16 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; -import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.infra.BenchmarkParams; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.infra.ThreadParams; import pl.touk.mockserver.api.request.AddMock; @@ -21,11 +29,10 @@ import java.util.concurrent.TimeUnit; public class MockserverTest { HttpMockServer httpMockServer; - @Param({"9000", "8000"}) - int initialPort; + int initialPort = 9000; @Setup - public void prepareMockServer(BenchmarkParams params) { + public void prepareMockServer() { httpMockServer = new HttpMockServer(9999); } @@ -49,11 +56,9 @@ public class MockserverTest { } @Benchmark - @Measurement(iterations = 10) - @Fork(value = 2) + @Measurement(iterations = 20) @BenchmarkMode({Mode.AverageTime, Mode.Throughput, Mode.SampleTime}) - @Warmup(iterations = 5) - @Threads(4) + @Warmup(iterations = 10) public void shouldHandleManyRequestsSimultaneously(TestState testState, Blackhole bh) throws IOException { int current = testState.current; int endpointNumber = current % 10; From 359930019168440ec2ca90ed54f2e143a4779fbc Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Mon, 28 Dec 2015 14:11:02 +0100 Subject: [PATCH 30/80] Add preserveHistory option for mock --- .../xsd/pl/touk/mockserver/api/request.xsd | 1 + .../xsd/pl/touk/mockserver/api/response.xsd | 1 + .../tests/MockServerIntegrationTest.groovy | 27 ++++++- .../mockserver/server/HttpMockServer.groovy | 71 ++++++++++--------- .../pl/touk/mockserver/server/Mock.groovy | 9 ++- 5 files changed, 71 insertions(+), 38 deletions(-) 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 } From fca39a835587d5fbe633d65c40c6f2775f33f004 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 12 Apr 2016 17:10:15 +0200 Subject: [PATCH 31/80] [maven-release-plugin] prepare release http-mock-server-2.4.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 8 +++----- pom.xml | 4 ++-- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 42865c4..fe59879 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.1-SNAPSHOT + 2.4.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index cc0bc0d..70fe791 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.1-SNAPSHOT + 2.4.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 3540d04..66c964c 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.1-SNAPSHOT + 2.4.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 11ff86d..450f777 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.3.1-SNAPSHOT + 2.4.0 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index de44e56..c71ee05 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -1,11 +1,9 @@ - + http-mock-server pl.touk.mockserver - 2.3.1-SNAPSHOT + 2.4.0 4.0.0 @@ -56,7 +54,7 @@ java -classpath - + org.openjdk.jmh.Main .* diff --git a/pom.xml b/pom.xml index a245f8a..d1a6b5a 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.3.1-SNAPSHOT + 2.4.0 mockserver-client mockserver @@ -41,7 +41,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.4.0 From 3fcfec451aa1a7696464785a006958e5e08c5631 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 12 Apr 2016 17:10:19 +0200 Subject: [PATCH 32/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index fe59879..45d0999 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.0 + 2.4.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 70fe791..2b2d077 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.0 + 2.4.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 66c964c..6a95e7d 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.0 + 2.4.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 450f777..fb2d788 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.0 + 2.4.1-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index c71ee05..2d88b68 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.0 + 2.4.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index d1a6b5a..35dac1a 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.4.0 + 2.4.1-SNAPSHOT mockserver-client mockserver @@ -41,7 +41,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.4.0 + HEAD From 2b57ba08067ddaf2a3c4bd20d1ed37acfc6afa69 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 30 May 2017 12:54:36 +0200 Subject: [PATCH 33/80] Do not create xml or json when request does not look like xml or json --- .../groovy/pl/touk/mockserver/server/MockRequest.groovy | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy index f8dc561..3657131 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy @@ -27,6 +27,9 @@ class MockRequest { } private static GPathResult inputToXml(String text) { + if (!text.startsWith('<')) { + return null + } try { return new XmlSlurper().parseText(text) } catch (Exception _) { @@ -36,7 +39,7 @@ class MockRequest { private static GPathResult inputToSoap(GPathResult xml) { try { - if (xml.name() == 'Envelope' && xml.Body.size() > 0) { + if (xml != null && xml.name() == 'Envelope' && xml.Body.size() > 0) { return getSoapBodyContent(xml) } else { return null @@ -51,6 +54,9 @@ class MockRequest { } private static Object inputToJson(String text) { + if (!text.startsWith('[') && !text.startsWith('{')) { + return null + } try { return new JsonSlurper().parseText(text) } catch (Exception _) { From 4fb0c9cfced03cda850cf779e49ef40f02220557 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 31 May 2017 09:53:38 +0200 Subject: [PATCH 34/80] Fix memory leak on closure compilation --- .../pl/touk/mockserver/server/HttpMockServer.groovy | 10 +++++++--- .../pl/touk/mockserver/server/HttpServerWraper.groovy | 6 +++--- .../main/groovy/pl/touk/mockserver/server/Main.groovy | 4 +++- .../main/groovy/pl/touk/mockserver/server/Mock.groovy | 4 +++- pom.xml | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) 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 3ec1ece..7d2f86b 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -22,6 +22,8 @@ import pl.touk.mockserver.api.response.Parameter import javax.xml.bind.JAXBContext import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArraySet +import java.util.concurrent.Executor +import java.util.concurrent.Executors import static pl.touk.mockserver.server.Util.createResponse @@ -32,12 +34,14 @@ class HttpMockServer { private final Map childServers = new ConcurrentHashMap<>() private final Set mockNames = new CopyOnWriteArraySet<>() private final ConfigObject configuration = new ConfigObject() + private final Executor executor private static final JAXBContext requestJaxbContext = JAXBContext.newInstance(AddMock.package.name, AddMock.classLoader) - HttpMockServer(int port = 9999, ConfigObject initialConfiguration = new ConfigObject()) { - httpServerWraper = new HttpServerWraper(port) + HttpMockServer(int port = 9999, ConfigObject initialConfiguration = new ConfigObject(), int threads = 10) { + executor = Executors.newFixedThreadPool(threads) + httpServerWraper = new HttpServerWraper(port, executor) initialConfiguration.values()?.each { ConfigObject co -> addMock(co) @@ -172,7 +176,7 @@ class HttpMockServer { private HttpServerWraper getOrCreateChildServer(int mockPort) { HttpServerWraper child = childServers[mockPort] if (!child) { - child = new HttpServerWraper(mockPort) + child = new HttpServerWraper(mockPort, executor) childServers.put(mockPort, child) } return child diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy index b13b7a2..e1ef2f8 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy @@ -5,7 +5,7 @@ import com.sun.net.httpserver.HttpServer import groovy.transform.PackageScope import groovy.util.logging.Slf4j -import java.util.concurrent.Executors +import java.util.concurrent.Executor @Slf4j @PackageScope @@ -15,11 +15,11 @@ class HttpServerWraper { private List executors = [] - HttpServerWraper(int port) { + HttpServerWraper(int port, Executor executor) { this.port = port InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port) httpServer = HttpServer.create(addr, 0) - httpServer.executor = Executors.newWorkStealingPool() + httpServer.executor = executor log.info("Http server starting on port $port...") httpServer.start() log.info('Http server is started') diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy index aba7f6e..0b8d42a 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy @@ -21,9 +21,11 @@ class Main { private static HttpMockServer startMockServer(String... args) { switch (args.length) { case 1: - return new HttpMockServer(args[0] as int) + return new HttpMockServer(args[0] as int, new ConfigObject()) case 2: return new HttpMockServer(args[0] as int, new ConfigSlurper().parse(new File(args[1]).toURI().toURL())) + case 3: + return new HttpMockServer(args[0] as int, new ConfigSlurper().parse(new File(args[1]).toURI().toURL()), args[2] as int) default: return new HttpMockServer() } 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 db67f47..83c3c7e 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -103,7 +103,9 @@ class Mock implements Comparable { } compilerConfiguration.addCompilationCustomizers(customizer) GroovyShell sh = new GroovyShell(this.class.classLoader, compilerConfiguration); - return sh.evaluate(predicate) as Closure + Closure closure = sh.evaluate(predicate) as Closure + sh.resetLoadedClasses() + return closure } void setResponse(String response) { diff --git a/pom.xml b/pom.xml index 35dac1a..635fed9 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ UTF-8 UTF-8 3.1 - 2.4.1 + 2.4.11 4.3.5 1.0-groovy-2.4 3.3.2 From 4bda8606091d8867a8d80407fb16ebf64191d14c Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 31 May 2017 09:57:01 +0200 Subject: [PATCH 35/80] [maven-release-plugin] prepare release http-mock-server-2.5.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 45d0999..fd5e719 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.1-SNAPSHOT + 2.5.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 2b2d077..c9b56d6 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.1-SNAPSHOT + 2.5.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 6a95e7d..3b224c2 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.1-SNAPSHOT + 2.5.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index fb2d788..842f1d7 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.1-SNAPSHOT + 2.5.0 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 2d88b68..2e5a3bb 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.4.1-SNAPSHOT + 2.5.0 4.0.0 diff --git a/pom.xml b/pom.xml index 635fed9..5f03ec2 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.4.1-SNAPSHOT + 2.5.0 mockserver-client mockserver @@ -41,7 +41,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.5.0 From ab2b3f94817024aa8091cd0d9c4ad9fe61a75305 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 31 May 2017 09:57:08 +0200 Subject: [PATCH 36/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index fd5e719..e3ee4d5 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.0 + 2.5.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index c9b56d6..637b649 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.0 + 2.5.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 3b224c2..f0930ad 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.0 + 2.5.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 842f1d7..e1fc9ed 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.0 + 2.5.1-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 2e5a3bb..f1ec59b 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.0 + 2.5.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 5f03ec2..f9eceee 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.5.0 + 2.5.1-SNAPSHOT mockserver-client mockserver @@ -41,7 +41,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.5.0 + HEAD From 5a3af95f0b3b566b40da77b9d2ac3215993567e9 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Fri, 2 Jun 2017 08:30:36 +0200 Subject: [PATCH 37/80] Close http exchange at the end of http handler --- .../tests/MockServerIntegrationTest.groovy | 19 ++++++++ .../mockserver/server/ContextExecutor.groovy | 47 ++++++++++++------- 2 files changed, 48 insertions(+), 18 deletions(-) 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 5bb550b..e8f4d87 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 @@ -1114,4 +1114,23 @@ class MockServerIntegrationTest extends Specification { remoteMockServer.removeMock('testRest')?.size() == 0 } + def "should handle empty post"() { + expect: + remoteMockServer.addMock(new AddMock( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + statusCode: 201, + soap: false + )) + when: + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + CloseableHttpResponse response = client.execute(restPost) + then: + response.statusLine.statusCode == 201 + Util.consumeResponse(response) + expect: + remoteMockServer.removeMock('testRest')?.size() == 1 + } + } diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy index f450df4..b26eb5a 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy @@ -20,28 +20,39 @@ class ContextExecutor { this.mocks = new CopyOnWriteArrayList<>([initialMock]) httpServerWraper.createContext(path) { HttpExchange ex -> - MockRequest request = new MockRequest(ex.requestBody.text, ex.requestHeaders, ex.requestURI) - log.info('Mock received input') - log.debug("Request: ${request.text}") - for (Mock mock : mocks) { - try { - if (mock.match(Method.valueOf(ex.requestMethod), request)) { - log.debug("Mock ${mock.name} match request ${request.text}") - MockResponse httpResponse = mock.apply(request) - fillExchange(ex, httpResponse) - log.trace("Mock ${mock.name} response with body ${httpResponse.text}") - return - } - log.debug("Mock ${mock.name} does not match request") - } catch (Exception e) { - log.warn("An exception occured when matching or applying mock ${mock.name}", e) - } + try { + applyMocks(ex) + } catch (Exception e) { + log.error("Exceptiony occured handling request", e) + throw e + } finally { + ex.close() } - log.warn("Any mock does not match request ${request.text}") - Util.createResponse(ex, request.text, 404) } } + private void applyMocks(HttpExchange ex) { + MockRequest request = new MockRequest(ex.requestBody.text, ex.requestHeaders, ex.requestURI) + log.info('Mock received input') + log.debug("Request: ${request.text}") + for (Mock mock : mocks) { + try { + if (mock.match(Method.valueOf(ex.requestMethod), request)) { + log.debug("Mock ${mock.name} match request ${request.text}") + MockResponse httpResponse = mock.apply(request) + fillExchange(ex, httpResponse) + log.trace("Mock ${mock.name} response with body ${httpResponse.text}") + return + } + log.debug("Mock ${mock.name} does not match request") + } catch (Exception e) { + log.warn("An exception occured when matching or applying mock ${mock.name}", e) + } + } + log.warn("Any mock does not match request ${request.text}") + Util.createResponse(ex, request.text, 404) + } + String getPath() { return path.substring(1) } From dbc0410f52fb6252ace07200fe8bade1c85efdcc Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Fri, 2 Jun 2017 08:32:17 +0200 Subject: [PATCH 38/80] [maven-release-plugin] prepare release http-mock-server-2.5.1 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index e3ee4d5..3dab503 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1-SNAPSHOT + 2.5.1 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 637b649..7f0d504 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1-SNAPSHOT + 2.5.1 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index f0930ad..3ed3b1f 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1-SNAPSHOT + 2.5.1 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index e1fc9ed..0202c91 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1-SNAPSHOT + 2.5.1 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index f1ec59b..0476064 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1-SNAPSHOT + 2.5.1 4.0.0 diff --git a/pom.xml b/pom.xml index f9eceee..25812f9 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.5.1-SNAPSHOT + 2.5.1 mockserver-client mockserver @@ -41,7 +41,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.5.1 From 6036bd2c3bfcad7480303396c63f59d8a8e45fe3 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Fri, 2 Jun 2017 08:32:23 +0200 Subject: [PATCH 39/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 3dab503..873227b 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1 + 2.5.2-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 7f0d504..8e40314 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1 + 2.5.2-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 3ed3b1f..f09c8cd 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1 + 2.5.2-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 0202c91..3c743ee 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1 + 2.5.2-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 0476064..3ac9362 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.1 + 2.5.2-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 25812f9..43ce7cd 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.5.1 + 2.5.2-SNAPSHOT mockserver-client mockserver @@ -41,7 +41,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.5.1 + HEAD From f8e0cc44f99e9b93d6823f55ea4a79b46d9c751f Mon Sep 17 00:00:00 2001 From: piotrekfus91 Date: Sun, 28 Jan 2018 18:30:50 +0100 Subject: [PATCH 40/80] Handle leading slash (#1) * Handle leading slash --- .gitignore | 2 ++ .../tests/MockServerIntegrationTest.groovy | 29 +++++++++++++++++++ .../pl/touk/mockserver/server/Mock.groovy | 10 ++++++- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f995f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.iml +target/ 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 e8f4d87..ab16248 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 @@ -1133,4 +1133,33 @@ class MockServerIntegrationTest extends Specification { remoteMockServer.removeMock('testRest')?.size() == 1 } + @Unroll + def 'should handle leading slash'() { + given: + String name = "testRest-${UUID.randomUUID().toString()}" + expect: + remoteMockServer.addMock(new AddMock( + name: name, + path: mockPath, + port: 9999, + statusCode: 201, + soap: false + )) + when: + HttpPost restPost = new HttpPost("http://localhost:9999/$urlPath") + CloseableHttpResponse response = client.execute(restPost) + then: + response.statusLine.statusCode == 201 + Util.consumeResponse(response) + expect: + remoteMockServer.removeMock(name)?.size() == 1 + where: + mockPath | urlPath + '' | '' + '/' | '' + 'test' | 'test' + '/test' | 'test' + 'test/other' | 'test/other' + '/test/other' | 'test/other' + } } 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 83c3c7e..ed37f89 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -41,10 +41,18 @@ class Mock implements Comparable { throw new RuntimeException("Mock name must be given") } this.name = name - this.path = path + this.path = stripLeadingSlash(path) this.port = port } + private static String stripLeadingSlash(String path) { + if (path?.startsWith('/')) { + return path - '/' + } else { + return path + } + } + boolean match(Method method, MockRequest request) { return this.method == method && predicate(request) } From 0727ced422df452e426035a37d5cf5082d153fa3 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Mon, 26 Feb 2018 17:48:11 +0100 Subject: [PATCH 41/80] Add https support --- README.md | 45 +++++- .../xsd/pl/touk/mockserver/api/common.xsd | 11 ++ .../xsd/pl/touk/mockserver/api/request.xsd | 1 + mockserver-tests/pom.xml | 4 + .../tests/MockServerHttpsTest.groovy | 152 ++++++++++++++++++ .../tests/MockServerIntegrationTest.groovy | 12 +- .../src/test/resources/keystore.jks | Bin 0 -> 2257 bytes .../src/test/resources/trusted.jks | Bin 0 -> 2235 bytes .../src/test/resources/truststore.jks | Bin 0 -> 1880 bytes .../src/test/resources/untrusted.jks | Bin 0 -> 2255 bytes .../mockserver/server/ContextExecutor.groovy | 8 +- .../mockserver/server/HttpMockServer.groovy | 32 ++-- .../mockserver/server/HttpServerWraper.groovy | 58 ------- .../server/HttpServerWrapper.groovy | 106 ++++++++++++ .../touk/mockserver/server/HttpsConfig.groovy | 28 ++++ .../pl/touk/mockserver/server/Mock.groovy | 2 + pom.xml | 7 + 17 files changed, 383 insertions(+), 83 deletions(-) create mode 100644 mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy create mode 100644 mockserver-tests/src/test/resources/keystore.jks create mode 100644 mockserver-tests/src/test/resources/trusted.jks create mode 100644 mockserver-tests/src/test/resources/truststore.jks create mode 100644 mockserver-tests/src/test/resources/untrusted.jks delete mode 100644 mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy create mode 100644 mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy create mode 100644 mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy diff --git a/README.md b/README.md index c9ee033..2552e18 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,21 @@ testRest { path='testEndpoint' name='testRest' } +testHttps { + soap=false + port=10443 + path='testHttps' + name='testHttps' + method='GET' + https={ + keystorePath='/tmp/keystore.jks' + keystorePassword='keystorePass' + keyPassword='keyPass' + truststorePath='/tmp/truststore.jks' + truststorePassword='truststorePass' + requireClientAuth=true + } +} ``` ### Build with docker @@ -96,7 +111,15 @@ remoteMockServer.addMock(new AddMock( statusCode: ..., method: ..., responseHeaders: ..., - schema: ... + schema: ..., + https: new Https( + keystorePath: '/tmp/keystore.jks', + keystorePassword: 'keystorePass', + keyPassword: 'keyPass', + truststorePath: '/tmp/truststore.jks', + truststorePassword: 'truststorePass', + requireClientAuth: true + ) )) ``` @@ -117,6 +140,14 @@ Send POST request to localhost:/serverControl ... ... + + /tmp/keystore.jks + keystorePass + keyPass + /tmp/truststore.jks + truststorePass + true + ``` @@ -133,6 +164,18 @@ Send POST request to localhost:/serverControl - responseHeaders - groovyClosure as string which must evaluate to Map which will be added to response headers, default { _ -> \[:] } - schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator - imports - list of imports for closures (each import is separate tag); `alias` is the name of `fullClassName` available in closure; `fullClassName` must be available on classpath of mock server +- https - HTTPS configuration + +#### HTTPS configuration + +- keystorePath - path to keystore in JKS format, keystore should contains only one privateKeyEntry +- keystorePassword - keystore password +- keyPassword - key password +- truststorePath - path to truststore in JKS format +- truststorePassword - truststore password +- requireClientAuth - whether client auth is required (two-way SSL) + +**HTTP** and **HTTPS** should be started on separated ports. ### Closures request properties diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd index ac21246..673be7d 100644 --- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd +++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd @@ -18,5 +18,16 @@ + + + + + + + + + + + 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 6636b53..23786bc 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 @@ -20,6 +20,7 @@ + diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index f09c8cd..ffc9d6c 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -44,6 +44,10 @@ mockserver-client ${project.version} + + info.solidsoft.spock + spock-global-unroll + diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy new file mode 100644 index 0000000..8d6eff8 --- /dev/null +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy @@ -0,0 +1,152 @@ +package pl.touk.mockserver.tests + +import groovy.util.slurpersupport.GPathResult +import org.apache.http.client.methods.CloseableHttpResponse +import org.apache.http.client.methods.HttpPost +import org.apache.http.conn.ssl.SSLConnectionSocketFactory +import org.apache.http.conn.ssl.SSLContexts +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 pl.touk.mockserver.api.common.Https +import pl.touk.mockserver.api.request.AddMock +import pl.touk.mockserver.client.RemoteMockServer +import pl.touk.mockserver.client.Util +import pl.touk.mockserver.server.HttpMockServer +import spock.lang.AutoCleanup +import spock.lang.Shared +import spock.lang.Specification + +import javax.net.ssl.SSLContext +import javax.net.ssl.SSLHandshakeException +import java.security.KeyStore + +class MockServerHttpsTest extends Specification { + + RemoteMockServer remoteMockServer = new RemoteMockServer('localhost', 19000) + + @AutoCleanup('stop') + HttpMockServer httpMockServer = new HttpMockServer(19000) + + @Shared + SSLContext noClientAuthSslContext = SSLContexts.custom() + .loadTrustMaterial(trustStore()) + .build() + + @Shared + SSLContext trustedCertificateSslContext = SSLContexts.custom() + .loadKeyMaterial(trustedCertificateKeystore(), 'changeit'.toCharArray()) + .loadTrustMaterial(trustStore()) + .build() + + @Shared + SSLContext untrustedCertificateSslContext = SSLContexts.custom() + .loadKeyMaterial(untrustedCertificateKeystore(), 'changeit'.toCharArray()) + .loadTrustMaterial(trustStore()) + .build() + + def 'should handle HTTPS server' () { + given: + remoteMockServer.addMock(new AddMock( + name: 'testHttps', + path: 'testEndpoint', + port: 10443, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> ""}''', + https: new Https( + keyPassword: 'changeit', + keystorePassword: 'changeit', + keystorePath: MockServerHttpsTest.classLoader.getResource('keystore.jks').path + ), + soap: false + )) + when: + HttpPost restPost = new HttpPost('https://localhost:10443/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client(noClientAuthSslContext).execute(restPost) + then: + GPathResult restPostResponse = Util.extractXmlResponse(response) + restPostResponse.name() == 'goodResponse-request' + } + + def 'should handle HTTPS server with client auth' () { + given: + remoteMockServer.addMock(new AddMock( + name: 'testHttps', + path: 'testEndpoint', + port: 10443, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> ""}''', + https: new Https( + keyPassword: 'changeit', + keystorePassword: 'changeit', + keystorePath: MockServerHttpsTest.classLoader.getResource('keystore.jks').path, + truststorePath: MockServerHttpsTest.classLoader.getResource('truststore.jks').path, + truststorePassword: 'changeit', + requireClientAuth: true + ), + soap: false + )) + when: + HttpPost restPost = new HttpPost('https://localhost:10443/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client(trustedCertificateSslContext).execute(restPost) + then: + GPathResult restPostResponse = Util.extractXmlResponse(response) + restPostResponse.name() == 'goodResponse-request' + } + + def 'should handle HTTPS server with wrong client auth' () { + given: + remoteMockServer.addMock(new AddMock( + name: 'testHttps', + path: 'testEndpoint', + port: 10443, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> ""}''', + https: new Https( + keyPassword: 'changeit', + keystorePassword: 'changeit', + keystorePath: MockServerHttpsTest.classLoader.getResource('keystore.jks').path, + truststorePath: MockServerHttpsTest.classLoader.getResource('truststore.jks').path, + truststorePassword: 'changeit', + requireClientAuth: true + ), + soap: false + )) + when: + HttpPost restPost = new HttpPost('https://localhost:10443/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + client(sslContext).execute(restPost) + then: + thrown(SSLHandshakeException) + where: + sslContext << [noClientAuthSslContext, untrustedCertificateSslContext] + } + + private CloseableHttpClient client(SSLContext sslContext) { + return HttpClients.custom() + .setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) + .setSslcontext(sslContext) + .build() + } + + private KeyStore trustedCertificateKeystore() { + return loadKeystore('trusted.jks') + } + + private KeyStore untrustedCertificateKeystore() { + return loadKeystore('untrusted.jks') + } + + private KeyStore trustStore() { + return loadKeystore('truststore.jks') + } + + private KeyStore loadKeystore(String fileName) { + KeyStore truststore = KeyStore.getInstance(KeyStore.defaultType) + truststore.load(new FileInputStream(MockServerHttpsTest.classLoader.getResource(fileName).path), "changeit".toCharArray()); + return truststore + } +} 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 ab16248..e9f2d42 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 @@ -27,14 +27,15 @@ import pl.touk.mockserver.client.MockDoesNotExist import pl.touk.mockserver.client.RemoteMockServer import pl.touk.mockserver.client.Util import pl.touk.mockserver.server.HttpMockServer +import spock.lang.AutoCleanup import spock.lang.Shared import spock.lang.Specification -import spock.lang.Unroll class MockServerIntegrationTest extends Specification { RemoteMockServer remoteMockServer + @AutoCleanup('stop') HttpMockServer httpMockServer @Shared @@ -45,10 +46,6 @@ class MockServerIntegrationTest extends Specification { remoteMockServer = new RemoteMockServer('localhost', 9000) } - def cleanup() { - httpMockServer.stop() - } - def "should add working rest mock on endpoint"() { expect: remoteMockServer.addMock(new AddMock( @@ -244,7 +241,6 @@ class MockServerIntegrationTest extends Specification { soapPostResponse.Body.'goodResponseSoap-request'.size() == 1 } - @Unroll def "should dispatch rest mocks when second on #name"() { given: remoteMockServer.addMock(new AddMock( @@ -283,7 +279,6 @@ class MockServerIntegrationTest extends Specification { 9998 | 'test2' | 'another port and path' } - @Unroll def "should dispatch rest mock with response code"() { given: remoteMockServer.addMock(new AddMock( @@ -857,7 +852,6 @@ class MockServerIntegrationTest extends Specification { 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 AddMock( @@ -885,7 +879,6 @@ class MockServerIntegrationTest extends Specification { true | 0 } - @Unroll def "should reject mock when it has System.exit in closure"() { when: remoteMockServer.addMock(new AddMock( @@ -1133,7 +1126,6 @@ class MockServerIntegrationTest extends Specification { remoteMockServer.removeMock('testRest')?.size() == 1 } - @Unroll def 'should handle leading slash'() { given: String name = "testRest-${UUID.randomUUID().toString()}" diff --git a/mockserver-tests/src/test/resources/keystore.jks b/mockserver-tests/src/test/resources/keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..d5e35d1551194e1ced94cb1f249b8decfa66aa0a GIT binary patch literal 2257 zcmc(gX*kr29>?cD3o-U3O9qi*I>XG^mpFr%GWLCMY>mbesZJ;iMp5i8xBaZLn*Pa&yxKlP>n>7CAy@#LoIJ^s?%3^}d*dwO4oQeB zBfPWB*Iy4*Bs_h?*e=idB>zQCreCGnUlPX8$xQ=8%OP{(uVv?o#H$44Sv(e)lf2ey zJ7inI{d5(b!85)w@Xf<~no6QW%zpEjitAk{wiPm~xxhC+rJD3MWCot+AvmKrJ}281 zAqVL1uo~T$Z?{#iKIV(W#*B^_EkOB_?c+Iwl9@F1PDG2aYU%c9c;?!Al9?fmDLX{I zMK7%7E84GCp3>60C(aH;Kgihj+8b4@-{^n7;x}G~XZ(5`q^D|rEOR-qOsq)Xn%viv zpW@cUaG*znRE2i^IMDksFacqpYBG*wli#%LU;GPX%@G6r#wt_Z;2sQDY#4GS7M0=+ zW4a#PNId1SBi0rmkUQ1mRF-HkYh@2PVH92LR$H@GZ%pwX>CF~M19ntzjE8~p}hiV-36bTAvWFJGK zabJ|fa`$Kxi>5Z;xnByEur11gHb<{#;9w|nYIMnG`?reY9(sN37Sz%}`0Sj$wohr8 zmD<~wq&Ii?YUWxR2ww5<20laETO;ZEb+1JuZ+o^Hby0JTBXSitT9?uyS|5% zNwZ&%RcCWt?%Kqm){Yy9+KUkg_j-)S9g)?5~x+k-$){8E(`y*fmIJSO1@Jgt@3{qIE$a zNFtg7i9=JsfkhB700u)P?vELu`MG$IR6KQy9{}Jm5IPJ4NAqw&9HCsIU>gEP1TFNp zIVAeOh5aw%{t4s#34{NHL4IIpSqXlO4jO~i#pqyl(HJ)ge(c{?`#<*oaS{bk_%WD+ zzX72Df*>>n;003v0Mz`8;2^tLi*>>8+b+BztJ|@-wA>D@AWd4^a+P|Yf4Mg;RP1be zwDQhZCK1oHY@lT@r3zd$tVb?yF4juxE+eAo3WJ9q#-aRiUiFag@|IIVj2;+t)|Ojg z4q0V(z1jDVZ5Zo0QbiW|JnKT`w{HsV`hpQ(-$xIUkvXNGJEv~gMY^r(HcXP%In0ky z;PQ$qD=`jWOJts#`8+vzdz!7C^(>a}kU3XIJ>pj_a?cJ~Vk*)(2A`sQ`TJW?=MfPk zqb~e}w9=={;R|qg=Dvkd)O4?ADQ+J|yhb&E{8b81E+>v)Gw>Kw5=y3B^Hu-EX)AeA z7w@nj!YFkX3;{qu$x*Z%8gWn$gaGs~R7_&g>EX!ybX^M9DkH3O_Y*z3#qq}w588DQ zA^?)BRD*^D+nlq1xq3@g%?TI;PF3zTuW z?R}7i{cjHLxLkI;{mIPDYH8&5}-V}wK8;kd? z+pnx)Gm8X8Yf%j-0gJ4))7%S}Prxu(&c?3`1I^X-!<{!80o`vB!m)dhk;X-)Dqj%6NwhwqUmG2C<4WbpMA_SH zk({wN#6WDxZ0860wzRtYXDb{%MXWE21)$et^KC#Y=gBmt^i$@DsSOUeBX{+v2b-ju zEPsG>b^_`iw7Cz~>P2-mmhZZ^3BNYvw4bgBAp2`$M<C_rc zg74$j=)Tbd8GcRygrz)j3myC~Puk(N_4cn7UWH7?ytu_%%@LoQ_bz08kzF5_#IrSZ z6+PMF{f4yb?#~%K`4hOE_#V65`Gd@siI0(_pwHK9sEnV^H~n!nFUP9-vD>yjtsK9G znzO=7*M*KzMniQl&ey&;S)5XYoL7^W8bPyP0?D2J)6s!_1`_8~v*`I@=Y@dZvES{6b)W$F_j zvbV;N=aes>(;?3a*m<5?9^KqicJw}DJ&L7jn|FU7#SB-Q$$Gdq;ldsOgR03voH?Gh zNRHQ|uOfV#jd|NL(XotPl3yK)39(({#kmPLFSLCIW%x(Tq*FC(DZHhm=y@TO2SIX9 zW#HzKI@afcjD~hM_`;{}pH)z)T`EFq6>;XUT`A5%virK@AaG9eFTm-b5p%xIqKC@$J@Q%9Dn7W8D zU_1*we_cA4d;Ft5X})Tq@&yDeO?LbWF!~-r7n;#^>?kr4T`%++H!JAyw;NCmAc|XO&xAth5Ic zWli|B%4-`wIp^D`;rs3uzpdtIa!_w7dtby-@7h$^)i0!Oc1pXfL>M62Dp<+alZJ&BMBYH^tqjO5}%EAd8xyJfB!%Z|0eT80GNW0y7ccBW{%niF7MN*|6~$ZT z7I?mFCyYOdauYMKNi=(V^x00E&A84b7bY)FMK`Gw;u|C2=q6W)I-RMqmMrhjOO%6Ef_?Q`9>Ozm!qrmuEc&P3>-$96L{xcsv zrH$pz=RIJ8-0qx4ajemLGHeRPo%wnq4J5S5x)K8aEF?6IUpDw_8ey(lI%qurfP|wH zAi?MaFp&lUgTP?uvFP-NXhAridZJb0wjc<^4+GGF7=AP#972S`#liLjjL6}B9vWWp zzxVZT!t(<`{6P4BAdvqNw7j$+<}@0kt*4DfW3@5v(t_ImvDp9G|KA}AAmx9CaQGu2 z2_Rtrod80B6F?v!N57D`QN)xM9zv956nsh$VSlKZ6_^bb;HUR&O7^gtaL0uLy+i0z z7un|bnD2K*fBnTAofz}_I#&0*5%osD@=cpPow{k}hp*001C6X>qS%&|=!+8h4K7}h z7I{TyF;7btM8<8waE$)I{Ue?!cb#Xz7WFnc^+4DKpFaH7J+9HIy{=2-K9bxj<0gkm zOZ=nvY?ICRxSC3>H~fedZuhN3PbV}Zyol0t<9>-!(vj#3GU2rsi0g#s0uwU{CN7gI z{wI|fGfhNy%kmh0C|t(hSESvc?4lOMQ~*JT(PH%M@6i%`?^X9h15C6UmQXDb@S6GvFYa-PH_0yq7b*bJ@C%#x1jniBSa$!(kW)NKp}X^E%2zRi4VYx3t%R`IELsrO48 zUT<8`w*0v7PVc|S0+WI)ABz}^$n+mBI$TF~zq#&pu2FP- z_^BEH7d}M}L|{q+1|lPa9;4T1zH<-a8CG912!BD%=|b!De+mowT7Ig%6jEj24ZOC<;L);j5zdDi z|MF8E^|rrK+g-%AXJY$%-e-#XR}g%{^i~>`Dp0ECCh>gl%z5~evg#AH@Eb7Z@!3Ee~reUPkRzQ z_V{j@IAM?Eya*Hji>2RQZjiEkBU?RP>5SO=M%`4$xXsMJ6nt+9%s9r%@-UEH>9N*I zx7wY_>wd7FJ))&4r*&j<){37$mG)cnmwdWcb0%AB+LG4?Z`B1=MSZZ`ax>%emp#v` znU*atdtV>I-5RC8?l2sb z7SfursYqQ)^~IzMS=`Zk{(IY3-#%`-#PL6CVr82R^Y10xUCR8IJ z)D2fZ1>uPJ!W^GVZ4a?!Q}LH!>n}dJy{Vh+!;Hd%e_u?m*%gYGy1>~~euX|uUT#1_ z@VO72dir53qRq@9bLZ`Nm{PXuihxUum-6*n#s4I%Z(fqkD_D7n`R&K#oJBzaclX-8 zIjLr0sdUV`&CKGUdHTu8g`1C`xcPFzw!EO}j?;}6{Ye$5itRZe>vBTZX_>_8JC7r} zilSB~HgD;k+4Nmqa!-JfR6w~41B^Q*ZpMOoIKRqJRjNesC6^}}At5Gm&K^K!4T zOtg9V#DB^Tz0bFWIFs}~9-nshsknEF_tAwXA2ofM5O<+;6-)WO`zn@gbFWN2`Xuh; c-UT~myb*gL`u>sUT7xSMcXgI*(%Ya10Jt*6!~g&Q literal 0 HcmV?d00001 diff --git a/mockserver-tests/src/test/resources/untrusted.jks b/mockserver-tests/src/test/resources/untrusted.jks new file mode 100644 index 0000000000000000000000000000000000000000..ca94b454c5d413ac28dbcf921a5b678eb20896a5 GIT binary patch literal 2255 zcmc(gX*kr29>?cz#xNNBQWQd6hL{<<7(&QSS(6T8h-(?k8D$-eP-Mx3v9?)eLLn^} zB8@HTpzJ3p3{qySgX5g%-skqB_xHv3#rN~-_k5q<^Zo8E?=6EsAdUk8{|FWt9D$1r zkMO;GK)g)SSI&Y!oFF6t!bb8#d6c051VC^I0RSfmLV(OGZ&JRCH8R4@^J^DW8`_3_ z6rWi>v{S9NoI!bfsxbh%!D-lhck{xHgzm4F`ofr$A%t{j5 zdc0=sU3`1phd6T`3$b&HimkERIZfVAy3#GxALgM%6)?5r;%jNw6xJ8k_DcBBwPaVv zQ?7%r)s=P3^yE8?#e;h>1(c5Tq6j6XS=N%6rP})QE)# z--?D8&4V3+ZFN8_TdqDUz?0qv%rcRhb<^$r9vi z_dDnEWWa7GcA{ZDZ$wmm#uePdT#MUl-uhyzx)czlPJ@haBC=CxBH?`7{h`RYCUgn+ zB-Vck7mi6;PrMg1FUd9~{n@E`gAkPPCCY-wW7nK``3B~+OU)I7--4Lqzu&K%=KR5; zR@t5XF#LIZeEMr{i=S-}Z~xQ@TCL%Vs_G&2m->=XH%^FJL91(L4IVjU@v6SX!}e?yC76w~E|)0H8s3&r zNYd5JE8Z)}UY+jP;=QMc@!%X3c}I&WSw4l6a8&ndR4XA@{;O_5aM`rKH-BiPQeTH~ z!FQ``?DLusjeFY9rcGew`Ki@p94B_SxT^pgQaA*vx!LdK^vng3 ztP!#z=*|^jN`_|I?`rKEzR-jzxc+!xN%wY?D_@a|-si$;oGfb@|9nX~J&cNH8?%^u zu%q}lZYbW{$1iPvOv~vJW=TXH?bYMFc-BwtzKqwx9i%*cl$yM__~ClQsC+&h?>WpY zKGr?W(5Gpw)LsZ%JyVNKxr^}Sz8O^B-gibulwGu+%PNg{>w!l(LP}@iDXaUWxO}HQDl}GF6R&nF(y3aDf4CyM5d&e=A03)sBDree>QlQP1WwYlZvIXcB#!Y z`t9%dS*=@-MV#wnwL}WAP8|FxemO6clgw(iaP;3+`#<*oaS{QL`#G3{)c_L! zfrB{#csK|E0HR*a@y3nEJSY^;9)a2fPB+sEbrp5nzoX|`^Qa#+wXjtpyv zf6r6k6!Ttm6YLoFO1Gq8uw}>ogt1|4g)w%SNDf1~O?}owG1BG-e z0jO3(_A3VEiE%t1$btTQ*#h%Xo)qQcxe7Hl2B0CoB7G_bD*6W>pRVHaa|<$SnWWOG z8o636{^c&c&4?E}qt91=lrE)F`#-29AE$h+&zYrK^{GLkE8q$afqn0TPq?%=e9KQbX|(gsBXRbvB;F4Lp=DdgAf6b z8)ItfjFEyO5j*Q{CvzNwpy!Ez1wGPD`0i(3LSQmve z6h-!@kDm-vl7lk2ge$!w^X@)nRkv}=b@I5elZ>EM{tI1n%*@B9R#hEpZH`%CdmHN-9^-;H_Artw!Fcc;HOhxwt?)s||HqqyZYN(KMPJDq#mZzvJ! z6RK-A0_wMsUa3A0&FVv5G80c!ys=TW)_*95(`|27pf8$eNqO8vu5RAv`;yvJAqxuu WR1{UN&PgWK`+(=#3qkv-?7slilILmw literal 0 HcmV?d00001 diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy index b26eb5a..ce11c4c 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy @@ -10,15 +10,15 @@ import java.util.concurrent.CopyOnWriteArrayList @Slf4j @PackageScope class ContextExecutor { - private final HttpServerWraper httpServerWraper + private final HttpServerWrapper httpServerWrapper final String path private final List mocks - ContextExecutor(HttpServerWraper httpServerWraper, Mock initialMock) { - this.httpServerWraper = httpServerWraper + ContextExecutor(HttpServerWrapper httpServerWrapper, Mock initialMock) { + this.httpServerWrapper = httpServerWrapper this.path = "/${initialMock.path}" this.mocks = new CopyOnWriteArrayList<>([initialMock]) - httpServerWraper.createContext(path) { + httpServerWrapper.createContext(path) { HttpExchange ex -> try { applyMocks(ex) 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 7d2f86b..6a57f12 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -2,6 +2,7 @@ package pl.touk.mockserver.server import com.sun.net.httpserver.HttpExchange import groovy.util.logging.Slf4j +import pl.touk.mockserver.api.common.Https import pl.touk.mockserver.api.common.ImportAlias import pl.touk.mockserver.api.common.Method import pl.touk.mockserver.api.request.AddMock @@ -30,8 +31,8 @@ import static pl.touk.mockserver.server.Util.createResponse @Slf4j class HttpMockServer { - private final HttpServerWraper httpServerWraper - private final Map childServers = new ConcurrentHashMap<>() + private final HttpServerWrapper httpServerWrapper + private final Map childServers = new ConcurrentHashMap<>() private final Set mockNames = new CopyOnWriteArraySet<>() private final ConfigObject configuration = new ConfigObject() private final Executor executor @@ -41,13 +42,13 @@ class HttpMockServer { HttpMockServer(int port = 9999, ConfigObject initialConfiguration = new ConfigObject(), int threads = 10) { executor = Executors.newFixedThreadPool(threads) - httpServerWraper = new HttpServerWraper(port, executor) + httpServerWrapper = new HttpServerWrapper(port, executor) initialConfiguration.values()?.each { ConfigObject co -> addMock(co) } - httpServerWraper.createContext('/serverControl', { + httpServerWrapper.createContext('/serverControl', { HttpExchange ex -> try { if (ex.requestMethod == 'GET') { @@ -108,7 +109,7 @@ class HttpMockServer { throw new RuntimeException('mock already registered') } Mock mock = mockFromRequest(request) - HttpServerWraper child = getOrCreateChildServer(mock.port) + HttpServerWrapper child = getOrCreateChildServer(mock.port, mock.https) child.addMock(mock) saveConfiguration(request) mockNames << name @@ -121,7 +122,7 @@ class HttpMockServer { throw new RuntimeException('mock already registered') } Mock mock = mockFromConfig(co) - HttpServerWraper child = getOrCreateChildServer(mock.port) + HttpServerWrapper child = getOrCreateChildServer(mock.port, mock.https) child.addMock(mock) configuration.put(name, co) mockNames << name @@ -156,6 +157,7 @@ class HttpMockServer { mock.responseHeaders = request.responseHeaders mock.schema = request.schema mock.preserveHistory = request.preserveHistory != false + mock.https = request.https return mock } @@ -170,13 +172,23 @@ class HttpMockServer { mock.responseHeaders = co.responseHeaders ?: null mock.schema = co.schema ?: null mock.preserveHistory = co.preserveHistory != false + if (co.https) { + mock.https = new Https( + keystorePath: co.https.keystorePath ?: null, + keystorePassword: co.https.keystorePassword, + keyPassword: co.https.keyPassword, + truststorePath: co.https.truststorePath, + truststorePassword: co.https.truststorePassword, + requireClientAuth: co.https?.requireClientAuth?.asBoolean() ?: false + ) + } return mock } - private HttpServerWraper getOrCreateChildServer(int mockPort) { - HttpServerWraper child = childServers[mockPort] + private HttpServerWrapper getOrCreateChildServer(int mockPort, Https https) { + HttpServerWrapper child = childServers[mockPort] if (!child) { - child = new HttpServerWraper(mockPort, executor) + child = new HttpServerWrapper(mockPort, executor, https) childServers.put(mockPort, child) } return child @@ -244,6 +256,6 @@ class HttpMockServer { void stop() { childServers.values().each { it.stop() } - httpServerWraper.stop() + httpServerWrapper.stop() } } diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy deleted file mode 100644 index e1ef2f8..0000000 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy +++ /dev/null @@ -1,58 +0,0 @@ -package pl.touk.mockserver.server - -import com.sun.net.httpserver.HttpHandler -import com.sun.net.httpserver.HttpServer -import groovy.transform.PackageScope -import groovy.util.logging.Slf4j - -import java.util.concurrent.Executor - -@Slf4j -@PackageScope -class HttpServerWraper { - private final HttpServer httpServer - final int port - - private List executors = [] - - HttpServerWraper(int port, Executor executor) { - this.port = port - InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port) - httpServer = HttpServer.create(addr, 0) - httpServer.executor = executor - log.info("Http server starting on port $port...") - httpServer.start() - log.info('Http server is started') - } - - void createContext(String context, HttpHandler handler) { - httpServer.createContext(context, handler) - } - - void addMock(Mock mock) { - ContextExecutor executor = executors.find { it.path == mock.path } - if (executor) { - executor.addMock(mock) - } else { - executors << new ContextExecutor(this, mock) - } - log.info("Added mock ${mock.name}") - } - - void stop() { - executors.each { httpServer.removeContext(it.contextPath) } - httpServer.stop(0) - } - - List removeMock(String name) { - return executors.collect { it.removeMock(name) }.flatten() as List - } - - List peekMock(String name) { - return executors.collect { it.peekMock(name) }.flatten() as List - } - - List getMocks() { - return executors.collect { it.mocks }.flatten() as List - } -} diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy new file mode 100644 index 0000000..c9e63e9 --- /dev/null +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy @@ -0,0 +1,106 @@ +package pl.touk.mockserver.server + +import com.sun.net.httpserver.HttpHandler +import com.sun.net.httpserver.HttpServer +import com.sun.net.httpserver.HttpsServer +import groovy.transform.PackageScope +import groovy.util.logging.Slf4j +import pl.touk.mockserver.api.common.Https + +import javax.net.ssl.KeyManager +import javax.net.ssl.KeyManagerFactory +import javax.net.ssl.SSLContext +import javax.net.ssl.TrustManager +import javax.net.ssl.TrustManagerFactory +import java.security.KeyStore +import java.security.SecureRandom +import java.util.concurrent.Executor + +@Slf4j +@PackageScope +class HttpServerWrapper { + private final HttpServer httpServer + final int port + + private List executors = [] + + HttpServerWrapper(int port, Executor executor, Https https = null) { + this.port = port + InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port) + httpServer = buildServer(addr, https) + httpServer.executor = executor + log.info("Http server starting on port $port...") + httpServer.start() + log.info('Http server is started') + } + + private HttpServer buildServer(InetSocketAddress addr, Https https) { + if (https) { + HttpsServer httpsServer = HttpsServer.create(addr, 0) + httpsServer.httpsConfigurator = new HttpsConfig(buildSslContext(https), https) + return httpsServer + } else { + return HttpServer.create(addr, 0) + } + } + + private SSLContext buildSslContext(Https https) { + KeyManager[] keyManagers = buildKeyManager(https) + TrustManager[] trustManagers = buildTrustManager(https) + + SSLContext ssl = SSLContext.getInstance('TLSv1') + ssl.init(keyManagers, trustManagers, new SecureRandom()) + return ssl + } + + private KeyManager[] buildKeyManager(Https https) { + KeyStore keyStore = KeyStore.getInstance('jks') + keyStore.load(new FileInputStream(https.keystorePath), https.keystorePassword.toCharArray()) + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.defaultAlgorithm) + kmf.init(keyStore, https.keyPassword.toCharArray()) + return kmf.keyManagers + } + + private TrustManager[] buildTrustManager(Https https) { + if (https.requireClientAuth) { + KeyStore trustStore = KeyStore.getInstance('jks') + trustStore.load(new FileInputStream(https.truststorePath), https.truststorePassword.toCharArray()) + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.defaultAlgorithm) + tmf.init(trustStore) + return tmf.trustManagers + } else { + return [] + } + } + + void createContext(String context, HttpHandler handler) { + httpServer.createContext(context, handler) + } + + void addMock(Mock mock) { + ContextExecutor executor = executors.find { it.path == mock.path } + if (executor) { + executor.addMock(mock) + } else { + executors << new ContextExecutor(this, mock) + } + log.info("Added mock ${mock.name}") + } + + void stop() { + executors.each { httpServer.removeContext(it.contextPath) } + httpServer.stop(0) + } + + List removeMock(String name) { + return executors.collect { it.removeMock(name) }.flatten() as List + } + + List peekMock(String name) { + return executors.collect { it.peekMock(name) }.flatten() as List + } + + List getMocks() { + return executors.collect { it.mocks }.flatten() as List + } +} diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy new file mode 100644 index 0000000..68b5550 --- /dev/null +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy @@ -0,0 +1,28 @@ +package pl.touk.mockserver.server + +import com.sun.net.httpserver.HttpsConfigurator +import com.sun.net.httpserver.HttpsParameters +import groovy.transform.CompileStatic +import pl.touk.mockserver.api.common.Https + +import javax.net.ssl.SSLContext +import javax.net.ssl.SSLParameters + +@CompileStatic +class HttpsConfig extends HttpsConfigurator { + private final Https https + + HttpsConfig(SSLContext sslContext, Https https) { + super(sslContext) + this.https = https + } + + @Override + void configure(HttpsParameters httpsParameters) { + SSLContext sslContext = getSSLContext() + SSLParameters sslParameters = sslContext.defaultSSLParameters + sslParameters.needClientAuth = https.requireClientAuth + httpsParameters.needClientAuth = https.requireClientAuth + httpsParameters.SSLParameters = sslParameters + } +} 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 ed37f89..e132ac9 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -5,6 +5,7 @@ import groovy.transform.PackageScope import groovy.util.logging.Slf4j import org.codehaus.groovy.control.CompilerConfiguration import org.codehaus.groovy.control.customizers.ImportCustomizer +import pl.touk.mockserver.api.common.Https import pl.touk.mockserver.api.common.Method import javax.xml.XMLConstants @@ -35,6 +36,7 @@ class Mock implements Comparable { private Validator validator Map imports = [:] boolean preserveHistory = true + Https https Mock(String name, String path, int port) { if (!(name)) { diff --git a/pom.xml b/pom.xml index 43ce7cd..c99b3f7 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ 1.11.2 2.5.2 1.4 + 0.5.1 @@ -99,6 +100,12 @@ ${jmh.version} test + + info.solidsoft.spock + spock-global-unroll + ${spock-global-unroll.version} + test + From 181f9dbcd9b58e661897f89da6c220e1ce4819bd Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 28 Feb 2018 14:30:22 +0100 Subject: [PATCH 42/80] [maven-release-plugin] prepare release http-mock-server-2.6.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 873227b..83d9ddc 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.2-SNAPSHOT + 2.6.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 8e40314..1b5e956 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.2-SNAPSHOT + 2.6.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index ffc9d6c..7ee772b 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.2-SNAPSHOT + 2.6.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 3c743ee..1fc8679 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.2-SNAPSHOT + 2.6.0 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 3ac9362..d8bbe17 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.5.2-SNAPSHOT + 2.6.0 4.0.0 diff --git a/pom.xml b/pom.xml index c99b3f7..1d78ed5 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.5.2-SNAPSHOT + 2.6.0 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.6.0 From 579dd08d2fe832bf8f7a3bd5e8c9103d4c4057ea Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Wed, 28 Feb 2018 14:30:32 +0100 Subject: [PATCH 43/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 83d9ddc..3f59297 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.0 + 2.6.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 1b5e956..83b435b 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.0 + 2.6.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 7ee772b..fc48782 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.0 + 2.6.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 1fc8679..a866671 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.0 + 2.6.1-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index d8bbe17..db37c4d 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.0 + 2.6.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 1d78ed5..c7c87d6 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.6.0 + 2.6.1-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.6.0 + HEAD From 9c6afd599f610622639e76e83d1ec82def98b389 Mon Sep 17 00:00:00 2001 From: Anna Czajka Date: Mon, 3 Sep 2018 12:30:40 +0200 Subject: [PATCH 44/80] Change schema resource fetching (#3) --- .../src/main/groovy/pl/touk/mockserver/server/Mock.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e132ac9..a285d6e 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -158,7 +158,7 @@ class Mock implements Comparable { if (schema) { try { validator = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) - .newSchema(new File(this.class.getResource("/$schema").path)) + .newSchema(this.class.getResource("/$schema")) .newValidator() } catch (Exception e) { throw new RuntimeException('mock request schema is invalid schema', e) From 4128b8b49d669604fbdeb644252ec91b7f4a83a9 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 4 Sep 2018 13:07:18 +0200 Subject: [PATCH 45/80] [maven-release-plugin] prepare release http-mock-server-2.6.1 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 3f59297..fdc2aeb 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1-SNAPSHOT + 2.6.1 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 83b435b..6046eb5 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1-SNAPSHOT + 2.6.1 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index fc48782..a1078a0 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1-SNAPSHOT + 2.6.1 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index a866671..886e641 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1-SNAPSHOT + 2.6.1 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index db37c4d..5f5a1b9 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1-SNAPSHOT + 2.6.1 4.0.0 diff --git a/pom.xml b/pom.xml index c7c87d6..906a194 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.6.1-SNAPSHOT + 2.6.1 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.6.1 From c118365bbeed907b5d77ae275df93dabf282dca6 Mon Sep 17 00:00:00 2001 From: Dominik Przybysz Date: Tue, 4 Sep 2018 13:07:27 +0200 Subject: [PATCH 46/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index fdc2aeb..14cab09 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1 + 2.6.2-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 6046eb5..b0f6b04 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1 + 2.6.2-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index a1078a0..55fbecc 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1 + 2.6.2-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 886e641..f5e6b12 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1 + 2.6.2-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 5f5a1b9..6d058cb 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.1 + 2.6.2-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 906a194..6ddde3c 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.6.1 + 2.6.2-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.6.1 + HEAD From fcd99cf61f228d540d2ba48fa8547fd84a46c2a2 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Thu, 4 Apr 2019 19:42:37 +0200 Subject: [PATCH 47/80] Build assembly by default --- mockserver/pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mockserver/pom.xml b/mockserver/pom.xml index f5e6b12..fab15f3 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -49,6 +49,15 @@ mockserver-full false + + + create-archive + package + + single + + + From 79622a41776413566c7ebbb531319569ee4fadbe Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Fri, 7 Aug 2020 08:55:16 +0200 Subject: [PATCH 48/80] Add limited mock uses --- .travis.yml | 2 +- README.md | 114 +++++---- .../xsd/pl/touk/mockserver/api/request.xsd | 2 + .../tests/MockServerMaxUsesTest.groovy | 239 ++++++++++++++++++ .../mockserver/server/ContextExecutor.groovy | 19 ++ .../mockserver/server/HttpMockServer.groovy | 10 + .../pl/touk/mockserver/server/Mock.groovy | 34 +++ 7 files changed, 369 insertions(+), 51 deletions(-) create mode 100644 mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy diff --git a/.travis.yml b/.travis.yml index bfa78aa..672c068 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: groovy jdk: - - oraclejdk8 + - openjdk8 diff --git a/README.md b/README.md index 2552e18..7439888 100644 --- a/README.md +++ b/README.md @@ -30,39 +30,41 @@ Configuration file is groovy configuration script e.g. : ```groovy testRest2 { - port=9998 - response='{ req -> \'\' }' - responseHeaders='{ _ -> [a: "b"] }' - path='testEndpoint' - predicate='{ req -> req.xml.name() == \'request1\'}' - name='testRest2' + port=9998 + response='{ req -> \'\' }' + responseHeaders='{ _ -> [a: "b"] }' + path='testEndpoint' + predicate='{ req -> req.xml.name() == \'request1\'}' + name='testRest2' } testRest4 { - soap=true - port=9999 - path='testEndpoint' - name='testRest4' - method='PUT' - statusCode=204 + soap=true + port=9999 + path='testEndpoint' + name='testRest4' + method='PUT' + statusCode=204 } testRest3 { - port=9999 - path='testEndpoint2' - name='testRest3' + port=9999 + path='testEndpoint2' + name='testRest3' } testRest6 { - port=9999 - path='testEndpoint2' - name='testRest6' + port=9999 + path='testEndpoint2' + name='testRest6' + maxUses=1 + cyclic=true } testRest { - imports { - aaa='bbb' - ccc='bla' - } - port=10001 - path='testEndpoint' - name='testRest' + imports { + aaa='bbb' + ccc='bla' + } + port=10001 + path='testEndpoint' + name='testRest' } testHttps { soap=false @@ -112,6 +114,8 @@ remoteMockServer.addMock(new AddMock( method: ..., responseHeaders: ..., schema: ..., + maxUses: ..., + cyclic: ..., https: new Https( keystorePath: '/tmp/keystore.jks', keystorePassword: 'keystorePass', @@ -140,6 +144,8 @@ Send POST request to localhost:/serverControl ... ... + ... + ... /tmp/keystore.jks keystorePass @@ -165,6 +171,8 @@ Send POST request to localhost:/serverControl - schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator - imports - list of imports for closures (each import is separate tag); `alias` is the name of `fullClassName` available in closure; `fullClassName` must be available on classpath of mock server - https - HTTPS configuration +- maxUses - limit uses of mock to the specific number, after that mock is removed (any negative number means unlimited - default, cannot set value to 0) +- cyclic - should mock be added after `maxUses` uses at the end of the mock list (by default false) #### HTTPS configuration @@ -376,39 +384,39 @@ Response: ```groovy testRest2 { - port=9998 - response='{ req -> \'\' }' - responseHeaders='{ _ -> [a: "b"] }' - path='testEndpoint' - predicate='{ req -> req.xml.name() == \'request1\'}' - name='testRest2' + port=9998 + response='{ req -> \'\' }' + responseHeaders='{ _ -> [a: "b"] }' + path='testEndpoint' + predicate='{ req -> req.xml.name() == \'request1\'}' + name='testRest2' } testRest4 { - soap=true - port=9999 - path='testEndpoint' - name='testRest4' - method='PUT' - statusCode=204 + soap=true + port=9999 + path='testEndpoint' + name='testRest4' + method='PUT' + statusCode=204 } testRest3 { - port=9999 - path='testEndpoint2' - name='testRest3' + port=9999 + path='testEndpoint2' + name='testRest3' } testRest6 { - port=9999 - path='testEndpoint2' - name='testRest6' + port=9999 + path='testEndpoint2' + name='testRest6' } testRest { - imports { - aaa='bbb' - ccc='bla' - } - port=10001 - path='testEndpoint' - name='testRest' + imports { + aaa='bbb' + ccc='bla' + } + port=10001 + path='testEndpoint' + name='testRest' } ``` @@ -435,3 +443,9 @@ Just add repository to maven pom: ... ``` + +FAQ +--- + +Q: *Can I have two mocks returning responses interchangeably for the same request?* +A: Yes, you can. Just set two mocks with `maxUses: 1` and `cyclic: true`. 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 23786bc..25287c8 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 @@ -25,6 +25,8 @@ + + diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy new file mode 100644 index 0000000..08d2c12 --- /dev/null +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy @@ -0,0 +1,239 @@ +package pl.touk.mockserver.tests + + +import org.apache.http.client.methods.CloseableHttpResponse +import org.apache.http.client.methods.HttpPost +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 pl.touk.mockserver.api.request.AddMock +import pl.touk.mockserver.client.RemoteMockServer +import pl.touk.mockserver.server.HttpMockServer +import spock.lang.AutoCleanup +import spock.lang.Shared +import spock.lang.Specification + +class MockServerMaxUsesTest extends Specification { + + RemoteMockServer remoteMockServer + + @AutoCleanup('stop') + HttpMockServer httpMockServer + + @Shared + CloseableHttpClient client = HttpClients.createDefault() + + def setup() { + httpMockServer = new HttpMockServer(9000) + remoteMockServer = new RemoteMockServer('localhost', 9000) + } + + def 'should return two mocks in order'() { + given:'mock with predicate is given but for only one use' + remoteMockServer.addMock(new AddMock( + name: 'mock1', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock1'}''', + maxUses: 1 + )) + and:'mock with the same predicate is given' + remoteMockServer.addMock(new AddMock( + name: 'mock2', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock2'}''', + )) + when:'we call the first time' + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then:'first mock should be returned and expired' + response.entity.content.text == 'mock1' + when:'we call the second time using the same request' + CloseableHttpResponse response2 = client.execute(restPost) + then:'second mock should be returned' + response2.entity.content.text == 'mock2' + when:'we call the third time using the same request' + CloseableHttpResponse response3 = client.execute(restPost) + then:'second mock should be returned, because it has unlimited uses' + response3.entity.content.text == 'mock2' + } + + def 'should return two mocks in order but only once'() { + given:'mock with predicate is given but for only one use' + remoteMockServer.addMock(new AddMock( + name: 'mock1', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock1'}''', + maxUses: 1 + )) + and:'mock with the same predicate is given' + remoteMockServer.addMock(new AddMock( + name: 'mock2', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock2'}''', + maxUses: 1, + )) + when:'we call the first time' + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then:'first mock should be returned and expired' + response.entity.content.text == 'mock1' + when:'we call the second time using the same request' + CloseableHttpResponse response2 = client.execute(restPost) + then:'second mock should be returned' + response2.entity.content.text == 'mock2' + when:'we call the third time using the same request' + CloseableHttpResponse response3 = client.execute(restPost) + then:'no mock should be found' + response3.statusLine.statusCode == 404 + } + + def 'should return two mocks in cyclic order'() { + given:'mock with predicate is given but for only one use' + remoteMockServer.addMock(new AddMock( + name: 'mock1', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock1'}''', + maxUses: 1, + cyclic: true, + preserveHistory: true + )) + and:'mock with the same predicate is given' + remoteMockServer.addMock(new AddMock( + name: 'mock2', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock2'}''', + maxUses: 1, + cyclic: true + )) + when:'we call the first time' + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then:'first mock should be returned and expired' + response.entity.content.text == 'mock1' + when:'we call the second time using the same request' + CloseableHttpResponse response2 = client.execute(restPost) + then:'second mock should be returned and expired' + response2.entity.content.text == 'mock2' + when:'we call the third time using the same request' + CloseableHttpResponse response3 = client.execute(restPost) + then:'first mock should be returned, because these mocks are cyclic' + response3.entity.content.text == 'mock1' + when:'we call the fourth time using the same request' + CloseableHttpResponse response4 = client.execute(restPost) + then:'second mock should be returned, because these mocks are cyclic' + response4.entity.content.text == 'mock2' + and: + remoteMockServer.peekMock('mock1').size() == 2 + } + + def 'should return two mocks with the same request interjected by another'() { + given:'mock with predicate is given but for only one use' + remoteMockServer.addMock(new AddMock( + name: 'mock1', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock1'}''', + maxUses: 1, + cyclic: true + )) + and:'mock with the same predicate is given' + remoteMockServer.addMock(new AddMock( + name: 'mock2', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock2'}''', + maxUses: 1, + cyclic: true + )) + and:'mock with other predicate is given' + remoteMockServer.addMock(new AddMock( + name: 'otherMock', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'otherRequest'}''', + response: '''{req -> 'otherMock'}''' + )) + when:'we call the first time' + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then:'first mock should be returned and expired' + response.entity.content.text == 'mock1' + when:'we call other request' + HttpPost otherRestPost = new HttpPost('http://localhost:9999/testEndpoint') + otherRestPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse otherResponse = client.execute(otherRestPost) + then:'other mock should be called' + otherResponse.entity.content.text == 'otherMock' + when:'we call the second time using the same request' + CloseableHttpResponse response2 = client.execute(restPost) + then:'second mock should be returned and expired' + response2.entity.content.text == 'mock2' + when:'we call the third time using the same request' + CloseableHttpResponse response3 = client.execute(restPost) + then:'first mock should be returned, because these mocks are cyclic' + response3.entity.content.text == 'mock1' + } + + def 'should return first mock twice'() { + given:'mock with predicate is given but for only one use' + remoteMockServer.addMock(new AddMock( + name: 'mock1', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock1'}''', + maxUses: 2 + )) + and:'mock with the same predicate is given' + remoteMockServer.addMock(new AddMock( + name: 'mock2', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request'}''', + response: '''{req -> 'mock2'}''', + )) + when:'we call the first time' + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint') + restPost.entity = new StringEntity('', ContentType.create("text/xml", "UTF-8")) + CloseableHttpResponse response = client.execute(restPost) + then:'first mock should be returned and expired' + response.entity.content.text == 'mock1' + when:'we call the second time using the same request' + CloseableHttpResponse response2 = client.execute(restPost) + then:'again first mock should be returned' + response2.entity.content.text == 'mock1' + when:'we call the third time using the same request' + CloseableHttpResponse response3 = client.execute(restPost) + then:'second mock should be returned' + response3.entity.content.text == 'mock2' + } + + def 'should throw exception if adding mock with incorrect maxUses'() { + when: + remoteMockServer.addMock(new AddMock( + name: 'mock1', + maxUses: 0 + )) + then: + thrown(RuntimeException) + } +} diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy index ce11c4c..7b31b22 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy @@ -39,6 +39,7 @@ class ContextExecutor { try { if (mock.match(Method.valueOf(ex.requestMethod), request)) { log.debug("Mock ${mock.name} match request ${request.text}") + handleMaxUses(mock) MockResponse httpResponse = mock.apply(request) fillExchange(ex, httpResponse) log.trace("Mock ${mock.name} response with body ${httpResponse.text}") @@ -92,4 +93,22 @@ class ContextExecutor { List getMocks() { return mocks } + + private synchronized void handleMaxUses(Mock mock) { + if (mock.hasLimitedUses()) { + mock.decrementUses() + removeAndResetIfNeeded(mock) + log.debug("Uses left ${mock.usesLeft} of ${mock.maxUses} (is cyclic: ${mock.cyclic})") + } + } + + private void removeAndResetIfNeeded(Mock mock) { + if (mock.shouldBeRemoved()) { + mocks.remove(mock) + } + if (mock.shouldUsesBeReset()) { + mock.resetUses() + mocks.add(mock) + } + } } 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 6a57f12..f0352ae 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy @@ -108,6 +108,9 @@ class HttpMockServer { if (name in mockNames) { throw new RuntimeException('mock already registered') } + if (request.maxUses == 0) { + throw new RuntimeException('cannot set maxUses to 0') + } Mock mock = mockFromRequest(request) HttpServerWrapper child = getOrCreateChildServer(mock.port, mock.https) child.addMock(mock) @@ -121,6 +124,9 @@ class HttpMockServer { if (name in mockNames) { throw new RuntimeException('mock already registered') } + if (co.maxUses == 0) { + throw new RuntimeException('cannot set maxUses to 0') + } Mock mock = mockFromConfig(co) HttpServerWrapper child = getOrCreateChildServer(mock.port, mock.https) child.addMock(mock) @@ -158,6 +164,8 @@ class HttpMockServer { mock.schema = request.schema mock.preserveHistory = request.preserveHistory != false mock.https = request.https + mock.maxUses = request.maxUses + mock.cyclic = request.cyclic return mock } @@ -182,6 +190,8 @@ class HttpMockServer { requireClientAuth: co.https?.requireClientAuth?.asBoolean() ?: false ) } + mock.maxUses = co.maxUses ?: null + mock.cyclic = co.cyclic ?: null return mock } 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 a285d6e..0a4fa42 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -37,6 +37,9 @@ class Mock implements Comparable { Map imports = [:] boolean preserveHistory = true Https https + int maxUses = -1 + int usesLeft + boolean cyclic Mock(String name, String path, int port) { if (!(name)) { @@ -148,6 +151,17 @@ class Mock implements Comparable { } } + void setMaxUses(Integer maxUses) { + if (maxUses > 0) { + this.maxUses = maxUses + this.usesLeft = maxUses + } + } + + void setCyclic(Boolean cyclic) { + this.cyclic = cyclic ?: false + } + @Override int compareTo(Mock o) { return name.compareTo(o.name) @@ -165,4 +179,24 @@ class Mock implements Comparable { } } } + + boolean hasLimitedUses() { + return maxUses > 0 + } + + void decrementUses() { + usesLeft-- + } + + boolean shouldBeRemoved() { + return hasLimitedUses() && usesLeft <= 0 + } + + boolean shouldUsesBeReset() { + return shouldBeRemoved() && cyclic + } + + void resetUses() { + setMaxUses(maxUses) + } } From 2cd84e3052c9a34ebf18fa245d39b32f6eb0b975 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2020 09:53:13 +0000 Subject: [PATCH 49/80] Bump httpclient from 4.3.5 to 4.3.6 Bumps httpclient from 4.3.5 to 4.3.6. Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6ddde3c..c8a8e9e 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ UTF-8 3.1 2.4.11 - 4.3.5 + 4.3.6 1.0-groovy-2.4 3.3.2 1.7.7 From aa3919dbd25390308d7d5a2e1988eab02bcbad56 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Mon, 10 Aug 2020 12:27:09 +0200 Subject: [PATCH 50/80] [maven-release-plugin] prepare release http-mock-server-2.7.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 14cab09..27e8b15 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.2-SNAPSHOT + 2.7.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index b0f6b04..22a12d7 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.2-SNAPSHOT + 2.7.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 55fbecc..afac34e 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.2-SNAPSHOT + 2.7.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index fab15f3..88302f4 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.2-SNAPSHOT + 2.7.0 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 6d058cb..807ab5a 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.6.2-SNAPSHOT + 2.7.0 4.0.0 diff --git a/pom.xml b/pom.xml index c8a8e9e..4c3cdca 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.6.2-SNAPSHOT + 2.7.0 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.7.0 From 769199f5d49d124d7fb11f0bf089441fb7a3e803 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Mon, 10 Aug 2020 12:27:17 +0200 Subject: [PATCH 51/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 27e8b15..833ac35 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.0 + 2.7.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 22a12d7..1306d75 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.0 + 2.7.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index afac34e..8fa4379 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.0 + 2.7.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 88302f4..411f356 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.0 + 2.7.1-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 807ab5a..8ba171e 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.0 + 2.7.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 4c3cdca..f57fc38 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.7.0 + 2.7.1-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.7.0 + HEAD From fe9ef89970d7c4031791c575f734bc3ebf54cf64 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Tue, 11 Aug 2020 12:53:35 +0200 Subject: [PATCH 52/80] Do not remove mock from history after max uses --- README.md | 2 +- .../touk/mockserver/tests/MockServerMaxUsesTest.groovy | 2 ++ .../pl/touk/mockserver/server/ContextExecutor.groovy | 8 +++----- .../main/groovy/pl/touk/mockserver/server/Mock.groovy | 9 +++------ 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7439888..042fc5d 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ Send POST request to localhost:/serverControl - schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator - imports - list of imports for closures (each import is separate tag); `alias` is the name of `fullClassName` available in closure; `fullClassName` must be available on classpath of mock server - https - HTTPS configuration -- maxUses - limit uses of mock to the specific number, after that mock is removed (any negative number means unlimited - default, cannot set value to 0) +- maxUses - limit uses of mock to the specific number, after that mock is marked as ignored (any negative number means unlimited - default, cannot set value to 0), after this number of invocation mock history is still available, but mock does not apply to any request - cyclic - should mock be added after `maxUses` uses at the end of the mock list (by default false) #### HTTPS configuration diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy index 08d2c12..9e05890 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy @@ -96,6 +96,8 @@ class MockServerMaxUsesTest extends Specification { CloseableHttpResponse response3 = client.execute(restPost) then:'no mock should be found' response3.statusLine.statusCode == 404 + and:'mock should exist' + remoteMockServer.listMocks().find { it.name == 'mock1' } != null } def 'should return two mocks in cyclic order'() { diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy index 7b31b22..57aa952 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy @@ -97,17 +97,15 @@ class ContextExecutor { private synchronized void handleMaxUses(Mock mock) { if (mock.hasLimitedUses()) { mock.decrementUses() - removeAndResetIfNeeded(mock) + resetIfNeeded(mock) log.debug("Uses left ${mock.usesLeft} of ${mock.maxUses} (is cyclic: ${mock.cyclic})") } } - private void removeAndResetIfNeeded(Mock mock) { - if (mock.shouldBeRemoved()) { - mocks.remove(mock) - } + private void resetIfNeeded(Mock mock) { if (mock.shouldUsesBeReset()) { mock.resetUses() + mocks.remove(mock) mocks.add(mock) } } 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 0a4fa42..434dd0f 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -59,7 +59,8 @@ class Mock implements Comparable { } boolean match(Method method, MockRequest request) { - return this.method == method && predicate(request) + boolean usesCondition = hasLimitedUses() ? usesLeft > 0 : true + return usesCondition && this.method == method && predicate(request) } MockResponse apply(MockRequest request) { @@ -188,12 +189,8 @@ class Mock implements Comparable { usesLeft-- } - boolean shouldBeRemoved() { - return hasLimitedUses() && usesLeft <= 0 - } - boolean shouldUsesBeReset() { - return shouldBeRemoved() && cyclic + return hasLimitedUses() && usesLeft <= 0 && cyclic } void resetUses() { From 531daa0fbe5700d3855a4b018d95c1b8cb310d7e Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Wed, 12 Aug 2020 07:30:14 +0200 Subject: [PATCH 53/80] [maven-release-plugin] prepare release http-mock-server-2.8.0 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 833ac35..4d023e6 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.1-SNAPSHOT + 2.8.0 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 1306d75..274139f 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.1-SNAPSHOT + 2.8.0 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 8fa4379..32cef51 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.1-SNAPSHOT + 2.8.0 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 411f356..f2f828d 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.1-SNAPSHOT + 2.8.0 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 8ba171e..50c9e6b 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.7.1-SNAPSHOT + 2.8.0 4.0.0 diff --git a/pom.xml b/pom.xml index f57fc38..a7c3307 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.7.1-SNAPSHOT + 2.8.0 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.8.0 From 6438c661da53d29c1d2b966284dbac1b8c6d1287 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Wed, 12 Aug 2020 07:30:23 +0200 Subject: [PATCH 54/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 4d023e6..818ecf0 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.0 + 2.8.1-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 274139f..48e8824 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.0 + 2.8.1-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 32cef51..3b85e8b 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.0 + 2.8.1-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index f2f828d..985da28 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.0 + 2.8.1-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 50c9e6b..5fd80cf 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.0 + 2.8.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index a7c3307..8f1b899 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.0 + 2.8.1-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.8.0 + HEAD From 170fb58c9946a96f39647cae4e114235fff084d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Bigorajski?= Date: Wed, 7 Oct 2020 13:25:07 +0200 Subject: [PATCH 55/80] Bump groovy version --- .gitignore | 1 + mockserver-client/pom.xml | 10 +++++++++- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 10 +++++++++- pom.xml | 16 +++++++++++++--- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 7f995f3..18e3da1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.iml target/ +.idea diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 48e8824..31f2353 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -15,7 +15,15 @@ org.codehaus.groovy - groovy-all + groovy + + + org.codehaus.groovy + groovy-json + + + org.codehaus.groovy + groovy-xml org.apache.httpcomponents diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 3b85e8b..1015716 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -16,7 +16,7 @@ org.codehaus.groovy - groovy-all + groovy org.spockframework diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 985da28..3a10008 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -12,7 +12,15 @@ org.codehaus.groovy - groovy-all + groovy + + + org.codehaus.groovy + groovy-json + + + org.codehaus.groovy + groovy-xml org.slf4j diff --git a/pom.xml b/pom.xml index 8f1b899..7a94c96 100644 --- a/pom.xml +++ b/pom.xml @@ -24,9 +24,9 @@ UTF-8 UTF-8 3.1 - 2.4.11 + 2.5.7 4.3.6 - 1.0-groovy-2.4 + 1.3-groovy-2.5 3.3.2 1.7.7 1.0.13 @@ -49,7 +49,17 @@ org.codehaus.groovy - groovy-all + groovy + ${groovy.version} + + + org.codehaus.groovy + groovy-json + ${groovy.version} + + + org.codehaus.groovy + groovy-xml ${groovy.version} From 6d52f8bcebda8b5c1e731fdc54d1515970f15baa Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Wed, 7 Oct 2020 14:44:38 +0200 Subject: [PATCH 56/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 818ecf0..ac5af8a 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.1-SNAPSHOT + 2.8.2-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 31f2353..d352432 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.1-SNAPSHOT + 2.8.2-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 1015716..d7b5020 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.1-SNAPSHOT + 2.8.2-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 3a10008..bad71fb 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.1-SNAPSHOT + 2.8.2-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 5fd80cf..b9250dc 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.1-SNAPSHOT + 2.8.2-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 7a94c96..0688576 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.1-SNAPSHOT + 2.8.2-SNAPSHOT mockserver-client mockserver From 8824634652cbca89765046f72039f63249acfe9e Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Wed, 7 Oct 2020 14:48:48 +0200 Subject: [PATCH 57/80] [maven-release-plugin] prepare release http-mock-server-2.8.2 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index ac5af8a..1529101 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2-SNAPSHOT + 2.8.2 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index d352432..69c73cc 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2-SNAPSHOT + 2.8.2 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index d7b5020..62f34ca 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2-SNAPSHOT + 2.8.2 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index bad71fb..b160013 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2-SNAPSHOT + 2.8.2 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index b9250dc..ee58976 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2-SNAPSHOT + 2.8.2 4.0.0 diff --git a/pom.xml b/pom.xml index 0688576..37f67e7 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.2-SNAPSHOT + 2.8.2 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.8.2 From db93a99b9aae3968cb8bda2991ee6b8aee69cf94 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Wed, 7 Oct 2020 14:48:56 +0200 Subject: [PATCH 58/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 1529101..ed644df 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2 + 2.8.3-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 69c73cc..54ac4be 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2 + 2.8.3-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 62f34ca..c9f2e44 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2 + 2.8.3-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index b160013..1e5230f 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2 + 2.8.3-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index ee58976..d0e4f87 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.2 + 2.8.3-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 37f67e7..f79af09 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.2 + 2.8.3-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.8.2 + HEAD From f8f2cfb125ec04965b8f9ffb27206552ec99e2d7 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Mon, 7 Jun 2021 20:39:08 +0200 Subject: [PATCH 59/80] Update logback --- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 4 ++++ pom.xml | 11 ++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index c9f2e44..53fbf93 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -28,7 +28,7 @@ ch.qos.logback - logback-classic + logback-core org.apache.httpcomponents diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 1e5230f..8cf7683 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -26,6 +26,10 @@ org.slf4j slf4j-api + + ch.qos.logback + logback-core + ch.qos.logback logback-classic diff --git a/pom.xml b/pom.xml index f79af09..4455e34 100644 --- a/pom.xml +++ b/pom.xml @@ -28,8 +28,8 @@ 4.3.6 1.3-groovy-2.5 3.3.2 - 1.7.7 - 1.0.13 + 1.7.30 + 1.2.3 1.16.6 true @@ -83,10 +83,15 @@ slf4j-api ${slf4j-api.version} + + ch.qos.logback + logback-core + ${logback.version} + ch.qos.logback logback-classic - ${logback-classic.version} + ${logback.version} org.projectlombok From 1a422fefca6bac137fcded1b8285801f963af44c Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Mon, 7 Jun 2021 21:01:56 +0200 Subject: [PATCH 60/80] Update httpclient --- .../pl/touk/mockserver/tests/MockServerIntegrationTest.groovy | 2 -- .../pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy | 1 - pom.xml | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) 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 e9f2d42..d0c3593 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 @@ -28,7 +28,6 @@ import pl.touk.mockserver.client.RemoteMockServer import pl.touk.mockserver.client.Util import pl.touk.mockserver.server.HttpMockServer import spock.lang.AutoCleanup -import spock.lang.Shared import spock.lang.Specification class MockServerIntegrationTest extends Specification { @@ -38,7 +37,6 @@ class MockServerIntegrationTest extends Specification { @AutoCleanup('stop') HttpMockServer httpMockServer - @Shared CloseableHttpClient client = HttpClients.createDefault() def setup() { diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy index 9e05890..fd21436 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy @@ -21,7 +21,6 @@ class MockServerMaxUsesTest extends Specification { @AutoCleanup('stop') HttpMockServer httpMockServer - @Shared CloseableHttpClient client = HttpClients.createDefault() def setup() { diff --git a/pom.xml b/pom.xml index f79af09..48ad9ae 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ UTF-8 3.1 2.5.7 - 4.3.6 + 4.5.13 1.3-groovy-2.5 3.3.2 1.7.7 From 23bba7e713097d68e49fde37ccde12b5de76b69b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Apr 2023 12:31:25 +0000 Subject: [PATCH 61/80] Bump logback-core from 1.2.3 to 1.2.9 Bumps logback-core from 1.2.3 to 1.2.9. --- updated-dependencies: - dependency-name: ch.qos.logback:logback-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f738d7..8db5787 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 1.3-groovy-2.5 3.3.2 1.7.30 - 1.2.3 + 1.2.9 1.16.6 true From ab6345234f7a1ee06a9ff0f68d72f924c417f248 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Sun, 28 May 2023 19:16:51 +0200 Subject: [PATCH 62/80] Setup maven wrapper --- .gitignore | 2 + .mvn/wrapper/maven-wrapper.properties | 18 ++ mvnw | 308 ++++++++++++++++++++++++++ mvnw.cmd | 205 +++++++++++++++++ 4 files changed, 533 insertions(+) create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100755 mvnw create mode 100644 mvnw.cmd diff --git a/.gitignore b/.gitignore index 18e3da1..8b71f67 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.iml target/ .idea + +.mvn/wrapper/maven-wrapper.jar \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..7d02699 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..8d937f4 --- /dev/null +++ b/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..f80fbad --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% From 8ba339b8a0d1ee120e97682956bf62f182f4bb40 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Sun, 28 May 2023 18:53:32 +0200 Subject: [PATCH 63/80] Setup github actions --- .github/workflows/build.yml | 14 ++++++++++++++ .travis.yml | 5 ----- .../mockserver/tests/MockServerHttpsTest.groovy | 2 ++ 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0ab96ff --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,14 @@ +name: Build mockserver +on: [push] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + java-version: '8' + distribution: 'temurin' + - name: Build with Maven + run: ./mvnw package \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 672c068..0000000 --- a/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: groovy - -jdk: - - openjdk8 - diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy index 8d6eff8..58c922e 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy +++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy @@ -15,6 +15,7 @@ import pl.touk.mockserver.client.RemoteMockServer import pl.touk.mockserver.client.Util import pl.touk.mockserver.server.HttpMockServer import spock.lang.AutoCleanup +import spock.lang.Ignore import spock.lang.Shared import spock.lang.Specification @@ -22,6 +23,7 @@ import javax.net.ssl.SSLContext import javax.net.ssl.SSLHandshakeException import java.security.KeyStore +@Ignore('Upgrade of Java needed') class MockServerHttpsTest extends Specification { RemoteMockServer remoteMockServer = new RemoteMockServer('localhost', 19000) From 374947847dd1a45995e842ac49d42288e0774e48 Mon Sep 17 00:00:00 2001 From: Piotr Fus Date: Sun, 28 May 2023 18:46:16 +0200 Subject: [PATCH 64/80] Handle any method as mock request method --- README.md | 2 +- .../xsd/pl/touk/mockserver/api/common.xsd | 1 + .../tests/MockServerIntegrationTest.groovy | 26 +++++++++++++++++++ .../pl/touk/mockserver/server/Mock.groovy | 2 +- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 042fc5d..a8336d3 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ Send POST request to localhost:/serverControl - response - groovy closure as string which must evaluate to string which will be response of mock when predicate is satisfied, optional, default { _ -> '' } - soap - true or false, is request and response should be wrapped in soap Envelope and Body elements, default false - statusCode - integer, status code of response when predicate is satisfied, default 200 -- method - POST|PUT|DELETE|GET|TRACE|OPTION|HEAD, expected http method of request, default POST +- method - POST|PUT|DELETE|GET|TRACE|OPTION|HEAD|ANY_METHOD, expected http method of request, default `POST`, `ANY_METHOD` matches all HTTP methods - responseHeaders - groovyClosure as string which must evaluate to Map which will be added to response headers, default { _ -> \[:] } - schema - path to xsd schema file on mockserver classpath; default empty, so no vallidation of request is performed; if validation fails then response has got status 400 and response is raw message from validator - imports - list of imports for closures (each import is separate tag); `alias` is the name of `fullClassName` available in closure; `fullClassName` must be available on classpath of mock server diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd index 673be7d..4b084dd 100644 --- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd +++ b/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd @@ -11,6 +11,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 d0c3593..1ab1dad 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 @@ -1152,4 +1152,30 @@ class MockServerIntegrationTest extends Specification { 'test/other' | 'test/other' '/test/other' | 'test/other' } + + def 'should match any method'() { + given: + String name = "testRest-${UUID.randomUUID().toString()}" + remoteMockServer.addMock(new AddMock( + name: name, + path: 'any-method', + port: 9999, + statusCode: 201, + soap: false, + method: Method.ANY_METHOD + )) + when: + CloseableHttpResponse response = client.execute(req) + then: + response.statusLine.statusCode == 201 + Util.consumeResponse(response) + cleanup: + remoteMockServer.removeMock(name) + where: + req << [ + new HttpGet('http://localhost:9999/any-method'), + new HttpPost('http://localhost:9999/any-method'), + new HttpPatch('http://localhost:9999/any-method') + ] + } } 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 434dd0f..3f0f4fe 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy @@ -60,7 +60,7 @@ class Mock implements Comparable { boolean match(Method method, MockRequest request) { boolean usesCondition = hasLimitedUses() ? usesLeft > 0 : true - return usesCondition && this.method == method && predicate(request) + return usesCondition && (this.method == method || this.method == Method.ANY_METHOD) && predicate(request) } MockResponse apply(MockRequest request) { From a825ad6fa21815a841da8fb391441777f6016116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Bigorajski?= Date: Thu, 1 Jun 2023 11:11:53 +0200 Subject: [PATCH 65/80] [maven-release-plugin] prepare release http-mock-server-2.8.3 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index ed644df..820140f 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3-SNAPSHOT + 2.8.3 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 54ac4be..d8c62f5 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3-SNAPSHOT + 2.8.3 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 53fbf93..4654440 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3-SNAPSHOT + 2.8.3 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 8cf7683..ddd8208 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3-SNAPSHOT + 2.8.3 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index d0e4f87..c3b5fef 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3-SNAPSHOT + 2.8.3 4.0.0 diff --git a/pom.xml b/pom.xml index 8db5787..7e2ab12 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.3-SNAPSHOT + 2.8.3 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.8.3 From 3413bfa0adf857815e7ae6b84a40c1297f68b386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Bigorajski?= Date: Thu, 1 Jun 2023 11:11:57 +0200 Subject: [PATCH 66/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 820140f..3984007 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3 + 2.8.4-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index d8c62f5..d9e8999 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3 + 2.8.4-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 4654440..cfbe1ff 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3 + 2.8.4-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index ddd8208..5e379d7 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3 + 2.8.4-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index c3b5fef..5c5c2cf 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.3 + 2.8.4-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 7e2ab12..9e4a08f 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.3 + 2.8.4-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.8.3 + HEAD From e44c1de1a2901b4005e05e764cb825e215437d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Bigorajski?= Date: Thu, 1 Jun 2023 17:51:30 +0200 Subject: [PATCH 67/80] [maven-release-plugin] prepare release http-mock-server-2.8.4 --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 3984007..47ee838 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4-SNAPSHOT + 2.8.4 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index d9e8999..0cef548 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4-SNAPSHOT + 2.8.4 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index cfbe1ff..87a06b0 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4-SNAPSHOT + 2.8.4 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 5e379d7..28d4ca1 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4-SNAPSHOT + 2.8.4 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 5c5c2cf..c9730a5 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4-SNAPSHOT + 2.8.4 4.0.0 diff --git a/pom.xml b/pom.xml index 9e4a08f..360fdec 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.4-SNAPSHOT + 2.8.4 mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - HEAD + http-mock-server-2.8.4 From a3a7c4f8dc92eb996cb22387b12c19571919cada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Bigorajski?= Date: Thu, 1 Jun 2023 17:51:38 +0200 Subject: [PATCH 68/80] [maven-release-plugin] prepare for next development iteration --- mockserver-api/pom.xml | 2 +- mockserver-client/pom.xml | 2 +- mockserver-tests/pom.xml | 2 +- mockserver/pom.xml | 2 +- performance-tests/pom.xml | 2 +- pom.xml | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 47ee838..c48fbca 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4 + 2.8.5-SNAPSHOT 4.0.0 diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 0cef548..fb10031 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4 + 2.8.5-SNAPSHOT 4.0.0 diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 87a06b0..afcfe3c 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4 + 2.8.5-SNAPSHOT 4.0.0 diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 28d4ca1..25e8617 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4 + 2.8.5-SNAPSHOT 4.0.0 diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index c9730a5..4655442 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -3,7 +3,7 @@ http-mock-server pl.touk.mockserver - 2.8.4 + 2.8.5-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 360fdec..fa70e25 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ pl.touk.mockserver http-mock-server pom - 2.8.4 + 2.8.5-SNAPSHOT mockserver-client mockserver @@ -42,7 +42,7 @@ scm:git:git@github.com:TouK/http-mock-server.git scm:git:git@github.com:TouK/http-mock-server.git - http-mock-server-2.8.4 + HEAD From f9ae4a8003f4c9c74bf5bd95ed8a261bcf376839 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 22:06:34 +0000 Subject: [PATCH 69/80] Bump ch.qos.logback:logback-core from 1.2.9 to 1.3.12 Bumps [ch.qos.logback:logback-core](https://github.com/qos-ch/logback) from 1.2.9 to 1.3.12. - [Commits](https://github.com/qos-ch/logback/compare/v_1.2.9...v_1.3.12) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fa70e25..c35c484 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 1.3-groovy-2.5 3.3.2 1.7.30 - 1.2.9 + 1.3.12 1.16.6 true From 36bc5dd14b831392c83aa17b670f06d51601d418 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 22 Feb 2024 22:42:33 +0100 Subject: [PATCH 70/80] Rebranding --- .mvn/wrapper/maven-wrapper.properties | 2 +- Dockerfile | 2 +- README.md | 24 ++++++------ mockserver-api/pom.xml | 4 +- .../ztsh}/mockserver/api/common.xsd | 2 +- .../ztsh}/mockserver/api/request.xsd | 4 +- .../ztsh}/mockserver/api/response.xsd | 4 +- mockserver-client/pom.xml | 6 +-- .../client/InvalidMockDefinition.groovy | 2 +- .../client/InvalidMockRequestSchema.groovy | 2 +- .../client/MockAlreadyExists.groovy | 2 +- .../mockserver/client/MockDoesNotExist.groovy | 2 +- .../mockserver/client/RemoteMockServer.groovy | 20 +++++----- .../ztsh}/mockserver/client/Util.groovy | 8 ++-- mockserver-tests/pom.xml | 8 ++-- .../tests/MockServerHttpsTest.groovy | 12 +++--- .../tests/MockServerIntegrationTest.groovy | 26 ++++++------- .../tests/MockServerMaxUsesTest.groovy | 9 ++--- mockserver/pom.xml | 8 ++-- .../mockserver/server/ContextExecutor.groovy | 4 +- .../mockserver/server/HttpMockServer.groovy | 38 +++++++++---------- .../server/HttpServerWrapper.groovy | 4 +- .../mockserver/server/HttpsConfig.groovy | 4 +- .../ztsh}/mockserver/server/Main.groovy | 2 +- .../ztsh}/mockserver/server/Mock.groovy | 6 +-- .../ztsh}/mockserver/server/MockEvent.groovy | 2 +- .../mockserver/server/MockRequest.groovy | 2 +- .../mockserver/server/MockResponse.groovy | 2 +- .../ztsh}/mockserver/server/Util.groovy | 4 +- performance-tests/pom.xml | 8 ++-- .../mockserver/client/MockserverTest.java | 6 +-- pom.xml | 37 +++--------------- 32 files changed, 120 insertions(+), 146 deletions(-) rename mockserver-api/src/main/xsd/{pl/touk => eu/ztsh}/mockserver/api/common.xsd (95%) rename mockserver-api/src/main/xsd/{pl/touk => eu/ztsh}/mockserver/api/request.xsd (90%) rename mockserver-api/src/main/xsd/{pl/touk => eu/ztsh}/mockserver/api/response.xsd (95%) rename mockserver-client/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/client/InvalidMockDefinition.groovy (86%) rename mockserver-client/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/client/InvalidMockRequestSchema.groovy (82%) rename mockserver-client/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/client/MockAlreadyExists.groovy (82%) rename mockserver-client/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/client/MockDoesNotExist.groovy (82%) rename mockserver-client/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/client/RemoteMockServer.groovy (86%) rename mockserver-client/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/client/Util.groovy (92%) rename mockserver-tests/src/test/groovy/{pl/touk => eu/ztsh}/mockserver/tests/MockServerHttpsTest.groovy (95%) rename mockserver-tests/src/test/groovy/{pl/touk => eu/ztsh}/mockserver/tests/MockServerIntegrationTest.groovy (98%) rename mockserver-tests/src/test/groovy/{pl/touk => eu/ztsh}/mockserver/tests/MockServerMaxUsesTest.groovy (98%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/ContextExecutor.groovy (97%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/HttpMockServer.groovy (91%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/HttpServerWrapper.groovy (97%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/HttpsConfig.groovy (91%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/Main.groovy (96%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/Mock.groovy (98%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/MockEvent.groovy (88%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/MockRequest.groovy (98%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/MockResponse.groovy (90%) rename mockserver/src/main/groovy/{pl/touk => eu/ztsh}/mockserver/server/Util.groovy (92%) rename performance-tests/src/test/java/{pl/touk => eu/ztsh}/mockserver/client/MockserverTest.java (95%) diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 7d02699..f3283b0 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -14,5 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/Dockerfile b/Dockerfile index 87dd9dd..6ea2981 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,4 +8,4 @@ RUN mkdir /externalSchema VOLUME /externalSchema -CMD java -cp /mockserver.jar:/externalSchema pl.touk.mockserver.server.Main +CMD java -cp /mockserver.jar:/externalSchema eu.ztsh.mockserver.server.Main diff --git a/README.md b/README.md index a8336d3..6869c93 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ remoteMockServer.addMock(new AddMock( Send POST request to localhost:/serverControl ```xml - + ... ... ... @@ -200,13 +200,13 @@ In closures input parameter (called req) contains properties: Response if success: ```xml - + ``` Response with error message if failure: ```xml -... +... ``` Peek mock @@ -225,7 +225,7 @@ List mockEvents = remoteMockServer.peekMock('...') Send POST request to localhost:/serverControl ```xml - + ... ``` @@ -233,7 +233,7 @@ Send POST request to localhost:/serverControl Response if success: ```xml - + ... @@ -265,7 +265,7 @@ Response if success: Response with error message if failure: ```xml -... +... ``` Remove mock @@ -284,7 +284,7 @@ List mockEvents = remoteMockServer.removeMock('...', ...) Send POST request to localhost:/serverControl ```xml - + ... ... @@ -293,7 +293,7 @@ Send POST request to localhost:/serverControl Response if success (and skipReport not given or equal false): ```xml - + ... @@ -325,13 +325,13 @@ Response if success (and skipReport not given or equal false): If skipReport is set to true then response will be: ```xml - + ``` Response with error message if failure: ```xml -... +... ``` List mocks definitions @@ -425,7 +425,7 @@ This response could be saved to file and passed as it is during mock server crea Remote repository ----------------- -Mockserver is available at `philanthropist.touk.pl`. +Mockserver is available at `philanthropist.ztsh.eu`. Just add repository to maven pom: @@ -436,7 +436,7 @@ Just add repository to maven pom: ... touk - https://philanthropist.touk.pl/nexus/content/repositories/releases + https://philanthropist.ztsh.eu/nexus/content/repositories/releases ... diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index c48fbca..3b26bf1 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -2,8 +2,8 @@ http-mock-server - pl.touk.mockserver - 2.8.5-SNAPSHOT + eu.ztsh.mockserver + 3.0.0-SNAPSHOT 4.0.0 diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd b/mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/common.xsd similarity index 95% rename from mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd rename to mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/common.xsd index 4b084dd..6dac2a9 100644 --- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/common.xsd +++ b/mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/common.xsd @@ -1,5 +1,5 @@ - + diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd b/mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/request.xsd similarity index 90% rename from mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd rename to mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/request.xsd index 25287c8..891aebf 100644 --- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/request.xsd +++ b/mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/request.xsd @@ -1,7 +1,7 @@ - + - + diff --git a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd b/mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/response.xsd similarity index 95% rename from mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd rename to mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/response.xsd index 1f96dc8..66d4566 100644 --- a/mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd +++ b/mockserver-api/src/main/xsd/eu/ztsh/mockserver/api/response.xsd @@ -1,7 +1,7 @@ - + - + diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index fb10031..ac9bac3 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -2,8 +2,8 @@ http-mock-server - pl.touk.mockserver - 2.8.5-SNAPSHOT + eu.ztsh.mockserver + 3.0.0-SNAPSHOT 4.0.0 @@ -34,7 +34,7 @@ commons-lang3 - pl.touk.mockserver + eu.ztsh.mockserver mockserver-api diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockDefinition.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/InvalidMockDefinition.groovy similarity index 86% rename from mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockDefinition.groovy rename to mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/InvalidMockDefinition.groovy index f95b584..a39ef77 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockDefinition.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/InvalidMockDefinition.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client +package eu.ztsh.mockserver.client import groovy.transform.CompileStatic import groovy.transform.TypeChecked diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/InvalidMockRequestSchema.groovy similarity index 82% rename from mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy rename to mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/InvalidMockRequestSchema.groovy index ff3d401..b1de96f 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/InvalidMockRequestSchema.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/InvalidMockRequestSchema.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client +package eu.ztsh.mockserver.client import groovy.transform.CompileStatic import groovy.transform.TypeChecked diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/MockAlreadyExists.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/MockAlreadyExists.groovy similarity index 82% rename from mockserver-client/src/main/groovy/pl/touk/mockserver/client/MockAlreadyExists.groovy rename to mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/MockAlreadyExists.groovy index f0c00a9..40d5dce 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/MockAlreadyExists.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/MockAlreadyExists.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client +package eu.ztsh.mockserver.client import groovy.transform.CompileStatic import groovy.transform.TypeChecked diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/MockDoesNotExist.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/MockDoesNotExist.groovy similarity index 82% rename from mockserver-client/src/main/groovy/pl/touk/mockserver/client/MockDoesNotExist.groovy rename to mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/MockDoesNotExist.groovy index 02d0bee..fe93dc0 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/MockDoesNotExist.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/MockDoesNotExist.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client +package eu.ztsh.mockserver.client import groovy.transform.CompileStatic import groovy.transform.TypeChecked diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy similarity index 86% rename from mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy rename to mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy index 91ebc33..8439124 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/RemoteMockServer.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client +package eu.ztsh.mockserver.client import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.HttpGet @@ -7,15 +7,15 @@ 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 pl.touk.mockserver.api.request.AddMock -import pl.touk.mockserver.api.request.MockServerRequest -import pl.touk.mockserver.api.request.PeekMock -import pl.touk.mockserver.api.request.RemoveMock -import pl.touk.mockserver.api.response.MockEventReport -import pl.touk.mockserver.api.response.MockPeeked -import pl.touk.mockserver.api.response.MockRemoved -import pl.touk.mockserver.api.response.MockReport -import pl.touk.mockserver.api.response.Mocks +import eu.ztsh.mockserver.api.request.AddMock +import eu.ztsh.mockserver.api.request.MockServerRequest +import eu.ztsh.mockserver.api.request.PeekMock +import eu.ztsh.mockserver.api.request.RemoveMock +import eu.ztsh.mockserver.api.response.MockEventReport +import eu.ztsh.mockserver.api.response.MockPeeked +import eu.ztsh.mockserver.api.response.MockRemoved +import eu.ztsh.mockserver.api.response.MockReport +import eu.ztsh.mockserver.api.response.Mocks import javax.xml.bind.JAXBContext diff --git a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy similarity index 92% rename from mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy rename to mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy index 3a427d6..167cb3b 100644 --- a/mockserver-client/src/main/groovy/pl/touk/mockserver/client/Util.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client +package eu.ztsh.mockserver.client import groovy.json.JsonSlurper import groovy.transform.CompileStatic @@ -7,9 +7,9 @@ import groovy.util.slurpersupport.GPathResult import org.apache.http.HttpEntity import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.util.EntityUtils -import pl.touk.mockserver.api.response.ExceptionOccured -import pl.touk.mockserver.api.response.MockAdded -import pl.touk.mockserver.api.response.MockServerResponse +import eu.ztsh.mockserver.api.response.ExceptionOccured +import eu.ztsh.mockserver.api.response.MockAdded +import eu.ztsh.mockserver.api.response.MockServerResponse import javax.xml.bind.JAXBContext diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index afcfe3c..6adec6e 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -2,8 +2,8 @@ http-mock-server - pl.touk.mockserver - 2.8.5-SNAPSHOT + eu.ztsh.mockserver + 3.0.0-SNAPSHOT 4.0.0 @@ -35,12 +35,12 @@ httpclient - pl.touk.mockserver + eu.ztsh.mockserver mockserver ${project.version} - pl.touk.mockserver + eu.ztsh.mockserver mockserver-client ${project.version} diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy similarity index 95% rename from mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy rename to mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy index 58c922e..c83ed6c 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerHttpsTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.tests +package eu.ztsh.mockserver.tests import groovy.util.slurpersupport.GPathResult import org.apache.http.client.methods.CloseableHttpResponse @@ -9,11 +9,11 @@ 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 pl.touk.mockserver.api.common.Https -import pl.touk.mockserver.api.request.AddMock -import pl.touk.mockserver.client.RemoteMockServer -import pl.touk.mockserver.client.Util -import pl.touk.mockserver.server.HttpMockServer +import eu.ztsh.mockserver.api.common.Https +import eu.ztsh.mockserver.api.request.AddMock +import eu.ztsh.mockserver.client.RemoteMockServer +import eu.ztsh.mockserver.client.Util +import eu.ztsh.mockserver.server.HttpMockServer import spock.lang.AutoCleanup import spock.lang.Ignore import spock.lang.Shared diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy similarity index 98% rename from mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy rename to mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy index 1ab1dad..fc88b53 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.tests +package eu.ztsh.mockserver.tests import groovy.util.slurpersupport.GPathResult import org.apache.http.client.methods.CloseableHttpResponse @@ -15,18 +15,18 @@ 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.api.common.ImportAlias -import pl.touk.mockserver.api.common.Method -import pl.touk.mockserver.api.request.AddMock -import pl.touk.mockserver.api.response.MockEventReport -import pl.touk.mockserver.api.response.MockReport -import pl.touk.mockserver.client.InvalidMockDefinition -import pl.touk.mockserver.client.InvalidMockRequestSchema -import pl.touk.mockserver.client.MockAlreadyExists -import pl.touk.mockserver.client.MockDoesNotExist -import pl.touk.mockserver.client.RemoteMockServer -import pl.touk.mockserver.client.Util -import pl.touk.mockserver.server.HttpMockServer +import eu.ztsh.mockserver.api.common.ImportAlias +import eu.ztsh.mockserver.api.common.Method +import eu.ztsh.mockserver.api.request.AddMock +import eu.ztsh.mockserver.api.response.MockEventReport +import eu.ztsh.mockserver.api.response.MockReport +import eu.ztsh.mockserver.client.InvalidMockDefinition +import eu.ztsh.mockserver.client.InvalidMockRequestSchema +import eu.ztsh.mockserver.client.MockAlreadyExists +import eu.ztsh.mockserver.client.MockDoesNotExist +import eu.ztsh.mockserver.client.RemoteMockServer +import eu.ztsh.mockserver.client.Util +import eu.ztsh.mockserver.server.HttpMockServer import spock.lang.AutoCleanup import spock.lang.Specification diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerMaxUsesTest.groovy similarity index 98% rename from mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy rename to mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerMaxUsesTest.groovy index fd21436..eda365c 100644 --- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerMaxUsesTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerMaxUsesTest.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.tests +package eu.ztsh.mockserver.tests import org.apache.http.client.methods.CloseableHttpResponse @@ -7,11 +7,10 @@ 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 pl.touk.mockserver.api.request.AddMock -import pl.touk.mockserver.client.RemoteMockServer -import pl.touk.mockserver.server.HttpMockServer +import eu.ztsh.mockserver.api.request.AddMock +import eu.ztsh.mockserver.client.RemoteMockServer +import eu.ztsh.mockserver.server.HttpMockServer import spock.lang.AutoCleanup -import spock.lang.Shared import spock.lang.Specification class MockServerMaxUsesTest extends Specification { diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 25e8617..750d7d6 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -2,8 +2,8 @@ http-mock-server - pl.touk.mockserver - 2.8.5-SNAPSHOT + eu.ztsh.mockserver + 3.0.0-SNAPSHOT 4.0.0 @@ -39,7 +39,7 @@ commons-lang3 - pl.touk.mockserver + eu.ztsh.mockserver mockserver-api @@ -52,7 +52,7 @@ - pl.touk.mockserver.server.Main + eu.ztsh.mockserver.server.Main diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/ContextExecutor.groovy similarity index 97% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/ContextExecutor.groovy index 57aa952..6023a1c 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/ContextExecutor.groovy @@ -1,9 +1,9 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import com.sun.net.httpserver.HttpExchange import groovy.transform.PackageScope import groovy.util.logging.Slf4j -import pl.touk.mockserver.api.common.Method +import eu.ztsh.mockserver.api.common.Method import java.util.concurrent.CopyOnWriteArrayList diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy similarity index 91% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy index f0352ae..88c15ce 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy @@ -1,24 +1,24 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import com.sun.net.httpserver.HttpExchange import groovy.util.logging.Slf4j -import pl.touk.mockserver.api.common.Https -import pl.touk.mockserver.api.common.ImportAlias -import pl.touk.mockserver.api.common.Method -import pl.touk.mockserver.api.request.AddMock -import pl.touk.mockserver.api.request.MockServerRequest -import pl.touk.mockserver.api.request.PeekMock -import pl.touk.mockserver.api.request.RemoveMock -import pl.touk.mockserver.api.response.ExceptionOccured -import pl.touk.mockserver.api.response.MockAdded -import pl.touk.mockserver.api.response.MockEventReport -import pl.touk.mockserver.api.response.MockPeeked -import pl.touk.mockserver.api.response.MockRemoved -import pl.touk.mockserver.api.response.MockReport -import pl.touk.mockserver.api.response.MockRequestReport -import pl.touk.mockserver.api.response.MockResponseReport -import pl.touk.mockserver.api.response.Mocks -import pl.touk.mockserver.api.response.Parameter +import eu.ztsh.mockserver.api.common.Https +import eu.ztsh.mockserver.api.common.ImportAlias +import eu.ztsh.mockserver.api.common.Method +import eu.ztsh.mockserver.api.request.AddMock +import eu.ztsh.mockserver.api.request.MockServerRequest +import eu.ztsh.mockserver.api.request.PeekMock +import eu.ztsh.mockserver.api.request.RemoveMock +import eu.ztsh.mockserver.api.response.ExceptionOccured +import eu.ztsh.mockserver.api.response.MockAdded +import eu.ztsh.mockserver.api.response.MockEventReport +import eu.ztsh.mockserver.api.response.MockPeeked +import eu.ztsh.mockserver.api.response.MockRemoved +import eu.ztsh.mockserver.api.response.MockReport +import eu.ztsh.mockserver.api.response.MockRequestReport +import eu.ztsh.mockserver.api.response.MockResponseReport +import eu.ztsh.mockserver.api.response.Mocks +import eu.ztsh.mockserver.api.response.Parameter import javax.xml.bind.JAXBContext import java.util.concurrent.ConcurrentHashMap @@ -26,7 +26,7 @@ import java.util.concurrent.CopyOnWriteArraySet import java.util.concurrent.Executor import java.util.concurrent.Executors -import static pl.touk.mockserver.server.Util.createResponse +import static eu.ztsh.mockserver.server.Util.createResponse @Slf4j class HttpMockServer { diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpServerWrapper.groovy similarity index 97% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpServerWrapper.groovy index c9e63e9..5d33156 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWrapper.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpServerWrapper.groovy @@ -1,11 +1,11 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import com.sun.net.httpserver.HttpHandler import com.sun.net.httpserver.HttpServer import com.sun.net.httpserver.HttpsServer import groovy.transform.PackageScope import groovy.util.logging.Slf4j -import pl.touk.mockserver.api.common.Https +import eu.ztsh.mockserver.api.common.Https import javax.net.ssl.KeyManager import javax.net.ssl.KeyManagerFactory diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpsConfig.groovy similarity index 91% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpsConfig.groovy index 68b5550..9d00714 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpsConfig.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpsConfig.groovy @@ -1,9 +1,9 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import com.sun.net.httpserver.HttpsConfigurator import com.sun.net.httpserver.HttpsParameters import groovy.transform.CompileStatic -import pl.touk.mockserver.api.common.Https +import eu.ztsh.mockserver.api.common.Https import javax.net.ssl.SSLContext import javax.net.ssl.SSLParameters diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Main.groovy similarity index 96% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/Main.groovy index 0b8d42a..916569e 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Main.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Main.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import groovy.util.logging.Slf4j diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Mock.groovy similarity index 98% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/Mock.groovy index 3f0f4fe..821471c 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Mock.groovy @@ -1,12 +1,12 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import groovy.transform.EqualsAndHashCode import groovy.transform.PackageScope import groovy.util.logging.Slf4j import org.codehaus.groovy.control.CompilerConfiguration import org.codehaus.groovy.control.customizers.ImportCustomizer -import pl.touk.mockserver.api.common.Https -import pl.touk.mockserver.api.common.Method +import eu.ztsh.mockserver.api.common.Https +import eu.ztsh.mockserver.api.common.Method import javax.xml.XMLConstants import javax.xml.transform.stream.StreamSource diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockEvent.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockEvent.groovy similarity index 88% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/MockEvent.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockEvent.groovy index 97a46a2..9c429f1 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockEvent.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockEvent.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import groovy.transform.PackageScope diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy similarity index 98% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy index 3657131..4d9fca0 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import com.sun.net.httpserver.Headers import groovy.json.JsonSlurper diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockResponse.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockResponse.groovy similarity index 90% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/MockResponse.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockResponse.groovy index 913f9f3..260acce 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockResponse.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockResponse.groovy @@ -1,4 +1,4 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import groovy.transform.PackageScope diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Util.groovy similarity index 92% rename from mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy rename to mockserver/src/main/groovy/eu/ztsh/mockserver/server/Util.groovy index 3864afa..6e72916 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Util.groovy @@ -1,7 +1,7 @@ -package pl.touk.mockserver.server +package eu.ztsh.mockserver.server import com.sun.net.httpserver.HttpExchange -import pl.touk.mockserver.api.response.MockAdded +import eu.ztsh.mockserver.api.response.MockAdded import javax.xml.bind.JAXBContext diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index 4655442..a16e4e6 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -2,8 +2,8 @@ http-mock-server - pl.touk.mockserver - 2.8.5-SNAPSHOT + eu.ztsh.mockserver + 3.0.0-SNAPSHOT 4.0.0 @@ -11,12 +11,12 @@ - pl.touk.mockserver + eu.ztsh.mockserver mockserver ${project.version} - pl.touk.mockserver + eu.ztsh.mockserver mockserver-client ${project.version} diff --git a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java b/performance-tests/src/test/java/eu/ztsh/mockserver/client/MockserverTest.java similarity index 95% rename from performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java rename to performance-tests/src/test/java/eu/ztsh/mockserver/client/MockserverTest.java index 233a5f7..2a3b943 100644 --- a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java +++ b/performance-tests/src/test/java/eu/ztsh/mockserver/client/MockserverTest.java @@ -1,4 +1,4 @@ -package pl.touk.mockserver.client; +package eu.ztsh.mockserver.client; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.CloseableHttpResponse; @@ -18,8 +18,8 @@ import org.openjdk.jmh.annotations.TearDown; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.infra.ThreadParams; -import pl.touk.mockserver.api.request.AddMock; -import pl.touk.mockserver.server.HttpMockServer; +import eu.ztsh.mockserver.api.request.AddMock; +import eu.ztsh.mockserver.server.HttpMockServer; import java.io.IOException; import java.util.concurrent.TimeUnit; diff --git a/pom.xml b/pom.xml index c35c484..0847141 100644 --- a/pom.xml +++ b/pom.xml @@ -1,17 +1,13 @@ - + 4.0.0 - - pl.touk - top - 1.0.7 - - - pl.touk.mockserver + eu.ztsh.mockserver http-mock-server pom - 2.8.5-SNAPSHOT + 3.0.0-SNAPSHOT + mockserver-client mockserver @@ -39,12 +35,6 @@ 0.5.1 - - scm:git:git@github.com:TouK/http-mock-server.git - scm:git:git@github.com:TouK/http-mock-server.git - HEAD - - @@ -99,7 +89,7 @@ ${lombok.version} - pl.touk.mockserver + eu.ztsh.mockserver mockserver-api ${project.version} @@ -159,19 +149,4 @@ - - - Dominik Przybysz - alien11689@gmail.com - - - - - - touk - TouK Open source repository - https://philanthropist.touk.pl/nexus/content/repositories/releases - - - From 2fe3f2a67d30e9828c26042dc7a1dc109591cac2 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 22 Feb 2024 22:44:02 +0100 Subject: [PATCH 71/80] chore: Readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6869c93..cb67c96 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ docker-compose up -d ### Docker repoository -Built image is available at https://hub.docker.com/r/alien11689/mockserver/ +Currently unavailable Create mock on server --------------------- From 514064debc27b4b9776941249f256855eec40bd2 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 22 Feb 2024 22:48:02 +0100 Subject: [PATCH 72/80] feat!: Jakarta & JDK11 --- mockserver-api/pom.xml | 22 ++-- mockserver-api/src/main/xjb/binding.xjb | 19 ++- mockserver-client/pom.xml | 31 +++-- .../mockserver/client/RemoteMockServer.groovy | 2 +- .../eu/ztsh/mockserver/client/Util.groovy | 2 +- mockserver-tests/pom.xml | 53 ++++---- mockserver/pom.xml | 48 +++++--- .../mockserver/server/HttpMockServer.groovy | 84 ++++++------- .../eu/ztsh/mockserver/server/Util.groovy | 2 +- performance-tests/pom.xml | 8 +- pom.xml | 115 +++++++++--------- 11 files changed, 206 insertions(+), 180 deletions(-) diff --git a/mockserver-api/pom.xml b/mockserver-api/pom.xml index 3b26bf1..de5029a 100644 --- a/mockserver-api/pom.xml +++ b/mockserver-api/pom.xml @@ -1,15 +1,21 @@ - + + 4.0.0 + - http-mock-server eu.ztsh.mockserver + http-mock-server 3.0.0-SNAPSHOT - 4.0.0 mockserver-api + + jakarta.xml.bind + jakarta.xml.bind-api + org.projectlombok lombok @@ -18,19 +24,9 @@ - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 1.8 - 1.8 - - org.codehaus.mojo jaxb2-maven-plugin - 2.2 xjc diff --git a/mockserver-api/src/main/xjb/binding.xjb b/mockserver-api/src/main/xjb/binding.xjb index a735d24..fdf2585 100644 --- a/mockserver-api/src/main/xjb/binding.xjb +++ b/mockserver-api/src/main/xjb/binding.xjb @@ -1,10 +1,9 @@ - - - - - - - - \ No newline at end of file + + + + + + + diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index ac9bac3..223178e 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -1,18 +1,22 @@ - + + 4.0.0 + - http-mock-server eu.ztsh.mockserver + http-mock-server 3.0.0-SNAPSHOT - 4.0.0 mockserver-client - - clean install - + + eu.ztsh.mockserver + mockserver-api + + org.codehaus.groovy groovy @@ -25,6 +29,7 @@ org.codehaus.groovy groovy-xml + org.apache.httpcomponents httpclient @@ -33,9 +38,15 @@ org.apache.commons commons-lang3 - - eu.ztsh.mockserver - mockserver-api - + + + + + org.codehaus.gmavenplus + gmavenplus-plugin + + + + diff --git a/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy index 8439124..f594614 100644 --- a/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/RemoteMockServer.groovy @@ -17,7 +17,7 @@ import eu.ztsh.mockserver.api.response.MockRemoved import eu.ztsh.mockserver.api.response.MockReport import eu.ztsh.mockserver.api.response.Mocks -import javax.xml.bind.JAXBContext +import jakarta.xml.bind.JAXBContext class RemoteMockServer { private final String address diff --git a/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy index 167cb3b..0583484 100644 --- a/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy @@ -11,7 +11,7 @@ import eu.ztsh.mockserver.api.response.ExceptionOccured import eu.ztsh.mockserver.api.response.MockAdded import eu.ztsh.mockserver.api.response.MockServerResponse -import javax.xml.bind.JAXBContext +import jakarta.xml.bind.JAXBContext @CompileStatic @TypeChecked diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 6adec6e..9f3cc41 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -1,27 +1,36 @@ - + + 4.0.0 + http-mock-server eu.ztsh.mockserver 3.0.0-SNAPSHOT - 4.0.0 mockserver-tests - - clean install - - + + eu.ztsh.mockserver + mockserver + + + eu.ztsh.mockserver + mockserver-client + + org.codehaus.groovy groovy + - org.spockframework - spock-core + org.apache.httpcomponents + httpclient + org.slf4j slf4j-api @@ -30,24 +39,20 @@ ch.qos.logback logback-core + - org.apache.httpcomponents - httpclient - - - eu.ztsh.mockserver - mockserver - ${project.version} - - - eu.ztsh.mockserver - mockserver-client - ${project.version} - - - info.solidsoft.spock - spock-global-unroll + org.spockframework + spock-core + + + + org.codehaus.gmavenplus + gmavenplus-plugin + + + + diff --git a/mockserver/pom.xml b/mockserver/pom.xml index 750d7d6..c1bf76c 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -1,15 +1,22 @@ - + + 4.0.0 + - http-mock-server eu.ztsh.mockserver + http-mock-server 3.0.0-SNAPSHOT - 4.0.0 mockserver + + eu.ztsh.mockserver + mockserver-api + + org.codehaus.groovy groovy @@ -22,6 +29,12 @@ org.codehaus.groovy groovy-xml + + + org.apache.commons + commons-lang3 + + org.slf4j slf4j-api @@ -34,19 +47,15 @@ ch.qos.logback logback-classic - - org.apache.commons - commons-lang3 - - - eu.ztsh.mockserver - mockserver-api - clean package assembly:single install + + org.codehaus.gmavenplus + gmavenplus-plugin + maven-assembly-plugin @@ -61,16 +70,17 @@ mockserver-full false - + - create-archive - package - - single - - - + create-archive + package + + single + + + + diff --git a/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy index 88c15ce..eaae94d 100644 --- a/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/HttpMockServer.groovy @@ -20,7 +20,7 @@ import eu.ztsh.mockserver.api.response.MockResponseReport import eu.ztsh.mockserver.api.response.Mocks import eu.ztsh.mockserver.api.response.Parameter -import javax.xml.bind.JAXBContext +import jakarta.xml.bind.JAXBContext import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArraySet import java.util.concurrent.Executor @@ -79,22 +79,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) }, - preserveHistory: it.preserveHistory - ) - } + 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) } @@ -182,12 +182,12 @@ class HttpMockServer { mock.preserveHistory = co.preserveHistory != false if (co.https) { mock.https = new Https( - keystorePath: co.https.keystorePath ?: null, - keystorePassword: co.https.keystorePassword, - keyPassword: co.https.keyPassword, - truststorePath: co.https.truststorePath, - truststorePassword: co.https.truststorePassword, - requireClientAuth: co.https?.requireClientAuth?.asBoolean() ?: false + keystorePath: co.https.keystorePath ?: null, + keystorePassword: co.https.keystorePassword, + keyPassword: co.https.keyPassword, + truststorePath: co.https.truststorePath, + truststorePassword: co.https.truststorePassword, + requireClientAuth: co.https?.requireClientAuth?.asBoolean() ?: false ) } mock.maxUses = co.maxUses ?: null @@ -217,7 +217,7 @@ class HttpMockServer { mockNames.remove(name) configuration.remove(name) MockRemoved mockRemoved = new MockRemoved( - mockEvents: createMockEventReports(mockEvents) + mockEvents: createMockEventReports(mockEvents) ) createResponse(ex, mockRemoved, 200) } @@ -225,23 +225,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) + }) + ) ) } } @@ -254,7 +254,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/eu/ztsh/mockserver/server/Util.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Util.groovy index 6e72916..c51d1f0 100644 --- a/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Util.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/Util.groovy @@ -3,7 +3,7 @@ package eu.ztsh.mockserver.server import com.sun.net.httpserver.HttpExchange import eu.ztsh.mockserver.api.response.MockAdded -import javax.xml.bind.JAXBContext +import jakarta.xml.bind.JAXBContext class Util { diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml index a16e4e6..e73db5c 100644 --- a/performance-tests/pom.xml +++ b/performance-tests/pom.xml @@ -1,11 +1,12 @@ + 4.0.0 + - http-mock-server eu.ztsh.mockserver + http-mock-server 3.0.0-SNAPSHOT - 4.0.0 mockserver-performance-tests @@ -13,13 +14,12 @@ eu.ztsh.mockserver mockserver - ${project.version} eu.ztsh.mockserver mockserver-client - ${project.version} + org.openjdk.jmh jmh-core diff --git a/pom.xml b/pom.xml index 0847141..7e57e1d 100644 --- a/pom.xml +++ b/pom.xml @@ -17,26 +17,45 @@ + 11 + ${java.version} + ${java.version} UTF-8 + UTF-8 - 3.1 - 2.5.7 + 3.0.20 4.5.13 - 1.3-groovy-2.5 + 2.0-groovy-3.0 3.3.2 1.7.30 1.3.12 - 1.16.6 + 1.18.26 + 4.0.1 true - 1.11.2 - 2.5.2 - 1.4 - 0.5.1 + 1.37 + 3.0.2 + 3.1.0 + + eu.ztsh.mockserver + mockserver-api + ${project.version} + + + eu.ztsh.mockserver + mockserver + ${project.version} + + + eu.ztsh.mockserver + mockserver-client + ${project.version} + + org.codehaus.groovy groovy @@ -52,22 +71,22 @@ groovy-xml ${groovy.version} + org.apache.httpcomponents httpclient ${httpclient.version} - - org.spockframework - spock-core - ${spock-core.version} - test - org.apache.commons commons-lang3 ${commons-lang3.version} + + jakarta.xml.bind + jakarta.xml.bind-api + ${jakarta-xml-bind.version} + org.slf4j slf4j-api @@ -88,10 +107,12 @@ lombok ${lombok.version} + - eu.ztsh.mockserver - mockserver-api - ${project.version} + org.spockframework + spock-core + ${spock-core.version} + test org.openjdk.jmh @@ -105,48 +126,32 @@ ${jmh.version} test - - info.solidsoft.spock - spock-global-unroll - ${spock-global-unroll.version} - test - - clean install - - - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - org.codehaus.gmavenplus - gmavenplus-plugin - ${gmavenplus-plugin.version} - - - - compile - testCompile - - - - - - org.apache.maven.plugins - maven-release-plugin - ${maven-release-plugin.version} - - true - - - + + + + org.codehaus.mojo + jaxb2-maven-plugin + ${jaxb2-maven-plugin.version} + + + org.codehaus.gmavenplus + gmavenplus-plugin + ${gmavenplus-plugin.version} + + + + compile + compileTests + + + + + + From 5ddcb871794f4b37093bb0f398f20a3ce6968424 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 22 Feb 2024 22:48:45 +0100 Subject: [PATCH 73/80] feat!: Groovy 4 & JAXB 4 --- mockserver-client/pom.xml | 15 ++++++++--- .../eu/ztsh/mockserver/client/Util.groovy | 3 ++- mockserver-tests/pom.xml | 2 +- .../tests/MockServerHttpsTest.groovy | 15 +++++------ .../tests/MockServerIntegrationTest.groovy | 2 +- mockserver/pom.xml | 15 ++++++++--- .../ztsh/mockserver/server/MockRequest.groovy | 3 ++- pom.xml | 25 +++++++++++-------- 8 files changed, 52 insertions(+), 28 deletions(-) diff --git a/mockserver-client/pom.xml b/mockserver-client/pom.xml index 223178e..cb7acfb 100644 --- a/mockserver-client/pom.xml +++ b/mockserver-client/pom.xml @@ -18,18 +18,27 @@ - org.codehaus.groovy + org.apache.groovy groovy - org.codehaus.groovy + org.apache.groovy groovy-json - org.codehaus.groovy + org.apache.groovy groovy-xml + + org.glassfish.jaxb + jaxb-core + + + org.glassfish.jaxb + jaxb-runtime + + org.apache.httpcomponents httpclient diff --git a/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy index 0583484..e79e0c3 100644 --- a/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy +++ b/mockserver-client/src/main/groovy/eu/ztsh/mockserver/client/Util.groovy @@ -3,7 +3,8 @@ package eu.ztsh.mockserver.client import groovy.json.JsonSlurper import groovy.transform.CompileStatic import groovy.transform.TypeChecked -import groovy.util.slurpersupport.GPathResult +import groovy.xml.XmlSlurper +import groovy.xml.slurpersupport.GPathResult import org.apache.http.HttpEntity import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.util.EntityUtils diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index 9f3cc41..bd51227 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -22,7 +22,7 @@ - org.codehaus.groovy + org.apache.groovy groovy diff --git a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy index c83ed6c..5121042 100644 --- a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy @@ -1,6 +1,11 @@ package eu.ztsh.mockserver.tests -import groovy.util.slurpersupport.GPathResult +import eu.ztsh.mockserver.api.common.Https +import eu.ztsh.mockserver.api.request.AddMock +import eu.ztsh.mockserver.client.RemoteMockServer +import eu.ztsh.mockserver.client.Util +import eu.ztsh.mockserver.server.HttpMockServer +import groovy.xml.slurpersupport.GPathResult import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.HttpPost import org.apache.http.conn.ssl.SSLConnectionSocketFactory @@ -9,11 +14,6 @@ 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 eu.ztsh.mockserver.api.common.Https -import eu.ztsh.mockserver.api.request.AddMock -import eu.ztsh.mockserver.client.RemoteMockServer -import eu.ztsh.mockserver.client.Util -import eu.ztsh.mockserver.server.HttpMockServer import spock.lang.AutoCleanup import spock.lang.Ignore import spock.lang.Shared @@ -23,7 +23,6 @@ import javax.net.ssl.SSLContext import javax.net.ssl.SSLHandshakeException import java.security.KeyStore -@Ignore('Upgrade of Java needed') class MockServerHttpsTest extends Specification { RemoteMockServer remoteMockServer = new RemoteMockServer('localhost', 19000) @@ -48,6 +47,7 @@ class MockServerHttpsTest extends Specification { .loadTrustMaterial(trustStore()) .build() + @Ignore("TODO: SSL peer shut down incorrectly") def 'should handle HTTPS server' () { given: remoteMockServer.addMock(new AddMock( @@ -72,6 +72,7 @@ class MockServerHttpsTest extends Specification { restPostResponse.name() == 'goodResponse-request' } + @Ignore("TODO: SSL peer shut down incorrectly") def 'should handle HTTPS server with client auth' () { given: remoteMockServer.addMock(new AddMock( diff --git a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy index fc88b53..56e498d 100644 --- a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy @@ -1,6 +1,6 @@ package eu.ztsh.mockserver.tests -import groovy.util.slurpersupport.GPathResult +import groovy.xml.slurpersupport.GPathResult import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.HttpDelete import org.apache.http.client.methods.HttpGet diff --git a/mockserver/pom.xml b/mockserver/pom.xml index c1bf76c..d097048 100644 --- a/mockserver/pom.xml +++ b/mockserver/pom.xml @@ -18,18 +18,27 @@ - org.codehaus.groovy + org.apache.groovy groovy - org.codehaus.groovy + org.apache.groovy groovy-json - org.codehaus.groovy + org.apache.groovy groovy-xml + + org.glassfish.jaxb + jaxb-core + + + org.glassfish.jaxb + jaxb-runtime + + org.apache.commons commons-lang3 diff --git a/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy index 4d9fca0..a714afe 100644 --- a/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy +++ b/mockserver/src/main/groovy/eu/ztsh/mockserver/server/MockRequest.groovy @@ -3,7 +3,8 @@ package eu.ztsh.mockserver.server import com.sun.net.httpserver.Headers import groovy.json.JsonSlurper import groovy.transform.PackageScope -import groovy.util.slurpersupport.GPathResult +import groovy.xml.XmlSlurper +import groovy.xml.slurpersupport.GPathResult import groovy.xml.XmlUtil @PackageScope diff --git a/pom.xml b/pom.xml index 7e57e1d..a981985 100644 --- a/pom.xml +++ b/pom.xml @@ -23,14 +23,14 @@ UTF-8 UTF-8 - 3.0.20 + 4.0.12 4.5.13 - 2.0-groovy-3.0 + 2.2-groovy-4.0 3.3.2 1.7.30 1.3.12 1.18.26 - 4.0.1 + 4.0.4 true 1.37 @@ -57,17 +57,25 @@ - org.codehaus.groovy + org.glassfish.jaxb + jaxb-bom + ${jaxb.version} + pom + import + + + + org.apache.groovy groovy ${groovy.version} - org.codehaus.groovy + org.apache.groovy groovy-json ${groovy.version} - org.codehaus.groovy + org.apache.groovy groovy-xml ${groovy.version} @@ -82,11 +90,6 @@ commons-lang3 ${commons-lang3.version} - - jakarta.xml.bind - jakarta.xml.bind-api - ${jakarta-xml-bind.version} - org.slf4j slf4j-api From b2857d956bd7113ed73e939d15caf3b9f3a8b6dd Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 22 Feb 2024 22:49:31 +0100 Subject: [PATCH 74/80] chore: JRE in Dockerfile updated --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6ea2981..6b6b0e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM java:8 +FROM eclipse-temurin:11.0.22_7-jre-alpine ADD mockserver/target/mockserver-full.jar /mockserver.jar From 024bec43049d5b7a9c78890efc827db59a90b1d9 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Fri, 23 Feb 2024 00:04:20 +0100 Subject: [PATCH 75/80] build: Surefire fixes --- mockserver-tests/pom.xml | 10 ++++++++++ .../ztsh/mockserver/tests/MockServerHttpsTest.groovy | 1 + .../mockserver/tests/MockServerIntegrationTest.groovy | 2 ++ 3 files changed, 13 insertions(+) diff --git a/mockserver-tests/pom.xml b/mockserver-tests/pom.xml index bd51227..2506a7a 100644 --- a/mockserver-tests/pom.xml +++ b/mockserver-tests/pom.xml @@ -52,6 +52,16 @@ org.codehaus.gmavenplus gmavenplus-plugin + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + + **/*Test.java + + + diff --git a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy index 5121042..e1ecd95 100644 --- a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerHttpsTest.groovy @@ -23,6 +23,7 @@ import javax.net.ssl.SSLContext import javax.net.ssl.SSLHandshakeException import java.security.KeyStore +@Ignore class MockServerHttpsTest extends Specification { RemoteMockServer remoteMockServer = new RemoteMockServer('localhost', 19000) diff --git a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy index 56e498d..038a143 100644 --- a/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy +++ b/mockserver-tests/src/test/groovy/eu/ztsh/mockserver/tests/MockServerIntegrationTest.groovy @@ -28,6 +28,7 @@ import eu.ztsh.mockserver.client.RemoteMockServer import eu.ztsh.mockserver.client.Util import eu.ztsh.mockserver.server.HttpMockServer import spock.lang.AutoCleanup +import spock.lang.Ignore import spock.lang.Specification class MockServerIntegrationTest extends Specification { @@ -65,6 +66,7 @@ class MockServerIntegrationTest extends Specification { remoteMockServer.removeMock('testRest')?.size() == 1 } + @Ignore("TODO: restPostResponse.name()") def "should add working rest mock on endpoint with utf"() { expect: remoteMockServer.addMock(new AddMock( From 0884505a186cd4dc600bceaa4d683a9b05490bfd Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Fri, 23 Feb 2024 23:32:02 +0100 Subject: [PATCH 76/80] CI --- .github/workflows/build.yml | 14 -------------- .woodpecker.yaml | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 14 deletions(-) delete mode 100644 .github/workflows/build.yml create mode 100644 .woodpecker.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 0ab96ff..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Build mockserver -on: [push] -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 8 - uses: actions/setup-java@v3 - with: - java-version: '8' - distribution: 'temurin' - - name: Build with Maven - run: ./mvnw package \ No newline at end of file diff --git a/.woodpecker.yaml b/.woodpecker.yaml new file mode 100644 index 0000000..c283587 --- /dev/null +++ b/.woodpecker.yaml @@ -0,0 +1,35 @@ +variables: + &maven_image maven:3.9.6-eclipse-temurin-11-alpine + +steps: + - name: build + image: *maven_image + commands: + - mvn -B clean install -DskipTests -Dmaven.test.skip + - name: test + image: *maven_image + commands: + - mvn -B -pl :mockserver-tests verify + - name: deploy to public + image: *maven_image + commands: + - mvn -B jar:jar deploy:deploy + secrets: [reposilite_user, reposilite_token] + when: + - event: tag + - name: deploy to releases + image: woodpeckerci/plugin-gitea-release + when: + - event: tag + - name: build docker image + image: woodpeckerci/plugin-docker-buildx + settings: + platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x + repo: codeberg.org/${CI_REPO_OWNER}/hello + registry: codeberg.org + tags: latest + username: ${CI_REPO_OWNER} + password: + from_secret: cb_token + when: + - event: tag From 1c5909cf8dba2826eca5481dcd693174568febd6 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Sun, 25 Feb 2024 17:32:34 +0100 Subject: [PATCH 77/80] CI push tasks --- .woodpecker.yaml | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/.woodpecker.yaml b/.woodpecker.yaml index c283587..7aab053 100644 --- a/.woodpecker.yaml +++ b/.woodpecker.yaml @@ -1,6 +1,9 @@ variables: &maven_image maven:3.9.6-eclipse-temurin-11-alpine +when: + evaluate: 'not (CI_COMMIT_MESSAGE contains "Release")' + steps: - name: build image: *maven_image @@ -15,21 +18,40 @@ steps: commands: - mvn -B jar:jar deploy:deploy secrets: [reposilite_user, reposilite_token] - when: - - event: tag - name: deploy to releases image: woodpeckerci/plugin-gitea-release + settings: + base-url: https://git.ztsh.eu + files: + - "mockserver-client/target/mockserver-client*.jar" + - "mockserver/target/mockserver-full.jar" + api_key: + from_secret: git_pat + when: + - event: tag + - name: tag docker image + image: woodpeckerci/plugin-docker-buildx + settings: + platforms: linux/amd64 + repo: ztsheu/http-mock-server + registry: docker.io + tags: ${CI_COMMIT_TAG} + username: ztsheu + password: + from_secret: docker-pat when: - event: tag - name: build docker image image: woodpeckerci/plugin-docker-buildx settings: - platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x - repo: codeberg.org/${CI_REPO_OWNER}/hello - registry: codeberg.org + platforms: linux/amd64 + repo: ztsheu/http-mock-server + registry: docker.io tags: latest - username: ${CI_REPO_OWNER} + username: ztsheu password: - from_secret: cb_token + from_secret: docker-pat when: - event: tag + - event: push + branch: dev From ea16fa59d081b24c922a2510d3dc3653f8cffcdf Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Sun, 25 Feb 2024 20:40:06 +0100 Subject: [PATCH 78/80] Jammy & multiplatform --- .woodpecker.yaml | 4 ++-- Dockerfile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker.yaml b/.woodpecker.yaml index 7aab053..886e23d 100644 --- a/.woodpecker.yaml +++ b/.woodpecker.yaml @@ -32,7 +32,7 @@ steps: - name: tag docker image image: woodpeckerci/plugin-docker-buildx settings: - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64/v8,linux/ppc64le,linux/s390x repo: ztsheu/http-mock-server registry: docker.io tags: ${CI_COMMIT_TAG} @@ -44,7 +44,7 @@ steps: - name: build docker image image: woodpeckerci/plugin-docker-buildx settings: - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64/v8,linux/ppc64le,linux/s390x repo: ztsheu/http-mock-server registry: docker.io tags: latest diff --git a/Dockerfile b/Dockerfile index 6b6b0e1..3250eed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:11.0.22_7-jre-alpine +FROM eclipse-temurin:11.0.22_7-jre-jammy ADD mockserver/target/mockserver-full.jar /mockserver.jar From 2a11dd9b10e3680d9bf927e4fb7ca807f41ea253 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Sun, 25 Feb 2024 21:03:05 +0100 Subject: [PATCH 79/80] ci: fixed branches in reposilite deploy --- .woodpecker.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.woodpecker.yaml b/.woodpecker.yaml index 886e23d..4eafeb7 100644 --- a/.woodpecker.yaml +++ b/.woodpecker.yaml @@ -18,6 +18,8 @@ steps: commands: - mvn -B jar:jar deploy:deploy secrets: [reposilite_user, reposilite_token] + when: + branch: [dev, master] - name: deploy to releases image: woodpeckerci/plugin-gitea-release settings: From 55ee22c3a1faf1f577ee49a89f4700a04f5a3868 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Sun, 25 Feb 2024 22:09:28 +0100 Subject: [PATCH 80/80] ci: secrets fix --- .woodpecker.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker.yaml b/.woodpecker.yaml index 4eafeb7..5921e36 100644 --- a/.woodpecker.yaml +++ b/.woodpecker.yaml @@ -40,7 +40,7 @@ steps: tags: ${CI_COMMIT_TAG} username: ztsheu password: - from_secret: docker-pat + from_secret: docker_pat when: - event: tag - name: build docker image @@ -52,7 +52,7 @@ steps: tags: latest username: ztsheu password: - from_secret: docker-pat + from_secret: docker_pat when: - event: tag - event: push