96 lines
2.8 KiB
Groovy
96 lines
2.8 KiB
Groovy
package biz.nellemann.svci;
|
|
|
|
import org.mockserver.integration.ClientAndServer
|
|
import org.mockserver.logging.MockServerLogger
|
|
import org.mockserver.model.Header
|
|
import org.mockserver.model.HttpRequest
|
|
import org.mockserver.model.HttpResponse
|
|
import org.mockserver.model.MediaType
|
|
import org.mockserver.socket.PortFactory
|
|
import org.mockserver.socket.tls.KeyStoreFactory
|
|
import spock.lang.Shared
|
|
import spock.lang.Specification
|
|
import spock.lang.Stepwise
|
|
|
|
import javax.net.ssl.HttpsURLConnection
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
@Stepwise
|
|
class RestClientTest extends Specification {
|
|
|
|
@Shared
|
|
private static ClientAndServer mockServer;
|
|
|
|
@Shared
|
|
private RestClient serviceClient
|
|
|
|
|
|
def setupSpec() {
|
|
HttpsURLConnection.setDefaultSSLSocketFactory(new KeyStoreFactory(new MockServerLogger()).sslContext().getSocketFactory());
|
|
mockServer = ClientAndServer.startClientAndServer(PortFactory.findFreePort());
|
|
serviceClient = new RestClient(String.format("http://localhost:%d", mockServer.getPort()), "superuser", "password", true)
|
|
}
|
|
|
|
def cleanupSpec() {
|
|
mockServer.stop()
|
|
}
|
|
|
|
def setup() {
|
|
mockServer.reset()
|
|
}
|
|
|
|
|
|
def "Test POST Request"() {
|
|
setup:
|
|
def req = HttpRequest.request()
|
|
.withMethod("POST")
|
|
.withPath("/test/post")
|
|
def res = HttpResponse.response()
|
|
.withDelay(TimeUnit.SECONDS, 1)
|
|
.withStatusCode(202)
|
|
.withHeaders(
|
|
new Header("Content-Type", "text/plain; charset=UTF-8"),
|
|
)
|
|
.withBody("Created, OK.", MediaType.TEXT_PLAIN)
|
|
mockServer.when(req).respond(res)
|
|
|
|
when:
|
|
String response = serviceClient.postRequest("/test/post", null)
|
|
|
|
then:
|
|
response == "Created, OK."
|
|
}
|
|
|
|
|
|
def "Test SVC Login"() {
|
|
setup:
|
|
def responseFile = new File(getClass().getResource('/svc-auth-response.json').toURI())
|
|
def req = HttpRequest.request()
|
|
.withHeader("X-Auth-Username", "superuser")
|
|
.withHeader("X-Auth-Password", "password")
|
|
.withMethod("POST")
|
|
.withPath("/rest/v1/auth")
|
|
|
|
def res = HttpResponse.response()
|
|
.withDelay(TimeUnit.SECONDS, 1)
|
|
.withStatusCode(200)
|
|
.withHeaders(
|
|
new Header("Content-Type", "application/json"),
|
|
)
|
|
.withBody(responseFile.getText(), MediaType.APPLICATION_JSON)
|
|
|
|
mockServer.when(req).respond(res)
|
|
|
|
when:
|
|
serviceClient.login()
|
|
|
|
then:
|
|
serviceClient.authToken == "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2Njk2MjY3MTMsImV4cCI6MTY2OTYzMDMxMywianRpIjoiN2UxYWJiZmJmNzlkMWE3YTVlNGI1MjM1M2VlZmM0ZDkiLCJzdiI6eyJ1c2VyIjoic3VwZXJ1c2VyIn19.B8MVI5XvmKi-ONX1NTaDmcMEB6SVd93kfW8beKu3Mfl70tGwCotY5-lQ3R4sZWd4hiEqvsrrCm3o1afUGlCxJw"
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|