Skip to content

Commit 2df8148

Browse files
authored
Use gzip (#3316)
* update * gJF
1 parent f69f4f4 commit 2df8148

File tree

3 files changed

+32
-13
lines changed

3 files changed

+32
-13
lines changed

firebase-common/src/main/java/com/google/firebase/heartbeatinfo/DefaultHeartBeatController.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@
2626
import com.google.firebase.components.Dependency;
2727
import com.google.firebase.inject.Provider;
2828
import com.google.firebase.platforminfo.UserAgentPublisher;
29+
import java.io.ByteArrayOutputStream;
2930
import java.util.List;
3031
import java.util.Set;
3132
import java.util.concurrent.Executor;
3233
import java.util.concurrent.LinkedBlockingQueue;
3334
import java.util.concurrent.ThreadFactory;
3435
import java.util.concurrent.ThreadPoolExecutor;
3536
import java.util.concurrent.TimeUnit;
37+
import java.util.zip.GZIPOutputStream;
3638
import org.json.JSONArray;
3739
import org.json.JSONObject;
3840

@@ -99,7 +101,11 @@ public Task<String> getHeartBeatsHeader() {
99101
JSONObject output = new JSONObject();
100102
output.put("heartbeats", array);
101103
output.put("version", "2");
102-
return Base64.encodeToString(output.toString().getBytes(), Base64.DEFAULT);
104+
ByteArrayOutputStream out = new ByteArrayOutputStream();
105+
GZIPOutputStream gzip = new GZIPOutputStream(out);
106+
gzip.write(output.toString().getBytes());
107+
gzip.close();
108+
return Base64.encodeToString(out.toString("UTF-8").getBytes(), Base64.URL_SAFE);
103109
}
104110
});
105111
}

firebase-common/src/test/java/android/util/Base64.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616

1717
public class Base64 {
1818
public static String encodeToString(byte[] input, int flags) {
19-
return java.util.Base64.getEncoder().encodeToString(input);
19+
return java.util.Base64.getUrlEncoder().encodeToString(input);
2020
}
2121
}

firebase-common/src/test/java/com/google/firebase/heartbeatinfo/DefaultHeartBeatControllerTest.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import androidx.test.core.app.ApplicationProvider;
2828
import androidx.test.runner.AndroidJUnit4;
2929
import com.google.firebase.platforminfo.UserAgentPublisher;
30+
import java.io.ByteArrayOutputStream;
31+
import java.io.IOException;
3032
import java.util.ArrayList;
3133
import java.util.Base64;
3234
import java.util.Collections;
@@ -37,6 +39,7 @@
3739
import java.util.concurrent.LinkedBlockingQueue;
3840
import java.util.concurrent.ThreadPoolExecutor;
3941
import java.util.concurrent.TimeUnit;
42+
import java.util.zip.GZIPOutputStream;
4043
import org.json.JSONArray;
4144
import org.json.JSONException;
4245
import org.json.JSONObject;
@@ -96,7 +99,7 @@ public void getHeartBeatCode_noHeartBeat() {
9699

97100
@Test
98101
public void generateHeartBeat_oneHeartBeat()
99-
throws ExecutionException, InterruptedException, JSONException {
102+
throws ExecutionException, InterruptedException, JSONException, IOException {
100103
ArrayList<HeartBeatResult> returnResults = new ArrayList<>();
101104
returnResults.add(
102105
HeartBeatResult.create(
@@ -111,9 +114,10 @@ public void generateHeartBeat_oneHeartBeat()
111114
.getHeartBeatsHeader()
112115
.addOnCompleteListener(executor, getOnCompleteListener);
113116
String expected =
114-
Base64.getEncoder()
117+
Base64.getUrlEncoder()
115118
.encodeToString(
116-
"{\"heartbeats\":[{\"agent\":\"test-agent\",\"date\":\"[2015-02-03]\"}],\"version\":\"2\"}"
119+
compress(
120+
"{\"heartbeats\":[{\"agent\":\"test-agent\",\"date\":\"[2015-02-03]\"}],\"version\":\"2\"}")
117121
.getBytes());
118122
assertThat(getOnCompleteListener.await().replace("\n", "")).isEqualTo(expected);
119123
}
@@ -142,7 +146,7 @@ public void firstNewThenOld_synchronizedCorrectly()
142146

143147
@Test
144148
public void firstOldThenNew_synchronizedCorrectly()
145-
throws ExecutionException, InterruptedException {
149+
throws ExecutionException, InterruptedException, IOException {
146150
Context context = ApplicationProvider.getApplicationContext();
147151
SharedPreferences heartBeatSharedPreferences =
148152
context.getSharedPreferences("testHeartBeat", Context.MODE_PRIVATE);
@@ -152,7 +156,8 @@ public void firstOldThenNew_synchronizedCorrectly()
152156
new DefaultHeartBeatController(
153157
() -> heartBeatInfoStorage, logSources, executor, () -> publisher, context);
154158
String emptyString =
155-
Base64.getEncoder().encodeToString("{\"heartbeats\":[],\"version\":\"2\"}".getBytes());
159+
Base64.getUrlEncoder()
160+
.encodeToString(compress("{\"heartbeats\":[],\"version\":\"2\"}").getBytes());
156161
controller.registerHeartBeat().addOnCompleteListener(executor, storeOnCompleteListener);
157162
storeOnCompleteListener.await();
158163
int heartBeatCode = controller.getHeartBeatCode("test").getCode();
@@ -169,7 +174,7 @@ public void firstOldThenNew_synchronizedCorrectly()
169174

170175
@Test
171176
public void generateHeartBeat_twoHeartBeatsSameUserAgent()
172-
throws ExecutionException, InterruptedException, JSONException {
177+
throws ExecutionException, InterruptedException, JSONException, IOException {
173178
ArrayList<HeartBeatResult> returnResults = new ArrayList<>();
174179
ArrayList<String> dateList = new ArrayList<>();
175180
dateList.add("2015-03-02");
@@ -191,19 +196,26 @@ public void generateHeartBeat_twoHeartBeatsSameUserAgent()
191196
JSONObject output = new JSONObject();
192197
JSONArray array = new JSONArray();
193198
JSONObject obj = new JSONObject();
194-
;
195199
obj.put("agent", "test-agent");
196200
obj.put("date", dateList);
197201
array.put(obj);
198202
output.put("heartbeats", array);
199203
output.put("version", "2");
200-
String expected = Base64.getEncoder().encodeToString(output.toString().getBytes());
204+
String expected = Base64.getUrlEncoder().encodeToString(compress(output.toString()).getBytes());
201205
assertThat(getOnCompleteListener.await().replace("\n", "")).isEqualTo(expected);
202206
}
203207

208+
private String compress(String str) throws IOException {
209+
ByteArrayOutputStream out = new ByteArrayOutputStream();
210+
GZIPOutputStream gzip = new GZIPOutputStream(out);
211+
gzip.write(str.toString().getBytes());
212+
gzip.close();
213+
return out.toString("UTF-8");
214+
}
215+
204216
@Test
205217
public void generateHeartBeat_twoHeartBeatstwoUserAgents()
206-
throws ExecutionException, InterruptedException, JSONException {
218+
throws ExecutionException, InterruptedException, JSONException, IOException {
207219
ArrayList<HeartBeatResult> returnResults = new ArrayList<>();
208220
returnResults.add(
209221
HeartBeatResult.create(
@@ -225,9 +237,10 @@ public void generateHeartBeat_twoHeartBeatstwoUserAgents()
225237
.getHeartBeatsHeader()
226238
.addOnCompleteListener(executor, getOnCompleteListener);
227239
String expected =
228-
Base64.getEncoder()
240+
Base64.getUrlEncoder()
229241
.encodeToString(
230-
"{\"heartbeats\":[{\"agent\":\"test-agent\",\"date\":\"[2015-03-02]\"},{\"agent\":\"test-agent-1\",\"date\":\"[2015-03-03]\"}],\"version\":\"2\"}"
242+
compress(
243+
"{\"heartbeats\":[{\"agent\":\"test-agent\",\"date\":\"[2015-03-02]\"},{\"agent\":\"test-agent-1\",\"date\":\"[2015-03-03]\"}],\"version\":\"2\"}")
231244
.getBytes());
232245
assertThat(getOnCompleteListener.await().replace("\n", "")).isEqualTo(expected);
233246
}

0 commit comments

Comments
 (0)