Skip to content

Commit 064f433

Browse files
houshiancopybara-github
authored andcommitted
Internal change
PiperOrigin-RevId: 901252300
1 parent 6c02806 commit 064f433

5 files changed

Lines changed: 140 additions & 3 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright 2022 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.devtools.mobileharness.infra.client.api.mode.ats;
18+
19+
import com.google.common.collect.ImmutableListMultimap;
20+
import com.google.devtools.mobileharness.infra.client.api.controller.allocation.reserver.DeviceReserver;
21+
import com.google.devtools.mobileharness.infra.client.api.util.dimension.DeviceTempRequiredDimensionManager;
22+
import com.google.devtools.mobileharness.infra.client.api.util.dimension.DeviceTempRequiredDimensionManager.DeviceKey;
23+
import com.google.wireless.qa.mobileharness.shared.model.lab.DeviceLocator;
24+
import java.time.Duration;
25+
import javax.inject.Inject;
26+
import javax.inject.Singleton;
27+
28+
/** ATS mode implementation of {@link DeviceReserver}. */
29+
@Singleton
30+
class AtsDeviceReserver extends DeviceReserver {
31+
32+
private final DeviceTempRequiredDimensionManager deviceTempRequiredDimensionManager;
33+
34+
@Inject
35+
AtsDeviceReserver(DeviceTempRequiredDimensionManager deviceTempRequiredDimensionManager) {
36+
this.deviceTempRequiredDimensionManager = deviceTempRequiredDimensionManager;
37+
}
38+
39+
@Override
40+
public void addTempAllocationKeyToDevice(
41+
DeviceLocator deviceLocator,
42+
String allocationDimensionName,
43+
String allocationKey,
44+
Duration ttl) {
45+
deviceTempRequiredDimensionManager.addOrRemoveDimensions(
46+
new DeviceKey(deviceLocator.getLabLocator().getHostName(), deviceLocator.getSerial()),
47+
ImmutableListMultimap.of(allocationDimensionName, allocationKey),
48+
ttl);
49+
}
50+
}

src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats/AtsModeModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.google.devtools.mobileharness.infra.client.api.mode.ats.Annotations.AtsModeAbstractScheduler;
2222
import com.google.devtools.mobileharness.infra.client.api.mode.ats.Annotations.AtsModeDeviceQuerier;
2323
import com.google.devtools.mobileharness.infra.client.api.mode.ats.Annotations.JobSyncServiceVersionChecker;
24-
import com.google.devtools.mobileharness.infra.client.api.mode.local.LocalDeviceReserver;
2524
import com.google.devtools.mobileharness.infra.controller.scheduler.AbstractScheduler;
2625
import com.google.devtools.mobileharness.infra.controller.scheduler.simple.SimpleScheduler;
2726
import com.google.devtools.mobileharness.shared.labinfo.LabInfoProvider;
@@ -37,7 +36,7 @@ public class AtsModeModule extends AbstractModule {
3736
protected void configure() {
3837
bind(LabInfoProvider.class).to(RemoteDeviceManager.class);
3938
bind(DeviceQuerier.class).annotatedWith(AtsModeDeviceQuerier.class).to(DeviceQuerierImpl.class);
40-
bind(DeviceReserver.class).to(LocalDeviceReserver.class);
39+
bind(DeviceReserver.class).to(AtsDeviceReserver.class);
4140
bind(AbstractScheduler.class)
4241
.annotatedWith(AtsModeAbstractScheduler.class)
4342
.to(SimpleScheduler.class)

src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats/BUILD

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ java_library(
4343
],
4444
)
4545

46+
java_library(
47+
name = "ats_device_reserver",
48+
srcs = ["AtsDeviceReserver.java"],
49+
deps = [
50+
"//src/java/com/google/devtools/mobileharness/infra/client/api/controller/allocation/reserver",
51+
"//src/java/com/google/devtools/mobileharness/infra/client/api/util/dimension:device_temp_required_dimension_manager",
52+
"//src/java/com/google/wireless/qa/mobileharness/shared/model/lab:locator",
53+
"@maven//:com_google_guava_guava",
54+
"@maven//:javax_inject_jsr330_api",
55+
],
56+
)
57+
4658
java_library(
4759
name = "ats_mode",
4860
srcs = ["AtsMode.java"],
@@ -150,11 +162,11 @@ java_library(
150162
srcs = ["AtsModeModule.java"],
151163
deps = [
152164
":annotations",
165+
":ats_device_reserver",
153166
":device_querier",
154167
":remote_device_manager",
155168
"//src/java/com/google/devtools/mobileharness/infra/client/api/controller/allocation/reserver",
156169
"//src/java/com/google/devtools/mobileharness/infra/client/api/controller/device:querier",
157-
"//src/java/com/google/devtools/mobileharness/infra/client/api/mode/local:local_device_reserver",
158170
"//src/java/com/google/devtools/mobileharness/infra/controller/scheduler:abstract_scheduler",
159171
"//src/java/com/google/devtools/mobileharness/infra/controller/scheduler/simple",
160172
"//src/java/com/google/devtools/mobileharness/shared/labinfo:lab_info_provider",
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright 2022 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.devtools.mobileharness.infra.client.api.mode.ats;
18+
19+
import static com.google.common.truth.Truth.assertThat;
20+
import static org.mockito.ArgumentMatchers.eq;
21+
import static org.mockito.Mockito.verify;
22+
23+
import com.google.common.collect.ImmutableListMultimap;
24+
import com.google.devtools.mobileharness.infra.client.api.util.dimension.DeviceTempRequiredDimensionManager;
25+
import com.google.devtools.mobileharness.infra.client.api.util.dimension.DeviceTempRequiredDimensionManager.DeviceKey;
26+
import com.google.wireless.qa.mobileharness.shared.model.lab.DeviceLocator;
27+
import com.google.wireless.qa.mobileharness.shared.model.lab.LabLocator;
28+
import java.time.Duration;
29+
import org.junit.Before;
30+
import org.junit.Rule;
31+
import org.junit.Test;
32+
import org.junit.runner.RunWith;
33+
import org.junit.runners.JUnit4;
34+
import org.mockito.ArgumentCaptor;
35+
import org.mockito.Captor;
36+
import org.mockito.Mock;
37+
import org.mockito.junit.MockitoJUnit;
38+
import org.mockito.junit.MockitoRule;
39+
40+
@RunWith(JUnit4.class)
41+
public class AtsDeviceReserverTest {
42+
43+
@Rule public final MockitoRule mockito = MockitoJUnit.rule();
44+
45+
@Mock private DeviceTempRequiredDimensionManager manager;
46+
47+
@Captor private ArgumentCaptor<DeviceKey> deviceKeyCaptor;
48+
49+
private AtsDeviceReserver reserver;
50+
51+
@Before
52+
public void setUp() {
53+
reserver = new AtsDeviceReserver(manager);
54+
}
55+
56+
@Test
57+
public void addTempAllocationKeyToDevice() {
58+
LabLocator labLocator = new LabLocator("192.168.1.1", "remote-host");
59+
DeviceLocator deviceLocator = new DeviceLocator("uuid-123", labLocator);
60+
61+
reserver.addTempAllocationKeyToDevice(
62+
deviceLocator, "dimension", "value", Duration.ofMinutes(1));
63+
64+
verify(manager)
65+
.addOrRemoveDimensions(
66+
deviceKeyCaptor.capture(),
67+
eq(ImmutableListMultimap.of("dimension", "value")),
68+
eq(Duration.ofMinutes(1)));
69+
70+
DeviceKey key = deviceKeyCaptor.getValue();
71+
assertThat(key.labHostName()).isEqualTo("remote-host");
72+
assertThat(key.deviceUuid()).isEqualTo("uuid-123");
73+
}
74+
}

src/javatests/com/google/devtools/mobileharness/infra/client/api/mode/ats/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ java_library(
4444
"//src/java/com/google/devtools/mobileharness/infra/client/api/controller/allocation/allocator",
4545
"//src/java/com/google/devtools/mobileharness/infra/client/api/controller/device:querier",
4646
"//src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats:annotations",
47+
"//src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats:ats_device_reserver",
4748
"//src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats:ats_mode",
4849
"//src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats:device_querier",
4950
"//src/java/com/google/devtools/mobileharness/infra/client/api/mode/ats:job_sync_service",
@@ -66,6 +67,7 @@ java_library(
6667
"//src/java/com/google/wireless/qa/mobileharness/shared/model/job",
6768
"//src/java/com/google/wireless/qa/mobileharness/shared/model/job:job_schedule_unit",
6869
"//src/java/com/google/wireless/qa/mobileharness/shared/model/job:test_schedule_unit",
70+
"//src/java/com/google/wireless/qa/mobileharness/shared/model/lab:locator",
6971
"//src/java/com/google/wireless/qa/mobileharness/shared/proto:job_java_proto",
7072
"//src/java/com/google/wireless/qa/mobileharness/shared/util:net_util",
7173
"//src/javatests/com/google/devtools/mobileharness/builddefs:truth",

0 commit comments

Comments
 (0)