blob: 36b7d47c9bc5d732b603cca35a1a9e04127df216 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview.test.ui.util;
import static org.chromium.android_webview.test.OnlyRunIn.ProcessMode.SINGLE_PROCESS;
import android.support.test.filters.SmallTest;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.android_webview.common.crash.CrashInfo;
import org.chromium.android_webview.common.crash.CrashInfo.UploadState;
import org.chromium.android_webview.test.AwJUnit4ClassRunner;
import org.chromium.android_webview.test.OnlyRunIn;
import org.chromium.android_webview.ui.util.UploadedCrashesInfoLoader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Unit tests for UploadedCrashesInfoLoader.
*/
@RunWith(AwJUnit4ClassRunner.class)
@OnlyRunIn(SINGLE_PROCESS)
public class UploadedCrashesInfoLoaderTest {
private final static String TEST_UPLOAD_TIME_STR = "1234567890";
private final static long TEST_UPLOAD_TIME = Long.parseLong(TEST_UPLOAD_TIME_STR);
private final static String TEST_UPLOAD_ID = "0123456789abcdef";
private final static String TEST_LOCAL_ID = "fedcba9876543210";
private File mLogFile;
private static void writeUploadLogs(File logFile, List<String> logEntries) throws IOException {
FileWriter writer = new FileWriter(logFile, /* Appending */ false);
BufferedWriter bw = new BufferedWriter(writer);
for (String entry : logEntries) {
bw.write(entry);
bw.newLine();
}
bw.close();
}
@Before
public void setUp() throws IOException {
mLogFile = File.createTempFile("uploads", "log");
}
@After
public void tearDown() {
mLogFile.delete();
}
@Test
@SmallTest
public void testParseSingleEntry() throws IOException {
List<String> logs = new ArrayList<>();
logs.add(TEST_UPLOAD_TIME_STR + "," + TEST_UPLOAD_ID + "," + TEST_LOCAL_ID);
writeUploadLogs(mLogFile, logs);
UploadedCrashesInfoLoader crashesInfoLoader = new UploadedCrashesInfoLoader(mLogFile);
List<CrashInfo> infoList = crashesInfoLoader.loadCrashesInfo();
Assert.assertEquals(1, infoList.size());
CrashInfo crashInfo = infoList.get(0);
Assert.assertEquals(TEST_UPLOAD_TIME, crashInfo.uploadTime);
Assert.assertEquals(TEST_UPLOAD_ID, crashInfo.uploadId);
Assert.assertEquals(TEST_LOCAL_ID, crashInfo.localId);
Assert.assertEquals(UploadState.UPLOADED, crashInfo.uploadState);
}
@Test
@SmallTest
public void testParseMultipleEntries() throws IOException {
List<String> logs = new ArrayList<>();
for (int i = 1; i <= 4; ++i) {
String testEntry = TEST_UPLOAD_TIME_STR + ","
+ "upload" + Integer.toString(i) + ","
+ "local" + Integer.toString(i);
logs.add(testEntry);
}
writeUploadLogs(mLogFile, logs);
UploadedCrashesInfoLoader crashesInfoLoader = new UploadedCrashesInfoLoader(mLogFile);
List<CrashInfo> infoList = crashesInfoLoader.loadCrashesInfo();
Assert.assertEquals(4, infoList.size());
for (int i = 1; i <= 4; ++i) {
CrashInfo crashInfo = infoList.get(i - 1);
Assert.assertEquals(TEST_UPLOAD_TIME, crashInfo.uploadTime);
Assert.assertEquals("upload" + Integer.toString(i), crashInfo.uploadId);
Assert.assertEquals("local" + Integer.toString(i), crashInfo.localId);
Assert.assertEquals(UploadState.UPLOADED, crashInfo.uploadState);
}
}
@Test
@SmallTest
public void testParseInvalidEntries() throws IOException {
List<String> logs = new ArrayList<>();
// Valid logs
for (int i = 1; i <= 2; ++i) {
String testEntry = TEST_UPLOAD_TIME_STR + ","
+ "upload" + Integer.toString(i) + ","
+ "local" + Integer.toString(i);
logs.add(testEntry);
}
// Invalid logs
// invalid upload time
logs.add("12345678a,1a2b3c,4d5e6f");
// missing upload time
logs.add(",1a2b3c,4d5e6f");
// empty log
logs.add(",,");
// missing upload id
logs.add("123456789,,4d5e6f");
// missing local id
logs.add("123456789,1a2b3c,");
// less components
logs.add("123456789,1a2b3c");
// too many components
logs.add("123456789,1a2b3c,4d5e6f,1011121314");
for (int i = 3; i <= 4; ++i) {
String testEntry = TEST_UPLOAD_TIME_STR + ","
+ "upload" + Integer.toString(i) + ","
+ "local" + Integer.toString(i);
logs.add(testEntry);
}
writeUploadLogs(mLogFile, logs);
UploadedCrashesInfoLoader crashesInfoLoader = new UploadedCrashesInfoLoader(mLogFile);
List<CrashInfo> infoList = crashesInfoLoader.loadCrashesInfo();
Assert.assertEquals(4, infoList.size());
for (int i = 1; i <= 4; ++i) {
CrashInfo crashInfo = infoList.get(i - 1);
Assert.assertEquals(TEST_UPLOAD_TIME, crashInfo.uploadTime);
Assert.assertEquals("upload" + Integer.toString(i), crashInfo.uploadId);
Assert.assertEquals("local" + Integer.toString(i), crashInfo.localId);
Assert.assertEquals(UploadState.UPLOADED, crashInfo.uploadState);
}
}
@Test
@SmallTest
public void testParseNonExistFile() throws IOException {
mLogFile.delete();
UploadedCrashesInfoLoader crashesInfoLoader = new UploadedCrashesInfoLoader(mLogFile);
List<CrashInfo> infoList = crashesInfoLoader.loadCrashesInfo();
Assert.assertEquals(0, infoList.size());
}
}