View Javadoc

1   // Copyright (C) 2005 - 2009 Philip Aston
2   // All rights reserved.
3   //
4   // This file is part of The Grinder software distribution. Refer to
5   // the file LICENSE which is part of The Grinder distribution for
6   // licensing details. The Grinder distribution is available on the
7   // Internet at http://grinder.sourceforge.net/
8   //
9   // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13  // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16  // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17  // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19  // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20  // OF THE POSSIBILITY OF SUCH DAMAGE.
21  
22  package net.grinder.plugin.http.tcpproxyfilter;
23  
24  import junit.framework.TestCase;
25  
26  import net.grinder.testutility.RandomStubFactory;
27  import net.grinder.tools.tcpproxy.ConnectionDetails;
28  import net.grinder.tools.tcpproxy.EndPoint;
29  
30  
31  /**
32   * Unit tests for {@link ConnectionCache}.
33   *
34   * @author Philip Aston
35   */
36  public class TestConnectionCache extends TestCase {
37  
38    final RandomStubFactory<ConnectionHandlerFactory>
39      m_connectionHandlerFactoryStubFactory =
40        RandomStubFactory.create(ConnectionHandlerFactory.class);
41    final ConnectionHandlerFactory m_connectionHandlerFactory =
42      m_connectionHandlerFactoryStubFactory.getStub();
43  
44    private final ConnectionDetails m_connectionDetails =
45      new ConnectionDetails(
46        new EndPoint("hostA", 80),
47        new EndPoint("hostB", 80),
48        false);
49  
50    private final ConnectionDetails m_connectionDetails2 =
51      new ConnectionDetails(
52        new EndPoint("hostA", 8080),
53        new EndPoint("hostB", 80),
54        false);
55  
56    public void testConstructAndDispose() throws Exception {
57      final ConnectionCache connectionMap =
58        new ConnectionCache(m_connectionHandlerFactory);
59  
60      connectionMap.dispose();
61  
62      m_connectionHandlerFactoryStubFactory.assertNoMoreCalls();
63    }
64  
65    public void testConnectionCache() throws Exception {
66      final ConnectionCache connectionCache = new ConnectionCache(
67        m_connectionHandlerFactory);
68  
69      connectionCache.open(m_connectionDetails);
70      m_connectionHandlerFactoryStubFactory.assertSuccess("create",
71        m_connectionDetails);
72  
73      try {
74        connectionCache.open(m_connectionDetails);
75        fail("Expected IllegalArgumentException");
76      }
77      catch (IllegalArgumentException e) {
78      }
79  
80      connectionCache.close(m_connectionDetails);
81  
82      try {
83        connectionCache.close(m_connectionDetails);
84        fail("Expected IllegalArgumentException");
85      }
86      catch (IllegalArgumentException e) {
87      }
88  
89      try {
90        connectionCache.request(m_connectionDetails, new byte[100], 56);
91        fail("Expected IllegalArgumentException");
92      }
93      catch (IllegalArgumentException e) {
94      }
95  
96      try {
97        connectionCache.response(m_connectionDetails.getOtherEnd(),
98          new byte[100], 56);
99        fail("Expected IllegalArgumentException");
100     }
101     catch (IllegalArgumentException e) {
102     }
103 
104     connectionCache.dispose();
105 
106     final ConnectionCache connectionCache2 = new ConnectionCache(
107       m_connectionHandlerFactory);
108 
109     connectionCache2.open(m_connectionDetails);
110     m_connectionHandlerFactoryStubFactory.assertSuccess("create",
111       m_connectionDetails);
112 
113     connectionCache2.request(m_connectionDetails, new byte[10], 0);
114     connectionCache2.request(m_connectionDetails, new byte[20], 0);
115 
116     try {
117       connectionCache.request(m_connectionDetails2, new byte[10], 0);
118       fail("Expected IllegalArgumentException");
119     }
120     catch (IllegalArgumentException e) {
121     }
122 
123     connectionCache2.response(m_connectionDetails.getOtherEnd(), new byte[20],
124       0);
125 
126     try {
127       connectionCache.response(m_connectionDetails2.getOtherEnd(),
128         new byte[10], 0);
129       fail("Expected IllegalArgumentException");
130     }
131     catch (IllegalArgumentException e) {
132     }
133 
134     connectionCache2.dispose(); // Closes all handlers.
135 
136     try {
137       connectionCache.request(m_connectionDetails, new byte[10], 5);
138       fail("Expected IllegalArgumentException");
139     }
140     catch (IllegalArgumentException e) {
141     }
142 
143     try {
144       connectionCache.response(m_connectionDetails.getOtherEnd(), new byte[10],
145         5);
146       fail("Expected IllegalArgumentException");
147     }
148     catch (IllegalArgumentException e) {
149     }
150 
151     m_connectionHandlerFactoryStubFactory.assertNoMoreCalls();
152   }
153 }