App 2.43.5: update checks log what happens
Each check writes down the networks Android sees, the server's name lookup, how a failure happened and how many reports wait, and on a failure whether the internet answers at all, to tell a SIM without data from a server that is down. The report goes to a USB stick and, once online, the server. No address or token is written. Tried on the emulator. Not tried on the car. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LhzAVaUyqcw5PkGjz4mWW6
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.evsuite.abrp;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.net.ssl.SSLHandshakeException;
|
||||
|
||||
public class UpdateDiagnosisTest {
|
||||
|
||||
@Test
|
||||
public void errorsAreToldApart() {
|
||||
assertTrue(UpdateDiagnosis.failure(new UnknownHostException()).contains("no data connection"));
|
||||
assertTrue(UpdateDiagnosis.failure(new SocketTimeoutException()).contains("in time"));
|
||||
assertTrue(UpdateDiagnosis.failure(new ConnectException()).contains("no connection"));
|
||||
assertTrue(UpdateDiagnosis.failure(new SSLHandshakeException("x")).contains("in between"));
|
||||
assertTrue(UpdateDiagnosis.failure(new IOException("Release API returned 401")).contains("token"));
|
||||
assertTrue(UpdateDiagnosis.failure(new IOException("Invalid release response")).contains("not a list"));
|
||||
assertEquals("unknown failure", UpdateDiagnosis.failure(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void anErrorsOwnTextNeverReachesTheLog() {
|
||||
String secret = "https://car.example.com/v1/app/releases?token=abc";
|
||||
for (Throwable t : Arrays.asList(new UnknownHostException(secret), new SocketTimeoutException(secret),
|
||||
new ConnectException(secret), new SSLHandshakeException(secret), new IOException(secret),
|
||||
new RuntimeException(secret))) {
|
||||
String line = UpdateDiagnosis.failure(t);
|
||||
assertFalse(line, line.contains("example"));
|
||||
assertFalse(line, line.contains("abc"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void statusesSayWhoIsAtFault() {
|
||||
assertTrue(UpdateDiagnosis.status(302).contains("SIM without data"));
|
||||
assertTrue(UpdateDiagnosis.status(401).contains("token"));
|
||||
assertTrue(UpdateDiagnosis.status(403).contains("token"));
|
||||
assertTrue(UpdateDiagnosis.status(404).contains("does not know"));
|
||||
assertTrue(UpdateDiagnosis.status(502).contains("forge"));
|
||||
assertTrue(UpdateDiagnosis.status(418).contains("HTTP 418"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onlyA204IsTheInternetWorking() {
|
||||
assertTrue(UpdateDiagnosis.internet(204).startsWith("the internet works"));
|
||||
assertTrue(UpdateDiagnosis.internet(200).contains("in between"));
|
||||
assertTrue(UpdateDiagnosis.internet(302).contains("SIM without data"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aNetworkInOneLine() {
|
||||
assertEquals("cellular, in use, offers internet, not confirmed by Android, roaming",
|
||||
UpdateDiagnosis.network(Collections.singletonList("cellular"), true, false, true, true));
|
||||
assertEquals("unknown type, no internet, confirmed by Android",
|
||||
UpdateDiagnosis.network(Collections.emptyList(), false, true, false, false));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user