Skip to content

Commit 7edf826

Browse files
@W-21933885: [MSDK Android] App Attestation Implementation (Return Null For Unhandled Exceptions Getting Integrity Token)
1 parent d0cbbba commit 7edf826

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

libs/test/SalesforceSDKTest/src/com/salesforce/androidsdk/auth/AppAttestationClientTest.kt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import kotlinx.coroutines.tasks.await
4646
import kotlinx.coroutines.test.advanceUntilIdle
4747
import kotlinx.coroutines.test.runTest
4848
import org.junit.Assert.assertEquals
49+
import org.junit.Assert.assertNull
4950
import org.junit.Test
5051
import org.junit.runner.RunWith
5152

@@ -242,6 +243,63 @@ class AppAttestationClientTest {
242243
assertEquals("eyJhdHRlc3RhdGlvbklkIjoiMTIzNDU2IiwiYXR0ZXN0YXRpb25EYXRhIjoiWDE5VVJWTlVYMGxPVkVWSFVrbFVXVjlVVDB0RlRsOWYifQ==", result)
243244
}
244245

246+
@OptIn(ExperimentalCoroutinesApi::class)
247+
@Test
248+
fun appAttestationClient_createSalesforceOAuthAuthorizationAppAttestationThrowingUnknownException_returnsNull() = runTest {
249+
250+
val context = mockk<Context>(relaxed = true)
251+
val deviceId = "123456"
252+
val googleCloudProjectId = 654321L
253+
val remoteAccessConsumerKey = "13579"
254+
val restResponse = mockk<RestResponse>(relaxed = true)
255+
every { restResponse.asString() } returns "__TEST_CHALLENGE_VALUE__"
256+
every { restResponse.isSuccess } returns true
257+
val restClient = mockk<RestClient>(relaxed = true)
258+
every { restClient.sendSync(any()) } returns restResponse
259+
260+
val integrityToken = mockk<StandardIntegrityToken>(relaxed = true)
261+
every { integrityToken.token() } returns "__TEST_INTEGRITY_TOKEN__"
262+
val throwingIntegrityTokenTask = mockk<Task<StandardIntegrityToken>>(relaxed = true)
263+
every { throwingIntegrityTokenTask.addOnFailureListener(any()) } returns throwingIntegrityTokenTask
264+
every { throwingIntegrityTokenTask.getResult() } returns integrityToken
265+
mockkStatic("kotlinx.coroutines.tasks.TasksKt")
266+
coEvery { throwingIntegrityTokenTask.await() } throws RuntimeException("Unknown Exception")
267+
val throwingIntegrityTokenProvider = mockk<StandardIntegrityTokenProvider>(relaxed = true)
268+
every { throwingIntegrityTokenProvider.request(any()) } returns throwingIntegrityTokenTask
269+
270+
val successfulIntegrityTokenTask = mockk<Task<StandardIntegrityToken>>(relaxed = true)
271+
every { successfulIntegrityTokenTask.addOnFailureListener(any()) } returns successfulIntegrityTokenTask
272+
every { successfulIntegrityTokenTask.getResult() } returns integrityToken
273+
coEvery { successfulIntegrityTokenTask.await() } returns integrityToken
274+
val successfulIntegrityTokenProvider = mockk<StandardIntegrityTokenProvider>(relaxed = true)
275+
every { successfulIntegrityTokenProvider.request(any()) } returns successfulIntegrityTokenTask
276+
277+
val integrityTokenProviderTask = mockk<Task<StandardIntegrityTokenProvider>>(relaxed = true)
278+
every { integrityTokenProviderTask.addOnSuccessListener(any()) } returns integrityTokenProviderTask
279+
every { integrityTokenProviderTask.addOnFailureListener(any()) } returns integrityTokenProviderTask
280+
coEvery { integrityTokenProviderTask.result } returns successfulIntegrityTokenProvider
281+
val integrityManager = mockk<StandardIntegrityManager>(relaxed = true)
282+
every { integrityManager.prepareIntegrityToken(any()) } returns integrityTokenProviderTask
283+
284+
val appAttestationClient = AppAttestationClient(
285+
apiHostName = "login.example.com",
286+
context = context,
287+
deviceId = deviceId,
288+
googleCloudProjectId = googleCloudProjectId,
289+
remoteAccessConsumerKey = remoteAccessConsumerKey,
290+
restClient = restClient
291+
)
292+
293+
val result = appAttestationClient.createSalesforceOAuthAuthorizationAppAttestation(
294+
integrityManager = integrityManager,
295+
integrityTokenProvider = throwingIntegrityTokenProvider
296+
)
297+
298+
advanceUntilIdle()
299+
300+
assertNull(result)
301+
}
302+
245303

246304
@OptIn(ExperimentalCoroutinesApi::class)
247305
@Test

0 commit comments

Comments
 (0)