Replace context serialization by proto
Use the context proto instead of java serialization.
This will avoid backward compatibility issues.
Test: unit tests
./tests/run_tradefed_presubmit.sh --use-sandbox
Bug: 73662954
Change-Id: Ib27d30c3cc5a06f09ccec10d006047be17682375
diff --git a/src/com/android/tradefed/sandbox/TradefedSandbox.java b/src/com/android/tradefed/sandbox/TradefedSandbox.java
index 2806300..dc7e24d 100644
--- a/src/com/android/tradefed/sandbox/TradefedSandbox.java
+++ b/src/com/android/tradefed/sandbox/TradefedSandbox.java
@@ -22,6 +22,7 @@
import com.android.tradefed.config.IConfiguration;
import com.android.tradefed.invoker.IInvocationContext;
import com.android.tradefed.invoker.InvocationContext;
+import com.android.tradefed.invoker.proto.InvocationContext.Context;
import com.android.tradefed.log.ITestLogger;
import com.android.tradefed.result.FileInputStreamSource;
import com.android.tradefed.result.ITestInvocationListener;
@@ -34,7 +35,6 @@
import com.android.tradefed.util.IRunUtil;
import com.android.tradefed.util.QuotationAwareTokenizer;
import com.android.tradefed.util.RunUtil;
-import com.android.tradefed.util.SerializationUtil;
import com.android.tradefed.util.StreamUtil;
import com.android.tradefed.util.SubprocessTestResultsParser;
import com.android.tradefed.util.keystore.IKeyStoreClient;
@@ -288,7 +288,12 @@
throw new IOException("Couldn't unlock the context.", e);
}
}
- return SerializationUtil.serialize(context);
+ File protoFile =
+ FileUtil.createTempFile(
+ "context-proto", "." + LogDataType.PB.getFileExt(), mSandboxTmpFolder);
+ Context contextProto = context.toProto();
+ contextProto.writeDelimitedTo(new FileOutputStream(protoFile));
+ return protoFile;
}
/** {@inheritDoc} */
diff --git a/src/com/android/tradefed/sandbox/TradefedSandboxRunner.java b/src/com/android/tradefed/sandbox/TradefedSandboxRunner.java
index 6b5c16e..f2e631d 100644
--- a/src/com/android/tradefed/sandbox/TradefedSandboxRunner.java
+++ b/src/com/android/tradefed/sandbox/TradefedSandboxRunner.java
@@ -25,6 +25,8 @@
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.device.NoDeviceException;
import com.android.tradefed.invoker.IInvocationContext;
+import com.android.tradefed.invoker.InvocationContext;
+import com.android.tradefed.invoker.proto.InvocationContext.Context;
import com.android.tradefed.util.FileUtil;
import com.android.tradefed.util.SerializationUtil;
@@ -32,6 +34,7 @@
import org.json.JSONObject;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -94,14 +97,21 @@
return;
}
+ File contextFile = new File(argList.remove(0));
try {
- context =
- (IInvocationContext)
- SerializationUtil.deserialize(new File(argList.remove(0)), false);
+ Context c = Context.parseDelimitedFrom(new FileInputStream(contextFile));
+ context = InvocationContext.fromProto(c);
} catch (IOException e) {
- printStackTrace(e);
- mErrorCode = ExitCode.THROWABLE_EXCEPTION;
- return;
+ // Fallback to compatible old way
+ // TODO: Delete when parent has been deployed.
+ try {
+ context = (IInvocationContext) SerializationUtil.deserialize(contextFile, false);
+ } catch (IOException e2) {
+ printStackTrace(e);
+ printStackTrace(e2);
+ mErrorCode = ExitCode.THROWABLE_EXCEPTION;
+ return;
+ }
}
try {
diff --git a/tests/src/com/android/tradefed/sandbox/TradefedSandboxTest.java b/tests/src/com/android/tradefed/sandbox/TradefedSandboxTest.java
index e9fdfb6..0187247 100644
--- a/tests/src/com/android/tradefed/sandbox/TradefedSandboxTest.java
+++ b/tests/src/com/android/tradefed/sandbox/TradefedSandboxTest.java
@@ -23,6 +23,7 @@
import com.android.tradefed.command.CommandOptions;
import com.android.tradefed.config.Configuration;
+import com.android.tradefed.config.ConfigurationDescriptor;
import com.android.tradefed.config.ConfigurationException;
import com.android.tradefed.config.GlobalConfiguration;
import com.android.tradefed.config.IConfiguration;
@@ -73,6 +74,7 @@
EasyMock.expect(mMockConfig.getConfigurationObject(Configuration.SANBOX_OPTIONS_TYPE_NAME))
.andStubReturn(new SandboxOptions());
mMockContext = new InvocationContext();
+ mMockContext.setConfigurationDescriptor(new ConfigurationDescriptor());
mTmpFolder = FileUtil.createTempDir("tmp-tf-jar-dir");