summaryrefslogtreecommitdiff
path: root/libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java')
-rw-r--r--libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java98
1 files changed, 62 insertions, 36 deletions
diff --git a/libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java b/libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java
index da1f7bf47..a218e81f6 100644
--- a/libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java
+++ b/libraries/sts-common-util/sts-sdk/package/test-app/src/main/java/android/security/sts/sts_test_app_package/DeviceTest.java
@@ -18,56 +18,82 @@ package android.security.sts.sts_test_app_package;
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assume.assumeNoException;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.SharedPreferences;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.util.Log;
-import androidx.annotation.IntegerRes;
-import androidx.annotation.StringRes;
-import androidx.test.runner.AndroidJUnit4;
-import androidx.test.uiautomator.UiDevice;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * An example device test that starts an activity and uses broadcasts to wait for the artifact
+ * proving vulnerability
+ */
@RunWith(AndroidJUnit4.class)
public class DeviceTest {
+ private static final String TAG = DeviceTest.class.getSimpleName();
+ Context mContext;
- Context mAppContext;
+ /** Test broadcast action */
+ public static final String ACTION_BROADCAST = "action_security_test_broadcast";
+ /** Broadcast intent extra name for artifacts */
+ public static final String INTENT_ARTIFACT = "artifact";
- int getInteger(@IntegerRes int resId) {
- return mAppContext.getResources().getInteger(resId);
- }
+ /** Device test */
+ @Test
+ public void testDeviceSideMethod() throws Exception {
+ mContext = getApplicationContext();
- String getString(@StringRes int resId) {
- return mAppContext.getResources().getString(resId);
- }
+ AtomicReference<String> actual = new AtomicReference<>();
+ final Semaphore broadcastReceived = new Semaphore(0);
+ BroadcastReceiver broadcastReceiver =
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ try {
+ if (!intent.getAction().equals(ACTION_BROADCAST)) {
+ Log.i(
+ TAG,
+ String.format(
+ "got a broadcast that we didn't expect: %s",
+ intent.getAction()));
+ }
+ actual.set(intent.getStringExtra(INTENT_ARTIFACT));
+ broadcastReceived.release();
+ } catch (Exception e) {
+ Log.e(TAG, "got an exception when handling broadcast", e);
+ }
+ }
+ };
+ IntentFilter filter = new IntentFilter(); // see if there's a shorthand
+ filter.addAction(ACTION_BROADCAST); // what does this return?
+ mContext.registerReceiver(broadcastReceiver, filter);
- @Test
- public void testDeviceSideMethod() {
+ // start the target app
try {
- mAppContext = getApplicationContext();
- UiDevice device = UiDevice.getInstance(getInstrumentation());
- device.executeShellCommand(
- "am start -n com.android.nfc/.handover.ConfirmConnectActivity");
- long startTime = System.currentTimeMillis();
- while ((System.currentTimeMillis() - startTime)
- < getInteger(R.integer.MAX_WAIT_TIME_MS)) {
- SharedPreferences sh =
- mAppContext.getSharedPreferences(
- getString(R.string.SHARED_PREFERENCE), Context.MODE_APPEND);
- int result =
- sh.getInt(getString(R.string.RESULT_KEY), getInteger(R.integer.DEFAULT));
- assertNotEquals(
- "NFC Android App broadcasts Bluetooth device information!",
- result,
- getInteger(R.integer.FAIL));
- Thread.sleep(getInteger(R.integer.SLEEP_TIME_MS));
- }
- } catch (Exception e) {
- assumeNoException(e);
+ Log.d(TAG, "starting local activity");
+ Intent newActivityIntent = new Intent(mContext, PocActivity.class);
+ newActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ // this could be startActivityForResult, but is generic for illustrative purposes
+ mContext.startActivity(newActivityIntent);
+ } finally {
+ getInstrumentation().getUiAutomation().dropShellPermissionIdentity();
}
+ assertTrue(
+ "Timed out when getting result from other activity",
+ broadcastReceived.tryAcquire(/* TIMEOUT_MS */ 5000, TimeUnit.MILLISECONDS));
+ assertEquals("The target artifact should have been 'secure'", "secure", actual.get());
}
}