blob: 2b9d38b78cba440b20cf6c0823fe0555c68b2c01 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.tradefed.cluster;
import com.android.tradefed.log.LogUtil.CLog;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* A class to model a TestContext message of TFC API.
*
* <p>A TestContext message is used to store and retrieve contextual information being passed across
* multiple attempts of same test command.
*/
public class TestContext {
String mCommandLine = null;
final Map<String, String> mEnvVars = new TreeMap<>();
final List<TestResource> mTestResources = new ArrayList<>();
public String getCommandLine() {
return mCommandLine;
}
public void setCommandLine(String commandLine) {
mCommandLine = commandLine;
}
public Map<String, String> getEnvVars() {
return Collections.unmodifiableMap(mEnvVars);
}
public void addEnvVars(Map<String, String> envVars) {
mEnvVars.putAll(envVars);
}
public List<TestResource> getTestResources() {
return Collections.unmodifiableList(mTestResources);
}
public void addTestResource(TestResource testResource) {
mTestResources.add(testResource);
}
public static TestContext fromJson(JSONObject json) throws JSONException {
final TestContext obj = new TestContext();
obj.mCommandLine = json.optString("command_line");
final JSONArray envVars = json.optJSONArray("env_vars");
if (envVars != null) {
for (int i = 0; i < envVars.length(); i++) {
final JSONObject pair = envVars.getJSONObject(i);
obj.mEnvVars.put(pair.getString("key"), pair.getString("value"));
}
}
final JSONArray testResources = json.optJSONArray("test_resources");
if (testResources != null) {
obj.mTestResources.addAll(TestResource.fromJsonArray(testResources));
}
return obj;
}
public JSONObject toJson() throws JSONException {
final JSONObject json = new JSONObject();
json.put("command_line", mCommandLine);
final JSONArray envVars = new JSONArray();
for (Map.Entry<String, String> entry : mEnvVars.entrySet()) {
final JSONObject pair = new JSONObject();
pair.put("key", entry.getKey());
pair.put("value", entry.getValue());
envVars.put(pair);
}
json.put("env_vars", envVars);
final JSONArray testResources = new JSONArray();
for (TestResource obj : mTestResources) {
testResources.put(obj.toJson());
}
json.put("test_resources", testResources);
return json;
}
@Override
public String toString() {
try {
return toJson().toString();
} catch (JSONException e) {
CLog.w("Failed to convert to JSON: %s", e);
}
return null;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof TestContext)) {
return false;
}
return toString().equals(o.toString());
}
}