diff --git a/java/sdk/pom.xml b/java/sdk/pom.xml index 05314ba52..27478a978 100644 --- a/java/sdk/pom.xml +++ b/java/sdk/pom.xml @@ -201,6 +201,7 @@ ${copilot.sdk.root}/test/harness ci + --omit-lockfile-registry-resolved=true --loglevel ${npm.loglevel} @@ -225,6 +226,7 @@ ci --ignore-scripts + --omit-lockfile-registry-resolved=true --loglevel ${npm.loglevel} diff --git a/java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java b/java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java index 353858135..68555a35b 100644 --- a/java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java +++ b/java/sdk/src/test/java/com/github/copilot/CliServerManagerTest.java @@ -70,20 +70,13 @@ void connectToServerTcpMode() throws Exception { } } - private static Process startBlockingProcess() throws IOException { - boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows"); - return (isWindows - ? new ProcessBuilder(System.getenv("COMSPEC"), "/c", "more") - : new ProcessBuilder("/usr/bin/cat")).start(); - } - @Test void connectToServerStdioMode() throws Exception { var options = new CopilotClientOptions(); var manager = new CliServerManager(options); // Create a dummy process for stdio mode - Process process = startBlockingProcess(); + Process process = new TestProcess(); try { JsonRpcClient client = manager.connectToServer(process, null, null); assertNotNull(client); diff --git a/java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java b/java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java index d6c0b5e14..79aaea10d 100644 --- a/java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java +++ b/java/sdk/src/test/java/com/github/copilot/JsonRpcClientTest.java @@ -133,16 +133,9 @@ void testIsConnectedWithSocketClosed() throws Exception { pair.serverSocket.close(); } - private static Process startBlockingProcess() throws IOException { - boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows"); - return (isWindows - ? new ProcessBuilder(System.getenv("COMSPEC"), "/c", "more") - : new ProcessBuilder("/usr/bin/cat")).start(); - } - @Test void testIsConnectedWithProcess() throws Exception { - Process proc = startBlockingProcess(); + Process proc = new TestProcess(); try (var client = JsonRpcClient.fromProcess(proc)) { assertTrue(client.isConnected()); } @@ -150,7 +143,7 @@ void testIsConnectedWithProcess() throws Exception { @Test void testIsConnectedWithProcessDead() throws Exception { - Process proc = startBlockingProcess(); + Process proc = new TestProcess(); var client = JsonRpcClient.fromProcess(proc); proc.destroy(); proc.waitFor(5, TimeUnit.SECONDS); @@ -162,7 +155,7 @@ void testIsConnectedWithProcessDead() throws Exception { @Test void testGetProcessReturnsProcess() throws Exception { - Process proc = startBlockingProcess(); + Process proc = new TestProcess(); try (var client = JsonRpcClient.fromProcess(proc)) { assertSame(proc, client.getProcess()); } diff --git a/java/sdk/src/test/java/com/github/copilot/TestProcess.java b/java/sdk/src/test/java/com/github/copilot/TestProcess.java new file mode 100644 index 000000000..f7187ae67 --- /dev/null +++ b/java/sdk/src/test/java/com/github/copilot/TestProcess.java @@ -0,0 +1,65 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +package com.github.copilot; + +import java.io.InputStream; +import java.io.OutputStream; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +final class TestProcess extends Process { + + private final CountDownLatch terminated = new CountDownLatch(1); + + @Override + public OutputStream getOutputStream() { + return OutputStream.nullOutputStream(); + } + + @Override + public InputStream getInputStream() { + return InputStream.nullInputStream(); + } + + @Override + public InputStream getErrorStream() { + return InputStream.nullInputStream(); + } + + @Override + public int waitFor() throws InterruptedException { + terminated.await(); + return 0; + } + + @Override + public boolean waitFor(long timeout, TimeUnit unit) throws InterruptedException { + return terminated.await(timeout, unit); + } + + @Override + public int exitValue() { + if (isAlive()) { + throw new IllegalThreadStateException("Process has not exited"); + } + return 0; + } + + @Override + public void destroy() { + terminated.countDown(); + } + + @Override + public Process destroyForcibly() { + destroy(); + return this; + } + + @Override + public boolean isAlive() { + return terminated.getCount() > 0; + } +}