Skip to content

Commit 459eaa8

Browse files
committed
Merge remote-tracking branch 'origin/master' into UpdateSpecTests
2 parents 19ab883 + 37721c0 commit 459eaa8

File tree

48 files changed

+763
-393
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+763
-393
lines changed

fiamui-app/fiamui-app.gradle

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,8 @@ dependencies {
5858
implementation project(path: ":firebase-inappmessaging")
5959
implementation 'com.google.guava:guava:24.1-jre-android'
6060

61-
implementation('com.google.firebase:firebase-analytics:17.2.3') {
61+
implementation('com.google.firebase:firebase-analytics:17.0.0') {
6262
exclude group: 'com.google.firebase', module: 'firebase-common'
63-
exclude group: 'com.google.firebase', module: 'firebase-components'
64-
exclude group: 'com.google.firebase', module: 'firebase-installations'
65-
exclude group: 'com.google.firebase', module: 'firebase-installations-interop'
66-
}
67-
implementation('com.google.firebase:firebase-iid:20.1.1') {
68-
exclude group: 'com.google.firebase', module: 'firebase-common'
69-
exclude group: 'com.google.firebase', module: 'firebase-components'
70-
exclude group: 'com.google.firebase', module: 'firebase-installations'
71-
exclude group: 'com.google.firebase', module: 'firebase-installations-interop'
7263
}
7364

7465
implementation "com.android.installreferrer:installreferrer:1.0"

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/BytesBackedNativeSessionFileTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void testAsFilePayload_convertsToFilePayload() {
4949
new BytesBackedNativeSessionFile("file_name", "file", testBytes);
5050
CrashlyticsReport.FilesPayload.File filesPayload = nativeSessionFile.asFilePayload();
5151
assertNotNull(filesPayload);
52-
assertArrayEquals(testBytes, filesPayload.getContents());
52+
assertArrayEquals(testBytes, TestUtils.inflateGzipToRawBytes(filesPayload.getContents()));
5353
assertEquals("file_name", filesPayload.getFilename());
5454
}
5555

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/FileBackedNativeSessionFileTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void testAsFilePayload_convertsToFilePayload() {
8585
new FileBackedNativeSessionFile("file_name", "file", testFile);
8686
CrashlyticsReport.FilesPayload.File filesPayload = nativeSessionFile.asFilePayload();
8787
assertNotNull(filesPayload);
88-
assertArrayEquals(testContents, filesPayload.getContents());
88+
assertArrayEquals(testContents, TestUtils.inflateGzipToRawBytes(filesPayload.getContents()));
8989
assertEquals("file_name", filesPayload.getFilename());
9090
}
9191

@@ -95,7 +95,7 @@ public void testAsFilePayloadWhenEmpty_returnsEmptyPayload() {
9595
new FileBackedNativeSessionFile("file_name", "file", emptyFile);
9696
CrashlyticsReport.FilesPayload.File filesPayload = nativeSessionFile.asFilePayload();
9797
assertNotNull(filesPayload);
98-
assertArrayEquals(emptyContents, filesPayload.getContents());
98+
assertArrayEquals(emptyContents, TestUtils.inflateGzipToRawBytes(filesPayload.getContents()));
9999
assertEquals("file_name", filesPayload.getFilename());
100100
}
101101

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/SessionReportingCoordinatorTest.java

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
package com.google.firebase.crashlytics.internal.common;
1616

17+
import static org.junit.Assert.assertArrayEquals;
1718
import static org.junit.Assert.assertEquals;
1819
import static org.mockito.ArgumentMatchers.any;
1920
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -339,7 +340,10 @@ public void testFinalizeSessionWithNativeEvent_createsCrashlyticsReportWithNativ
339340
verify(reportPersistence).finalizeSessionWithNativeEvent(eq("id"), filesPayload.capture());
340341
CrashlyticsReport.FilesPayload ndkPayloadFinalized = filesPayload.getValue();
341342
assertEquals(1, ndkPayloadFinalized.getFiles().size());
342-
assertEquals(testBytes, ndkPayloadFinalized.getFiles().get(0).getContents());
343+
344+
assertArrayEquals(
345+
testBytes,
346+
TestUtils.inflateGzipToRawBytes(ndkPayloadFinalized.getFiles().get(0).getContents()));
343347
assertEquals(byteBackedSessionName, ndkPayloadFinalized.getFiles().get(0).getFilename());
344348
}
345349

@@ -356,13 +360,12 @@ public void onSessionsFinalize_finalizesReports() {
356360
@Test
357361
@SuppressWarnings("unchecked")
358362
public void onReportSend_successfulReportsAreDeleted() {
359-
final String orgId = "testOrgId";
360363
final String sessionId1 = "sessionId1";
361364
final String sessionId2 = "sessionId2";
362365

363366
final List<CrashlyticsReportWithSessionId> finalizedReports = new ArrayList<>();
364-
final CrashlyticsReportWithSessionId mockReport1 = mockReportWithSessionId(sessionId1, orgId);
365-
final CrashlyticsReportWithSessionId mockReport2 = mockReportWithSessionId(sessionId2, orgId);
367+
final CrashlyticsReportWithSessionId mockReport1 = mockReportWithSessionId(sessionId1);
368+
final CrashlyticsReportWithSessionId mockReport2 = mockReportWithSessionId(sessionId2);
366369
finalizedReports.add(mockReport1);
367370
finalizedReports.add(mockReport2);
368371

@@ -375,7 +378,7 @@ public void onReportSend_successfulReportsAreDeleted() {
375378
when(reportSender.sendReport(mockReport1)).thenReturn(successfulTask);
376379
when(reportSender.sendReport(mockReport2)).thenReturn(failedTask);
377380

378-
reportManager.sendReports(orgId, Runnable::run, DataTransportState.ALL);
381+
reportManager.sendReports(Runnable::run, DataTransportState.ALL);
379382

380383
verify(reportSender).sendReport(mockReport1);
381384
verify(reportSender).sendReport(mockReport2);
@@ -386,7 +389,7 @@ public void onReportSend_successfulReportsAreDeleted() {
386389

387390
@Test
388391
public void onReportSend_reportsAreDeletedWithoutBeingSent_whenDataTransportStateNone() {
389-
reportManager.sendReports("testOrgId", Runnable::run, DataTransportState.NONE);
392+
reportManager.sendReports(Runnable::run, DataTransportState.NONE);
390393

391394
verify(reportPersistence).deleteAllReports();
392395
verify(reportPersistence, never()).loadFinalizedReports();
@@ -397,15 +400,13 @@ public void onReportSend_reportsAreDeletedWithoutBeingSent_whenDataTransportStat
397400
@Test
398401
public void
399402
onReportSend_javaReportsAreSentNativeReportsDeletedWithoutBeingSent_whenDataTransportStateJavaOnly() {
400-
final String orgId = "testOrgId";
401403
final String sessionIdJava = "sessionIdJava";
402404
final String sessionIdNative = "sessionIdNative";
403405

404406
final List<CrashlyticsReportWithSessionId> finalizedReports = new ArrayList<>();
405-
final CrashlyticsReportWithSessionId mockReportJava =
406-
mockReportWithSessionId(sessionIdJava, orgId);
407+
final CrashlyticsReportWithSessionId mockReportJava = mockReportWithSessionId(sessionIdJava);
407408
final CrashlyticsReportWithSessionId mockReportNative =
408-
mockReportWithSessionId(sessionIdNative, orgId);
409+
mockReportWithSessionId(sessionIdNative);
409410
finalizedReports.add(mockReportJava);
410411
finalizedReports.add(mockReportNative);
411412

@@ -416,7 +417,7 @@ public void onReportSend_reportsAreDeletedWithoutBeingSent_whenDataTransportStat
416417

417418
when(reportSender.sendReport(mockReportJava)).thenReturn(Tasks.forResult(mockReportJava));
418419

419-
reportManager.sendReports(orgId, Runnable::run, DataTransportState.JAVA_ONLY);
420+
reportManager.sendReports(Runnable::run, DataTransportState.JAVA_ONLY);
420421

421422
verify(reportSender).sendReport(mockReportJava);
422423
verify(reportSender, never()).sendReport(mockReportNative);
@@ -446,17 +447,6 @@ public void testRemoveAllReports_deletesPersistedReports() {
446447
verify(reportPersistence).deleteAllReports();
447448
}
448449

449-
private static CrashlyticsReport makeIncompleteReport() {
450-
return CrashlyticsReport.builder()
451-
.setSdkVersion("sdkVersion")
452-
.setGmpAppId("gmpAppId")
453-
.setPlatform(1)
454-
.setInstallationUuid("installationId")
455-
.setBuildVersion("1")
456-
.setDisplayVersion("1.0.0")
457-
.build();
458-
}
459-
460450
private void mockEventInteractions() {
461451
when(mockEvent.toBuilder()).thenReturn(mockEventBuilder);
462452
when(mockEventBuilder.build()).thenReturn(mockEvent);
@@ -475,17 +465,15 @@ private void mockEventInteractions() {
475465
.thenReturn(mockEvent);
476466
}
477467

478-
private static CrashlyticsReport mockReport(String sessionId, String orgId) {
468+
private static CrashlyticsReport mockReport(String sessionId) {
479469
final CrashlyticsReport mockReport = mock(CrashlyticsReport.class);
480470
final CrashlyticsReport.Session mockSession = mock(CrashlyticsReport.Session.class);
481471
when(mockSession.getIdentifier()).thenReturn(sessionId);
482472
when(mockReport.getSession()).thenReturn(mockSession);
483-
when(mockReport.withOrganizationId(orgId)).thenReturn(mockReport);
484473
return mockReport;
485474
}
486475

487-
private static CrashlyticsReportWithSessionId mockReportWithSessionId(
488-
String sessionId, String orgId) {
489-
return CrashlyticsReportWithSessionId.create(mockReport(sessionId, orgId), sessionId);
476+
private static CrashlyticsReportWithSessionId mockReportWithSessionId(String sessionId) {
477+
return CrashlyticsReportWithSessionId.create(mockReport(sessionId), sessionId);
490478
}
491479
}

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/TestUtils.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515
package com.google.firebase.crashlytics.internal.common;
1616

1717
import java.io.BufferedWriter;
18+
import java.io.ByteArrayInputStream;
19+
import java.io.ByteArrayOutputStream;
1820
import java.io.File;
1921
import java.io.FileWriter;
2022
import java.io.IOException;
23+
import java.util.zip.GZIPInputStream;
2124

2225
final class TestUtils {
2326
private TestUtils() {}
@@ -33,4 +36,19 @@ public static void writeStringToFile(String s, File f) throws IOException {
3336
}
3437
}
3538
}
39+
40+
public static byte[] inflateGzipToRawBytes(byte[] compressed) {
41+
try (ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
42+
GZIPInputStream gis = new GZIPInputStream(bis);
43+
ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
44+
int value = gis.read();
45+
while (value != -1) {
46+
bos.write(value);
47+
value = gis.read();
48+
}
49+
return bos.toByteArray();
50+
} catch (Exception e) {
51+
return null;
52+
}
53+
}
3654
}

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSenderTest.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@
2020
import static org.mockito.ArgumentMatchers.any;
2121
import static org.mockito.Mockito.doAnswer;
2222
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.never;
24+
import static org.mockito.Mockito.verify;
25+
import static org.mockito.Mockito.when;
2326

2427
import androidx.test.runner.AndroidJUnit4;
28+
import com.google.android.datatransport.Transformer;
2529
import com.google.android.datatransport.Transport;
2630
import com.google.android.datatransport.TransportScheduleCallback;
2731
import com.google.android.gms.tasks.Task;
@@ -40,13 +44,15 @@
4044
public class DataTransportCrashlyticsReportSenderTest {
4145

4246
@Mock private Transport<CrashlyticsReport> mockTransport;
47+
@Mock private Transformer<CrashlyticsReport, byte[]> mockTransform;
4348

4449
private DataTransportCrashlyticsReportSender reportSender;
4550

4651
@Before
4752
public void setUp() throws Exception {
4853
MockitoAnnotations.initMocks(this);
49-
reportSender = new DataTransportCrashlyticsReportSender(mockTransport);
54+
when(mockTransform.apply(any())).thenReturn(new byte[0]);
55+
reportSender = new DataTransportCrashlyticsReportSender(mockTransport, mockTransform);
5056
}
5157

5258
@Test
@@ -123,6 +129,26 @@ public void testSendReports_oneSuccessOneFail() throws Exception {
123129
assertEquals(ex, send2.getException());
124130
}
125131

132+
@Test
133+
public void testSendLargeReport_successfulWithoutSchedulingToDataTransport() throws Exception {
134+
doAnswer(callbackAnswer(null)).when(mockTransport).schedule(any(), any());
135+
136+
final CrashlyticsReportWithSessionId report = mockReportWithSessionId();
137+
138+
when(mockTransform.apply(report.getReport())).thenReturn(new byte[1024 * 1024]);
139+
140+
final Task<CrashlyticsReportWithSessionId> send = reportSender.sendReport(report);
141+
142+
try {
143+
Tasks.await(send);
144+
} catch (ExecutionException e) {
145+
// Allow this to fall through
146+
}
147+
148+
assertTrue(send.isSuccessful());
149+
verify(mockTransport, never()).schedule(any(), any());
150+
}
151+
126152
private static Answer<Void> callbackAnswer(Exception failure) {
127153
return (i) -> {
128154
final TransportScheduleCallback callback = i.getArgument(1);

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/BytesBackedNativeSessionFile.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
import androidx.annotation.Nullable;
1919
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport;
2020
import java.io.ByteArrayInputStream;
21+
import java.io.ByteArrayOutputStream;
22+
import java.io.IOException;
2123
import java.io.InputStream;
24+
import java.util.zip.GZIPOutputStream;
2225

2326
/** A {@link NativeSessionFile} backed by a byte array. */
2427
class BytesBackedNativeSessionFile implements NativeSessionFile {
@@ -50,15 +53,32 @@ public InputStream getStream() {
5053
@Override
5154
@Nullable
5255
public CrashlyticsReport.FilesPayload.File asFilePayload() {
53-
return isEmpty()
56+
byte[] gzippedBytes = asGzippedBytes();
57+
return gzippedBytes == null
5458
? null
5559
: CrashlyticsReport.FilesPayload.File.builder()
56-
.setContents(bytes)
60+
.setContents(gzippedBytes)
5761
.setFilename(dataTransportFilename)
5862
.build();
5963
}
6064

6165
private boolean isEmpty() {
6266
return bytes == null || bytes.length == 0;
6367
}
68+
69+
@Nullable
70+
private byte[] asGzippedBytes() {
71+
if (isEmpty()) {
72+
return null;
73+
}
74+
75+
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
76+
GZIPOutputStream gos = new GZIPOutputStream(bos)) {
77+
gos.write(bytes);
78+
gos.finish();
79+
return bos.toByteArray();
80+
} catch (IOException e) {
81+
return null;
82+
}
83+
}
6484
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/CrashlyticsController.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -436,9 +436,7 @@ public Task<Void> then(@Nullable AppSettingsData appSettingsData)
436436
boolean dataCollectionToken = true;
437437
sendSessionReports(appSettingsData, dataCollectionToken);
438438
reportingCoordinator.sendReports(
439-
appSettingsData.organizationId,
440-
executor,
441-
DataTransportState.getState(appSettingsData));
439+
executor, DataTransportState.getState(appSettingsData));
442440
return recordFatalFirebaseEventTask;
443441
}
444442
});
@@ -596,9 +594,7 @@ public Task<Void> then(@Nullable AppSettingsData appSettingsData)
596594
reportUploaderProvider.createReportUploader(appSettingsData);
597595
uploader.uploadReportsAsync(reports, dataCollectionToken, delay);
598596
reportingCoordinator.sendReports(
599-
appSettingsData.organizationId,
600-
executor,
601-
DataTransportState.getState(appSettingsData));
597+
executor, DataTransportState.getState(appSettingsData));
602598
unsentReportsHandled.trySetResult(null);
603599

604600
return Tasks.forResult(null);

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/FileBackedNativeSessionFile.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.io.FileNotFoundException;
2424
import java.io.IOException;
2525
import java.io.InputStream;
26+
import java.util.zip.GZIPOutputStream;
2627

2728
/** A {@link NativeSessionFile} backed by a {@link File} currently on disk. */
2829
class FileBackedNativeSessionFile implements NativeSessionFile {
@@ -62,7 +63,7 @@ public InputStream getStream() {
6263
@Override
6364
@Nullable
6465
public CrashlyticsReport.FilesPayload.File asFilePayload() {
65-
byte[] bytes = asBytes();
66+
byte[] bytes = asGzippedBytes();
6667
return bytes != null
6768
? CrashlyticsReport.FilesPayload.File.builder()
6869
.setContents(bytes)
@@ -71,17 +72,20 @@ public CrashlyticsReport.FilesPayload.File asFilePayload() {
7172
: null;
7273
}
7374

74-
private byte[] asBytes() {
75+
@Nullable
76+
private byte[] asGzippedBytes() {
7577
final byte[] readBuffer = new byte[8192];
76-
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
77-
try (InputStream stream = getStream()) {
78+
try (InputStream stream = getStream();
79+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
80+
GZIPOutputStream gos = new GZIPOutputStream(bos)) {
7881
if (stream == null) {
7982
return null;
8083
}
8184
int read;
8285
while ((read = stream.read(readBuffer)) > 0) {
83-
bos.write(readBuffer, 0, read);
86+
gos.write(readBuffer, 0, read);
8487
}
88+
gos.finish();
8589
return bos.toByteArray();
8690
} catch (IOException e) {
8791
return null;

0 commit comments

Comments
 (0)