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)); } }