in foundation/CDDBaselineJava/src/main/java/com/awslabs/aws/iot/greengrass/cdd/nativeprocesses/TempDirNativeProcessHelper.java [25:56]
public void runProgramAndBlock(String program, Optional<List<String>> arguments, Optional<Map<String, String>> environmentVariables, Optional<Consumer<String>> stdoutConsumer, Optional<Consumer<String>> stderrConsumer) {
String fullProgram = program;
if (!program.startsWith("/")) {
fullProgram = String.join("/", LAMBDA_DIRECTORY, getArchitecture(), program);
}
File programSource = new File(fullProgram);
File programDestination = new File(String.join("/", "", "tmp", new File(program).getName()));
try {
Files.copy(programSource.toPath(), programDestination.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
throw new UnsupportedOperationException(e);
}
try {
Files.setPosixFilePermissions(programDestination.toPath(), getPosixFilePermissions());
} catch (IOException e) {
throw new UnsupportedOperationException(e);
}
List<String> programAndArguments = new ArrayList<>();
programAndArguments.add(programDestination.getAbsolutePath());
arguments.ifPresent(args -> programAndArguments.addAll(args));
ProcessBuilder pb = new ProcessBuilder(programAndArguments);
environmentVariables.ifPresent(env -> pb.environment().putAll(env));
getOutputFromProcess(log, pb, true, stdoutConsumer, stderrConsumer);
}