test/jdk/com/sun/net/httpserver/bugs/8199849/BasicAuthenticatorCharset.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 58009 0daf32316b47
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57838
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     1
/*
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     4
 *
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     7
 * published by the Free Software Foundation.
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     8
 *
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    13
 * accompanied this code).
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    14
 *
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    18
 *
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    21
 * questions.
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    22
 */
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    23
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    24
/**
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    25
 * @test
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    26
 * @bug 8199849
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    27
 * @library /test/lib
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    28
 * @run main/othervm/timeout=6000 BasicAuthenticatorCharset
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    29
 * @summary Check for correct use of character sets with BasicAuthenticator() authentication
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    30
 */
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    31
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    32
import com.sun.net.httpserver.*;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    33
import jdk.test.lib.net.URIBuilder;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    34
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    35
import java.io.IOException;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    36
import java.io.InputStream;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    37
import java.net.*;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    38
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    39
import java.net.http.HttpClient;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    40
import java.net.http.HttpRequest;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    41
import java.net.http.HttpResponse;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    42
import java.util.concurrent.ExecutorService;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    43
import java.util.concurrent.Executors;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    44
import java.nio.charset.Charset;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    45
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    46
import static java.nio.charset.StandardCharsets.UTF_8;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    47
import static java.nio.charset.StandardCharsets.ISO_8859_1;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    48
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    49
/**
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    50
 * Test authentication
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    51
 */
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    52
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    53
public class BasicAuthenticatorCharset {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    54
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    55
    public static volatile int failCount = 0;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    56
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    57
    static final String TEST_USER = "test";
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    58
    static final String UNICODE_PW = "Selam D\u00fcnya. Ho\u015f\u00e7akal D\u00fcnya";
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    59
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    60
    static Handler testHandler;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    61
    static HttpServer testHttpServer;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    62
    static java.net.Authenticator clientAuth;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    63
    static HttpClient client;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    64
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    65
    static class Handler implements HttpHandler {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    66
        public void handle(HttpExchange t) throws IOException {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    67
            InputStream is = t.getRequestBody();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    68
            while (is.read() != -1) ;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    69
            is.close();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    70
            t.sendResponseHeaders(200, -1);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    71
            t.close();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    72
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    73
    }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    74
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    75
    static class ClientAuthenticator extends java.net.Authenticator {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    76
        public PasswordAuthentication getPasswordAuthentication() {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    77
            return new PasswordAuthentication(TEST_USER, UNICODE_PW.toCharArray());
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    78
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    79
    }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    80
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    81
    static void setAuthenticationPW(String path, String realm, String testPW, Charset charset) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    82
        HttpContext ctx = testHttpServer.createContext(path, testHandler);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    83
        BasicAuthenticator auth;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    84
        if (charset != null) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    85
            auth = new BasicAuthenticator(realm, charset) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    86
                public boolean checkCredentials(String username, String pw) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    87
                    return username.equals(TEST_USER) && pw.equals(testPW);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    88
                }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    89
            };
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    90
        } else {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    91
            auth = new BasicAuthenticator(realm) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    92
                public boolean checkCredentials(String username, String pw) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    93
                    return username.equals(TEST_USER) && pw.equals(testPW);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    94
                }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    95
            };
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    96
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    97
        ctx.setAuthenticator(auth);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    98
    }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
    99
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   100
    static void connectAndAuth(String path, int expectedStatus) throws Exception {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   101
        // path is prepended with /old or /new for old and new http client
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   102
        URL oldurl = URIBuilder.newBuilder()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   103
                .scheme("http")
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   104
                .loopback()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   105
                .port(testHttpServer.getAddress().getPort())
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   106
                .path("/old" + path)
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   107
                .toURL();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   108
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   109
        URI newuri = URIBuilder.newBuilder()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   110
            .scheme("http")
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   111
            .loopback()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   112
            .port(testHttpServer.getAddress().getPort())
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   113
            .path("/new" + path)
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   114
            .build();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   115
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   116
        // check old client
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   117
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   118
        HttpURLConnection testConnection = (HttpURLConnection) oldurl.openConnection(Proxy.NO_PROXY);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   119
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   120
        // Check for successful authentication
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   121
        int status = testConnection.getResponseCode();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   122
        if (status != 401) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   123
            InputStream is = testConnection.getInputStream();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   124
            while (is.read() != -1) ;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   125
            is.close();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   126
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   127
        if (status != expectedStatus) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   128
            System.err.println("Error (old): " + path);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   129
            failCount++;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   130
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   131
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   132
        HttpRequest request = HttpRequest.newBuilder()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   133
            .uri(newuri)
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   134
            .GET()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   135
            .build();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   136
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   137
        status = -1;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   138
        try {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   139
            HttpResponse<Void> response = client.send(request, HttpResponse.BodyHandlers.discarding());
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   140
            status = response.statusCode();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   141
        } catch (IOException e) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   142
            System.out.println("NEW: " + e);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   143
            status = 401; // limitation in new API.
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   144
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   145
        if (status != expectedStatus) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   146
            System.err.println("Error (new): " + path);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   147
            failCount++;
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   148
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   149
    }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   150
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   151
    public static void main(String[] args) throws Exception {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   152
        clientAuth = new ClientAuthenticator();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   153
        client = HttpClient.newBuilder()
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   154
            .authenticator(clientAuth)
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   155
            .build();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   156
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   157
        String defaultCharset = System.getProperty("file.encoding");
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   158
        boolean isUTF8 = defaultCharset.equalsIgnoreCase("UTF-8");
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   159
        testHandler = new Handler();
58009
0daf32316b47 8230435: Replace wildcard address with loopback or local host in tests - part 22
dfuchs
parents: 57838
diff changeset
   160
        InetSocketAddress addr = new InetSocketAddress(InetAddress.getLoopbackAddress(), 0);
57838
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   161
        testHttpServer = HttpServer.create(addr, 0);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   162
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   163
        // Set the passing credentials OLD client
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   164
        setAuthenticationPW("/old/test1/", "passingCharset@test.realm", UNICODE_PW, UTF_8);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   165
        setAuthenticationPW("/old/test2/", "failingCharset@test.realm", UNICODE_PW, ISO_8859_1);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   166
        setAuthenticationPW("/old/test3/", "defaultCharset@test.realm", UNICODE_PW, null);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   167
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   168
        // Set the passing credentials NEW client
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   169
        setAuthenticationPW("/new/test1/", "passingCharset@test.realm", UNICODE_PW, UTF_8);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   170
        setAuthenticationPW("/new/test2/", "failingCharset@test.realm", UNICODE_PW, ISO_8859_1);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   171
        setAuthenticationPW("/new/test3/", "defaultCharset@test.realm", UNICODE_PW, null);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   172
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   173
        ExecutorService executor = Executors.newCachedThreadPool();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   174
        testHttpServer.setExecutor(executor);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   175
        testHttpServer.start();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   176
        java.net.Authenticator.setDefault(clientAuth);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   177
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   178
        connectAndAuth("/test1/passingCharset.html", 200);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   179
        connectAndAuth("/test2/failingCharset.html", 401);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   180
        if (isUTF8) {
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   181
            connectAndAuth("/test3/defaultCharset.html", 200);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   182
        }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   183
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   184
        testHttpServer.stop(2);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   185
        executor.shutdown();
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   186
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   187
        // should fail once with UNICODE_PW and unsupporting character set
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   188
        if (failCount > 0)
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   189
            throw new RuntimeException("Fail count : " + failCount);
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   190
    }
78844dceede6 8199849: Add support for UTF-8 encoded credentials in HTTP Basic Authentication
michaelm
parents:
diff changeset
   191
}