--- /dev/null 2017-10-28 22:49:55.551349757 -0700 +++ new/test/jdk/java/net/httpclient/HeadersTest2.java 2017-11-30 04:05:57.371400788 -0800 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2015, 2017, 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. + */ + +/** + * @test + * @bug 8087112 + * @summary Basic test for headers + */ + +import jdk.incubator.http.HttpHeaders; +import jdk.incubator.http.HttpRequest; +import java.net.URI; +import java.util.List; +import java.util.Iterator; + +public class HeadersTest2 { + static URI uri = URI.create("http://www.foo.com/"); + + static class CompareTest { + boolean succeed; + List nameValues1; + List nameValues2; + + + /** + * Each list contains header-name, header-value, header-name, header-value + * sequences. The test creates two requests with the two lists + * and compares the HttpHeaders objects returned from the requests + */ + CompareTest(boolean succeed, List l1, List l2) { + this.succeed = succeed; + this.nameValues1 = l1; + this.nameValues2 = l2; + } + + public void run() { + HttpRequest r1 = getRequest(nameValues1); + HttpRequest r2 = getRequest(nameValues2); + HttpHeaders h1 = r1.headers(); + HttpHeaders h2 = r2.headers(); + boolean equal = h1.equals(h2); + if (equal && !succeed) { + System.err.println("Expected failure"); + print(nameValues1); + print(nameValues2); + throw new RuntimeException(); + } else if (!equal && succeed) { + System.err.println("Expected success"); + print(nameValues1); + print(nameValues2); + throw new RuntimeException(); + } + + // Ensures that headers never equal a non-HttpHeaders type + if (h1.equals(new Object())) + throw new RuntimeException("Unexpected h1 equals Object"); + + if (h2.equals(r1)) + throw new RuntimeException("Unexpected h2 equals r1"); + } + + static void print(List list) { + System.err.print("{"); + for (String s : list) { + System.err.print(s + " "); + } + System.err.println("}"); + } + + HttpRequest getRequest(List headers) { + HttpRequest.Builder builder = HttpRequest.newBuilder(uri); + Iterator iterator = headers.iterator(); + while (iterator.hasNext()) { + String name = iterator.next(); + String value = iterator.next(); + builder.header(name, value); + } + return builder.GET().build(); + } + } + + static CompareTest test(boolean s, List l1, List l2) { + return new CompareTest(s, l1, l2); + } + + static CompareTest[] compareTests = new CompareTest[] { + test(true, List.of("Dontent-length", "99"), List.of("dontent-length", "99")), + test(false, List.of("Dontent-length", "99"), List.of("dontent-length", "100")), + test(false, List.of("Name1", "val1", "Name1", "val2", "name1", "val3"), + List.of("Name1", "val1", "Name1", "val2")), + test(true, List.of("Name1", "val1", "Name1", "val2", "name1", "val3"), + List.of("NaMe1", "val1", "NAme1", "val2", "name1", "val3")) + }; + + public static void main(String[] args) { + for (CompareTest test : compareTests) { + test.run(); + } + } +} +