@@ -100,6 +100,22 @@ TEST_F(FirebaseAnalyticsTest, TestSetSessionTimeoutDuraction) {
100
100
}
101
101
102
102
TEST_F (FirebaseAnalyticsTest, TestGetAnalyticsInstanceID) {
103
+ // On Android, if SetConsent was tested, this test will fail, since the app
104
+ // needs to be restarted after consent is denied or it won't generate a new
105
+ // sessionID. To not break the tests, skip this test in that case.
106
+ #if defined(__ANDROID__)
107
+ // Log the Google Play services version for debugging in case this test fails.
108
+ LogInfo (" Google Play services version: %d" , GetGooglePlayServicesVersion ());
109
+ if (did_test_setconsent_) {
110
+ LogInfo (
111
+ " Skipping %s after TestSetConsent, as the test may fail until the app "
112
+ " is restarted." ,
113
+ ::testing::UnitTest::GetInstance ()->current_test_info()->name());
114
+ GTEST_SKIP ();
115
+ return ;
116
+ }
117
+ #endif
118
+
103
119
FLAKY_TEST_SECTION_BEGIN ();
104
120
105
121
firebase::Future<std::string> future =
@@ -124,11 +140,11 @@ TEST_F(FirebaseAnalyticsTest, TestGetSessionID) {
124
140
#if defined(__ANDROID__)
125
141
// Log the Google Play services version for debugging in case this test fails.
126
142
LogInfo (" Google Play services version: %d" , GetGooglePlayServicesVersion ());
127
-
128
143
if (did_test_setconsent_) {
129
144
LogInfo (
130
- " Skipping TestGetSessionID after TestSetConsent, as GetSessionId() "
131
- " will fail until the app is restarted." );
145
+ " Skipping %s after TestSetConsent, as the test may fail until the app "
146
+ " is restarted." ,
147
+ ::testing::UnitTest::GetInstance ()->current_test_info()->name());
132
148
GTEST_SKIP ();
133
149
return ;
134
150
}
@@ -158,39 +174,39 @@ TEST_F(FirebaseAnalyticsTest, TestGetSessionID) {
158
174
}
159
175
}
160
176
161
- TEST_F (FirebaseAnalyticsTest, TestSetConsent) {
162
- // Can't confirm that these do anything but just run them all to ensure the
163
- // app doesn't crash.
164
- std::map<firebase::analytics::ConsentType, firebase::analytics::ConsentStatus>
165
- consent_settings_allow = {
166
- {firebase::analytics::kConsentTypeAnalyticsStorage ,
167
- firebase::analytics::kConsentStatusGranted },
168
- {firebase::analytics::kConsentTypeAdStorage ,
169
- firebase::analytics::kConsentStatusGranted },
170
- {firebase::analytics::kConsentTypeAdUserData ,
171
- firebase::analytics::kConsentStatusGranted },
172
- {firebase::analytics::kConsentTypeAdPersonalization ,
173
- firebase::analytics::kConsentStatusGranted }};
174
- std::map<firebase::analytics::ConsentType, firebase::analytics::ConsentStatus>
175
- consent_settings_deny = {
176
- {firebase::analytics::kConsentTypeAnalyticsStorage ,
177
- firebase::analytics::kConsentStatusDenied },
178
- {firebase::analytics::kConsentTypeAdStorage ,
179
- firebase::analytics::kConsentStatusDenied },
180
- {firebase::analytics::kConsentTypeAdUserData ,
181
- firebase::analytics::kConsentStatusDenied },
182
- {firebase::analytics::kConsentTypeAdPersonalization ,
183
- firebase::analytics::kConsentStatusDenied }};
184
- std::map<firebase::analytics::ConsentType, firebase::analytics::ConsentStatus>
185
- consent_settings_empty;
186
- firebase::analytics::SetConsent (consent_settings_empty);
187
- ProcessEvents (1000 );
188
- firebase::analytics::SetConsent (consent_settings_deny);
189
- ProcessEvents (1000 );
190
- firebase::analytics::SetConsent (consent_settings_allow);
191
- ProcessEvents (1000 );
177
+ TEST_F (FirebaseAnalyticsTest, TestResettingGivesNewInstanceId) {
178
+ // On Android, if SetConsent was tested, this test will fail, since the app
179
+ // needs to be restarted after consent is denied or it won't generate a new
180
+ // sessionID. To not break the tests, skip this test in that case.
181
+ #if defined(__ANDROID__)
182
+ // Log the Google Play services version for debugging in case this test fails.
183
+ LogInfo (" Google Play services version: %d" , GetGooglePlayServicesVersion ());
184
+ if (did_test_setconsent_) {
185
+ LogInfo (
186
+ " Skipping %s after TestSetConsent, as the test may fail until the app "
187
+ " is restarted." ,
188
+ ::testing::UnitTest::GetInstance ()->current_test_info()->name());
189
+ GTEST_SKIP ();
190
+ return ;
191
+ }
192
+ #endif
193
+ FLAKY_TEST_SECTION_BEGIN ();
192
194
193
- did_test_setconsent_ = true ;
195
+ firebase::Future<std::string> future =
196
+ firebase::analytics::GetAnalyticsInstanceId ();
197
+ WaitForCompletion (future, " GetAnalyticsInstanceId" );
198
+ EXPECT_FALSE (future.result ()->empty ());
199
+ std::string instance_id = *future.result ();
200
+
201
+ firebase::analytics::ResetAnalyticsData ();
202
+
203
+ future = firebase::analytics::GetAnalyticsInstanceId ();
204
+ WaitForCompletion (future, " GetAnalyticsInstanceId after ResetAnalyticsData" );
205
+ std::string new_instance_id = *future.result ();
206
+ EXPECT_FALSE (future.result ()->empty ());
207
+ EXPECT_NE (instance_id, new_instance_id);
208
+
209
+ FLAKY_TEST_SECTION_END ();
194
210
}
195
211
196
212
TEST_F (FirebaseAnalyticsTest, TestSetProperties) {
@@ -235,24 +251,48 @@ TEST_F(FirebaseAnalyticsTest, TestLogEventWithMultipleParameters) {
235
251
sizeof (kLevelUpParameters ) / sizeof (kLevelUpParameters [0 ]));
236
252
}
237
253
238
- TEST_F (FirebaseAnalyticsTest, TestResettingGivesNewInstanceId) {
239
- FLAKY_TEST_SECTION_BEGIN ();
240
-
241
- firebase::Future<std::string> future =
242
- firebase::analytics::GetAnalyticsInstanceId ();
243
- WaitForCompletion (future, " GetAnalyticsInstanceId" );
244
- EXPECT_FALSE (future.result ()->empty ());
245
- std::string instance_id = *future.result ();
246
-
247
- firebase::analytics::ResetAnalyticsData ();
254
+ TEST_F (FirebaseAnalyticsTest, TestSetConsent) {
255
+ // On Android, this test must be performed at the end, after all the tests for
256
+ // session ID and instance ID. This is because once you call SetConsent to
257
+ // deny consent on Android, calling it again to grant consent may not take
258
+ // effect until the app restarts, thus breaking any of those tests that are
259
+ // run after this one.
260
+ //
261
+ // If this test does happen to run earlier (due to randomizing test order, for
262
+ // example), the tests that could fail will be skipped (on Android).
248
263
249
- future = firebase::analytics::GetAnalyticsInstanceId ();
250
- WaitForCompletion (future, " GetAnalyticsInstanceId after ResetAnalyticsData" );
251
- std::string new_instance_id = *future.result ();
252
- EXPECT_FALSE (future.result ()->empty ());
253
- EXPECT_NE (instance_id, new_instance_id);
264
+ // Can't confirm that these do anything but just run them all to ensure the
265
+ // app doesn't crash.
266
+ std::map<firebase::analytics::ConsentType, firebase::analytics::ConsentStatus>
267
+ consent_settings_allow = {
268
+ {firebase::analytics::kConsentTypeAnalyticsStorage ,
269
+ firebase::analytics::kConsentStatusGranted },
270
+ {firebase::analytics::kConsentTypeAdStorage ,
271
+ firebase::analytics::kConsentStatusGranted },
272
+ {firebase::analytics::kConsentTypeAdUserData ,
273
+ firebase::analytics::kConsentStatusGranted },
274
+ {firebase::analytics::kConsentTypeAdPersonalization ,
275
+ firebase::analytics::kConsentStatusGranted }};
276
+ std::map<firebase::analytics::ConsentType, firebase::analytics::ConsentStatus>
277
+ consent_settings_deny = {
278
+ {firebase::analytics::kConsentTypeAnalyticsStorage ,
279
+ firebase::analytics::kConsentStatusDenied },
280
+ {firebase::analytics::kConsentTypeAdStorage ,
281
+ firebase::analytics::kConsentStatusDenied },
282
+ {firebase::analytics::kConsentTypeAdUserData ,
283
+ firebase::analytics::kConsentStatusDenied },
284
+ {firebase::analytics::kConsentTypeAdPersonalization ,
285
+ firebase::analytics::kConsentStatusDenied }};
286
+ std::map<firebase::analytics::ConsentType, firebase::analytics::ConsentStatus>
287
+ consent_settings_empty;
288
+ firebase::analytics::SetConsent (consent_settings_empty);
289
+ ProcessEvents (1000 );
290
+ firebase::analytics::SetConsent (consent_settings_deny);
291
+ ProcessEvents (1000 );
292
+ firebase::analytics::SetConsent (consent_settings_allow);
293
+ ProcessEvents (1000 );
254
294
255
- FLAKY_TEST_SECTION_END () ;
295
+ did_test_setconsent_ = true ;
256
296
}
257
297
258
298
} // namespace firebase_testapp_automated
0 commit comments