Skip to content

Commit f0f05a8

Browse files
committed
Copy test from @themiswang ##6120 to make merging easier
1 parent 0eaa4b4 commit f0f05a8

File tree

1 file changed

+165
-56
lines changed
  • firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/metadata

1 file changed

+165
-56
lines changed

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/metadata/MetaDataStoreTest.java

Lines changed: 165 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -58,129 +58,201 @@ public class MetaDataStoreTest extends CrashlyticsTestCase {
5858
}
5959

6060
private FileStore fileStore;
61-
private final CrashlyticsWorker worker = new CrashlyticsWorker(TestOnlyExecutors.background());
6261

62+
private CrashlyticsWorker diskWriteWorker;
6363
private MetaDataStore storeUnderTest;
6464

6565
@Override
6666
public void setUp() throws Exception {
6767
super.setUp();
6868
fileStore = new FileStore(getContext());
6969
storeUnderTest = new MetaDataStore(fileStore);
70+
diskWriteWorker = new CrashlyticsWorker(TestOnlyExecutors.background());
71+
}
72+
73+
@Override
74+
public void tearDown() throws Exception {
75+
fileStore.deleteAllCrashlyticsFiles();
7076
}
7177

7278
private UserMetadata metadataWithUserId(String sessionId) {
7379
return metadataWithUserId(sessionId, USER_ID);
7480
}
7581

7682
private UserMetadata metadataWithUserId(String sessionId, String userId) {
77-
UserMetadata metadata = new UserMetadata(sessionId, fileStore, worker);
83+
UserMetadata metadata = new UserMetadata(sessionId, fileStore, diskWriteWorker);
7884
metadata.setUserId(userId);
7985
return metadata;
8086
}
8187

82-
public void testWriteUserData_allFields() {
83-
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1).getUserId());
84-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
88+
@Test
89+
public void testWriteUserData_allFields() throws Exception {
90+
diskWriteWorker.submit(
91+
() -> {
92+
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1).getUserId());
93+
});
94+
diskWriteWorker.await();
95+
UserMetadata userData =
96+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
8597
assertEquals(USER_ID, userData.getUserId());
8698
}
8799

88-
public void testWriteUserData_noFields() {
89-
storeUnderTest.writeUserData(
90-
SESSION_ID_1, new UserMetadata(SESSION_ID_1, fileStore, null).getUserId());
91-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
100+
@Test
101+
public void testWriteUserData_noFields() throws Exception {
102+
diskWriteWorker.submit(
103+
() -> {
104+
storeUnderTest.writeUserData(
105+
SESSION_ID_1, new UserMetadata(SESSION_ID_1, fileStore, null).getUserId());
106+
});
107+
diskWriteWorker.await();
108+
UserMetadata userData =
109+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
92110
assertNull(userData.getUserId());
93111
}
94112

95-
public void testWriteUserData_singleField() {
96-
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1).getUserId());
97-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
113+
@Test
114+
public void testWriteUserData_singleField() throws Exception {
115+
diskWriteWorker.submit(
116+
() -> {
117+
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1).getUserId());
118+
});
119+
diskWriteWorker.await();
120+
UserMetadata userData =
121+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
98122
assertEquals(USER_ID, userData.getUserId());
99123
}
100124

101-
public void testWriteUserData_null() {
102-
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1, null).getUserId());
103-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
125+
@Test
126+
public void testWriteUserData_null() throws Exception {
127+
diskWriteWorker.submit(
128+
() -> {
129+
storeUnderTest.writeUserData(
130+
SESSION_ID_1, metadataWithUserId(SESSION_ID_1, null).getUserId());
131+
});
132+
diskWriteWorker.await();
133+
UserMetadata userData =
134+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
104135
assertNull(userData.getUserId());
105136
}
106137

107-
public void testWriteUserData_emptyString() {
108-
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1, "").getUserId());
109-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
138+
@Test
139+
public void testWriteUserData_emptyString() throws Exception {
140+
diskWriteWorker.submit(
141+
() -> {
142+
storeUnderTest.writeUserData(
143+
SESSION_ID_1, metadataWithUserId(SESSION_ID_1, "").getUserId());
144+
});
145+
diskWriteWorker.await();
146+
UserMetadata userData =
147+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
110148
assertEquals("", userData.getUserId());
111149
}
112150

113-
public void testWriteUserData_unicode() {
151+
@Test
152+
public void testWriteUserData_unicode() throws Exception {
114153
storeUnderTest.writeUserData(
115154
SESSION_ID_1, metadataWithUserId(SESSION_ID_1, UNICODE).getUserId());
116-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
155+
diskWriteWorker.await();
156+
UserMetadata userData =
157+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
117158
assertEquals(UNICODE, userData.getUserId());
118159
}
119160

120-
public void testWriteUserData_escaped() {
121-
storeUnderTest.writeUserData(
122-
SESSION_ID_1, metadataWithUserId(SESSION_ID_1, ESCAPED).getUserId());
123-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
161+
@Test
162+
public void testWriteUserData_escaped() throws Exception {
163+
diskWriteWorker.submit(
164+
() -> {
165+
storeUnderTest.writeUserData(
166+
SESSION_ID_1, metadataWithUserId(SESSION_ID_1, ESCAPED).getUserId());
167+
});
168+
diskWriteWorker.await();
169+
UserMetadata userData =
170+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
124171
assertEquals(ESCAPED.trim(), userData.getUserId());
125172
}
126173

174+
@Test
127175
public void testWriteUserData_readDifferentSession() {
128176
storeUnderTest.writeUserData(SESSION_ID_1, metadataWithUserId(SESSION_ID_1).getUserId());
129-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_2, fileStore, worker);
177+
UserMetadata userData =
178+
UserMetadata.loadFromExistingSession(SESSION_ID_2, fileStore, diskWriteWorker);
130179
assertNull(userData.getUserId());
131180
}
132181

182+
@Test
133183
public void testReadUserData_corruptData() throws IOException {
134184
File file = storeUnderTest.getUserDataFileForSession(SESSION_ID_1);
135185
try (PrintWriter printWriter = new PrintWriter(file)) {
136186
printWriter.println("Matt says hi!");
137187
}
138-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
188+
UserMetadata userData =
189+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
139190
assertNull(userData.getUserId());
140191
assertFalse(file.exists());
141192
}
142193

194+
@Test
143195
public void testReadUserData_emptyData() throws IOException {
144196
File file = storeUnderTest.getUserDataFileForSession(SESSION_ID_1);
145197
file.createNewFile();
146-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
198+
UserMetadata userData =
199+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
147200
assertNull(userData.getUserId());
148201
assertFalse(file.exists());
149202
}
150203

204+
@Test
151205
public void testReadUserData_noStoredData() {
152-
UserMetadata userData = UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, worker);
206+
UserMetadata userData =
207+
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, diskWriteWorker);
153208
assertNull(userData.getUserId());
154209
}
155210

156211
@Test
157-
public void testUpdateSessionId_notPersistUserIdToNewSessionIfNoUserIdSet() {
158-
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, worker);
212+
public void testUpdateSessionId_notPersistUserIdToNewSessionIfNoUserIdSet() throws Exception {
213+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
159214
userMetadata.setNewSession(SESSION_ID_2);
160-
assertThat(fileStore.getSessionFile(SESSION_ID_2, UserMetadata.USERDATA_FILENAME).exists())
161-
.isFalse();
215+
diskWriteWorker.submit(
216+
() -> {
217+
assertThat(
218+
fileStore.getSessionFile(SESSION_ID_2, UserMetadata.USERDATA_FILENAME).exists())
219+
.isFalse();
220+
});
221+
diskWriteWorker.await();
162222
}
163223

164224
@Test
165-
public void testUpdateSessionId_notPersistCustomKeysToNewSessionIfNoCustomKeysSet() {
166-
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, worker);
225+
public void testUpdateSessionId_notPersistCustomKeysToNewSessionIfNoCustomKeysSet()
226+
throws Exception {
227+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
167228
userMetadata.setNewSession(SESSION_ID_2);
168-
assertThat(fileStore.getSessionFile(SESSION_ID_2, UserMetadata.KEYDATA_FILENAME).exists())
169-
.isFalse();
229+
diskWriteWorker.submit(
230+
() -> {
231+
assertThat(fileStore.getSessionFile(SESSION_ID_2, UserMetadata.KEYDATA_FILENAME).exists())
232+
.isFalse();
233+
});
234+
diskWriteWorker.await();
170235
}
171236

172237
@Test
173-
public void testUpdateSessionId_notPersistRolloutsToNewSessionIfNoRolloutsSet() {
174-
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, worker);
238+
public void testUpdateSessionId_notPersistRolloutsToNewSessionIfNoRolloutsSet() throws Exception {
239+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
175240
userMetadata.setNewSession(SESSION_ID_2);
176-
assertThat(
177-
fileStore.getSessionFile(SESSION_ID_2, UserMetadata.ROLLOUTS_STATE_FILENAME).exists())
178-
.isFalse();
241+
242+
diskWriteWorker.submit(
243+
() -> {
244+
assertThat(
245+
fileStore
246+
.getSessionFile(SESSION_ID_2, UserMetadata.ROLLOUTS_STATE_FILENAME)
247+
.exists())
248+
.isFalse();
249+
});
250+
diskWriteWorker.await();
179251
}
180252

181253
@Test
182254
public void testUpdateSessionId_persistCustomKeysToNewSessionIfCustomKeysSet() throws Exception {
183-
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, worker);
255+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
184256
final Map<String, String> keys =
185257
new HashMap<String, String>() {
186258
{
@@ -191,37 +263,74 @@ public void testUpdateSessionId_persistCustomKeysToNewSessionIfCustomKeysSet() t
191263
};
192264
userMetadata.setCustomKeys(keys);
193265
userMetadata.setNewSession(SESSION_ID_2);
194-
assertThat(fileStore.getSessionFile(SESSION_ID_2, UserMetadata.KEYDATA_FILENAME).exists())
195-
.isTrue();
266+
diskWriteWorker.submit(
267+
() -> {
268+
assertThat(fileStore.getSessionFile(SESSION_ID_2, UserMetadata.KEYDATA_FILENAME).exists())
269+
.isTrue();
270+
});
271+
diskWriteWorker.await();
196272

197273
MetaDataStore metaDataStore = new MetaDataStore(fileStore);
198-
199-
worker.await();
200-
201274
assertThat(metaDataStore.readKeyData(SESSION_ID_2)).isEqualTo(keys);
202275
}
203276

204277
@Test
205-
public void testUpdateSessionId_persistUserIdToNewSessionIfUserIdSet() {
278+
public void testSetSameKeysRaceCondition_preserveLastEntryValue() throws Exception {
279+
final Map<String, String> keys =
280+
new HashMap<String, String>() {
281+
{
282+
put(KEY_1, "10000");
283+
put(KEY_2, "20000");
284+
}
285+
};
286+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
287+
for (int index = 0; index <= 10000; index++) {
288+
userMetadata.setCustomKey(KEY_1, String.valueOf(index));
289+
userMetadata.setCustomKey(KEY_2, String.valueOf(index * 2));
290+
}
291+
diskWriteWorker.submit(
292+
() -> {
293+
final Map<String, String> readKeys = storeUnderTest.readKeyData(SESSION_ID_1);
294+
assertThat(readKeys.get(KEY_1)).isEqualTo("10000");
295+
assertThat(readKeys.get(KEY_2)).isEqualTo("20000");
296+
assertEqualMaps(keys, readKeys);
297+
});
298+
diskWriteWorker.await();
299+
}
300+
301+
@Test
302+
public void testUpdateSessionId_persistUserIdToNewSessionIfUserIdSet() throws Exception {
206303
String userId = "ThemisWang";
207-
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, worker);
304+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
208305
userMetadata.setUserId(userId);
209306
userMetadata.setNewSession(SESSION_ID_2);
210-
assertThat(fileStore.getSessionFile(SESSION_ID_2, UserMetadata.USERDATA_FILENAME).exists())
211-
.isTrue();
307+
308+
diskWriteWorker.submit(
309+
() -> {
310+
assertThat(
311+
fileStore.getSessionFile(SESSION_ID_2, UserMetadata.USERDATA_FILENAME).exists())
312+
.isTrue();
313+
});
314+
diskWriteWorker.await();
212315

213316
MetaDataStore metaDataStore = new MetaDataStore(fileStore);
214317
assertThat(metaDataStore.readUserId(SESSION_ID_2)).isEqualTo(userId);
215318
}
216319

217320
@Test
218-
public void testUpdateSessionId_persistRolloutsToNewSessionIfRolloutsSet() {
219-
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, worker);
321+
public void testUpdateSessionId_persistRolloutsToNewSessionIfRolloutsSet() throws Exception {
322+
UserMetadata userMetadata = new UserMetadata(SESSION_ID_1, fileStore, diskWriteWorker);
220323
userMetadata.updateRolloutsState(ROLLOUTS_STATE);
221324
userMetadata.setNewSession(SESSION_ID_2);
222-
assertThat(
223-
fileStore.getSessionFile(SESSION_ID_2, UserMetadata.ROLLOUTS_STATE_FILENAME).exists())
224-
.isTrue();
325+
diskWriteWorker.submit(
326+
() -> {
327+
assertThat(
328+
fileStore
329+
.getSessionFile(SESSION_ID_2, UserMetadata.ROLLOUTS_STATE_FILENAME)
330+
.exists())
331+
.isTrue();
332+
});
333+
diskWriteWorker.await();
225334

226335
MetaDataStore metaDataStore = new MetaDataStore(fileStore);
227336
assertThat(metaDataStore.readRolloutsState(SESSION_ID_2)).isEqualTo(ROLLOUTS_STATE);

0 commit comments

Comments
 (0)