blob: fe8c239ad95ec9324bf10c9c5e7cc1a22771c4b8 [file] [log] [blame]
/*
* Copyright (C) 2020 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 android.security.cts;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.io.File;
import java.io.FileNotFoundException;
import org.junit.runner.Description;
import org.junit.rules.TestWatcher;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.tradefed.build.IBuildInfo;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.testtype.IAbi;
import static org.junit.Assume.*;
import static org.junit.Assert.*;
public class PocPusher extends TestWatcher {
private ITestDevice device = null;
private CompatibilityBuildHelper buildHelper = null;
private IAbi abi = null;
private Set<String> filesToCleanup = new HashSet();
public boolean bitness32 = true;
public boolean bitness64 = true;
public boolean appendBitness = true;
public boolean cleanup = true;
@Override
protected void starting(Description d) {
bothBitness();
appendBitness = true;
cleanup = true;
}
@Override
protected void finished(Description d) {
for (Iterator<String> it = filesToCleanup.iterator(); it.hasNext();) {
String file = it.next();
try {
CLog.i("Cleaning up %s", file);
device.deleteFile(file);
} catch (DeviceNotAvailableException e) {
CLog.e("Device unavailable when cleaning up %s", file);
continue; // try to remove next time
}
it.remove();
}
}
public PocPusher setDevice(ITestDevice device) {
this.device = device;
return this;
}
public PocPusher setAbi(IAbi abi) {
this.abi = abi;
return this;
}
public PocPusher setBuild(IBuildInfo buildInfo) {
buildHelper = new CompatibilityBuildHelper(buildInfo);
return this;
}
public PocPusher appendBitness(boolean append) {
this.appendBitness = append;
return this;
}
public PocPusher cleanup(boolean cleanup) {
this.cleanup = cleanup;
return this;
}
public PocPusher only32() {
bitness32 = true;
bitness64 = false;
return this;
}
public PocPusher only64() {
bitness32 = false;
bitness64 = true;
return this;
}
public PocPusher bothBitness() {
bitness32 = true;
bitness64 = true;
return this;
}
public void pushFile(String testFile, String remoteFile)
throws FileNotFoundException, DeviceNotAvailableException {
if (appendBitness) {
// if neither 32 or 64, nothing would ever be pushed.
assertTrue("bitness must be 32, 64, or both.", bitness32 || bitness64);
String bitness = SecurityTestCase.getAbi(device).getBitness().trim();
// 32-bit doesn't have a 64-bit compatibility layer; skipping.
assumeFalse(bitness.equals("32") && !bitness32);
// push the 32-bit file on 64-bit device if a 64-bit file doesn't exist.
if (bitness.equals("64") && !bitness64) {
bitness = "32";
CLog.i("Pushing a 32-bit file onto a 64-bit device.");
}
testFile += bitness;
}
File localFile = buildHelper.getTestFile(testFile);
CLog.i("Pushing local: %s to remote: %s", testFile.toString(), remoteFile);
device.pushFile(localFile, remoteFile);
if (cleanup) {
filesToCleanup.add(remoteFile);
}
}
}