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