blob: 638bdda028bd05b78c2bbdeab4817e55b9b6185e [file] [log] [blame]
Di Qian38c02a72019-11-18 19:14:07 -08001/*
2 * Copyright (C) 2019 The Android Open Source Project
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 * http://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 */
16package com.android.tradefed.cluster;
17
18import com.android.tradefed.config.GlobalConfiguration;
19import com.android.tradefed.config.IConfiguration;
20import com.android.tradefed.config.Option;
21import com.android.tradefed.config.OptionClass;
22import com.android.tradefed.util.MultiMap;
23
24import com.google.common.annotations.VisibleForTesting;
25
26import java.io.File;
27import java.util.ArrayList;
28import java.util.HashMap;
29import java.util.List;
30import java.util.Map;
31
32/*
33 * A {@link IClusterOptions} implementation which contains cluster-related options.
34 */
35@OptionClass(alias = "cluster", global_namespace = false)
36public class ClusterOptions implements IClusterOptions {
37
38 /**
39 * The unique configuration object type name. Used to retrieve the singleton instance from the
40 * {@link GlobalConfiguration}.
41 *
42 * @see IConfiguration#getConfigurationObject(String)
43 */
44 public static final String TYPE_NAME = "cluster_options";
45
46 @Option(name = "service-url", description = "the base url of the tradefed cluster REST API")
47 public String mServiceUrl = null;
48
49 // TODO: The "service-account-keyfile" option should be HostOption (AOSP HostOptions.java).
50 @Option(
51 name = "service-account-keyfile",
52 description =
53 "The service account json key file. "
54 + "This is used by tradefed test scheduler (e.g. Tradefed Cluster) to "
55 + "authenticate the tradefed host. "
56 + "See google doc for the definition and how service account key works. "
57 + "https://cloud.google.com/iam/docs/service-accounts ")
58 private File mSchedulerServiceAccountKeyfile = null;
59
60 @Option(name = "cluster", description = "the cluster id for this TF instance", mandatory = true)
61 public String mClusterId = null;
62
63 @Option(
64 name = "next-cluster",
65 description =
66 "seconadary clusters for this TF instance to run commands from. If "
67 + "this option is set, TF will try to lease commands from these clusters in "
68 + "the order they are specified if it still has available devices after "
69 + "leasing commands from the primary cluster.")
70 public List<String> mNextClusterIds = new ArrayList<>();
71
72 @Option(name = "run-target-format", description = "the format for labelling run targets.")
73 private String mRunTargetFormat = null;
74
75 @Option(name = "disable-device-monitor", description = "disable Cluster device reporting")
76 private boolean mIsDeviceMonitorDisabled = false;
77
78 @Option(
79 name = "device-monitor-interval",
80 isTimeVal = true,
81 description = "the time interval between each device snapshot")
82 private long mDeviceMonitorSnapshotInterval = 60 * 1000;
83
84 @Option(
85 name = "device-group",
86 description =
87 "A multi-map from device group to device serials."
88 + " The key is a device group name and value is device serial.")
89 private MultiMap<String, String> mDeviceGroup = new MultiMap<String, String>();
90
91 @Option(
92 name = "device-tag",
93 description =
94 "A map for tagging device serials; each device may "
95 + "have one tag. This can be used for reporting in run-target")
96 private Map<String, String> mDeviceTag = new HashMap<>();
97
98 @Option(
99 name = "check-flashing-permits-on-lease",
100 description = "Check available flashing permits when leasing tasks")
101 private boolean mCheckFlashingPermitsOnLease = true;
102
103 @Option(
104 name = "invocation-heartbeat-interval",
105 isTimeVal = true,
106 description = "The time interval between invocation heartbeats")
107 private long mInvocationHeartbeatInterval = 5 * 60 * 1000;
108
109 @Option(name = "upload-invocation-status", description = "Upload invocation status to TFC")
110 private Boolean mShouldUploadInvocationStatus = false;
111
112 @Option(
113 name = "check-command-state",
114 description = "Check cluster command state to detect canceled invocations")
115 private boolean mCheckCommandState = false;
116
117 @Option(name = "connect-timeout", description = "HTTP connect timeout.", isTimeVal = true)
118 private int mConnectTimeout = 60000;
119
120 @Option(name = "read-timeout", description = "HTTP read timeout.", isTimeVal = true)
121 private int mReadTimeout = 60000;
122
Xing Dai81f6f9f2019-12-03 14:01:32 -0800123 @Option(name = "label", description = "Labels to describe the host.")
124 private List<String> mLabels = new ArrayList<>();
125
126 @Option(name = "lab-name", description = "The name of the lab the host belong to.")
127 private String mLabName;
128
Yichun Lib935e792020-02-10 18:31:48 -0800129 @Option(
130 name = "collect-early-test-summary",
131 description = "Collect early test summary from ITestSummaryListener to scheduler.")
132 private boolean mCollectEarlyTestSummary = false;
133
Di Qian38c02a72019-11-18 19:14:07 -0800134 /** {@inheritDoc} */
135 @Override
136 public String getServiceUrl() {
137 return mServiceUrl;
138 }
139
140 /** {@inheritDoc} */
141 @Override
142 public String getClusterId() {
143 return mClusterId;
144 }
145
146 /** {@inheritDoc} */
147 @Override
148 public List<String> getNextClusterIds() {
149 return mNextClusterIds;
150 }
151
152 /** {@inheritDoc} */
153 @Override
154 public MultiMap<String, String> getDeviceGroup() {
155 return mDeviceGroup;
156 }
157
158 /** {@inheritDoc} */
159 @Override
160 public Map<String, String> getDeviceTag() {
161 return mDeviceTag;
162 }
163
164 /** {@inheritDoc} */
165 @Override
166 public boolean checkFlashingPermitsOnLease() {
167 return mCheckFlashingPermitsOnLease;
168 }
169
170 /** {@inheritDoc} */
171 @Override
172 public String getRunTargetFormat() {
173 return mRunTargetFormat;
174 }
175
176 /** {@inheritDoc} */
177 @Override
178 public boolean isDeviceMonitorDisabled() {
179 return mIsDeviceMonitorDisabled;
180 }
181
182 /** {@inheritDoc} */
183 @Override
184 public long getDeviceMonitorSnapshotInterval() {
185 return mDeviceMonitorSnapshotInterval;
186 }
187
188 /**
189 * Set the base url of the tradefed cluster REST API.
190 *
191 * <p>Exposed for testing.
192 */
193 void setServiceUrl(String url) {
194 mServiceUrl = url;
195 }
196
197 /**
198 * Set the cluster id for this TF instance.
199 *
200 * <p>Exposed for testing.
201 */
202 void setClusterId(String id) {
203 mClusterId = id;
204 }
205
206 /**
207 * Set the format for labelling run targets.
208 *
209 * <p>Exposed for testing.
210 */
211 void setRunTargetFormat(String format) {
212 mRunTargetFormat = format;
213 }
214
215 /**
216 * Set whether Cluster device reporting is disabled.
217 *
218 * <p>Exposed for testing.
219 */
220 void setDeviceMonitorDisabled(boolean disabled) {
221 mIsDeviceMonitorDisabled = disabled;
222 }
223
224 /**
225 * Set the time interval between each device snapshot in ms.
226 *
227 * <p>Exposed for testing.
228 */
229 void setDeviceMonitorSnapshotInterval(long interval) {
230 mDeviceMonitorSnapshotInterval = interval;
231 }
232
233 /**
234 * Set whether the scheduler should check if there are available flashing permits.
235 *
236 * <p>Exposed for testing.
237 */
238 void setCheckFlashingPermitsLease(boolean checkFlashingPermitsLease) {
239 mCheckFlashingPermitsOnLease = checkFlashingPermitsLease;
240 }
241
Yichun Lib935e792020-02-10 18:31:48 -0800242 /**
243 * Set whether the scheduler should collect early test summary.
244 *
245 * <p>Exposed for testing.
246 */
247 void setCollectEarlyTestSummary(boolean collectEarlyTestSummary) {
248 mCollectEarlyTestSummary = collectEarlyTestSummary;
249 }
250
Di Qian38c02a72019-11-18 19:14:07 -0800251 /** {@inheritDoc} */
252 @Override
253 public long getInvocationHeartbeatInterval() {
254 return mInvocationHeartbeatInterval;
255 }
256
257 /** {@inheritDoc} */
258 @Override
259 public Boolean shouldUploadInvocationStatus() {
260 return mShouldUploadInvocationStatus;
261 }
262
263 /** Set the service account key file. */
264 @VisibleForTesting
265 void setSchedulerServiceAccountKeyfile(File keyFile) {
266 mSchedulerServiceAccountKeyfile = keyFile;
267 }
268
269 /** {@inheritDoc} */
270 @Override
271 public File getSchedulerServiceAccountKeyfile() {
272 return mSchedulerServiceAccountKeyfile;
273 }
274
275 /** {@inheritDoc} */
276 @Override
277 public String getSchedulerServiceUrl() {
278 return mServiceUrl;
279 }
280
281 /** {@inheritDoc} */
282 @Override
283 public int getConnectTimeout() {
284 return mConnectTimeout;
285 }
286
287 /** {@inheritDoc} */
288 @Override
289 public int getReadTimeout() {
290 return mReadTimeout;
291 }
292
293 @Override
294 public boolean checkCommandState() {
295 return mCheckCommandState;
296 }
297
298 @VisibleForTesting
299 void setCheckCommandState(boolean checkCommandState) {
300 mCheckCommandState = checkCommandState;
301 }
Xing Dai81f6f9f2019-12-03 14:01:32 -0800302
303 /** {@inheritDoc} */
304 @Override
305 public List<String> getLabels() {
306 return new ArrayList<>(mLabels);
307 }
308
309 /** {@inheritDoc} */
310 @Override
311 public String getLabName() {
312 return mLabName;
313 }
Yichun Lib935e792020-02-10 18:31:48 -0800314
315 /** {@inheritDoc} */
316 @Override
317 public boolean shouldCollectEarlyTestSummary() {
318 return mCollectEarlyTestSummary;
319 }
Di Qian38c02a72019-11-18 19:14:07 -0800320}