Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: components/gcm_driver/android/junit/src/org/chromium/components/gcm_driver/GCMMessageTest.java

Issue 2690163008: Route through a JobService when receiving a message for the GCM Driver (Closed)
Patch Set: Route through a JobService when receiving a message for the GCM Driver Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.components.gcm_driver;
6
7 import static org.junit.Assert.assertArrayEquals;
8 import static org.junit.Assert.assertEquals;
9
10 import android.os.Build;
11 import android.os.Bundle;
12
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15
16 import org.robolectric.annotation.Config;
17
18 import org.chromium.base.test.util.MinAndroidSdkLevel;
19 import org.chromium.testing.local.LocalRobolectricTestRunner;
20
21 /**
22 * Unit tests for GCMMessage.
23 */
24 @RunWith(LocalRobolectricTestRunner.class)
25 @Config(manifest = Config.NONE)
26 public class GCMMessageTest {
27 /**
28 * Tests that a message object can be created based on data received from GC M. Note that the raw
29 * data field is tested separately.
30 */
31 @Test
32 public void testCreateMessageFromGCM() {
33 Bundle extras = new Bundle();
34
35 // Compose a simple message that lacks all optional fields.
36 extras.putString("subtype", "MyAppId");
37
38 {
39 GCMMessage message = new GCMMessage("MySenderId", extras);
40
41 assertEquals("MySenderId", message.getSenderId());
42 assertEquals("MyAppId", message.getAppId());
43 assertEquals(null, message.getCollapseKey());
44 assertArrayEquals(new String[] {}, message.getDataKeysAndValuesArray ());
45 }
46
47 // Add the optional fields: collapse key, raw binary data and a custom p roperty.
48 extras.putString("collapse_key", "MyCollapseKey");
49 extras.putByteArray("rawData", new byte[] {0x00, 0x15, 0x30, 0x45});
50 extras.putString("property", "value");
51
52 {
53 GCMMessage message = new GCMMessage("MySenderId", extras);
54
55 assertEquals("MySenderId", message.getSenderId());
56 assertEquals("MyAppId", message.getAppId());
57 assertEquals("MyCollapseKey", message.getCollapseKey());
58 assertArrayEquals(
59 new String[] {"property", "value"}, message.getDataKeysAndVa luesArray());
60 }
61 }
62
63 /**
64 * Tests that the bundle containing extras from GCM will be filtered for val ues that we either
65 * pass through by other means, or that we know to be irrelevant to regular GCM messages.
66 */
67 @Test
68 public void testFiltersExtraBundle() {
69 Bundle extras = new Bundle();
70
71 // These should be filtered by full key.
72 extras.putString("collapse_key", "collapseKey");
73 extras.putString("rawData", "rawData");
74 extras.putString("from", "from");
75 extras.putString("subtype", "subtype");
76
77 // These should be filtered by prefix matching.
78 extras.putString("com.google.ipc.invalidation.gcmmplex.foo", "bar");
79 extras.putString("com.google.ipc.invalidation.gcmmplex.bar", "baz");
80
81 // These should be filtered because they're not strings.
82 extras.putBoolean("myBoolean", true);
83 extras.putInt("myInteger", 42);
84
85 // These should not be filtered.
86 extras.putString("collapse_key2", "secondCollapseKey");
87 extras.putString("myString", "foobar");
88
89 GCMMessage message = new GCMMessage("senderId", extras);
90
91 assertArrayEquals(new String[] {"collapse_key2", "secondCollapseKey", "m yString", "foobar"},
92 message.getDataKeysAndValuesArray());
93 }
94
95 /**
96 * Tests that a GCMMessage object can be serialized to and deserialized from a persistable
97 * bundle. Note that the raw data field is tested separately. Only run on An droid L and beyond
98 * because it depends on PersistableBundle.
99 */
100 @Test
101 @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
102 public void testSerializationToPersistableBundle() {
103 Bundle extras = new Bundle();
104
105 // Compose a simple message that lacks all optional fields.
106 extras.putString("subtype", "MyAppId");
107
108 {
109 GCMMessage message = new GCMMessage("MySenderId", extras);
110 GCMMessage copiedMessage = new GCMMessage(message.toPersistableBundl e());
111
112 assertEquals(message.getSenderId(), copiedMessage.getSenderId());
113 assertEquals(message.getAppId(), copiedMessage.getAppId());
114 assertEquals(message.getCollapseKey(), copiedMessage.getCollapseKey( ));
115 assertArrayEquals(
116 message.getDataKeysAndValuesArray(), copiedMessage.getDataKe ysAndValuesArray());
117 }
118
119 // Add the optional fields: collapse key, raw binary data and a custom p roperty.
120 extras.putString("collapse_key", "MyCollapseKey");
121 extras.putString("property", "value");
122
123 {
124 GCMMessage message = new GCMMessage("MySenderId", extras);
125 GCMMessage copiedMessage = new GCMMessage(message.toPersistableBundl e());
126
127 assertEquals(message.getSenderId(), copiedMessage.getSenderId());
128 assertEquals(message.getAppId(), copiedMessage.getAppId());
129 assertEquals(message.getCollapseKey(), copiedMessage.getCollapseKey( ));
130 assertArrayEquals(
131 message.getDataKeysAndValuesArray(), copiedMessage.getDataKe ysAndValuesArray());
132 }
133 }
134
135 /**
136 * Tests that the raw data field can be serialized and deserialized as expec ted. It should be
137 * NULL when undefined, an empty byte array when defined but empty, and a re gular, filled
138 * byte array when data has been provided. Only run on Android L and beyond because it depends
139 * on PersistableBundle.
140 */
141 @Test
142 @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
143 public void testRawDataSerializationBehaviour() {
144 Bundle extras = new Bundle();
145 extras.putString("subtype", "MyAppId");
146
147 // Case 1: No raw data supplied. Should be NULL.
148 {
149 GCMMessage message = new GCMMessage("MySenderId", extras);
150 GCMMessage copiedMessage = new GCMMessage(message.toPersistableBundl e());
151
152 assertArrayEquals(null, message.getRawData());
153 assertArrayEquals(null, copiedMessage.getRawData());
154 }
155
156 extras.putByteArray("rawData", new byte[] {});
157
158 // Case 2: Empty byte array of raw data supplied. Should be just that.
159 {
160 GCMMessage message = new GCMMessage("MySenderId", extras);
161 GCMMessage copiedMessage = new GCMMessage(message.toPersistableBundl e());
162
163 assertArrayEquals(new byte[] {}, message.getRawData());
164 assertArrayEquals(new byte[] {}, copiedMessage.getRawData());
165 }
166
167 extras.putByteArray("rawData", new byte[] {0x00, 0x15, 0x30, 0x45});
168
169 // Case 3: Byte array with data supplied.
170 {
171 GCMMessage message = new GCMMessage("MySenderId", extras);
172 GCMMessage copiedMessage = new GCMMessage(message.toPersistableBundl e());
173
174 assertArrayEquals(new byte[] {0x00, 0x15, 0x30, 0x45}, message.getRa wData());
175 assertArrayEquals(new byte[] {0x00, 0x15, 0x30, 0x45}, copiedMessage .getRawData());
176 }
177 }
178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698