1 // Copyright 2016 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.net.smoke; 6 7 import static com.google.common.truth.Truth.assertThat; 8 9 import static org.chromium.net.truth.UrlResponseInfoSubject.assertThat; 10 11 import androidx.test.core.app.ApplicationProvider; 12 13 import org.junit.rules.TestRule; 14 import org.junit.runner.Description; 15 import org.junit.runners.model.Statement; 16 17 import org.chromium.net.CronetEngine; 18 import org.chromium.net.ExperimentalCronetEngine; 19 import org.chromium.net.UrlResponseInfo; 20 21 /** Base test class. This class should not import any classes from the org.chromium.base package. */ 22 public abstract class CronetSmokeTestRule implements TestRule { 23 public ExperimentalCronetEngine.Builder mCronetEngineBuilder; 24 public CronetEngine mCronetEngine; 25 private TestSupport mTestSupport = initTestSupport(); 26 27 @Override apply(final Statement base, Description desc)28 public Statement apply(final Statement base, Description desc) { 29 return new Statement() { 30 @Override 31 public void evaluate() throws Throwable { 32 ruleSetUp(); 33 base.evaluate(); 34 ruleTearDown(); 35 } 36 }; 37 } 38 39 public TestSupport getTestSupport() { 40 return mTestSupport; 41 } 42 43 public CronetEngine getCronetEngine() { 44 return mCronetEngine; 45 } 46 47 public ExperimentalCronetEngine.Builder getCronetEngineBuilder() { 48 return mCronetEngineBuilder; 49 } 50 51 private void ruleSetUp() throws Exception { 52 mCronetEngineBuilder = 53 new ExperimentalCronetEngine.Builder(ApplicationProvider.getApplicationContext()); 54 initTestSupport(); 55 } 56 57 private void ruleTearDown() throws Exception { 58 if (mCronetEngine != null) { 59 mCronetEngine.shutdown(); 60 } 61 } 62 63 public void initCronetEngine() { 64 mCronetEngine = mCronetEngineBuilder.build(); 65 } 66 67 static void assertSuccessfulNonEmptyResponse(SmokeTestRequestCallback callback, String url) { 68 // Check the request state 69 if (callback.getFinalState() == SmokeTestRequestCallback.State.Failed) { 70 throw new RuntimeException( 71 "The request failed with an error", callback.getFailureError()); 72 } 73 assertThat(callback.getFinalState()).isEqualTo(SmokeTestRequestCallback.State.Succeeded); 74 75 // Check the response info 76 UrlResponseInfo responseInfo = callback.getResponseInfo(); 77 assertThat(responseInfo).isNotNull(); 78 assertThat(responseInfo).wasNotCached(); 79 assertThat(responseInfo).hasUrlThat().isEqualTo(url); 80 assertThat(responseInfo.getUrlChain().get(responseInfo.getUrlChain().size() - 1)) 81 .isEqualTo(url); 82 assertThat(responseInfo).hasHttpStatusCodeThat().isEqualTo(200); 83 assertThat(responseInfo.toString()).isNotEmpty(); 84 } 85 86 static void assertJavaEngine(CronetEngine engine) { 87 assertThat(engine).isNotNull(); 88 assertThat(engine.getClass().getName()).isEqualTo("org.chromium.net.impl.JavaCronetEngine"); 89 } 90 91 static void assertNativeEngine(CronetEngine engine) { 92 assertThat(engine).isNotNull(); 93 assertThat(engine.getClass().getName()) 94 .isEqualTo("org.chromium.net.impl.CronetUrlRequestContext"); 95 } 96 97 /** Instantiates a concrete implementation of {@link TestSupport} interface. */ 98 protected abstract TestSupport initTestSupport(); 99 } 100