• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 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 androidx.test.filters.MediumTest;
8 
9 import org.junit.Assert;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 
14 import org.chromium.base.library_loader.LibraryLoader;
15 import org.chromium.base.library_loader.LibraryProcessType;
16 import org.chromium.base.test.BaseJUnit4ClassRunner;
17 
18 import java.util.Arrays;
19 import java.util.List;
20 
21 /**
22  * Tests for {@link HttpUtil}. HttpUtil forwards to native code, and the lion's share of the logic
23  * is tested there. This test is primarily to make sure everything is plumbed through correctly.
24  */
25 @RunWith(BaseJUnit4ClassRunner.class)
26 public class HttpUtilTest {
27     private static final List<String> UNALLOWED_HEADER_NAMES =
28             Arrays.asList(
29                     "accept-encoding", // Unsafe header.
30                     "ACCEPT-ENCODING", // Unsafe header.
31                     "referer ", // Unsafe header.
32                     "referer", // Unsafe header.
33                     " referer", // Unsafe header.
34                     "", // Badly formed header.
35                     "ref(erer", // Badly formed header.
36                     "ref\nerer" // Badly formed header.
37                     );
38 
39     private static final List<String> ALLOWED_HEADER_NAMES =
40             Arrays.asList("accept-language", "Cache-Control");
41 
42     private static final String UNALLOWED_HEADER_VALUE = "value\nAccept-Encoding: br";
43     private static final String ALLOWED_HEADER_VALUE = "value";
44 
45     @Before
setUp()46     public void setUp() {
47         LibraryLoader.getInstance().setLibraryProcessType(LibraryProcessType.PROCESS_BROWSER);
48         LibraryLoader.getInstance().ensureInitialized();
49     }
50 
51     @Test
52     @MediumTest
testAllowedHeaders()53     public void testAllowedHeaders() {
54         for (String headerName : ALLOWED_HEADER_NAMES) {
55             Assert.assertTrue(
56                     headerName, HttpUtil.isAllowedHeader(headerName, ALLOWED_HEADER_VALUE));
57         }
58     }
59 
60     @Test
61     @MediumTest
testUnallowedHeaders()62     public void testUnallowedHeaders() {
63         for (String headerName : UNALLOWED_HEADER_NAMES) {
64             Assert.assertFalse(
65                     headerName, HttpUtil.isAllowedHeader(headerName, UNALLOWED_HEADER_VALUE));
66         }
67     }
68 
69     @Test
70     @MediumTest
testUnallowedHeaderNames()71     public void testUnallowedHeaderNames() {
72         for (String headerName : UNALLOWED_HEADER_NAMES) {
73             Assert.assertFalse(
74                     headerName, HttpUtil.isAllowedHeader(headerName, ALLOWED_HEADER_VALUE));
75         }
76     }
77 
78     @Test
79     @MediumTest
testUnallowedHeaderValue()80     public void testUnallowedHeaderValue() {
81         for (String headerName : ALLOWED_HEADER_NAMES) {
82             Assert.assertFalse(
83                     headerName, HttpUtil.isAllowedHeader(headerName, UNALLOWED_HEADER_VALUE));
84         }
85     }
86 }
87