Merge "Remove flakyTest annotation on tests." into tm-dev
diff --git a/nearby/tests/cts/fastpair/AndroidTest.xml b/nearby/tests/cts/fastpair/AndroidTest.xml
index 360bbf3..2800069 100644
--- a/nearby/tests/cts/fastpair/AndroidTest.xml
+++ b/nearby/tests/cts/fastpair/AndroidTest.xml
@@ -14,6 +14,9 @@
limitations under the License.
-->
<configuration description="Config for CTS Nearby Fast Pair test cases">
+ <!-- Only run tests if the device under test is SDK version 33 (Android 13) or above. -->
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.Sdk33ModuleController" />
+
<option name="test-suite-tag" value="cts" />
<option name="config-descriptor:metadata" key="component" value="location" />
<!-- Instant cannot access NearbyManager. -->
diff --git a/nearby/tests/integration/privileged/AndroidManifest.xml b/nearby/tests/integration/privileged/AndroidManifest.xml
index 00845f1..86ec111 100644
--- a/nearby/tests/integration/privileged/AndroidManifest.xml
+++ b/nearby/tests/integration/privileged/AndroidManifest.xml
@@ -18,6 +18,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.nearby.integration.privileged">
+ <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
+ <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
+ <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
+ <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<instrumentation
diff --git a/nearby/tests/integration/privileged/src/android/nearby/integration/privileged/NearbyManagerTest.kt b/nearby/tests/integration/privileged/src/android/nearby/integration/privileged/NearbyManagerTest.kt
index 3b6337a..66bab23 100644
--- a/nearby/tests/integration/privileged/src/android/nearby/integration/privileged/NearbyManagerTest.kt
+++ b/nearby/tests/integration/privileged/src/android/nearby/integration/privileged/NearbyManagerTest.kt
@@ -17,22 +17,81 @@
package android.nearby.integration.privileged
import android.content.Context
+import android.nearby.BroadcastCallback
+import android.nearby.BroadcastRequest
+import android.nearby.NearbyDevice
import android.nearby.NearbyManager
+import android.nearby.PresenceBroadcastRequest
+import android.nearby.PresenceCredential
+import android.nearby.PrivateCredential
+import android.nearby.ScanCallback
+import android.nearby.ScanRequest
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class NearbyManagerTest {
+ private lateinit var appContext: Context
+
+ @Before
+ fun setUp() {
+ appContext = ApplicationProvider.getApplicationContext<Context>()
+ }
/** Verify privileged app can get Nearby service. */
@Test
fun testContextGetNearbySystemService_fromPrivilegedApp_returnsNoneNull() {
- val appContext = ApplicationProvider.getApplicationContext<Context>()
- val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ assertThat(appContext.getSystemService(Context.NEARBY_SERVICE)).isNotNull()
+ }
- assertThat(nearbyManager).isNotNull()
+ /** Verify privileged app can start/stop scan without exception. */
+ @Test
+ fun testNearbyManagerStartScanStopScan_fromPrivilegedApp_succeed() {
+ val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ val scanRequest = ScanRequest.Builder()
+ .setScanMode(ScanRequest.SCAN_MODE_LOW_LATENCY)
+ .setScanType(ScanRequest.SCAN_TYPE_FAST_PAIR)
+ .setBleEnabled(true)
+ .build()
+ val scanCallback = object : ScanCallback {
+ override fun onDiscovered(device: NearbyDevice) {}
+
+ override fun onUpdated(device: NearbyDevice) {}
+
+ override fun onLost(device: NearbyDevice) {}
+ }
+
+ nearbyManager.startScan(scanRequest, /* executor */ { it.run() }, scanCallback)
+ nearbyManager.stopScan(scanCallback)
+ }
+
+ /** Verify privileged app can start/stop broadcast without exception. */
+ @Test
+ fun testNearbyManagerStartBroadcastStopBroadcast_fromPrivilegedApp_succeed() {
+ val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ val salt = byteArrayOf(1, 2)
+ val secreteId = byteArrayOf(1, 2, 3, 4)
+ val metadataEncryptionKey = ByteArray(14)
+ val authenticityKey = byteArrayOf(0, 1, 1, 1)
+ val deviceName = "test_device"
+ val mediums = listOf(BroadcastRequest.MEDIUM_BLE)
+ val credential =
+ PrivateCredential.Builder(secreteId, authenticityKey, metadataEncryptionKey, deviceName)
+ .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
+ .build()
+ val broadcastRequest: BroadcastRequest =
+ PresenceBroadcastRequest.Builder(mediums, salt, credential)
+ .addAction(123)
+ .build()
+ val broadcastCallback = BroadcastCallback { }
+
+ nearbyManager.startBroadcast(
+ broadcastRequest, /* executor */ { it.run() }, broadcastCallback
+ )
+ nearbyManager.stopBroadcast(broadcastCallback)
}
}
diff --git a/nearby/tests/integration/untrusted/src/android/nearby/integration/untrusted/NearbyManagerTest.kt b/nearby/tests/integration/untrusted/src/android/nearby/integration/untrusted/NearbyManagerTest.kt
index 04c5e30..3bfac6d 100644
--- a/nearby/tests/integration/untrusted/src/android/nearby/integration/untrusted/NearbyManagerTest.kt
+++ b/nearby/tests/integration/untrusted/src/android/nearby/integration/untrusted/NearbyManagerTest.kt
@@ -17,20 +17,127 @@
package android.nearby.integration.untrusted
import android.content.Context
+import android.nearby.BroadcastCallback
+import android.nearby.BroadcastRequest
+import android.nearby.NearbyDevice
import android.nearby.NearbyManager
+import android.nearby.PresenceBroadcastRequest
+import android.nearby.PresenceCredential
+import android.nearby.PrivateCredential
+import android.nearby.ScanCallback
+import android.nearby.ScanRequest
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
+import org.junit.Assert.assertThrows
+import org.junit.Before
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class NearbyManagerTest {
+ private lateinit var appContext: Context
+
+ @Before
+ fun setUp() {
+ appContext = ApplicationProvider.getApplicationContext<Context>()
+ }
/** Verify untrusted app can get Nearby service. */
@Test
fun testContextGetNearbyService_fromUnTrustedApp_returnsNotNull() {
- val appContext = ApplicationProvider.getApplicationContext<Context>()
assertThat(appContext.getSystemService(Context.NEARBY_SERVICE)).isNotNull()
}
+
+ /**
+ * Verify untrusted app can't start scan because it needs BLUETOOTH_PRIVILEGED
+ * permission which is not for use by third-party applications.
+ */
+ @Test
+ fun testNearbyManagerStartScan_fromUnTrustedApp_throwsException() {
+ val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ val scanRequest = ScanRequest.Builder()
+ .setScanMode(ScanRequest.SCAN_MODE_LOW_LATENCY)
+ .setScanType(ScanRequest.SCAN_TYPE_FAST_PAIR)
+ .setBleEnabled(true)
+ .build()
+ val scanCallback = object : ScanCallback {
+ override fun onDiscovered(device: NearbyDevice) {}
+
+ override fun onUpdated(device: NearbyDevice) {}
+
+ override fun onLost(device: NearbyDevice) {}
+ }
+
+ assertThrows(SecurityException::class.java) {
+ nearbyManager.startScan(scanRequest, /* executor */ { it.run() }, scanCallback)
+ }
+ }
+
+ /**
+ * Verify untrusted app can't stop scan because it needs BLUETOOTH_PRIVILEGED
+ * permission which is not for use by third-party applications.
+ */
+ @Test
+ @Ignore("Permission check for stopXXX not yet implement: b/229338477#comment24")
+ fun testNearbyManagerStopScan_fromUnTrustedApp_throwsException() {
+ val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ val scanCallback = object : ScanCallback {
+ override fun onDiscovered(device: NearbyDevice) {}
+
+ override fun onUpdated(device: NearbyDevice) {}
+
+ override fun onLost(device: NearbyDevice) {}
+ }
+
+ assertThrows(SecurityException::class.java) {
+ nearbyManager.stopScan(scanCallback)
+ }
+ }
+
+ /**
+ * Verify untrusted app can't start broadcast because it needs BLUETOOTH_PRIVILEGED
+ * permission which is not for use by third-party applications.
+ */
+ @Test
+ fun testNearbyManagerStartBroadcast_fromUnTrustedApp_throwsException() {
+ val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ val salt = byteArrayOf(1, 2)
+ val secreteId = byteArrayOf(1, 2, 3, 4)
+ val metadataEncryptionKey = ByteArray(14)
+ val authenticityKey = byteArrayOf(0, 1, 1, 1)
+ val deviceName = "test_device"
+ val mediums = listOf(BroadcastRequest.MEDIUM_BLE)
+ val credential =
+ PrivateCredential.Builder(secreteId, authenticityKey, metadataEncryptionKey, deviceName)
+ .setIdentityType(PresenceCredential.IDENTITY_TYPE_PRIVATE)
+ .build()
+ val broadcastRequest: BroadcastRequest =
+ PresenceBroadcastRequest.Builder(mediums, salt, credential)
+ .addAction(123)
+ .build()
+ val broadcastCallback = BroadcastCallback { }
+
+ assertThrows(SecurityException::class.java) {
+ nearbyManager.startBroadcast(
+ broadcastRequest, /* executor */ { it.run() }, broadcastCallback
+ )
+ }
+ }
+
+ /**
+ * Verify untrusted app can't stop broadcast because it needs BLUETOOTH_PRIVILEGED
+ * permission which is not for use by third-party applications.
+ */
+ @Test
+ @Ignore("Permission check for stopXXX not yet implement: b/229338477#comment24")
+ fun testNearbyManagerStopBroadcast_fromUnTrustedApp_throwsException() {
+ val nearbyManager = appContext.getSystemService(Context.NEARBY_SERVICE) as NearbyManager
+ val broadcastCallback = BroadcastCallback { }
+
+ assertThrows(SecurityException::class.java) {
+ nearbyManager.stopBroadcast(broadcastCallback)
+ }
+ }
}
diff --git a/nearby/tests/multidevices/host/AndroidTest.xml b/nearby/tests/multidevices/host/AndroidTest.xml
index 5926cc1..43cf136 100644
--- a/nearby/tests/multidevices/host/AndroidTest.xml
+++ b/nearby/tests/multidevices/host/AndroidTest.xml
@@ -36,7 +36,6 @@
<!-- Any python dependencies can be specified and will be installed with pip -->
<!-- TODO(b/225958696): Import python dependencies -->
<option name="dep-module" value="mobly" />
- <option name="dep-module" value="retry" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup">
<option name="force-skip-system-props" value="true" /> <!-- avoid restarting device -->
diff --git a/nearby/tests/multidevices/host/test_helper/fast_pair_provider_simulator.py b/nearby/tests/multidevices/host/test_helper/fast_pair_provider_simulator.py
index d6484fb..592c4f1 100644
--- a/nearby/tests/multidevices/host/test_helper/fast_pair_provider_simulator.py
+++ b/nearby/tests/multidevices/host/test_helper/fast_pair_provider_simulator.py
@@ -14,10 +14,12 @@
"""Fast Pair provider simulator role."""
+import time
+
from mobly import asserts
from mobly.controllers import android_device
+from mobly.controllers.android_device_lib import jsonrpc_client_base
from mobly.controllers.android_device_lib import snippet_event
-import retry
from typing import Optional
from test_helper import event_helper
@@ -104,7 +106,6 @@
"""Tears down the Fast Pair provider simulator."""
self._ad.fp.teardownProviderSimulator()
- @retry.retry(tries=3)
def get_ble_mac_address(self) -> str:
"""Gets Bluetooth low energy mac address of the provider simulator.
@@ -115,7 +116,11 @@
Returns:
The BLE mac address of the Fast Pair provider simulator.
"""
- return self._ad.fp.getBluetoothLeAddress()
+ for _ in range(3):
+ try:
+ return self._ad.fp.getBluetoothLeAddress()
+ except jsonrpc_client_base.ApiError:
+ time.sleep(1)
def wait_for_discoverable_mode(self, timeout_seconds: int) -> None:
"""Waits onScanModeChange event to ensure provider is discoverable.
diff --git a/nearby/tests/unit/AndroidTest.xml b/nearby/tests/unit/AndroidTest.xml
index fdf665d..ad52316 100644
--- a/nearby/tests/unit/AndroidTest.xml
+++ b/nearby/tests/unit/AndroidTest.xml
@@ -15,6 +15,9 @@
~ limitations under the License.
-->
<configuration description="Runs Nearby Mainline API Tests.">
+ <!-- Only run tests if the device under test is SDK version 33 (Android 13) or above. -->
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.Sdk33ModuleController" />
+
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="NearbyUnitTests.apk" />
</target_preparer>