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