1 /*
2  * Copyright 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.microdroid.testservice;
17 
18 import com.android.microdroid.testservice.IAppCallback;
19 
20 /**
21  * This is the service exposed by the test payload, called by the test app.
22  * {@hide}
23  */
24 interface ITestService {
25     const long PORT = 5678;
26 
27     const long ECHO_REVERSE_PORT = 0x80000001L; // Deliberately chosen to be > 2^31, < 2^32
28 
29     /* add two integers. */
addInteger(int a, int b)30     int addInteger(int a, int b);
31 
32     /* read a system property. */
readProperty(String prop)33     String readProperty(String prop);
34 
35     /* get a VM instance secret, this is _only_ done for testing. */
insecurelyExposeVmInstanceSecret()36     byte[] insecurelyExposeVmInstanceSecret();
37 
38     /* get the VM's attestation secret, this is _only_ done for testing. */
insecurelyExposeAttestationCdi()39     byte[] insecurelyExposeAttestationCdi();
40 
41     /* get the VM's boot certificate chain (BCC). */
getBcc()42     byte[] getBcc();
43 
44     /* get the APK contents path. */
getApkContentsPath()45     String getApkContentsPath();
46 
47     /* get the encrypted storage path. */
getEncryptedStoragePath()48     String getEncryptedStoragePath();
49 
50     /* start a simple vsock server on ECHO_REVERSE_PORT that reads a line at a time and echoes
51      * each line reverse.
52      */
runEchoReverseServer()53     void runEchoReverseServer();
54 
55     /** Returns a mask of effective capabilities that the process running the payload binary has. */
getEffectiveCapabilities()56     String[] getEffectiveCapabilities();
57 
58     /* Return the uid of the process running the binary. */
getUid()59     int getUid();
60 
61     /* write the content into the specified file. */
writeToFile(String content, String path)62     void writeToFile(String content, String path);
63 
64     /* get the content of the specified file. */
readFromFile(String path)65     String readFromFile(String path);
66 
67     /* get file permissions of the give file by stat'ing it */
getFilePermissions(String path)68     int getFilePermissions(String path);
69 
70     /** Returns flags for the given mountPoint. */
getMountFlags(String mountPoint)71     int getMountFlags(String mountPoint);
72 
73     /** Requests the VM to asynchronously call appCallback.setVmCallback() */
requestCallback(IAppCallback appCallback)74     void requestCallback(IAppCallback appCallback);
75 
76     /** Read a line from /dev/console */
readLineFromConsole()77     String readLineFromConsole();
78 
79     /**
80      * Request the service to exit, triggering the termination of the VM. This may cause any
81      * requests in flight to fail.
82      */
quit()83     oneway void quit();
84 }
85