Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,15 @@ private AndroidJitEmulatorUtil() {}
public static final String TF_GLOBAL_CONFIG_PATH = "/mtt/scripts/host-config.xml";

public static String getVirtualDeviceNameInTradefed(String deviceId) {
if (!Flags.virtualDeviceServerIp.getNonNull().isEmpty()
&& !Flags.virtualDeviceServerUsername.getNonNull().isEmpty()) {
return deviceId;
}
Matcher matcher = LOCAL_NOOP_EMULATOR_ID_PATTERN.matcher(deviceId);
if (matcher.find()) {
return String.format("local-virtual-device-%s", matcher.group(2));
} else {
return "";
}
if (!Flags.virtualDeviceServerIp.getNonNull().isEmpty()
&& !Flags.virtualDeviceServerUsername.getNonNull().isEmpty()) {
return deviceId;
}
return "";
}

/**
Expand Down Expand Up @@ -90,30 +89,38 @@ public static int getPortFromDeviceId(String deviceId) throws MobileHarnessExcep
* @return the list of virtual device IDs
*/
public static ImmutableList<String> getAllVirtualDeviceIds() {
int emulatorNumber = Flags.androidJitEmulatorNum.getNonNull();
int localEmulatorNumber = Flags.androidJitEmulatorNum.getNonNull();
int remoteEmulatorNumber = Flags.remoteAndroidJitEmulatorNum.getNonNull();
List<String> emulatorIds = new ArrayList<>();

if (Flags.noopJitEmulator.getNonNull()) {
// Generate local emulators
if (localEmulatorNumber > 0) {
if (Flags.noopJitEmulator.getNonNull()) {
for (int i = 0; i < localEmulatorNumber; i++) {
emulatorIds.add(String.format("0.0.0.0:local-virtual-device-%d", i));
}
} else {
for (int i = 0; i < localEmulatorNumber; i++) {
emulatorIds.add(String.format("127.0.0.1:%d", EMULATOR_BASE_PORT + i));
}
}
}

// Generate remote emulators
if (remoteEmulatorNumber > 0) {
if (!Flags.virtualDeviceServerIp.getNonNull().isEmpty()
&& !Flags.virtualDeviceServerUsername.getNonNull().isEmpty()) {
for (int i = 0; i < emulatorNumber; i++) {
for (int i = 0; i < remoteEmulatorNumber; i++) {
emulatorIds.add(
String.format(
"gce-device-%s-%d-%s",
Flags.virtualDeviceServerIp.getNonNull(),
i,
Flags.virtualDeviceServerUsername.getNonNull()));
}
} else {
for (int i = 0; i < emulatorNumber; i++) {
emulatorIds.add(String.format("0.0.0.0:local-virtual-device-%d", i));
}
}
} else {
for (int i = 0; i < emulatorNumber; i++) {
emulatorIds.add(String.format("127.0.0.1:%d", EMULATOR_BASE_PORT + i));
}
}

return ImmutableList.copyOf(emulatorIds);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ public class Flags {
@FlagSpec(
name = "android_jit_emulator_num",
help =
"The maximum number of android Just-in-time emulators that could be run on the server"
+ " simultaneously.")
"The maximum number of android Just-in-time emulators that could be run on the local"
+ " server simultaneously.")
public static final Flag<Integer> androidJitEmulatorNum = Flag.value(0);

@FlagSpec(name = "api_config", help = "Path of the text format protobuf API config file.")
Expand Down Expand Up @@ -1321,6 +1321,13 @@ private static String getPublicDirDefaultOss() {
help = "If this flag is true, all tests will run as real-time tests.")
public static final Flag<Boolean> realTimeTest = Flag.value(false);

@FlagSpec(
name = "remote_android_jit_emulator_num",
help =
"The number of remote Android JIT emulators. This is reserved for virtual devices on"
+ " remote server, different from android_jit_emulator_num")
public static final Flag<Integer> remoteAndroidJitEmulatorNum = Flag.value(0);

@FlagSpec(
name = "remove_job_gen_files_when_finished",
help = "If this flag is true, all job generated files are removed after the job is done.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,25 @@ public void getVirtualDeviceNameInTradefed_remote() {
.isEqualTo("gce-device-10.0.0.1-1-mobileharness");
}

@Test
public void getVirtualDeviceNameInTradefed_bothLocalAndRemote() {
flags.setAll(
ImmutableMap.of(
"virtual_device_server_ip",
"10.0.0.1",
"virtual_device_server_username",
"mobileharness"));
// Local device name mapping should still work correctly even if remote flags are set.
assertThat(
AndroidJitEmulatorUtil.getVirtualDeviceNameInTradefed("0.0.0.0:local-virtual-device-0"))
.isEqualTo("local-virtual-device-0");
// Remote device name mapping should also work correctly.
assertThat(
AndroidJitEmulatorUtil.getVirtualDeviceNameInTradefed(
"gce-device-10.0.0.1-0-mobileharness"))
.isEqualTo("gce-device-10.0.0.1-0-mobileharness");
}

@Test
public void getAllVirtualDeviceIds_defaultSettings_returnsLocalhostPorts() {
flags.set("android_jit_emulator_num", "2");
Expand All @@ -86,6 +105,30 @@ public void getAllVirtualDeviceIds_defaultSettings_returnsLocalhostPorts() {
assertThat(deviceIds).containsExactly("127.0.0.1:6520", "127.0.0.1:6521").inOrder();
}

@Test
public void getAllVirtualDeviceIds_bothLocalAndRemote() {
flags.setAll(
ImmutableMap.of(
"android_jit_emulator_num",
"2",
"remote_android_jit_emulator_num",
"1",
"noop_jit_emulator",
"true",
"virtual_device_server_ip",
"10.0.0.1",
"virtual_device_server_username",
"mobileharness"));

ImmutableList<String> deviceIds = AndroidJitEmulatorUtil.getAllVirtualDeviceIds();
assertThat(deviceIds)
.containsExactly(
"0.0.0.0:local-virtual-device-0",
"0.0.0.0:local-virtual-device-1",
"gce-device-10.0.0.1-0-mobileharness")
.inOrder();
}

@Test
public void getPortFromDeviceId_success() throws Exception {
assertThat(AndroidJitEmulatorUtil.getPortFromDeviceId("127.0.0.1:6520")).isEqualTo(6520);
Expand Down
Loading