Skip to content

Commit ce18bd7

Browse files
DeviceInfracopybara-github
authored andcommitted
Internal change
PiperOrigin-RevId: 876640803
1 parent 37f2d34 commit ce18bd7

File tree

6 files changed

+381
-0
lines changed

6 files changed

+381
-0
lines changed

src/java/com/google/devtools/mobileharness/fe/v6/service/config/util/BUILD

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,17 @@ java_library(
3333
"@maven//:com_google_protobuf_protobuf_java",
3434
],
3535
)
36+
37+
java_library(
38+
name = "config_service_capability",
39+
srcs = [
40+
"ConfigServiceCapability.java",
41+
"ConfigServiceCapabilityFactory.java",
42+
],
43+
deps = [
44+
"//src/devtools/mobileharness/fe/v6/service/proto/config:config_resources_java_proto",
45+
"//src/java/com/google/devtools/mobileharness/fe/v6/service/util",
46+
"//src/java/com/google/devtools/mobileharness/shared/util/flags",
47+
"@maven//:com_google_inject_extensions_guice_assistedinject",
48+
],
49+
)
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
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.fe.v6.service.config.util;
18+
19+
import com.google.devtools.mobileharness.fe.v6.service.proto.config.DeviceConfigUiStatus;
20+
import com.google.devtools.mobileharness.fe.v6.service.proto.config.Editability;
21+
import com.google.devtools.mobileharness.fe.v6.service.proto.config.HostConfigUiStatus;
22+
import com.google.devtools.mobileharness.fe.v6.service.proto.config.HostDeviceConfigUiStatus;
23+
import com.google.devtools.mobileharness.fe.v6.service.proto.config.HostPropertiesUiStatus;
24+
import com.google.devtools.mobileharness.fe.v6.service.proto.config.PartStatus;
25+
import com.google.devtools.mobileharness.fe.v6.service.util.Environment;
26+
import com.google.devtools.mobileharness.shared.util.flags.Flags;
27+
import com.google.inject.assistedinject.Assisted;
28+
import com.google.inject.assistedinject.AssistedInject;
29+
30+
/**
31+
* Defines the capabilities and scope of the Config Service based on the current environment and
32+
* target universe.
33+
*/
34+
public class ConfigServiceCapability {
35+
36+
private final Environment environment;
37+
private final String universe;
38+
39+
@AssistedInject
40+
ConfigServiceCapability(Environment environment, @Assisted String universe) {
41+
this.environment = environment;
42+
this.universe = universe;
43+
}
44+
45+
/** Returns true if the configuration service is available for the current context. */
46+
public boolean isConfigServiceAvailable() {
47+
if (!Flags.instance().feConnectToConfigServer.get()) {
48+
return false;
49+
}
50+
51+
if (environment.isGoogleInternal()) {
52+
return universe.isEmpty() || universe.equals("google_1p");
53+
}
54+
55+
// OSS/ATS only supports the default context (empty universe).
56+
return universe.isEmpty();
57+
}
58+
59+
/**
60+
* Checks if the configuration service is available and throws an {@link
61+
* UnsupportedOperationException} with an environment-aware message if not.
62+
*/
63+
public void checkConfigServiceAvailability() {
64+
if (isConfigServiceAvailable()) {
65+
return;
66+
}
67+
68+
if (!Flags.instance().feConnectToConfigServer.getNonNull()) {
69+
throw new UnsupportedOperationException("Configuration service is currently disabled.");
70+
}
71+
72+
if (environment.isGoogleInternal()) {
73+
throw new UnsupportedOperationException(
74+
String.format(
75+
"Configuration operations are not currently supported for universe '%s'.", universe));
76+
}
77+
78+
throw new UnsupportedOperationException(
79+
"Configuration operations are not currently supported.");
80+
}
81+
82+
/** Calculates UI status for host configuration components. */
83+
public HostConfigUiStatus calculateHostUiStatus() {
84+
boolean isAts = environment.isAts();
85+
86+
return HostConfigUiStatus.newBuilder()
87+
.setHostAdmins(
88+
PartStatus.newBuilder()
89+
.setVisible(!isAts)
90+
.setEditability(Editability.newBuilder().setEditable(!isAts).build())
91+
.build())
92+
.setDeviceConfigMode(
93+
PartStatus.newBuilder()
94+
.setVisible(true)
95+
.setEditability(Editability.newBuilder().setEditable(true).build())
96+
.build())
97+
.setDeviceConfig(
98+
HostDeviceConfigUiStatus.newBuilder()
99+
.setSectionStatus(
100+
PartStatus.newBuilder()
101+
.setVisible(true)
102+
.setEditability(Editability.newBuilder().setEditable(true).build())
103+
.build())
104+
.setSubSections(calculateDeviceUiStatus())
105+
.build())
106+
.setHostProperties(
107+
HostPropertiesUiStatus.newBuilder()
108+
.setSectionStatus(
109+
PartStatus.newBuilder()
110+
.setVisible(!isAts)
111+
.setEditability(Editability.newBuilder().setEditable(!isAts).build())
112+
.build())
113+
.build())
114+
.setDeviceDiscovery(
115+
PartStatus.newBuilder()
116+
.setVisible(!isAts)
117+
.setEditability(Editability.newBuilder().setEditable(!isAts).build())
118+
.build())
119+
.build();
120+
}
121+
122+
/** Calculates UI status for device configuration components. */
123+
public DeviceConfigUiStatus calculateDeviceUiStatus() {
124+
boolean isAts = environment.isAts();
125+
return DeviceConfigUiStatus.newBuilder()
126+
.setPermissions(
127+
PartStatus.newBuilder()
128+
.setVisible(!isAts)
129+
.setEditability(Editability.newBuilder().setEditable(!isAts).build())
130+
.build())
131+
.setWifi(
132+
PartStatus.newBuilder()
133+
.setVisible(true)
134+
.setEditability(Editability.newBuilder().setEditable(true).build())
135+
.build())
136+
.setDimensions(
137+
PartStatus.newBuilder()
138+
.setVisible(true)
139+
.setEditability(Editability.newBuilder().setEditable(true).build())
140+
.build())
141+
.setSettings(
142+
PartStatus.newBuilder()
143+
.setVisible(!isAts)
144+
.setEditability(Editability.newBuilder().setEditable(!isAts).build())
145+
.build())
146+
.build();
147+
}
148+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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.fe.v6.service.config.util;
18+
19+
/** Factory for creating {@link ConfigServiceCapability} instances. */
20+
public interface ConfigServiceCapabilityFactory {
21+
22+
ConfigServiceCapability create(String universe);
23+
}

src/java/com/google/devtools/mobileharness/shared/util/flags/Flags.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1457,6 +1457,14 @@ public enum ConfigServiceStorageType {
14571457
converter = Flag.StringConverter.class)
14581458
public Flag<String> fastbootPathFromUser = fastbootPathFromUserDefault;
14591459

1460+
private static final Flag<Boolean> feConnectToConfigServerDefault = Flag.value(false);
1461+
1462+
@com.beust.jcommander.Parameter(
1463+
names = "--fe_connect_to_config_server",
1464+
description = "Whether to connect to the config server in the FE server.",
1465+
converter = Flag.BooleanConverter.class)
1466+
public Flag<Boolean> feConnectToConfigServer = feConnectToConfigServerDefault;
1467+
14601468
private static final Flag<Boolean> feEnableDeviceFlashingDefault = Flag.value(false);
14611469

14621470
@com.beust.jcommander.Parameter(

src/javatests/com/google/devtools/mobileharness/fe/v6/service/config/util/BUILD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ java_library(
2525
testonly = 1,
2626
srcs = [
2727
"ConfigConverterTest.java",
28+
"ConfigServiceCapabilityTest.java",
2829
],
2930
deps = [
3031
"//src/devtools/mobileharness/api/deviceconfig/proto:basic_java_proto",
@@ -34,10 +35,14 @@ java_library(
3435
"//src/devtools/mobileharness/fe/v6/service/proto/common:common_resources_java_proto",
3536
"//src/devtools/mobileharness/fe/v6/service/proto/config:config_resources_java_proto",
3637
"//src/java/com/google/devtools/mobileharness/fe/v6/service/config/util:config_converter",
38+
"//src/java/com/google/devtools/mobileharness/fe/v6/service/config/util:config_service_capability",
39+
"//src/java/com/google/devtools/mobileharness/fe/v6/service/util",
3740
"//src/javatests/com/google/devtools/mobileharness/builddefs:truth",
41+
"//src/javatests/com/google/devtools/mobileharness/shared/util/junit/rule:set_flags_oss",
3842
"@maven//:com_google_guava_guava",
3943
"@maven//:com_google_protobuf_protobuf_java",
4044
"@maven//:junit_junit",
45+
"@maven//:org_mockito_mockito_core",
4146
],
4247
)
4348

0 commit comments

Comments
 (0)