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;
+ }
+}