Skip to content

Commit 3d4aa7a

Browse files
committed
update
1 parent 154842d commit 3d4aa7a

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

firebase-messaging/src/main/java/com/google/firebase/messaging/SharedPreferencesQueue.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import androidx.annotation.GuardedBy;
2222
import androidx.annotation.NonNull;
2323
import androidx.annotation.Nullable;
24+
import androidx.annotation.VisibleForTesting;
2425
import androidx.annotation.WorkerThread;
2526
import java.util.ArrayDeque;
2627
import java.util.ArrayList;
@@ -35,7 +36,8 @@ final class SharedPreferencesQueue {
3536
private final String itemSeparator;
3637

3738
@GuardedBy("internalQueue")
38-
private final ArrayDeque<String> internalQueue = new ArrayDeque<>();
39+
@VisibleForTesting
40+
final ArrayDeque<String> internalQueue = new ArrayDeque<>();
3941

4042
private final Executor syncExecutor;
4143

@@ -176,13 +178,34 @@ public void beginTransaction() {
176178
bulkOperation = true;
177179
}
178180

181+
@VisibleForTesting
182+
void beginTransactionSync() {
183+
synchronized (internalQueue) {
184+
beginTransaction();
185+
}
186+
}
187+
179188
/** Commits bulk operation transactions. See {@link SharedPreferencesQueue#beginTransaction()}. */
180189
@GuardedBy("internalQueue")
181190
public void commitTransaction() {
182191
bulkOperation = false;
183192
syncStateAsync();
184193
}
185194

195+
@VisibleForTesting
196+
void commitTransactionSync() {
197+
synchronized (internalQueue) {
198+
commitTransaction();
199+
}
200+
}
201+
202+
@VisibleForTesting
203+
public String serializeSync() {
204+
synchronized (internalQueue) {
205+
return serialize();
206+
}
207+
}
208+
186209
public boolean remove(@Nullable Object o) {
187210
synchronized (internalQueue) {
188211
return checkAndSyncState(internalQueue.remove(o));

firebase-messaging/src/test/java/com/google/firebase/messaging/SharedPreferencesQueueRoboTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
import static java.util.concurrent.TimeUnit.SECONDS;
1818

1919
import android.content.Context;
20-
21-
import androidx.annotation.GuardedBy;
2220
import androidx.test.core.app.ApplicationProvider;
2321
import com.google.firebase.messaging.testing.FakeScheduledExecutorService;
2422
import org.junit.Before;
@@ -32,7 +30,6 @@ public class SharedPreferencesQueueRoboTest {
3230
private static final String TEST_TOPIC = "Test_Topic";
3331
private final FakeScheduledExecutorService executor = new FakeScheduledExecutorService();
3432

35-
@GuardedBy("this")
3633
private SharedPreferencesQueue queue;
3734

3835
@Before
@@ -122,7 +119,7 @@ public void testSerialize() {
122119
queue.add(TEST_TOPIC + "1");
123120
queue.add(TEST_TOPIC + "3");
124121
queue.add(TEST_TOPIC + "2");
125-
assertThat(queue.serialize())
122+
assertThat(queue.serializeSync())
126123
.isEqualTo(
127124
TEST_TOPIC
128125
+ "1"
@@ -150,13 +147,15 @@ public void testQueue_retainsItems() {
150147

151148
@Test
152149
public void testMultiTransactions() {
153-
queue.beginTransaction();
150+
synchronized (queue.internalQueue) {
151+
queue.beginTransactionSync();
152+
}
154153
queue.add(TEST_TOPIC);
155154

156155
// transaction should not be visible from other queue instances yet
157156
assertThat(initQueue(false).toList()).isEmpty();
158157

159-
queue.commitTransaction();
158+
queue.commitTransactionSync();
160159
executePendingOperations();
161160

162161
assertThat(initQueue(false).toList()).containsExactly(TEST_TOPIC);

0 commit comments

Comments
 (0)