Skip to content

Commit 1e641eb

Browse files
committed
Convert test to com.sun.net.httpserver
1 parent 39f44c4 commit 1e641eb

File tree

1 file changed

+33
-41
lines changed

1 file changed

+33
-41
lines changed

src/test/java/hudson/plugins/jira/JiraSiteSecurity1029Test.java

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111
import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
1212
import com.cloudbees.plugins.credentials.domains.Domain;
1313
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
14+
import com.sun.net.httpserver.HttpExchange;
15+
import com.sun.net.httpserver.HttpHandler;
16+
import com.sun.net.httpserver.HttpServer;
1417
import hudson.model.Item;
1518
import hudson.model.User;
16-
import jakarta.servlet.ServletException;
17-
import jakarta.servlet.http.HttpServletRequest;
18-
import jakarta.servlet.http.HttpServletResponse;
1919
import java.io.IOException;
20+
import java.io.OutputStream;
21+
import java.net.HttpURLConnection;
22+
import java.net.InetAddress;
23+
import java.net.InetSocketAddress;
2024
import java.net.URI;
2125
import java.net.URL;
2226
import java.nio.charset.StandardCharsets;
@@ -26,11 +30,6 @@
2630
import jenkins.model.Jenkins;
2731
import jenkins.security.ApiTokenProperty;
2832
import net.sf.json.JSONObject;
29-
import org.eclipse.jetty.ee9.servlet.DefaultServlet;
30-
import org.eclipse.jetty.ee9.servlet.ServletContextHandler;
31-
import org.eclipse.jetty.ee9.servlet.ServletHolder;
32-
import org.eclipse.jetty.server.Server;
33-
import org.eclipse.jetty.server.ServerConnector;
3433
import org.htmlunit.HttpMethod;
3534
import org.htmlunit.Page;
3635
import org.htmlunit.WebRequest;
@@ -46,7 +45,7 @@
4645
@WithJenkins
4746
public class JiraSiteSecurity1029Test {
4847

49-
private Server server;
48+
private HttpServer server;
5049
private URI serverUri;
5150
private FakeJiraServlet servlet;
5251

@@ -240,41 +239,26 @@ void cannotLeakCredentials(JenkinsRule j) throws Exception {
240239
}
241240

242241
public void setupServer(JenkinsRule j) throws Exception {
243-
server = new Server();
244-
ServerConnector connector = new ServerConnector(server);
245242
// auto-bind to available port
246-
connector.setPort(0);
247-
server.addConnector(connector);
243+
server = HttpServer.create(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0);
248244

249245
servlet = new FakeJiraServlet(j);
250246

251-
ServletContextHandler context = new ServletContextHandler();
252-
ServletHolder servletHolder = new ServletHolder("default", servlet);
253-
context.addServlet(servletHolder, "/*");
254-
server.setHandler(context);
247+
server.createContext("/", servlet);
255248

256249
server.start();
257250

258-
String host = connector.getHost();
259-
if (host == null) {
260-
host = "localhost";
261-
}
262-
263-
int port = connector.getLocalPort();
264-
serverUri = new URI(String.format("http://%s:%d/", host, port));
251+
InetSocketAddress address = server.getAddress();
252+
serverUri = new URI(String.format("http://%s:%d/", address.getHostString(), address.getPort()));
265253
servlet.setServerUrl(serverUri);
266254
}
267255

268256
@AfterEach
269-
void stopEmbeddedJettyServer() {
270-
try {
271-
server.stop();
272-
} catch (Exception e) {
273-
e.printStackTrace();
274-
}
257+
void stopEmbeddedHttpServer() {
258+
server.stop(1);
275259
}
276260

277-
private static class FakeJiraServlet extends DefaultServlet {
261+
private static class FakeJiraServlet implements HttpHandler {
278262

279263
private JenkinsRule jenkinsRule;
280264
private URI serverUri;
@@ -296,11 +280,10 @@ public String getPasswordAndReset() {
296280
}
297281

298282
@Override
299-
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
300-
String path = req.getRequestURL().toString();
301-
String relativePath = path.substring(this.serverUri.toString().length());
283+
public void handle(HttpExchange he) throws IOException {
284+
String path = he.getRequestURI().getPath();
302285

303-
String authBasicBase64 = req.getHeader("Authorization");
286+
String authBasicBase64 = he.getRequestHeaders().getFirst("Authorization");
304287
String authBase64 = authBasicBase64.substring("Basic ".length());
305288
String auth = new String(Base64.getDecoder().decode(authBase64), StandardCharsets.UTF_8);
306289
String[] authArray = auth.split(":");
@@ -309,14 +292,18 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
309292

310293
this.pwdCollected = pwd;
311294

312-
switch (relativePath) {
313-
case "rest/api/latest/mypermissions":
314-
myPermissions(req, resp);
315-
break;
295+
try {
296+
if ("GET".equals(he.getRequestMethod()) && "/rest/api/latest/mypermissions".equals(path)) {
297+
myPermissions(he);
298+
} else {
299+
he.sendResponseHeaders(HttpURLConnection.HTTP_NOT_FOUND, -1);
300+
}
301+
} finally {
302+
he.close();
316303
}
317304
}
318305

319-
private void myPermissions(HttpServletRequest req, HttpServletResponse resp) throws IOException {
306+
private void myPermissions(HttpExchange he) throws IOException {
320307
Object body = new HashMap<String, Object>() {
321308
{
322309
put("permissions", new HashMap<String, Object>() {
@@ -335,7 +322,12 @@ private void myPermissions(HttpServletRequest req, HttpServletResponse resp) thr
335322
}
336323
};
337324

338-
resp.getWriter().write(JSONObject.fromObject(body).toString());
325+
String response = JSONObject.fromObject(body).toString();
326+
byte[] bytes = response.getBytes(StandardCharsets.UTF_8);
327+
he.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length);
328+
try (OutputStream os = he.getResponseBody()) {
329+
os.write(bytes);
330+
}
339331
}
340332
}
341333
}

0 commit comments

Comments
 (0)