blob: 345fae56b545fddf058b327a3729d542f6ebd1dc [file] [log] [blame]
/*
* Copyright (C) 2014 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.util;
import com.android.tradefed.build.IBuildInfo;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.DeviceProperties;
import com.android.tradefed.device.ITestDevice;
/** A util class to help manipulate {@link IBuildInfo} */
public class BuildInfoUtil {
/**
* Reads build attributes from device and use them to override the relevant build info fields
*
* <p>Note: because branch information is not stored on device as build attributes, the injected
* branch info will be the following fields concatenated via dashes:
*
* <ul>
* <li><code>ro.product.brand</code>
* <li><code>ro.product.name</code>
* <li><code>ro.product.vendor.device</code> (maybe different on older API levels)
* <li><code>ro.build.version.release</code>
* </ul>
*
* @param buildInfo the build info where device build attributes will be injected
* @param device the device to read build attributes from
* @param overrideBuildId instead of reading from device, override build id to this value;
* <code>null</code> for no override
* @param overrideBuildFlavor instead of reading from device, override build flavor to this
* value; <code>null</code> for no override
* @param overrideBuildBranch instead of concatenating device attributes as substitute for
* branch, override it to this value; <code>null</code> for no override
* @param overrideBuildAlias instead of reading from device, override build alias to this value;
* <code>null</code> for no override
* @throws DeviceNotAvailableException
*/
public static void bootstrapDeviceBuildAttributes(
IBuildInfo buildInfo,
ITestDevice device,
String overrideBuildId,
String overrideBuildFlavor,
String overrideBuildBranch,
String overrideBuildAlias)
throws DeviceNotAvailableException {
String buildId, buildAlias, buildFlavor, branch;
// inject build id
if (overrideBuildId != null) {
buildId = overrideBuildId;
} else {
buildId = device.getBuildId();
}
buildInfo.setBuildId(buildId);
// inject build alias
if (overrideBuildAlias != null) {
buildAlias = overrideBuildAlias;
} else {
buildAlias = device.getBuildAlias();
}
buildInfo.addBuildAttribute("build_alias", buildAlias);
// inject build flavor
if (overrideBuildFlavor != null) {
buildFlavor = overrideBuildFlavor;
} else {
buildFlavor = device.getBuildFlavor();
}
buildInfo.setBuildFlavor(buildFlavor);
// generate branch information, either via parameter override, or via concatenating fields
if (overrideBuildBranch != null) {
branch = overrideBuildBranch;
} else {
branch =
String.format(
"%s-%s-%s-%s",
device.getProperty(DeviceProperties.BRAND),
device.getProperty(DeviceProperties.PRODUCT),
device.getProductVariant(),
device.getProperty(DeviceProperties.RELEASE_VERSION));
}
buildInfo.setBuildBranch(branch);
}
}