• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 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;
6 
7 import static com.google.common.truth.Truth.assertThat;
8 
9 import static org.junit.Assert.assertThrows;
10 
11 import static org.chromium.net.CronetProvider.PROVIDER_NAME_APP_PACKAGED;
12 import static org.chromium.net.CronetProvider.PROVIDER_NAME_FALLBACK;
13 
14 import android.content.Context;
15 
16 import androidx.test.ext.junit.runners.AndroidJUnit4;
17 import androidx.test.filters.SmallTest;
18 
19 import com.google.common.truth.Correspondence;
20 
21 import org.junit.Rule;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 
25 import org.chromium.base.test.util.Batch;
26 import org.chromium.net.CronetTestRule.CronetImplementation;
27 import org.chromium.net.CronetTestRule.IgnoreFor;
28 
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.List;
32 
33 /** Tests {@link CronetEngine.Builder}. */
34 @RunWith(AndroidJUnit4.class)
35 @IgnoreFor(
36         implementations = {CronetImplementation.FALLBACK},
37         reason = "These tests don't depend on Cronet's impl")
38 @Batch(Batch.UNIT_TESTS)
39 public class CronetEngineBuilderTest {
40     @Rule public final CronetTestRule mTestRule = CronetTestRule.withManualEngineStartup();
41 
42     /** Tests the comparison of two strings that contain versions. */
43     @Test
44     @SmallTest
testVersionComparison()45     public void testVersionComparison() {
46         assertVersionIsHigher("22.44", "22.43.12");
47         assertVersionIsLower("22.43.12", "022.124");
48         assertVersionIsLower("22.99", "22.100");
49         assertVersionIsHigher("22.100", "22.99");
50         assertVersionIsEqual("11.2.33", "11.2.33");
51         assertIllegalArgumentException(null, "1.2.3");
52         assertIllegalArgumentException("1.2.3", null);
53         assertIllegalArgumentException("1.2.3", "1.2.3x");
54     }
55 
56     /**
57      * Tests the correct ordering of the providers. The platform provider should be the last in the
58      * list. Other providers should be ordered by placing providers with the higher version first.
59      */
60     @Test
61     @SmallTest
testProviderOrdering()62     public void testProviderOrdering() {
63         final CronetProvider[] availableProviders =
64                 new CronetProvider[] {
65                     new FakeProvider(
66                             mTestRule.getTestFramework().getContext(),
67                             PROVIDER_NAME_APP_PACKAGED,
68                             "99.77",
69                             true),
70                     new FakeProvider(
71                             mTestRule.getTestFramework().getContext(),
72                             PROVIDER_NAME_FALLBACK,
73                             "99.99",
74                             true),
75                     new FakeProvider(
76                             mTestRule.getTestFramework().getContext(),
77                             "Some other provider",
78                             "99.88",
79                             true),
80                 };
81 
82         ArrayList<CronetProvider> providers = new ArrayList<>(Arrays.asList(availableProviders));
83         List<CronetProvider> orderedProviders =
84                 CronetEngine.Builder.getEnabledCronetProviders(
85                         mTestRule.getTestFramework().getContext(), providers);
86 
87         // Check the result
88         assertThat(orderedProviders)
89                 .containsExactly(
90                         availableProviders[2], availableProviders[0], availableProviders[1])
91                 .inOrder();
92     }
93 
94     /**
95      * Tests that the providers that are disabled are not included in the list of available
96      * providers when the provider is selected by the default selection logic.
97      */
98     @Test
99     @SmallTest
testThatDisabledProvidersAreExcluded()100     public void testThatDisabledProvidersAreExcluded() {
101         final CronetProvider[] availableProviders =
102                 new CronetProvider[] {
103                     new FakeProvider(
104                             mTestRule.getTestFramework().getContext(),
105                             PROVIDER_NAME_FALLBACK,
106                             "99.99",
107                             true),
108                     new FakeProvider(
109                             mTestRule.getTestFramework().getContext(),
110                             PROVIDER_NAME_APP_PACKAGED,
111                             "99.77",
112                             true),
113                     new FakeProvider(
114                             mTestRule.getTestFramework().getContext(),
115                             "Some other provider",
116                             "99.88",
117                             false),
118                 };
119 
120         ArrayList<CronetProvider> providers = new ArrayList<>(Arrays.asList(availableProviders));
121         List<CronetProvider> orderedProviders =
122                 CronetEngine.Builder.getEnabledCronetProviders(
123                         mTestRule.getTestFramework().getContext(), providers);
124 
125         Correspondence<CronetProvider, String> providerName =
126                 Correspondence.transforming(
127                         provider -> provider.getName(), "The name of the provider");
128 
129         assertThat(orderedProviders)
130                 .comparingElementsUsing(providerName)
131                 .containsExactly(PROVIDER_NAME_APP_PACKAGED, PROVIDER_NAME_FALLBACK)
132                 .inOrder();
133     }
134 
assertVersionIsHigher(String s1, String s2)135     private void assertVersionIsHigher(String s1, String s2) {
136         assertThat(CronetEngine.Builder.compareVersions(s1, s2)).isEqualTo(1);
137     }
138 
assertVersionIsLower(String s1, String s2)139     private void assertVersionIsLower(String s1, String s2) {
140         assertThat(CronetEngine.Builder.compareVersions(s1, s2)).isEqualTo(-1);
141     }
142 
assertVersionIsEqual(String s1, String s2)143     private void assertVersionIsEqual(String s1, String s2) {
144         assertThat(CronetEngine.Builder.compareVersions(s1, s2)).isEqualTo(0);
145     }
146 
assertIllegalArgumentException(String s1, String s2)147     private void assertIllegalArgumentException(String s1, String s2) {
148         assertThrows(
149                 IllegalArgumentException.class, () -> CronetEngine.Builder.compareVersions(s1, s2));
150     }
151 
152     // TODO(kapishnikov): Replace with a mock when mockito is supported.
153     private static class FakeProvider extends CronetProvider {
154         private final String mName;
155         private final String mVersion;
156         private final boolean mEnabled;
157 
FakeProvider(Context context, String name, String version, boolean enabled)158         protected FakeProvider(Context context, String name, String version, boolean enabled) {
159             super(context);
160             mName = name;
161             mVersion = version;
162             mEnabled = enabled;
163         }
164 
165         @Override
createBuilder()166         public CronetEngine.Builder createBuilder() {
167             return new CronetEngine.Builder((ICronetEngineBuilder) null);
168         }
169 
170         @Override
getName()171         public String getName() {
172             return mName;
173         }
174 
175         @Override
getVersion()176         public String getVersion() {
177             return mVersion;
178         }
179 
180         @Override
isEnabled()181         public boolean isEnabled() {
182             return mEnabled;
183         }
184 
185         @Override
toString()186         public String toString() {
187             return mName;
188         }
189     }
190 }
191