View Javadoc

1   package com.atlassian.httpclient.apache.httpcomponents.proxy;
2   
3   import com.atlassian.httpclient.api.factory.Scheme;
4   import org.junit.Test;
5   import org.junit.runner.RunWith;
6   import org.junit.runners.Parameterized;
7   
8   import java.net.InetSocketAddress;
9   import java.net.Proxy;
10  import java.net.URI;
11  import java.util.List;
12  
13  import static com.atlassian.httpclient.api.factory.Scheme.HTTP;
14  import static com.atlassian.httpclient.api.factory.Scheme.HTTPS;
15  import static org.junit.Assert.assertEquals;
16  import static org.junit.Assert.assertTrue;
17  
18  @RunWith(Parameterized.class)
19  public abstract class NoProxyHostsTestBase {
20  
21      @Parameterized.Parameters(name = "{0}")
22      public static Object[][] data() {
23          return new Object[][] { { HTTP }, { HTTPS } };
24      }
25  
26      @Parameterized.Parameter()
27      public Scheme scheme;
28  
29      @Test
30      public void blankNonProxyHosts() {
31          setProxyDetails("localhost", 3128, "");
32  
33          ProxyConfig config = newProxyConfig();
34  
35          assertProxy(assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bar:9887"))),
36                  Proxy.Type.HTTP, "localhost", 3128);
37      }
38  
39      @Test
40      public void mixedNonProxyHosts() {
41          setProxyDetails("localhost", 3128, "foo.*|bar|bing");
42  
43          ProxyConfig config = newProxyConfig();
44  
45          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bar:9887"))));
46          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.baz:9887"))));
47          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bing:9887"))));
48          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://bing:9887"))));
49          assertProxy(assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://bar2:9887"))),
50                  Proxy.Type.HTTP, "localhost", 3128);
51      }
52  
53      @Test
54      public void mixedNonProxyHostsWithMixedCase() {
55          setProxyDetails("localhost", 3128, "FOO.*|bar|BING");
56  
57          ProxyConfig config = newProxyConfig();
58  
59          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://FOO.BAR:9887"))));
60          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://fOo.bAz:9887"))));
61          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bing:9887"))));
62          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://bing:9887"))));
63          assertProxy(assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://bar2:9887"))),
64                  Proxy.Type.HTTP, "localhost", 3128);
65      }
66  
67      @Test
68      public void multipleNonProxyHosts() {
69          setProxyDetails("localhost", 3128, "foo.bar|foo.baz");
70  
71          ProxyConfig config = newProxyConfig();
72  
73          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bar:9887"))));
74          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.baz:9887"))));
75          assertProxy(assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bing:9887"))),
76                  Proxy.Type.HTTP, "localhost", 3128);
77      }
78  
79      @Test
80      public void singleNonProxyHosts() {
81          setProxyDetails("localhost", 3128, "foo.bar");
82  
83          ProxyConfig config = newProxyConfig();
84  
85          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bar:9887"))));
86          assertProxy(assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.baz:9887"))),
87                  Proxy.Type.HTTP, "localhost", 3128);
88      }
89  
90      @Test
91      public void wildcardNonProxyHosts() {
92          setProxyDetails("localhost", 3128, "foo.*|baz.*");
93  
94          ProxyConfig config = newProxyConfig();
95  
96          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bar:9887"))));
97          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.baz:9887"))));
98          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://foo.bing:9887"))));
99          assertEquals(Proxy.NO_PROXY, assertSingleProxy(config.toProxySelector().select(toUri(scheme, "://baz.bar.com:9887"))));
100     }
101 
102     protected abstract ProxyConfig newProxyConfig();
103 
104     protected abstract void setProxyDetails(String proxyHost, int proxyPort, String nonProxyHosts);
105 
106     private void assertProxy(Proxy proxy, Proxy.Type proxyType, String proxyHost, int proxyPort) {
107         assertEquals(proxyType, proxy.type());
108         assertTrue(proxy.address() instanceof InetSocketAddress);
109         assertEquals(proxyHost, ((InetSocketAddress) proxy.address()).getHostName());
110         assertEquals(proxyPort, ((InetSocketAddress) proxy.address()).getPort());
111     }
112 
113     private Proxy assertSingleProxy(List<Proxy> proxies) {
114         assertEquals(1, proxies.size());
115         return proxies.get(0);
116     }
117 
118     private URI toUri(Scheme scheme, String urlSuffix) {
119         return URI.create(scheme.schemeName() + urlSuffix);
120     }
121 }