Add xsd and docker
Change-Id: Ifad2e3a8678a487e6f13114f910e19bce4d80964
This commit is contained in:
parent
d71c191f0f
commit
80dbbc034f
33 changed files with 313 additions and 348 deletions
7
Dockerfile
Normal file
7
Dockerfile
Normal file
|
@ -0,0 +1,7 @@
|
|||
FROM java:8
|
||||
|
||||
ADD mockserver/target/mockserver-1.1.1-SNAPSHOT-jar-with-dependencies.jar /mockserver.jar
|
||||
|
||||
EXPOSE 9999
|
||||
|
||||
CMD java -jar /mockserver.jar
|
6
buildImage.sh
Executable file
6
buildImage.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
mvn clean install
|
||||
mvn -f mockserver/pom.xml package assembly:single
|
||||
|
||||
docker build -t mockserver .
|
|
@ -17,4 +17,31 @@
|
|||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.3</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>jaxb2-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>xjc</id>
|
||||
<phase>process-resources</phase>
|
||||
<goals>
|
||||
<goal>xjc</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -1,33 +0,0 @@
|
|||
package pl.touk.mockserver.api.request;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class AddMock extends MockServerRequest {
|
||||
@XmlElement(required = true)
|
||||
private String name;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String path;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private int port;
|
||||
|
||||
private String predicate;
|
||||
|
||||
private String response;
|
||||
|
||||
private Boolean soap;
|
||||
|
||||
private Integer statusCode;
|
||||
|
||||
private Method method;
|
||||
|
||||
private String responseHeaders;
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package pl.touk.mockserver.api.request;
|
||||
|
||||
import javax.xml.bind.annotation.XmlEnum;
|
||||
|
||||
@XmlEnum
|
||||
public enum Method {
|
||||
POST,
|
||||
GET,
|
||||
DELETE,
|
||||
PUT,
|
||||
TRACE,
|
||||
HEAD,
|
||||
OPTIONS,
|
||||
PATCH;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package pl.touk.mockserver.api.request;
|
||||
|
||||
public abstract class MockServerRequest {
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package pl.touk.mockserver.api.request;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class PeekMock extends MockServerRequest{
|
||||
@XmlElement(required = true)
|
||||
private String name;
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
package pl.touk.mockserver.api.request;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class RemoveMock extends MockServerRequest {
|
||||
@XmlElement(required = true)
|
||||
private String name;
|
||||
|
||||
private Boolean skipReport;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
@XmlAccessorType(XmlAccessType.FIELD) package pl.touk.mockserver.api.request;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
|
@ -1,13 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlValue;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
public class ExceptionOccured {
|
||||
@XmlValue
|
||||
private String message;
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class MockAdded extends MockServerResponse {
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
@Data
|
||||
public class MockEventReport {
|
||||
@XmlElement(required = true)
|
||||
private MockRequestReport request;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private MockResponseReport response;
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement(name = "mocks")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class MockListing extends MockServerResponse {
|
||||
@XmlElement(name = "mock")
|
||||
private List<MockReport> mocks;
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class MockPeeked extends MockServerResponse {
|
||||
@XmlElement(name = "mockEvent")
|
||||
private List<MockEventReport> mockEvents;
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
@XmlRootElement
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class MockRemoved extends MockServerResponse {
|
||||
@XmlElement(name = "mockEvent")
|
||||
private List<MockEventReport> mockEvents;
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import pl.touk.mockserver.api.request.Method;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
@Data
|
||||
public class MockReport {
|
||||
@XmlElement(required = true)
|
||||
private String name;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String path;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private int port;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String predicate;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String response;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private String responseHeaders;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private boolean soap;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private Method method;
|
||||
|
||||
@XmlElement(required = true)
|
||||
private int statusCode;
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class MockRequestReport {
|
||||
private String text;
|
||||
|
||||
@XmlElementWrapper(name = "headers")
|
||||
@XmlElement(name = "header")
|
||||
private List<Parameter> headers;
|
||||
|
||||
@XmlElementWrapper(name = "queryParams")
|
||||
@XmlElement(name = "queryParam")
|
||||
private List<Parameter> queryParams;
|
||||
|
||||
@XmlElementWrapper(name = "path")
|
||||
@XmlElement(name = "pathPart")
|
||||
private List<String> paths;
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class MockResponseReport {
|
||||
@XmlElement(required = true)
|
||||
private int statusCode;
|
||||
|
||||
private String text;
|
||||
|
||||
@XmlElementWrapper(name = "headers")
|
||||
@XmlElement(name = "header")
|
||||
private List<Parameter> headers;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
public abstract class MockServerResponse {
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
package pl.touk.mockserver.api.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlValue;
|
||||
|
||||
@Data
|
||||
public class Parameter {
|
||||
@XmlAttribute(required = true)
|
||||
private String name;
|
||||
|
||||
@XmlValue
|
||||
private String value;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
@XmlAccessorType(XmlAccessType.FIELD) package pl.touk.mockserver.api.response;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
|
@ -1,4 +0,0 @@
|
|||
AddMock
|
||||
Method
|
||||
PeekMock
|
||||
RemoveMock
|
|
@ -1,11 +0,0 @@
|
|||
ExceptionOccured
|
||||
MockAdded
|
||||
MockEventReport
|
||||
MockListing
|
||||
MockPeeked
|
||||
MockRemoved
|
||||
MockReport
|
||||
MockRequestReport
|
||||
MockResponseReport
|
||||
MockServerResponse
|
||||
Parameter
|
10
mockserver-api/src/main/xjb/binding.xjb
Normal file
10
mockserver-api/src/main/xjb/binding.xjb
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0"?>
|
||||
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
|
||||
xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
|
||||
jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<jxb:bindings>
|
||||
<jxb:globalBindings>
|
||||
<xjc:simple/>
|
||||
</jxb:globalBindings>
|
||||
</jxb:bindings>
|
||||
</jxb:bindings>
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<xs:schema version="1.0" targetNamespace="http://touk.pl/mockserver/api/common" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
|
||||
<xs:simpleType name="method">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="POST"/>
|
||||
<xs:enumeration value="GET"/>
|
||||
<xs:enumeration value="DELETE"/>
|
||||
<xs:enumeration value="PUT"/>
|
||||
<xs:enumeration value="TRACE"/>
|
||||
<xs:enumeration value="HEAD"/>
|
||||
<xs:enumeration value="OPTIONS"/>
|
||||
<xs:enumeration value="PATCH"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:schema>
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<xs:schema elementFormDefault="qualified" version="1.0" targetNamespace="http://touk.pl/mockserver/api/request" xmlns:tns="http://touk.pl/mockserver/api/request" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:common="http://touk.pl/mockserver/api/common">
|
||||
|
||||
<xs:import namespace="http://touk.pl/mockserver/api/common" schemaLocation="common.xsd"/>
|
||||
|
||||
<xs:element name="addMock" type="tns:AddMock"/>
|
||||
|
||||
<xs:element name="peekMock" type="tns:PeekMock"/>
|
||||
|
||||
<xs:element name="removeMock" type="tns:RemoveMock"/>
|
||||
|
||||
<xs:complexType name="AddMock">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="path" type="xs:string"/>
|
||||
<xs:element name="port" type="xs:int"/>
|
||||
<xs:element name="predicate" type="xs:string" minOccurs="0"/>
|
||||
<xs:element name="response" type="xs:string" minOccurs="0"/>
|
||||
<xs:element name="soap" type="xs:boolean" minOccurs="0"/>
|
||||
<xs:element name="statusCode" type="xs:int" minOccurs="0"/>
|
||||
<xs:element name="method" type="common:method" minOccurs="0"/>
|
||||
<xs:element name="responseHeaders" type="xs:string" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockServerRequest" abstract="true">
|
||||
<xs:sequence>
|
||||
<xs:element name="name" type="xs:string"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PeekMock">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerRequest"/>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RemoveMock">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="skipReport" type="xs:boolean" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
|
134
mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
Normal file
134
mockserver-api/src/main/xsd/pl/touk/mockserver/api/response.xsd
Normal file
|
@ -0,0 +1,134 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<xs:schema elementFormDefault="qualified" version="1.0" targetNamespace="http://touk.pl/mockserver/api/response" xmlns:tns="http://touk.pl/mockserver/api/response" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:common="http://touk.pl/mockserver/api/common">
|
||||
|
||||
<xs:import namespace="http://touk.pl/mockserver/api/common" schemaLocation="common.xsd"/>
|
||||
|
||||
<xs:element name="exceptionOccured" type="tns:exceptionOccured"/>
|
||||
|
||||
<xs:element name="mockAdded" type="tns:mockAdded"/>
|
||||
|
||||
<xs:element name="mockPeeked" type="tns:mockPeeked"/>
|
||||
|
||||
<xs:element name="mockRemoved" type="tns:mockRemoved"/>
|
||||
|
||||
<xs:element name="mocks" type="tns:mockListing"/>
|
||||
|
||||
<xs:complexType name="exceptionOccured">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string"/>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockAdded">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerResponse">
|
||||
<xs:sequence/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockServerResponse" abstract="true">
|
||||
<xs:sequence/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockEventReport">
|
||||
<xs:sequence>
|
||||
<xs:element name="request" type="tns:mockRequestReport"/>
|
||||
<xs:element name="response" type="tns:mockResponseReport"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockRequestReport">
|
||||
<xs:sequence>
|
||||
<xs:element name="text" type="xs:string" minOccurs="0"/>
|
||||
<xs:element name="headers" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="header" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="queryParams" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="queryParam" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="path" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="pathPart" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="parameter">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockResponseReport">
|
||||
<xs:sequence>
|
||||
<xs:element name="statusCode" type="xs:int"/>
|
||||
<xs:element name="text" type="xs:string" minOccurs="0"/>
|
||||
<xs:element name="headers" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="header" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockListing">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="mock" type="tns:mockReport" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockReport">
|
||||
<xs:sequence>
|
||||
<xs:element name="name" type="xs:string"/>
|
||||
<xs:element name="path" type="xs:string"/>
|
||||
<xs:element name="port" type="xs:int"/>
|
||||
<xs:element name="predicate" type="xs:string"/>
|
||||
<xs:element name="response" type="xs:string"/>
|
||||
<xs:element name="responseHeaders" type="xs:string"/>
|
||||
<xs:element name="soap" type="xs:boolean"/>
|
||||
<xs:element name="method" type="common:method"/>
|
||||
<xs:element name="statusCode" type="xs:int"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockPeeked">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="mockEvent" type="tns:mockEventReport" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="mockRemoved">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="tns:mockServerResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="mockEvent" type="tns:mockEventReport" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
|
|
@ -18,9 +18,7 @@ import javax.xml.bind.JAXBContext
|
|||
class RemoteMockServer {
|
||||
private final String address
|
||||
private final CloseableHttpClient client = HttpClients.createDefault()
|
||||
private static final JAXBContext requestContext = JAXBContext.newInstance(AddMock.package.name, AddMock.classLoader)
|
||||
private static
|
||||
final JAXBContext responseContext = JAXBContext.newInstance(MockAdded.package.name, MockAdded.classLoader)
|
||||
private static final JAXBContext requestContext = JAXBContext.newInstance(AddMock, PeekMock, RemoveMock)
|
||||
|
||||
RemoteMockServer(String host, int port) {
|
||||
address = "http://$host:$port/serverControl"
|
||||
|
@ -70,7 +68,7 @@ class RemoteMockServer {
|
|||
List<MockReport> listMocks() {
|
||||
HttpGet get = new HttpGet(address)
|
||||
CloseableHttpResponse response = client.execute(get)
|
||||
MockListing mockListing = Util.extractResponse(response) as MockListing
|
||||
return mockListing.mocks
|
||||
Mocks mocks = Util.extractResponse(response) as Mocks
|
||||
return mocks.mocks
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ class Util {
|
|||
return responseContext.createUnmarshaller().unmarshal(new StringReader(responseString)) as MockServerResponse
|
||||
}
|
||||
ExceptionOccured exceptionOccured = responseContext.createUnmarshaller().unmarshal(new StringReader(responseString)) as ExceptionOccured
|
||||
String message = exceptionOccured.message
|
||||
String message = exceptionOccured.value
|
||||
if (message == 'mock already registered') {
|
||||
throw new MockAlreadyExists()
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ 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.request.Method
|
||||
import pl.touk.mockserver.api.common.Method
|
||||
import pl.touk.mockserver.api.response.MockEventReport
|
||||
import pl.touk.mockserver.api.response.MockReport
|
||||
import pl.touk.mockserver.api.response.Parameter
|
||||
|
@ -637,14 +637,21 @@ class MockServerIntegrationTest extends Specification {
|
|||
port: 9999
|
||||
))
|
||||
remoteMockServer.removeMock('testRest5')
|
||||
expect:
|
||||
remoteMockServer.listMocks() == [
|
||||
new MockReport(name: 'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST),
|
||||
new MockReport(name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '<response/>' }''', responseHeaders: '{ _ -> [a: "b"] }', soap: false, statusCode: 200, method: Method.POST),
|
||||
new MockReport(name: 'testRest3', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST),
|
||||
new MockReport(name: 'testRest4', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: true, statusCode: 204, method: Method.PUT),
|
||||
new MockReport(name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST)
|
||||
]
|
||||
when:
|
||||
List<MockReport> 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[1], [name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '<response/>' }''', 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<String, Object> props) {
|
||||
props.each {
|
||||
assert mockReport."${it.key}" == it.value
|
||||
}
|
||||
}
|
||||
|
||||
def "should add mock accepts path certain path params"() {
|
||||
|
@ -718,18 +725,18 @@ class MockServerIntegrationTest extends Specification {
|
|||
then:
|
||||
mockEvents1.size() == 2
|
||||
mockEvents1[0].request.text == '<request/>'
|
||||
!mockEvents1[0].request.headers?.empty
|
||||
mockEvents1[0].request.queryParams == []
|
||||
mockEvents1[0].request.paths == ['testEndpoint']
|
||||
!mockEvents1[0].response.headers?.empty
|
||||
!mockEvents1[0].request.headers?.headers?.empty
|
||||
mockEvents1[0].request.queryParams.queryParams == []
|
||||
mockEvents1[0].request.path.pathParts == ['testEndpoint']
|
||||
!mockEvents1[0].response.headers?.headers?.empty
|
||||
mockEvents1[0].response.text == '<goodResponseRest-request/>'
|
||||
mockEvents1[0].response.statusCode == 201
|
||||
|
||||
mockEvents1[1].request.text == '<request15/>'
|
||||
!mockEvents1[1].request.headers?.empty
|
||||
mockEvents1[1].request.queryParams == []
|
||||
mockEvents1[1].request.paths == ['testEndpoint', 'hello']
|
||||
!mockEvents1[1].response.headers?.empty
|
||||
!mockEvents1[1].request.headers?.headers?.empty
|
||||
mockEvents1[1].request.queryParams.queryParams == []
|
||||
mockEvents1[1].request.path.pathParts == ['testEndpoint', 'hello']
|
||||
!mockEvents1[1].response.headers?.headers?.empty
|
||||
mockEvents1[1].response.text == '<goodResponseRest-request15/>'
|
||||
mockEvents1[1].response.statusCode == 201
|
||||
when:
|
||||
|
@ -737,10 +744,10 @@ class MockServerIntegrationTest extends Specification {
|
|||
then:
|
||||
mockEvents2.size() == 1
|
||||
mockEvents2[0].request.text == '<reqXYZ/>'
|
||||
!mockEvents2[0].request.headers?.empty
|
||||
mockEvents2[0].request.queryParams == [new Parameter(name: 'id', value: '123')]
|
||||
mockEvents2[0].request.paths == ['testEndpoint']
|
||||
mockEvents2[0].response.headers.find { it.name == 'aaa' }?.value == '15'
|
||||
!mockEvents2[0].request.headers?.headers?.empty
|
||||
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.text == '<goodResponseRest/>'
|
||||
mockEvents2[0].response.statusCode == 202
|
||||
}
|
||||
|
@ -793,18 +800,18 @@ class MockServerIntegrationTest extends Specification {
|
|||
then:
|
||||
mockEvents1.size() == 2
|
||||
mockEvents1[0].request.text == '<request/>'
|
||||
!mockEvents1[0].request.headers?.empty
|
||||
mockEvents1[0].request.queryParams == []
|
||||
mockEvents1[0].request.paths == ['testEndpoint']
|
||||
!mockEvents1[0].response.headers?.empty
|
||||
!mockEvents1[0].request.headers?.headers?.empty
|
||||
mockEvents1[0].request.queryParams.queryParams == []
|
||||
mockEvents1[0].request.path.pathParts == ['testEndpoint']
|
||||
!mockEvents1[0].response.headers?.headers?.empty
|
||||
mockEvents1[0].response.text == '<goodResponseRest-request/>'
|
||||
mockEvents1[0].response.statusCode == 201
|
||||
|
||||
mockEvents1[1].request.text == '<request15/>'
|
||||
!mockEvents1[1].request.headers?.empty
|
||||
mockEvents1[1].request.queryParams == []
|
||||
mockEvents1[1].request.paths == ['testEndpoint', 'hello']
|
||||
!mockEvents1[1].response.headers?.empty
|
||||
!mockEvents1[1].request.headers?.headers?.empty
|
||||
mockEvents1[1].request.queryParams.queryParams == []
|
||||
mockEvents1[1].request.path.pathParts == ['testEndpoint', 'hello']
|
||||
!mockEvents1[1].response.headers?.headers?.empty
|
||||
mockEvents1[1].response.text == '<goodResponseRest-request15/>'
|
||||
mockEvents1[1].response.statusCode == 201
|
||||
when:
|
||||
|
@ -812,10 +819,10 @@ class MockServerIntegrationTest extends Specification {
|
|||
then:
|
||||
mockEvents2.size() == 1
|
||||
mockEvents2[0].request.text == '<reqXYZ/>'
|
||||
!mockEvents2[0].request.headers?.empty
|
||||
mockEvents2[0].request.queryParams == [new Parameter(name: 'id', value: '123')]
|
||||
mockEvents2[0].request.paths == ['testEndpoint']
|
||||
mockEvents2[0].response.headers.find {it.name == 'aaa'}?.value == '15'
|
||||
!mockEvents2[0].request.headers?.headers?.empty
|
||||
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.text == '<goodResponseRest/>'
|
||||
mockEvents2[0].response.statusCode == 202
|
||||
}
|
||||
|
|
|
@ -3,7 +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 pl.touk.mockserver.api.common.Method
|
||||
|
||||
import java.util.concurrent.CopyOnWriteArrayList
|
||||
|
||||
|
|
|
@ -2,7 +2,10 @@ package pl.touk.mockserver.server
|
|||
|
||||
import com.sun.net.httpserver.HttpExchange
|
||||
import groovy.util.logging.Slf4j
|
||||
import pl.touk.mockserver.api.request.*
|
||||
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 javax.xml.bind.JAXBContext
|
||||
|
@ -50,7 +53,7 @@ class HttpMockServer {
|
|||
}
|
||||
|
||||
void listMocks(HttpExchange ex) {
|
||||
MockListing mockListing = new MockListing(
|
||||
Mocks mockListing = new Mocks(
|
||||
mocks: listMocks().collect {
|
||||
new MockReport(
|
||||
name: it.name,
|
||||
|
@ -126,20 +129,20 @@ class HttpMockServer {
|
|||
new MockEventReport(
|
||||
request: new MockRequestReport(
|
||||
text: it.request.text,
|
||||
headers: it.request.headers.collect {
|
||||
headers: new MockRequestReport.Headers(headers: it.request.headers.collect {
|
||||
new Parameter(name: it.key, value: it.value)
|
||||
},
|
||||
queryParams: it.request.query.collect {
|
||||
}),
|
||||
queryParams: new MockRequestReport.QueryParams(queryParams: it.request.query.collect {
|
||||
new Parameter(name: it.key, value: it.value)
|
||||
},
|
||||
paths: it.request.path
|
||||
}),
|
||||
path: new MockRequestReport.Path(pathParts: it.request.path)
|
||||
),
|
||||
response: new MockResponseReport(
|
||||
statusCode: it.response.statusCode,
|
||||
text: it.response.text,
|
||||
headers: it.response.headers.collect {
|
||||
headers: new MockResponseReport.Headers(headers: it.response.headers.collect {
|
||||
new Parameter(name: it.key, value: it.value)
|
||||
}
|
||||
})
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -159,7 +162,7 @@ class HttpMockServer {
|
|||
}
|
||||
|
||||
private static void createErrorResponse(HttpExchange ex, Exception e) {
|
||||
createResponse(ex, new ExceptionOccured(message: e.message), 400)
|
||||
createResponse(ex, new ExceptionOccured(value: e.message), 400)
|
||||
}
|
||||
|
||||
void stop() {
|
||||
|
|
|
@ -3,7 +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 pl.touk.mockserver.api.common.Method
|
||||
|
||||
import java.util.concurrent.CopyOnWriteArrayList
|
||||
|
||||
|
@ -79,10 +79,8 @@ class Mock implements Comparable<Mock> {
|
|||
}
|
||||
}
|
||||
|
||||
void setSoap(String soap) {
|
||||
if (soap) {
|
||||
this.soap = Boolean.valueOf(soap)
|
||||
}
|
||||
void setSoap(Boolean soap) {
|
||||
this.soap = soap ?: false
|
||||
}
|
||||
|
||||
void setStatusCode(String statusCode) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue