| /* |
| * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| import jdk.incubator.http.HttpRequest; |
| import java.net.URI; |
| import jdk.incubator.http.HttpClient; |
| import java.time.Duration; |
| import java.util.function.BiFunction; |
| import java.util.function.Function; |
| import java.util.stream.Collectors; |
| import java.util.stream.Stream; |
| |
| /** |
| * @test |
| * @bug 8170064 |
| * @summary HttpRequest API documentation says:" Unless otherwise stated, |
| * {@code null} parameter values will cause methods |
| * of this class to throw {@code NullPointerException}". |
| */ |
| public class HttpRequestBuilderTest { |
| |
| static final URI TEST_URI = URI.create("http://www.foo.com/"); |
| |
| |
| public static void main(String[] args) throws Exception { |
| |
| HttpRequest.Builder builder = HttpRequest.newBuilder(); |
| builder = test1("uri", builder, builder::uri, (URI)null, |
| NullPointerException.class); |
| builder = test2("header", builder, builder::header, (String) null, "bar", |
| NullPointerException.class); |
| builder = test2("header", builder, builder::header, "foo", (String) null, |
| NullPointerException.class); |
| builder = test2("header", builder, builder::header, (String)null, |
| (String) null, NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, (String[]) null, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {null, "bar"}, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo", null}, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {null, null}, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo", "bar", null}, |
| NullPointerException.class, |
| IllegalArgumentException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo", "bar", null, null}, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo", "bar", "baz", null}, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo", "bar", null, "baz"}, |
| NullPointerException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo", "bar", "baz"}, |
| IllegalArgumentException.class); |
| builder = test1("headers", builder, builder::headers, |
| (String[]) new String[] {"foo"}, |
| IllegalArgumentException.class); |
| builder = test1("DELETE", builder, builder::DELETE, |
| (HttpRequest.BodyProcessor)null, null); |
| builder = test1("POST", builder, builder::POST, |
| (HttpRequest.BodyProcessor)null, null); |
| builder = test1("PUT", builder, builder::PUT, |
| (HttpRequest.BodyProcessor)null, null); |
| builder = test2("method", builder, builder::method, "GET", |
| (HttpRequest.BodyProcessor) null, null); |
| builder = test2("setHeader", builder, builder::setHeader, |
| (String) null, "bar", |
| NullPointerException.class); |
| builder = test2("setHeader", builder, builder::setHeader, |
| "foo", (String) null, |
| NullPointerException.class); |
| builder = test2("setHeader", builder, builder::setHeader, |
| (String)null, (String) null, |
| NullPointerException.class); |
| builder = test1("timeout", builder, builder::timeout, |
| (Duration)null, NullPointerException.class); |
| builder = test1("version", builder, builder::version, |
| (HttpClient.Version)null, |
| NullPointerException.class); |
| builder = test2("method", builder, builder::method, null, |
| HttpRequest.BodyProcessor.fromString("foo"), |
| NullPointerException.class); |
| // see JDK-8170093 |
| // |
| // builder = test2("method", builder, builder::method, "foo", |
| // HttpRequest.BodyProcessor.fromString("foo"), |
| // IllegalArgumentException.class); |
| // |
| // builder.build(); |
| |
| } |
| |
| private static boolean shouldFail(Class<? extends Exception> ...exceptions) { |
| return exceptions != null && exceptions.length > 0; |
| } |
| |
| private static String expectedNames(Class<? extends Exception> ...exceptions) { |
| return Stream.of(exceptions).map(Class::getSimpleName) |
| .collect(Collectors.joining("|")); |
| } |
| private static boolean isExpected(Exception x, |
| Class<? extends Exception> ...expected) { |
| return expected != null && Stream.of(expected) |
| .filter(c -> c.isInstance(x)) |
| .findAny().isPresent(); |
| } |
| |
| public static <R,P> R test1(String name, R receiver, Function<P, R> m, P arg, |
| Class<? extends Exception> ...ex) { |
| try { |
| R result = m.apply(arg); |
| if (!shouldFail(ex)) { |
| System.out.println("success: " + name + "(" + arg + ")"); |
| return result; |
| } else { |
| throw new AssertionError("Expected " + expectedNames(ex) |
| + " not raised for " + name + "(" + arg + ")"); |
| } |
| } catch (Exception x) { |
| if (!isExpected(x, ex)) { |
| throw x; |
| } else { |
| System.out.println("success: " + name + "(" + arg + ")" + |
| " - Got expected exception: " + x); |
| return receiver; |
| } |
| } |
| } |
| |
| |
| public static <R,P1, P2> R test2(String name, R receiver, BiFunction<P1, P2, R> m, |
| P1 arg1, P2 arg2, |
| Class<? extends Exception> ...ex) { |
| try { |
| R result = m.apply(arg1, arg2); |
| if (!shouldFail(ex)) { |
| System.out.println("success: " + name + "(" + arg1 + ", " |
| + arg2 + ")"); |
| return result; |
| } else { |
| throw new AssertionError("Expected " + expectedNames(ex) |
| + " not raised for " |
| + name + "(" + arg1 +", " + arg2 + ")"); |
| } |
| } catch (Exception x) { |
| if (!isExpected(x, ex)) { |
| throw x; |
| } else { |
| System.out.println("success: " + name + "(" + arg1 + ", " |
| + arg2 + ") - Got expected exception: " + x); |
| return receiver; |
| } |
| } |
| } |
| } |