/** * Return the input tuple on OK. * Function that returns null (no output) if the HTTP response * is not OK (200), otherwise it returns the input tuple. * The HTTP entity in the response is consumed and discarded. * @param <T> Type of input tuple. * @return Function that returns the input tuple on OK. */ public static <T> BiFunction<T,CloseableHttpResponse,T> inputOn200() { return inputOn(HttpStatus.SC_OK); }
/** * Create a basic authentication HTTP client with a fixed user and password. * @param user User for authentication * @param password Password for authentication * @return HTTP client with basic authentication. * * @see HttpStreams */ public static CloseableHttpClient basic(String user, String password) { return basic(()->user, ()->password); }
@Test public void testDelete() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); String url = "http://httpbin.org/delete"; TStream<String> stream = topology.strings(url); TStream<String> rc = HttpStreams.<String, String>requests( stream, HttpClients::noAuthentication, t -> HttpDelete.METHOD_NAME, t-> t, HttpResponders.inputOn200()); Tester tester = topology.getTester(); Condition<List<String>> endCondition = tester.streamContents(rc, url); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.valid()); }
@Test public void testPost() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); String url = "http://httpbin.org/post"; TStream<String> stream = topology.strings(url); TStream<String> rc = HttpStreams.<String, String>requestsWithBody( stream, HttpClients::noAuthentication, t -> HttpPost.METHOD_NAME, t-> t, t-> new ByteArrayEntity(t.getBytes()), HttpResponders.inputOn200()); Tester tester = topology.getTester(); Condition<List<String>> endCondition = tester.streamContents(rc, url); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.valid()); }
Function<JsonObject, String> uri, UnaryOperator<JsonObject> body) { return HttpStreams.<JsonObject, JsonObject> requestsWithBody(stream, clientCreator, t -> HttpPut.METHOD_NAME, uri, t -> new ByteArrayEntity(body.apply(t).toString().getBytes(StandardCharsets.UTF_8)), HttpResponders.json());
/** * Test basic authentication, first with valid user/password * and then with invalid (results in 401). * @throws Exception on failure */ @Test public void testBasicAuthentication() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); String url = "http://httpbin.org/basic-auth/"; TStream<Integer> rc = HttpStreams.<String,Integer>requests( topology.strings("A", "B"), () -> HttpClients.basic("usA", "pwdA4"), t-> HttpGet.METHOD_NAME, t-> url + "us" + t + "/pwd" + t + "4", (t,resp) -> resp.getStatusLine().getStatusCode()); Tester tester = topology.getTester(); Condition<List<Integer>> endCondition = tester.streamContents(rc, 200, 401); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.getResult().toString(), endCondition.valid()); }
@Test public void testStatusCode() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); String url = "http://httpbin.org/status/"; TStream<Integer> rc = HttpStreams.<Integer,Integer>requests( topology.collection(Arrays.asList(200, 404, 202)), HttpClients::noAuthentication, t-> HttpGet.METHOD_NAME, t-> url + Integer.toString(t), (t,resp) -> resp.getStatusLine().getStatusCode()); Tester tester = topology.getTester(); Condition<List<Integer>> endCondition = tester.streamContents(rc, 200, 404, 202); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.valid()); }
TStream<JsonObject> rc = HttpStreams.getJson( topology.collection(Arrays.asList(request)), HttpClients::noAuthentication,
TStream<JsonObject> rc = HttpStreams.deleteJson( stream, HttpClients::noAuthentication, t-> url + "a=" + t.get("a").getAsString() + "&b=" + t.get("b").getAsString()
@Test public void testJsonPost() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); final String url = "http://httpbin.org/post"; JsonObject body = new JsonObject(); body.addProperty("foo", getProp1()); body.addProperty("bar", getProp2()); TStream<JsonObject> stream = topology.collection(Arrays.asList(body)); TStream<JsonObject> rc = HttpStreams.postJson( stream, HttpClients::noAuthentication, t -> url, t -> t); TStream<Boolean> resStream = rc.map(j -> { assertTrue(j.has("request")); assertTrue(j.has("response")); JsonObject req = j.getAsJsonObject("request"); JsonObject res = j.getAsJsonObject("response"); assertTrue(res.has("status")); assertTrue(res.has("entity")); assertEquals(req, res.getAsJsonObject("entity").getAsJsonObject("json")); return true; }); rc.print(); Tester tester = topology.getTester(); Condition<List<Boolean>> endCondition = tester.streamContents(resStream, true); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.getResult().toString(), endCondition.valid()); }
TStream<JsonObject> rc = HttpStreams.putJson( stream, HttpClients::noAuthentication, t -> url, t -> t);
@Test public void testGet() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); String url = "http://httpbin.org/get"; TStream<String> rc = HttpStreams.<String,String>requests( topology.strings(url), HttpClients::noAuthentication, t-> HttpGet.METHOD_NAME, t->t, HttpResponders.inputOn200()); Tester tester = topology.getTester(); Condition<List<String>> endCondition = tester.streamContents(rc, url); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.valid()); }
@Test public void testPut() throws Exception { DirectProvider ep = new DirectProvider(); Topology topology = ep.newTopology(); String url = "http://httpbin.org/put"; TStream<String> stream = topology.strings(url); TStream<String> rc = HttpStreams.<String, String>requestsWithBody( stream, HttpClients::noAuthentication, t -> HttpPut.METHOD_NAME, t-> t, t-> new ByteArrayEntity(t.getBytes()), HttpResponders.inputOn200()); Tester tester = topology.getTester(); Condition<List<String>> endCondition = tester.streamContents(rc, url); tester.complete(ep, new JsonObject(), endCondition, 10, TimeUnit.SECONDS); assertTrue(endCondition.valid()); }
UnaryOperator<JsonObject> body) { return HttpStreams.<JsonObject, JsonObject> requestsWithBody(stream, clientCreator, t -> HttpPost.METHOD_NAME, uri, t -> new ByteArrayEntity(body.apply(t).toString().getBytes(StandardCharsets.UTF_8)), HttpResponders.json());