mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-21 23:20:23 +00:00
Fix standalone unit tests
This commit is contained in:
parent
146d1b5d6a
commit
4ba3687dc8
6 changed files with 64 additions and 42 deletions
|
@ -15,3 +15,7 @@ All components are modularized, including all their dependencies.
|
|||
In case a dependency is (sadly) not modularized yet, module information is manually added using [moditect](https://github.com/moditect/moditect-gradle-plugin).
|
||||
These dependency generation rules are accumulated in the [X-Pipe dependencies](https://github.com/xpipe-io/xpipe_java_deps)
|
||||
repository, which is shared between all components and integrated as a git submodule.
|
||||
|
||||
Some unit tests depend on a connection to an X-Pipe daemon to properly function.
|
||||
To launch the installed daemon, it is required that the `XPIPE_HOME` environment variable
|
||||
is set or the `xpipe` / `xpipe.exe` CLI executable is added to the `PATH` variable.
|
||||
|
|
|
@ -28,7 +28,10 @@ dependencies {
|
|||
}
|
||||
|
||||
def canTestWithDev = findProject(':app') != null
|
||||
def daemonCommand = canTestWithDev ? "cmd.exe /c \"$rootDir\\gradlew.bat\" :app:run" : 'xpipe.exe'
|
||||
def home = System.getenv('XPIPE_HOME')
|
||||
String daemonCommand = canTestWithDev ?
|
||||
"cmd.exe /c \\\"$rootDir\\gradlew.bat\\\" :app:run" :
|
||||
"cmd.exe /c \\\"$home\\app\\xpipe.exe\\\""
|
||||
|
||||
test {
|
||||
workingDir = rootDir
|
||||
|
@ -40,11 +43,12 @@ test {
|
|||
" -Dio.xpipe.app.dataDir=$projectDir/local/" +
|
||||
" -Dio.xpipe.storage.persist=false" +
|
||||
" -Dio.xpipe.app.writeSysOut=true" +
|
||||
" -Dio.xpipe.app.writeLogs=true" +
|
||||
// " -Dio.xpipe.beacon.debugOutput=true" +
|
||||
" -Dio.xpipe.app.logLevel=trace"
|
||||
|
||||
// API properties
|
||||
// systemProperty 'io.xpipe.beacon.debugOutput', "true"
|
||||
// systemProperty 'io.xpipe.beacon.debugExecOutput', "true"
|
||||
systemProperty 'io.xpipe.beacon.debugExecOutput', "true"
|
||||
systemProperty "io.xpipe.beacon.port", "21722"
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ public class ConnectionFactory {
|
|||
throw new AssertionError();
|
||||
}
|
||||
|
||||
XPipeConnection.waitForStartup();
|
||||
XPipeConnection.waitForStartup().orElseThrow();
|
||||
if (!BeaconServer.isRunning()) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
|
|
@ -33,6 +33,10 @@ public class BeaconServer {
|
|||
|
||||
private static void startFork(String custom) throws IOException {
|
||||
boolean print = BeaconConfig.execDebugEnabled();
|
||||
if (print) {
|
||||
System.out.println("Executing custom daemon launch command: " + custom);
|
||||
}
|
||||
System.out.println(System.getenv());
|
||||
var proc = Runtime.getRuntime().exec(custom);
|
||||
new Thread(null, () -> {
|
||||
try {
|
||||
|
@ -44,10 +48,29 @@ public class BeaconServer {
|
|||
System.out.println("[xpiped] " + line);
|
||||
}
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
} catch (Exception ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
}, "daemon fork").start();
|
||||
}, "daemon fork sysout").start();
|
||||
|
||||
new Thread(null, () -> {
|
||||
try {
|
||||
InputStreamReader isr = new InputStreamReader(proc.getErrorStream());
|
||||
BufferedReader br = new BufferedReader(isr);
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
if (print) {
|
||||
System.err.println("[xpiped] " + line);
|
||||
}
|
||||
}
|
||||
int exit = proc.waitFor();
|
||||
if (exit != 0) {
|
||||
System.err.println("Daemon launch command failed");
|
||||
}
|
||||
} catch (Exception ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
}, "daemon fork syserr").start();
|
||||
}
|
||||
|
||||
public static boolean tryStart() throws Exception {
|
||||
|
@ -57,10 +80,10 @@ public class BeaconServer {
|
|||
return true;
|
||||
}
|
||||
|
||||
var launcher = getLauncherExecutable();
|
||||
if (launcher.isPresent()) {
|
||||
// Tell launcher that we launched from an external tool
|
||||
new ProcessBuilder(launcher.get().toString(), "--external")
|
||||
var daemonExecutable = getDaemonExecutable();
|
||||
if (daemonExecutable.isPresent()) {
|
||||
// Tell daemon that we launched from an external tool
|
||||
new ProcessBuilder(daemonExecutable.get().toString(), "--external")
|
||||
.redirectErrorStream(true)
|
||||
.redirectOutput(ProcessBuilder.Redirect.DISCARD)
|
||||
.start();
|
||||
|
@ -76,35 +99,20 @@ public class BeaconServer {
|
|||
return res.isSuccess();
|
||||
}
|
||||
|
||||
private static Optional<Path> getPortableLauncherExecutable() {
|
||||
private static Optional<Path> getDaemonExecutableFromHome() {
|
||||
var env = System.getenv("XPIPE_HOME");
|
||||
if (env == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
Path file;
|
||||
|
||||
// Prepare for invalid XPIPE_HOME path value
|
||||
try {
|
||||
if (System.getProperty("os.name").startsWith("Windows")) {
|
||||
file = Path.of(env, "xpipe_launcher.exe");
|
||||
file = Path.of(env, "app", "xpipe.exe");
|
||||
} else {
|
||||
file = Path.of(env, "xpipe_launcher");
|
||||
}
|
||||
return Files.exists(file) ? Optional.of(file) : Optional.empty();
|
||||
} catch (Exception ex) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
public static Optional<Path> getLauncherExecutable() {
|
||||
var portable = getPortableLauncherExecutable();
|
||||
if (portable.isPresent()) {
|
||||
return portable;
|
||||
}
|
||||
|
||||
try {
|
||||
Path file;
|
||||
if (System.getProperty("os.name").startsWith("Windows")) {
|
||||
file = Path.of(System.getenv("LOCALAPPDATA"), "X-Pipe", "xpipe_launcher.exe");
|
||||
} else {
|
||||
file = Path.of("/opt/xpipe/xpipe_launcher");
|
||||
file = Path.of(env, "app", "bin", "xpipe");
|
||||
}
|
||||
return Files.exists(file) ? Optional.of(file) : Optional.empty();
|
||||
} catch (Exception ex) {
|
||||
|
@ -113,15 +121,21 @@ public class BeaconServer {
|
|||
}
|
||||
|
||||
public static Optional<Path> getDaemonExecutable() {
|
||||
try {
|
||||
var home = getDaemonExecutableFromHome();
|
||||
if (home.isPresent()) {
|
||||
return home;
|
||||
}
|
||||
|
||||
Path file;
|
||||
if (System.getProperty("os.name").startsWith("Windows")) {
|
||||
file = Path.of(System.getenv("LOCALAPPDATA"), "X-Pipe", "app", "xpipe.exe");
|
||||
} else {
|
||||
file = Path.of("/opt/xpipe/bin/xpipe");
|
||||
file = Path.of("/opt/xpipe/app/bin/xpipe");
|
||||
}
|
||||
return Files.exists(file) ? Optional.of(file) : Optional.empty();
|
||||
} catch (Exception ex) {
|
||||
|
||||
if (Files.exists(file)) {
|
||||
return Optional.of(file);
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,5 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
rootProject.name = 'xpipe_java'
|
||||
|
||||
include 'api'
|
||||
include 'core'
|
||||
include 'beacon'
|
||||
include 'api'
|
||||
include 'extension'
|
||||
|
||||
include 'sample_extension'
|
||||
|
|
Loading…
Reference in a new issue