
com.confluex.mock.http.MockHttpRequestHandler.groovy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of confluex-mock-http Show documentation
Show all versions of confluex-mock-http Show documentation
Testing library for mocking interactions to external HTTP servers
The newest version!
package com.confluex.mock.http
import com.confluex.mock.http.event.MatchingEventLatch
import com.confluex.mock.http.matchers.HttpMatchers
import com.confluex.mock.http.matchers.HttpRequestMatcher
import groovy.transform.ToString
import groovy.util.logging.Slf4j
import org.mortbay.jetty.handler.AbstractHandler
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import java.util.concurrent.CopyOnWriteArrayList
@Slf4j
@ToString(includeNames = true, includes = "mappings, currentMapping")
class MockHttpRequestHandler extends AbstractHandler {
List matchers = []
Map responders = [:]
List requests = new CopyOnWriteArrayList()
List latches = []
public MockHttpRequestHandler() {
respondTo(HttpMatchers.anyRequest()).withStatus(404).withHeader('Content-Type', 'text/plain').withBody("Resource not found")
}
void handle(String uri, HttpServletRequest request, HttpServletResponse response, int dispatch) {
def clientRequest = new ClientRequest(request)
log.debug "Handling request $clientRequest"
requests << clientRequest
HttpRequestMatcher matcher = matchers.find { matcher ->
matcher.matches(clientRequest)
}
responders[matcher]?.render(clientRequest, response)
synchronized(latches) {
latches.each {
it.addEvent(clientRequest)
}
}
}
HttpResponderBuilder respondTo(HttpRequestMatcher matcher) {
matchers.add 0, matcher
HttpResponderBuilder builder = new HttpResponderBuilder()
responders[matcher] = builder.responder
return builder
}
boolean waitFor(HttpRequestMatcher matcher, int expected, long timeoutMs) {
def latch
synchronized(latches) {
latch = new MatchingEventLatch(matcher, expected)
requests.each { latch.addEvent(it) }
latches << latch
}
latch.await(timeoutMs)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy