Skip to content

Commit 3bacf1b

Browse files
committed
finish codes
1 parent 2118fbc commit 3bacf1b

File tree

9 files changed

+572
-325
lines changed

9 files changed

+572
-325
lines changed

aws-analytics-pinpoint/src/androidTest/java/com/amplifyframework/analytics/pinpoint/PinpointAnalyticsStressTest.kt

+82-77
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import com.amplifyframework.hub.HubEvent
3636
import com.amplifyframework.testutils.HubAccumulator
3737
import com.amplifyframework.testutils.Resources
3838
import com.amplifyframework.testutils.Sleep
39+
import com.amplifyframework.testutils.junitcategories.StressTests
3940
import com.amplifyframework.testutils.sync.SynchronousAuth
4041
import java.util.UUID
4142
import java.util.concurrent.TimeUnit
@@ -45,8 +46,80 @@ import org.junit.Assert
4546
import org.junit.Before
4647
import org.junit.BeforeClass
4748
import org.junit.Test
49+
import org.junit.experimental.categories.Category
4850

51+
@Category(StressTests::class)
4952
class PinpointAnalyticsStressTest {
53+
54+
companion object {
55+
private const val CREDENTIALS_RESOURCE_NAME = "credentials"
56+
private const val CONFIGURATION_NAME = "amplifyconfiguration"
57+
private const val COGNITO_CONFIGURATION_TIMEOUT = 5 * 1000L
58+
private const val PINPOINT_ROUNDTRIP_TIMEOUT = 1 * 1000L
59+
private const val FLUSH_TIMEOUT = 1 * 500L
60+
private const val RECORD_INSERTION_TIMEOUT = 1 * 1000L
61+
private const val UNIQUE_ID_KEY = "UniqueId"
62+
private const val PREFERENCES_AND_FILE_MANAGER_SUFFIX = "515d6767-01b7-49e5-8273-c8d11b0f331d"
63+
private lateinit var synchronousAuth: SynchronousAuth
64+
private lateinit var preferences: SharedPreferences
65+
private lateinit var appId: String
66+
private lateinit var uniqueId: String
67+
private lateinit var pinpointClient: PinpointClient
68+
69+
@BeforeClass
70+
@JvmStatic
71+
fun setupBefore() {
72+
val context = ApplicationProvider.getApplicationContext<Context>()
73+
@RawRes val resourceId = Resources.getRawResourceId(context, CONFIGURATION_NAME)
74+
appId = readAppIdFromResource(context, resourceId)
75+
preferences = context.getSharedPreferences(
76+
"${appId}$PREFERENCES_AND_FILE_MANAGER_SUFFIX",
77+
Context.MODE_PRIVATE
78+
)
79+
setUniqueId()
80+
Amplify.Auth.addPlugin(AWSCognitoAuthPlugin() as AuthPlugin<*>)
81+
Amplify.addPlugin(AWSPinpointAnalyticsPlugin())
82+
Amplify.configure(context)
83+
Sleep.milliseconds(COGNITO_CONFIGURATION_TIMEOUT)
84+
synchronousAuth = SynchronousAuth.delegatingTo(Amplify.Auth)
85+
}
86+
87+
private fun setUniqueId() {
88+
uniqueId = UUID.randomUUID().toString()
89+
preferences.edit().putString(UNIQUE_ID_KEY, uniqueId).commit()
90+
}
91+
92+
private fun readCredentialsFromResource(context: Context, @RawRes resourceId: Int): Pair<String, String>? {
93+
val resource = Resources.readAsJson(context, resourceId)
94+
var userCredentials: Pair<String, String>? = null
95+
return try {
96+
val credentials = resource.getJSONArray("credentials")
97+
for (index in 0 until credentials.length()) {
98+
val credential = credentials.getJSONObject(index)
99+
val username = credential.getString("username")
100+
val password = credential.getString("password")
101+
userCredentials = Pair(username, password)
102+
}
103+
userCredentials
104+
} catch (jsonReadingFailure: JSONException) {
105+
throw RuntimeException(jsonReadingFailure)
106+
}
107+
}
108+
109+
private fun readAppIdFromResource(context: Context, @RawRes resourceId: Int): String {
110+
val resource = Resources.readAsJson(context, resourceId)
111+
return try {
112+
val analyticsJson = resource.getJSONObject("analytics")
113+
val pluginsJson = analyticsJson.getJSONObject("plugins")
114+
val pluginJson = pluginsJson.getJSONObject("awsPinpointAnalyticsPlugin")
115+
val pinpointJson = pluginJson.getJSONObject("pinpointAnalytics")
116+
pinpointJson.getString("appId")
117+
} catch (jsonReadingFailure: JSONException) {
118+
throw RuntimeException(jsonReadingFailure)
119+
}
120+
}
121+
}
122+
50123
@Before
51124
fun flushEvents() {
52125
val context = ApplicationProvider.getApplicationContext<Context>()
@@ -68,16 +141,16 @@ class PinpointAnalyticsStressTest {
68141
}
69142

70143
/**
71-
* Calls Analytics.recordEvent on an event with 5 attributes 100 times
144+
* Calls Analytics.recordEvent on an event with 5 attributes 50 times
72145
*/
73146
@Test
74147
fun testMultipleRecordEvent() {
75148
var eventName: String
76149
val hubAccumulator =
77150
HubAccumulator.create(HubChannel.ANALYTICS, AnalyticsChannelEventName.FLUSH_EVENTS, 2).start()
78151

79-
for (i in 1..50) {
80-
eventName = "Amplify-event$i"
152+
repeat(50) {
153+
eventName = "Amplify-event" + UUID.randomUUID().toString()
81154
val event = AnalyticsEvent.builder()
82155
.name(eventName)
83156
.addProperty("AnalyticsStringProperty", "Pancakes")
@@ -104,8 +177,8 @@ class PinpointAnalyticsStressTest {
104177
val hubAccumulator =
105178
HubAccumulator.create(HubChannel.ANALYTICS, AnalyticsChannelEventName.FLUSH_EVENTS, 2).start()
106179

107-
for (i in 1..50) {
108-
eventName = "Amplify-event$i"
180+
repeat(50) {
181+
eventName = "Amplify-event" + UUID.randomUUID().toString()
109182
val event = AnalyticsEvent.builder()
110183
.name(eventName)
111184
.addProperty("AnalyticsStringProperty1", "Pancakes")
@@ -167,7 +240,7 @@ class PinpointAnalyticsStressTest {
167240
val analyticsHubEventAccumulator =
168241
HubAccumulator.create(HubChannel.ANALYTICS, AnalyticsChannelEventName.FLUSH_EVENTS, 50)
169242
.start()
170-
val eventName = "Amplify-event"
243+
val eventName = "Amplify-event" + UUID.randomUUID().toString()
171244
val event = AnalyticsEvent.builder()
172245
.name(eventName)
173246
.addProperty("AnalyticsStringProperty", "Pancakes")
@@ -186,7 +259,7 @@ class PinpointAnalyticsStressTest {
186259
}
187260

188261
/**
189-
* calls Analytics.recordEvent, then calls Analytics.flushEvent; 50 times
262+
* calls Analytics.recordEvent, then calls Analytics.flushEvent; 30 times
190263
*/
191264
@Test
192265
fun testFlushEvent_AfterRecordEvent() {
@@ -195,8 +268,8 @@ class PinpointAnalyticsStressTest {
195268
HubAccumulator.create(HubChannel.ANALYTICS, AnalyticsChannelEventName.FLUSH_EVENTS, 35)
196269
.start()
197270

198-
for (i in 1..30) {
199-
eventName = "Amplify-event$i"
271+
repeat(30) {
272+
eventName = "Amplify-event" + UUID.randomUUID().toString()
200273
val event = AnalyticsEvent.builder()
201274
.name(eventName)
202275
.addProperty("AnalyticsStringProperty", "Pancakes")
@@ -425,72 +498,4 @@ class PinpointAnalyticsStressTest {
425498
}
426499
return result
427500
}
428-
429-
companion object {
430-
private const val CREDENTIALS_RESOURCE_NAME = "credentials"
431-
private const val CONFIGURATION_NAME = "amplifyconfiguration"
432-
private const val COGNITO_CONFIGURATION_TIMEOUT = 5 * 1000L
433-
private const val PINPOINT_ROUNDTRIP_TIMEOUT = 1 * 1000L
434-
private const val FLUSH_TIMEOUT = 1 * 500L
435-
private const val RECORD_INSERTION_TIMEOUT = 1 * 1000L
436-
private const val UNIQUE_ID_KEY = "UniqueId"
437-
private const val PREFERENCES_AND_FILE_MANAGER_SUFFIX = "515d6767-01b7-49e5-8273-c8d11b0f331d"
438-
private lateinit var synchronousAuth: SynchronousAuth
439-
private lateinit var preferences: SharedPreferences
440-
private lateinit var appId: String
441-
private lateinit var uniqueId: String
442-
private lateinit var pinpointClient: PinpointClient
443-
@BeforeClass
444-
@JvmStatic
445-
fun setupBefore() {
446-
val context = ApplicationProvider.getApplicationContext<Context>()
447-
@RawRes val resourceId = Resources.getRawResourceId(context, CONFIGURATION_NAME)
448-
appId = readAppIdFromResource(context, resourceId)
449-
preferences = context.getSharedPreferences(
450-
"${appId}$PREFERENCES_AND_FILE_MANAGER_SUFFIX",
451-
Context.MODE_PRIVATE
452-
)
453-
setUniqueId()
454-
Amplify.Auth.addPlugin(AWSCognitoAuthPlugin() as AuthPlugin<*>)
455-
Amplify.addPlugin(AWSPinpointAnalyticsPlugin())
456-
Amplify.configure(context)
457-
Sleep.milliseconds(COGNITO_CONFIGURATION_TIMEOUT)
458-
synchronousAuth = SynchronousAuth.delegatingTo(Amplify.Auth)
459-
}
460-
461-
private fun setUniqueId() {
462-
uniqueId = UUID.randomUUID().toString()
463-
preferences.edit().putString(UNIQUE_ID_KEY, uniqueId).commit()
464-
}
465-
466-
private fun readCredentialsFromResource(context: Context, @RawRes resourceId: Int): Pair<String, String>? {
467-
val resource = Resources.readAsJson(context, resourceId)
468-
var userCredentials: Pair<String, String>? = null
469-
return try {
470-
val credentials = resource.getJSONArray("credentials")
471-
for (index in 0 until credentials.length()) {
472-
val credential = credentials.getJSONObject(index)
473-
val username = credential.getString("username")
474-
val password = credential.getString("password")
475-
userCredentials = Pair(username, password)
476-
}
477-
userCredentials
478-
} catch (jsonReadingFailure: JSONException) {
479-
throw RuntimeException(jsonReadingFailure)
480-
}
481-
}
482-
483-
private fun readAppIdFromResource(context: Context, @RawRes resourceId: Int): String {
484-
val resource = Resources.readAsJson(context, resourceId)
485-
return try {
486-
val analyticsJson = resource.getJSONObject("analytics")
487-
val pluginsJson = analyticsJson.getJSONObject("plugins")
488-
val pluginJson = pluginsJson.getJSONObject("awsPinpointAnalyticsPlugin")
489-
val pinpointJson = pluginJson.getJSONObject("pinpointAnalytics")
490-
pinpointJson.getString("appId")
491-
} catch (jsonReadingFailure: JSONException) {
492-
throw RuntimeException(jsonReadingFailure)
493-
}
494-
}
495-
}
496501
}

aws-auth-cognito/src/androidTest/java/com/amplifyframework/auth/cognito/AuthStressTests.kt

+37
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ class AuthStressTests {
8080
}
8181
}
8282

83+
/**
84+
* Calls Auth.signIn 50 times
85+
*/
8386
@Test
8487
fun testMultipleSignIn() {
8588
val successLatch = CountDownLatch(1)
@@ -98,6 +101,9 @@ class AuthStressTests {
98101
assertTrue(errorLatch.await(TIMEOUT_S, TimeUnit.SECONDS))
99102
}
100103

104+
/**
105+
* Calls Auth.signOut 50 times
106+
*/
101107
@Test
102108
fun testMultipleSignOut() {
103109
val latch = CountDownLatch(50)
@@ -111,6 +117,9 @@ class AuthStressTests {
111117
assertTrue(latch.await(TIMEOUT_S, TimeUnit.SECONDS))
112118
}
113119

120+
/**
121+
* Calls Auth.fetchAuthSession 100 times when signed out
122+
*/
114123
@Test
115124
fun testMultipleFAS_WhenSignedOut() {
116125
val latch = CountDownLatch(100)
@@ -122,6 +131,9 @@ class AuthStressTests {
122131
assertTrue(latch.await(TIMEOUT_S, TimeUnit.SECONDS))
123132
}
124133

134+
/**
135+
* Calls Auth.signIn, then calls Auth.fetchAuthSession 100 times
136+
*/
125137
@Test
126138
fun testMultipleFAS_AfterSignIn() {
127139
val latch = CountDownLatch(101)
@@ -140,6 +152,9 @@ class AuthStressTests {
140152
assertTrue(latch.await(TIMEOUT_S, TimeUnit.SECONDS))
141153
}
142154

155+
/**
156+
* Calls Auth.signIn, then calls Auth.signOut
157+
*/
143158
@Test
144159
fun testSignOut_AfterSignIn() {
145160
val latch = CountDownLatch(2)
@@ -156,6 +171,9 @@ class AuthStressTests {
156171
assertTrue(latch.await(TIMEOUT_S, TimeUnit.SECONDS))
157172
}
158173

174+
/**
175+
* Calls Auth.signIn, calls Auth.fetchAuthSession 100 times, then calls Auth.signOut
176+
*/
159177
@Test
160178
fun testSignIn_multipleFAS_SignOut() {
161179
val latch = CountDownLatch(102)
@@ -176,6 +194,9 @@ class AuthStressTests {
176194
assertTrue(latch.await(TIMEOUT_S, TimeUnit.SECONDS))
177195
}
178196

197+
/**
198+
* Calls Auth.signIn, then calls Auth.fetchAuthSession 100 times. Randomly calls Auth.signOut within those 100 calls.
199+
*/
179200
@Test
180201
fun testSignIn_multipleFAS_withSignOut() {
181202
val latch = CountDownLatch(102)
@@ -201,6 +222,10 @@ class AuthStressTests {
201222
assertTrue(latch.await(TIMEOUT_S, TimeUnit.SECONDS))
202223
}
203224

225+
/**
226+
* Calls Auth.signIn, then calls Auth.fetchAuthSession 100 times. Randomly calls Auth.fetchAuthSession with
227+
* forceRefresh() within those 100 calls.
228+
*/
204229
@Test
205230
fun testSignIn_multipleFAS_withRefresh() {
206231
val latch = CountDownLatch(101)
@@ -226,6 +251,9 @@ class AuthStressTests {
226251
assertTrue(latch.await(TIMEOUT_S, TimeUnit.MINUTES))
227252
}
228253

254+
/**
255+
* Randomly calls Auth.fetchAuthSession, Auth.signIn, Auth.fetchAuthSession with forceRefresh(), and Auth.signOut 20 times.
256+
*/
229257
@Test
230258
fun testRandomMultipleAPIs() {
231259
val latch = CountDownLatch(20)
@@ -255,6 +283,9 @@ class AuthStressTests {
255283
assertTrue(latch.await(TIMEOUT_S, TimeUnit.MINUTES))
256284
}
257285

286+
/**
287+
* Calls Auth.getCurrentUser 100 times
288+
*/
258289
@Test
259290
fun testSignIn_GetCurrentUser() {
260291
val latch = CountDownLatch(101)
@@ -275,6 +306,9 @@ class AuthStressTests {
275306
assertTrue(latch.await(TIMEOUT_S, TimeUnit.MINUTES))
276307
}
277308

309+
/**
310+
* Calls Auth.fetchUserAttributes 100 times
311+
*/
278312
@Test
279313
fun testSignIn_FetchAttributes() {
280314
val latch = CountDownLatch(101)
@@ -295,6 +329,9 @@ class AuthStressTests {
295329
assertTrue(latch.await(TIMEOUT_S, TimeUnit.MINUTES))
296330
}
297331

332+
/**
333+
* Calls Auth.updateUserAttributes 100 times
334+
*/
298335
@Test
299336
fun testSignIn_UpdateAttributes() {
300337
val latch = CountDownLatch(101)

0 commit comments

Comments
 (0)