From ee92adf066455bd8f3b173d7e5dcb9c1da90bb3d Mon Sep 17 00:00:00 2001 From: Andrei Zaitcev Date: Thu, 25 Aug 2022 14:47:13 +0100 Subject: [PATCH] Use getMountPoint to construct a path to Fork directory instead of hardcoding it --- .../fork/device/ScreenRecorderImpl.java | 6 +-- .../java/com/shazam/fork/runner/TestRun.java | 5 +- .../runner/listeners/CoverageListener.java | 7 +-- .../fork/system/io/RemoteFileManager.java | 53 +++++++++++++------ 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/fork-runner/src/main/java/com/shazam/fork/device/ScreenRecorderImpl.java b/fork-runner/src/main/java/com/shazam/fork/device/ScreenRecorderImpl.java index bb0971fc..dc88cdb0 100644 --- a/fork-runner/src/main/java/com/shazam/fork/device/ScreenRecorderImpl.java +++ b/fork-runner/src/main/java/com/shazam/fork/device/ScreenRecorderImpl.java @@ -105,7 +105,7 @@ public void saveScreenRecording(TestIdentifier test, File output) { try { recorderTask.awaitCompletion(); - String remoteFilePath = remoteVideoForTest(test); + String remoteFilePath = remoteVideoForTest(device.getDeviceInterface(), test); logger.debug("Save screen recording {} to {}", remoteFilePath, output); pullTestVideo(remoteFilePath, output); } catch (Exception e) { @@ -126,7 +126,7 @@ public void removeScreenRecording(TestIdentifier test) { try { recorderTask.awaitCompletion(); - String remoteFilePath = remoteVideoForTest(test); + String remoteFilePath = remoteVideoForTest(device.getDeviceInterface(), test); logger.debug("Remove screen recording {}", remoteFilePath); removeTestVideo(remoteFilePath); @@ -169,7 +169,7 @@ public void awaitCompletion() throws InterruptedException { @Override public void run() { try { - String remoteFilePath = remoteVideoForTest(test); + String remoteFilePath = remoteVideoForTest(deviceInterface, test); logger.debug("Started recording video {}", remoteFilePath); startRecordingTestVideo(remoteFilePath); diff --git a/fork-runner/src/main/java/com/shazam/fork/runner/TestRun.java b/fork-runner/src/main/java/com/shazam/fork/runner/TestRun.java index 7ebb89c8..1972ed16 100755 --- a/fork-runner/src/main/java/com/shazam/fork/runner/TestRun.java +++ b/fork-runner/src/main/java/com/shazam/fork/runner/TestRun.java @@ -21,7 +21,6 @@ import com.shazam.fork.model.TestCaseEvent; import com.shazam.fork.system.PermissionGrantingManager; import com.shazam.fork.system.io.RemoteFileManager; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +68,9 @@ public void execute() { if (testRunParameters.isCoverageEnabled()) { runner.setCoverage(true); - runner.addInstrumentationArg("coverageFile", RemoteFileManager.getCoverageFileName(new TestIdentifier(testClassName, testMethodName))); + String coverageFileName = + RemoteFileManager.getCoverageFileName(device, new TestIdentifier(testClassName, testMethodName)); + runner.addInstrumentationArg("coverageFile", coverageFileName); } String excludedAnnotation = testRunParameters.getExcludedAnnotation(); if (!Strings.isNullOrEmpty(excludedAnnotation)) { diff --git a/fork-runner/src/main/java/com/shazam/fork/runner/listeners/CoverageListener.java b/fork-runner/src/main/java/com/shazam/fork/runner/listeners/CoverageListener.java index 8d7e502c..1b0752ec 100644 --- a/fork-runner/src/main/java/com/shazam/fork/runner/listeners/CoverageListener.java +++ b/fork-runner/src/main/java/com/shazam/fork/runner/listeners/CoverageListener.java @@ -2,10 +2,11 @@ import com.android.ddmlib.testrunner.ITestRunListener; import com.android.ddmlib.testrunner.TestIdentifier; -import com.shazam.fork.model.*; +import com.shazam.fork.model.Device; +import com.shazam.fork.model.Pool; +import com.shazam.fork.model.TestCaseEvent; import com.shazam.fork.system.io.FileManager; import com.shazam.fork.system.io.RemoteFileManager; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +65,7 @@ public void testRunStopped(long elapsedTime) { @Override public void testRunEnded(long elapsedTime, Map runMetrics) { TestIdentifier testIdentifier = new TestIdentifier(testCase.getTestClass(), testCase.getTestMethod()); - final String remoteFile = RemoteFileManager.getCoverageFileName(testIdentifier); + final String remoteFile = RemoteFileManager.getCoverageFileName(device.getDeviceInterface(), testIdentifier); final File file = fileManager.createFile(COVERAGE, pool, device, testIdentifier); try { device.getDeviceInterface().pullFile(remoteFile, file.getAbsolutePath()); diff --git a/fork-runner/src/main/java/com/shazam/fork/system/io/RemoteFileManager.java b/fork-runner/src/main/java/com/shazam/fork/system/io/RemoteFileManager.java index 444d0f82..60e37690 100644 --- a/fork-runner/src/main/java/com/shazam/fork/system/io/RemoteFileManager.java +++ b/fork-runner/src/main/java/com/shazam/fork/system/io/RemoteFileManager.java @@ -16,57 +16,78 @@ import com.android.ddmlib.IDevice; import com.android.ddmlib.NullOutputReceiver; import com.android.ddmlib.ShellCommandUnresponsiveException; -import com.android.ddmlib.SyncException; import com.android.ddmlib.TimeoutException; import com.android.ddmlib.testrunner.TestIdentifier; -import java.io.IOException; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; + public class RemoteFileManager { private static final Logger logger = LoggerFactory.getLogger(RemoteFileManager.class); - private static final String FORK_DIRECTORY = "/sdcard/fork"; private static final NullOutputReceiver NO_OP_RECEIVER = new NullOutputReceiver(); - private static final String COVERAGE_DIRECTORY = FORK_DIRECTORY + "/coverage"; - private RemoteFileManager() {} + private RemoteFileManager() { + } public static void removeRemotePath(IDevice device, String remotePath) { executeCommand(device, "rm " + remotePath, "Could not delete remote file(s): " + remotePath); } public static void createCoverageDirectory(IDevice device) { - executeCommand(device, "mkdir " + COVERAGE_DIRECTORY, - "Could not create remote directory: " + COVERAGE_DIRECTORY); + String coverageDirectory = getCoverageDirectory(device); + executeCommand(device, "mkdir " + coverageDirectory, + "Could not create remote directory: " + coverageDirectory); } - public static String getCoverageFileName(TestIdentifier testIdentifier) { - return COVERAGE_DIRECTORY + "/" +testIdentifier.toString() + ".ec"; + public static String getCoverageFileName(IDevice device, TestIdentifier testIdentifier) { + return getCoverageDirectory(device) + "/" + testIdentifier.toString() + ".ec"; } public static void createRemoteDirectory(IDevice device) { - executeCommand(device, "mkdir " + FORK_DIRECTORY, "Could not create remote directory: " + FORK_DIRECTORY); + String forkDirectory = getForkDirectory(device); + executeCommand(device, "mkdir " + forkDirectory, "Could not create remote directory: " + forkDirectory); } public static void removeRemoteDirectory(IDevice device) { - executeCommand(device, "rm -r " + FORK_DIRECTORY, "Could not delete remote directory: " + FORK_DIRECTORY); + String forkDirectory = getForkDirectory(device); + executeCommand(device, "rm -r " + forkDirectory, "Could not delete remote directory: " + forkDirectory); } private static void executeCommand(IDevice device, String command, String errorMessage) { try { device.executeShellCommand(command, NO_OP_RECEIVER); - } catch (TimeoutException | AdbCommandRejectedException | ShellCommandUnresponsiveException | IOException e) { + } catch (TimeoutException | AdbCommandRejectedException | + ShellCommandUnresponsiveException | IOException e) { logger.error(errorMessage, e); } } - public static String remoteVideoForTest(TestIdentifier test) { - return remoteFileForTest(videoFileName(test)); + @NotNull + public static String remoteVideoForTest(IDevice device, TestIdentifier test) { + return remoteFileForTest(device, videoFileName(test)); } - private static String remoteFileForTest(String filename) { - return FORK_DIRECTORY + "/" + filename; + @NotNull + private static String remoteFileForTest(IDevice device, String filename) { + return getForkDirectory(device) + "/" + filename; + } + + @NotNull + private static String getCoverageDirectory(IDevice device) { + return getForkDirectory(device) + "/coverage"; + } + + @NotNull + private static String getForkDirectory(IDevice device) { + String externalStorage = device.getMountPoint(IDevice.MNT_EXTERNAL_STORAGE); + if (externalStorage != null) { + return externalStorage + "/fork"; + } else { + return "/sdcard/fork"; + } } private static String videoFileName(TestIdentifier test) {