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 1194202..8cffc3b 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 @@ -13,7 +13,7 @@ import org.apache.http.util.EntityUtils class Util { static GPathResult extractXmlResponse(CloseableHttpResponse response) { HttpEntity entity = response.entity - GPathResult xml = new XmlSlurper().parseText(EntityUtils.toString(entity)) + GPathResult xml = new XmlSlurper().parseText(EntityUtils.toString(entity, 'UTF-8')) EntityUtils.consumeQuietly(entity) return xml } @@ -27,7 +27,7 @@ class Util { static Object extractJsonResponse(CloseableHttpResponse response) { HttpEntity entity = response.entity - Object json = new JsonSlurper().parseText(EntityUtils.toString(entity)) + Object json = new JsonSlurper().parseText(EntityUtils.toString(entity, 'UTF-8')) EntityUtils.consumeQuietly(entity) return json } 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 819e35d..435d43d 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,13 +1,29 @@ 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.client.* +import pl.touk.mockserver.client.AddMockRequestData +import pl.touk.mockserver.client.InvalidMockDefinition +import pl.touk.mockserver.client.Method +import pl.touk.mockserver.client.MockAlreadyExists +import pl.touk.mockserver.client.MockDoesNotExist +import pl.touk.mockserver.client.MockEvent +import pl.touk.mockserver.client.RegisteredMock +import pl.touk.mockserver.client.RemoteMockServer +import pl.touk.mockserver.client.Util import pl.touk.mockserver.server.HttpMockServer import spock.lang.Shared import spock.lang.Specification @@ -52,6 +68,28 @@ class MockServerIntegrationTest extends Specification { remoteMockServer.removeMock('testRest')?.size() == 1 } + def "should add working rest mock on endpoint with utf"() { + expect: + remoteMockServer.addMock(new AddMockRequestData( + name: 'testRestUtf', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.xml.name() == 'request' && req.xml.@test == 'łżźćąś'}''', + response: '''{req -> ""}''', + soap: 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' + restPostResponse.@ans == 'łżźćąś' + expect: + remoteMockServer.removeMock('testRestUtf')?.size() == 1 + } + def "should add soap mock on endpoint"() { expect: remoteMockServer.addMock(new AddMockRequestData( diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy index 53a0751..93ab7a5 100644 --- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy +++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Util.groovy @@ -4,9 +4,10 @@ import com.sun.net.httpserver.HttpExchange class Util { static void createResponse(HttpExchange ex, String response, int statusCode) { - ex.sendResponseHeaders(statusCode, response ? response.length() : -1) + byte[] responseBytes = response ? response.getBytes('UTF-8') : new byte[0] + ex.sendResponseHeaders(statusCode, responseBytes.length ?: -1) if (response) { - ex.responseBody << response + ex.responseBody << responseBytes ex.responseBody.close() } }