Some smal improvements

Change-Id: I3559572293359bf3fb1c4e4e6892e19d4373ba63
This commit is contained in:
Dominik Adam Przybysz 2015-08-30 00:52:24 +02:00
parent ed217704f4
commit 4e70d3b8bd
7 changed files with 45 additions and 33 deletions

View file

@ -3,6 +3,7 @@ package pl.touk.mockserver.server
import com.sun.net.httpserver.HttpExchange
import groovy.transform.PackageScope
import groovy.util.logging.Slf4j
import pl.touk.mockserver.api.request.Method
import java.util.concurrent.CopyOnWriteArrayList
@ -24,7 +25,7 @@ class ContextExecutor {
log.debug("Request: ${request.text}")
for (Mock mock : mocks) {
try {
if (mock.match(ex.requestMethod, request)) {
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)

View file

@ -2,14 +2,11 @@ package pl.touk.mockserver.server
import com.sun.net.httpserver.HttpExchange
import groovy.util.logging.Slf4j
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.request.*
import pl.touk.mockserver.api.response.*
import javax.xml.bind.JAXBContext
import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.CopyOnWriteArraySet
import static pl.touk.mockserver.server.Util.createResponse
@ -18,7 +15,7 @@ import static pl.touk.mockserver.server.Util.createResponse
class HttpMockServer {
private final HttpServerWraper httpServerWraper
private final List<HttpServerWraper> childServers = new CopyOnWriteArrayList<>()
private final Map<Integer, HttpServerWraper> childServers = new ConcurrentHashMap<>()
private final Set<String> mockNames = new CopyOnWriteArraySet<>()
private static
@ -61,7 +58,10 @@ class HttpMockServer {
port: it.port,
predicate: it.predicateClosureText,
response: it.responseClosureText,
responseHeaders: it.responseHeadersClosureText
responseHeaders: it.responseHeadersClosureText,
soap: it.soap,
method: it.method,
statusCode: it.statusCode as int
)
}
)
@ -69,7 +69,7 @@ class HttpMockServer {
}
Set<Mock> listMocks() {
return childServers.collect { it.mocks }.flatten() as TreeSet<Mock>
return childServers.values().collect { it.mocks }.flatten() as TreeSet<Mock>
}
private void addMock(AddMock request, HttpExchange ex) {
@ -85,10 +85,7 @@ class HttpMockServer {
}
private static Mock mockFromRequest(AddMock request) {
String name = request.name
String mockPath = request.path
int mockPort = request.port
Mock mock = new Mock(name, mockPath, mockPort)
Mock mock = new Mock(request.name, request.path, request.port)
mock.predicate = request.predicate
mock.response = request.response
mock.soap = request.soap
@ -99,10 +96,10 @@ class HttpMockServer {
}
private HttpServerWraper getOrCreateChildServer(int mockPort) {
HttpServerWraper child = childServers.find { it.port == mockPort }
HttpServerWraper child = childServers[mockPort]
if (!child) {
child = new HttpServerWraper(mockPort)
childServers << child
childServers.put(mockPort, child)
}
return child
}
@ -114,7 +111,7 @@ class HttpMockServer {
throw new RuntimeException('mock not registered')
}
log.info("Removing mock $name")
List<MockEvent> mockEvents = skipReport ? [] : childServers.collect {
List<MockEvent> mockEvents = skipReport ? [] : childServers.values().collect {
it.removeMock(name)
}.flatten() as List<MockEvent>
mockNames.remove(name)
@ -154,7 +151,7 @@ class HttpMockServer {
throw new RuntimeException('mock not registered')
}
log.trace("Peeking mock $name")
List<MockEvent> mockEvents = childServers.collect { it.peekMock(name) }.flatten() as List<MockEvent>
List<MockEvent> mockEvents = childServers.values().collect { it.peekMock(name) }.flatten() as List<MockEvent>
MockPeeked mockPeeked = new MockPeeked(
mockEvents: createMockEventReports(mockEvents)
)
@ -166,7 +163,7 @@ class HttpMockServer {
}
void stop() {
childServers.each { it.stop() }
childServers.values().each { it.stop() }
httpServerWraper.stop()
}
}

View file

@ -19,7 +19,7 @@ class HttpServerWraper {
this.port = port
InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port)
httpServer = HttpServer.create(addr, 0)
httpServer.executor = Executors.newCachedThreadPool()
httpServer.executor = Executors.newWorkStealingPool()
log.info("Http server starting on port $port...")
httpServer.start()
log.info('Http server is started')
@ -45,14 +45,14 @@ class HttpServerWraper {
}
List<MockEvent> removeMock(String name) {
return executors.collect { it.removeMock(name) }.flatten()
return executors.collect { it.removeMock(name) }.flatten() as List<MockEvent>
}
List<MockEvent> peekMock(String name) {
return executors.collect { it.peekMock(name) }.flatten()
return executors.collect { it.peekMock(name) }.flatten() as List<MockEvent>
}
List<Mock> getMocks() {
return executors.collect { it.mocks }.flatten()
return executors.collect { it.mocks }.flatten() as List<Mock>
}
}

View file

@ -3,6 +3,7 @@ package pl.touk.mockserver.server
import groovy.transform.EqualsAndHashCode
import groovy.transform.PackageScope
import groovy.util.logging.Slf4j
import pl.touk.mockserver.api.request.Method
import java.util.concurrent.CopyOnWriteArrayList
@ -21,7 +22,7 @@ class Mock implements Comparable<Mock> {
Closure responseHeaders = toClosure(responseHeadersClosureText)
boolean soap = false
int statusCode = 200
String method = 'POST'
Method method = Method.POST
int counter = 0
final List<MockEvent> history = new CopyOnWriteArrayList<>()
@ -34,7 +35,7 @@ class Mock implements Comparable<Mock> {
this.port = port
}
boolean match(String method, MockRequest request) {
boolean match(Method method, MockRequest request) {
return this.method == method && predicate(request)
}
@ -90,7 +91,7 @@ class Mock implements Comparable<Mock> {
}
}
void setMethod(String method) {
void setMethod(Method method) {
if (method) {
this.method = method
}

View file

@ -46,7 +46,7 @@ class MockRequest {
}
private static GPathResult getSoapBodyContent(GPathResult xml) {
return xml.Body.'**'[1]
return xml.Body.'**'[1] as GPathResult
}
private static Object inputToJson(String text) {
@ -66,7 +66,7 @@ class MockRequest {
private static Map<String, String> headersToMap(Headers headers) {
return headers.collectEntries {
[it.key.toLowerCase(), it.value.join(',')]
}
} as Map<String, String>
}
}