@Override protected RestServer createServer(final int port) { return restServer(port, log()); }
public ActualHttpServer newHttpServer(final Optional<Integer> port, final MocoConfig[] configs) { if (isResource()) { ActualRestServer server = new ActualRestServer(port, Optional.<HttpsCertificate>absent(), log(), configs); RestSetting[] settings = resource.getSettings(); server.resource(resource.getName(), head(settings), tail(settings)); return server; } ActualHttpServer server = ActualHttpServer.createLogServer(port, configs); bindTo(server); return server; } }
@Test public void should_log_request_and_response() throws Exception { HttpServer server = httpServer(port(), log()); server.request(by("0XCAFE")).response("0XBABE"); File file = folder.newFile(); System.setOut(new PrintStream(new FileOutputStream(file))); running(server, new Runnable() { @Override public void run() throws Exception { assertThat(helper.postContent(root(), "0XCAFE"), is("0XBABE")); } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("0XBABE")); assertThat(actual, containsString("0XCAFE")); }
@Test public void should_log_request_and_response_into_file_with_charset() throws Exception { File file = folder.newFile(); HttpServer server = httpServer(port(), log(file.getAbsolutePath(), Charset.forName("UTF-8"))); server.request(by("0XCAFE")).response("0XBABE"); running(server, new Runnable() { @Override public void run() throws Exception { assertThat(helper.postContent(root(), "0XCAFE"), is("0XBABE")); } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("0XBABE")); assertThat(actual, containsString("0XCAFE")); }
@Test public void should_log_request_and_response_with_exception() throws Exception { File file = folder.newFile(); HttpServer server = httpServer(port(), log(file.getAbsolutePath())); ResponseHandler mock = mock(ResponseHandler.class); doThrow(RuntimeException.class).when(mock).writeToResponse(any(SessionContext.class)); server.request(by("0XCAFE")).response(mock); running(server, new Runnable() { @Override public void run() throws Exception { try { helper.postContent(root(), "0XCAFE"); } catch (IOException ignored) { } } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("RuntimeException")); }
@Test public void should_log_request_and_response_into_file() throws Exception { File file = folder.newFile(); HttpServer server = httpServer(port(), log(file.getAbsolutePath())); server.request(by("0XCAFE")).response("0XBABE"); running(server, new Runnable() { @Override public void run() throws Exception { assertThat(helper.postContent(root(), "0XCAFE"), is("0XBABE")); } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("0XBABE")); assertThat(actual, containsString("0XCAFE")); }
@Test public void should_log_request_and_response_into_file() throws Exception { File file = folder.newFile(); SocketServer socketServer = socketServer(port(), log(file.getAbsolutePath())); socketServer.request(by("0XCAFE")).response(line("0XBABE")); running(socketServer, new Runnable() { @Override public void run() throws Exception { helper.connect(); assertThat(helper.send("0XCAFE"), is("0XBABE")); helper.close(); } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("0XBABE")); assertThat(actual, containsString("0XCAFE")); }
@Test public void should_log_request_and_response() throws Exception { RestServer server = restServer(port(), log()); Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "0XCAFE"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "0XBABE"; server.resource("targets", get("1").response(json(resource1)), get("2").response(json(resource2)) ); File file = folder.newFile(); System.setOut(new PrintStream(new FileOutputStream(file))); running(server, new Runnable() { @Override public void run() throws Exception { helper.get(remoteUrl("/targets")); } }); String actual = Files.toString(file, Charset.defaultCharset()); assertThat(actual, containsString("0XCAFE")); assertThat(actual, containsString("0XBABE")); }
@Test public void should_match_request_with_gbk_resource() throws Exception { server = httpServer(port(), log()); server.request(by(json(pathResource("gbk.json", Charset.forName("GBK"))))).response("response"); running(server, new Runnable() { @Override public void run() throws Exception { String result = helper.postBytes(root(), "{\"message\": \"请求\"}".getBytes()); assertThat(result, is("response")); } }); }
@Test public void should_match_gbk_request() throws Exception { server = httpServer(port(), log()); final Charset gbk = Charset.forName("GBK"); server.request(by(json(pathResource("gbk.json", gbk)))).response("response"); running(server, new Runnable() { @Override public void run() throws Exception { URL resource = Resources.getResource("gbk.json"); byte[] bytes = ByteStreams.toByteArray(resource.openStream()); String result = helper.postBytes(root(), bytes, gbk); assertThat(result, is("response")); } }); }
@Test public void should_match_form_value_with_charset() throws Exception { server = httpServer(port(), log()); server.post(eq(form("name"), "表单")).response("foobar"); running(server, new Runnable() { @Override public void run() throws Exception { org.apache.http.client.fluent.Request request = Post(root()).bodyForm(of(new BasicNameValuePair("name", "表单")), Charset.forName("GBK")); assertThat(helper.executeAsString(request), is("foobar")); } }); }
@Test public void should_return_header_from_file_root() throws Exception { server = httpServer(port(), log(), fileRoot("src/test/resources")); server.response(header("foo", file("foo.response"))); running(server, new Runnable() { @Override public void run() throws IOException { Request request = Request.Get(root()); Header header = helper.execute(request).getFirstHeader("foo"); assertThat(header.getValue(), is("foo.response")); } }); }
@Test public void should_verify_expected_request_and_log_at_same_time() throws Exception { final HttpServer server = httpServer(port(), hit, log()); server.get(by(uri("/foo"))).response("bar"); running(server, new Runnable() { @Override public void run() throws Exception { assertThat(helper.get(remoteUrl("/foo")), is("bar")); } }); hit.verify(by(uri("/foo")), times(1)); }
@Test public void should_verify_expected_request_and_log_at_same_time_for_https() throws Exception { final HttpServer server = httpsServer(port(), DEFAULT_CERTIFICATE, hit, log()); server.get(by(uri("/foo"))).response("bar"); running(server, new Runnable() { @Override public void run() throws Exception { assertThat(helper.get(remoteHttpsUrl("/foo")), is("bar")); } }); hit.verify(by(uri("/foo")), times(1)); } }
@Test public void should_forward_gbk_request() throws Exception { server = httpServer(port(), log()); final Charset gbk = Charset.forName("GBK"); server.request(and(by(uri("/proxy")), by(json(pathResource("gbk.json", gbk))))).response("response"); server.response(proxy(remoteUrl("/proxy"))); running(server, new Runnable() { @Override public void run() throws Exception { URL resource = Resources.getResource("gbk.json"); byte[] bytes = ByteStreams.toByteArray(resource.openStream()); String result = helper.postBytes(root(), bytes, gbk); assertThat(result, is("response")); } }); } }
@Test public void should_verify_expected_request_and_log_at_same_time() throws Exception { RequestHit hit = requestHit(); final SocketServer socketServer = socketServer(port(), hit, log()); socketServer.request(by("foo")).response(line("bar")); running(socketServer, new Runnable() { @Override public void run() throws Exception { helper = new MocoSocketHelper(local(), socketServer.port()); helper.connect(); assertThat(helper.send("foo"), is("bar")); helper.close(); } }); hit.verify(by("foo"), once()); }
@Test public void should_verify_expected_request_and_log_at_same_time() throws Exception { Plain resource1 = new Plain(); resource1.code = 1; resource1.message = "hello"; Plain resource2 = new Plain(); resource2.code = 2; resource2.message = "world"; final RequestHit hit = requestHit(); final RestServer server = restServer(port(), hit, log()); server.resource("targets", get("1").response(json(resource1)), get("2").response(json(resource2)) ); running(server, new Runnable() { @Override public void run() throws Exception { Plain response1 = getResource("/targets/1"); assertThat(response1.code, is(1)); assertThat(response1.message, is("hello")); Plain response2 = getResource("/targets/2"); assertThat(response2.code, is(2)); assertThat(response2.message, is("world")); } }); hit.verify(by(uri("/targets/1")), times(1)); hit.verify(by(uri("/targets/2")), times(1)); }
public ActualHttpServer newHttpServer(final Optional<Integer> port, final MocoConfig[] configs) { if (isResource()) { ActualRestServer server = new ActualRestServer(port, Optional.<HttpsCertificate>absent(), log(), configs); RestSetting[] settings = resource.getSettings(); server.resource(resource.getName(), head(settings), tail(settings)); return server; } ActualHttpServer server = ActualHttpServer.createLogServer(port, configs); bindTo(server); return server; } }
@Before public void setUp() { server = httpServer(12306, log()); http = new CommonsHttp(); }