Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/com/sun/net/httpserver/UnmodifiableHeadersTest.java
41152 views
1
/*
2
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 8251496
27
* @summary Test that UnmodifiableHeaders is in fact immutable
28
* @modules jdk.httpserver/sun.net.httpserver:+open
29
* @run testng/othervm UnmodifiableHeadersTest
30
*/
31
32
import java.io.InputStream;
33
import java.io.OutputStream;
34
import java.net.InetSocketAddress;
35
import java.net.URI;
36
import java.util.AbstractMap;
37
import java.util.List;
38
import java.util.Map;
39
import com.sun.net.httpserver.Headers;
40
import com.sun.net.httpserver.HttpContext;
41
import com.sun.net.httpserver.HttpExchange;
42
import com.sun.net.httpserver.HttpPrincipal;
43
import org.testng.annotations.Test;
44
import sun.net.httpserver.UnmodifiableHeaders;
45
import static org.testng.Assert.assertEquals;
46
import static org.testng.Assert.assertThrows;
47
48
public class UnmodifiableHeadersTest {
49
50
@Test
51
public static void testEquality() {
52
var headers = new Headers();
53
var unmodifiableHeaders1 = new UnmodifiableHeaders(headers);
54
assertEquals(unmodifiableHeaders1, headers);
55
assertEquals(unmodifiableHeaders1.hashCode(), headers.hashCode());
56
assertEquals(unmodifiableHeaders1.get("Foo"), headers.get("Foo"));
57
58
headers.add("Foo", "Bar");
59
var unmodifiableHeaders2 = new UnmodifiableHeaders(headers);
60
assertEquals(unmodifiableHeaders2, headers);
61
assertEquals(unmodifiableHeaders2.hashCode(), headers.hashCode());
62
assertEquals(unmodifiableHeaders2.get("Foo"), headers.get("Foo"));
63
}
64
65
@Test
66
public static void testUnmodifiableHeaders() {
67
var headers = new Headers();
68
headers.add("Foo", "Bar");
69
HttpExchange exchange = new TestHttpExchange(headers);
70
71
assertUnsupportedOperation(exchange.getRequestHeaders());
72
assertUnmodifiableCollection(exchange.getRequestHeaders());
73
}
74
75
static final Class<UnsupportedOperationException> UOP = UnsupportedOperationException.class;
76
77
static void assertUnsupportedOperation(Headers headers) {
78
assertThrows(UOP, () -> headers.add("a", "b"));
79
assertThrows(UOP, () -> headers.compute("c", (k, v) -> List.of("c")));
80
assertThrows(UOP, () -> headers.computeIfAbsent("d", k -> List.of("d")));
81
assertThrows(UOP, () -> headers.computeIfPresent("Foo", (k, v) -> null));
82
assertThrows(UOP, () -> headers.merge("e", List.of("e"), (k, v) -> List.of("e")));
83
assertThrows(UOP, () -> headers.put("f", List.of("f")));
84
assertThrows(UOP, () -> headers.putAll(Map.of()));
85
assertThrows(UOP, () -> headers.putIfAbsent("g", List.of("g")));
86
assertThrows(UOP, () -> headers.remove("h"));
87
assertThrows(UOP, () -> headers.replace("i", List.of("i")));
88
assertThrows(UOP, () -> headers.replace("j", List.of("j"), List.of("j")));
89
assertThrows(UOP, () -> headers.replaceAll((k, v) -> List.of("k")));
90
assertThrows(UOP, () -> headers.set("l", "m"));
91
assertThrows(UOP, () -> headers.clear());
92
}
93
94
static void assertUnmodifiableCollection(Headers headers) {
95
var entry = new AbstractMap.SimpleEntry<>("n", List.of("n"));
96
97
assertThrows(UOP, () -> headers.values().remove(List.of("Bar")));
98
assertThrows(UOP, () -> headers.values().removeAll(List.of("Bar")));
99
assertThrows(UOP, () -> headers.keySet().remove("Foo"));
100
assertThrows(UOP, () -> headers.keySet().removeAll(List.of("Foo")));
101
assertThrows(UOP, () -> headers.entrySet().remove(entry));
102
assertThrows(UOP, () -> headers.entrySet().removeAll(List.of(entry)));
103
}
104
105
static void assertUnmodifiableList(Headers headers) {
106
assertThrows(UOP, () -> headers.get("Foo").remove(0));
107
assertThrows(UOP, () -> headers.get("foo").remove(0));
108
assertThrows(UOP, () -> headers.values().stream().findFirst().orElseThrow().remove(0));
109
assertThrows(UOP, () -> headers.entrySet().stream().findFirst().orElseThrow().getValue().remove(0));
110
}
111
112
static class TestHttpExchange extends StubHttpExchange {
113
final UnmodifiableHeaders headers;
114
115
TestHttpExchange(Headers headers) {
116
this.headers = new UnmodifiableHeaders(headers);
117
}
118
119
@Override
120
public Headers getRequestHeaders() {
121
return headers;
122
}
123
}
124
125
static class StubHttpExchange extends HttpExchange {
126
@Override public Headers getRequestHeaders() { return null; }
127
@Override public Headers getResponseHeaders() { return null; }
128
@Override public URI getRequestURI() { return null; }
129
@Override public String getRequestMethod() { return null; }
130
@Override public HttpContext getHttpContext() { return null; }
131
@Override public void close() { }
132
@Override public InputStream getRequestBody() { return null; }
133
@Override public OutputStream getResponseBody() { return null; }
134
@Override public void sendResponseHeaders(int rCode, long responseLength) { }
135
@Override public InetSocketAddress getRemoteAddress() { return null; }
136
@Override public int getResponseCode() { return 0; }
137
@Override public InetSocketAddress getLocalAddress() { return null; }
138
@Override public String getProtocol() { return null; }
139
@Override public Object getAttribute(String name) { return null; }
140
@Override public void setAttribute(String name, Object value) { }
141
@Override public void setStreams(InputStream i, OutputStream o) { }
142
@Override public HttpPrincipal getPrincipal() { return null; }
143
}
144
}
145
146