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");