1   /*
2    * Copyright 2004-2010 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  
17  package org.seasar.cubby.util;
18  
19  import static org.easymock.EasyMock.*;
20  import static org.junit.Assert.*;
21  
22  import java.net.MalformedURLException;
23  
24  import javax.servlet.http.HttpServletRequest;
25  
26  import org.junit.Test;
27  
28  public class LinkBuilderTest {
29  
30  	@Test
31  	public void httpDefaultPort() throws MalformedURLException {
32  		HttpServletRequest request = createMock(HttpServletRequest.class);
33  		expect(request.getRequestURL()).andStubReturn(
34  				new StringBuffer("http://example.com/aaa"));
35  		replay(request);
36  
37  		// change protocol
38  		{
39  			LinkBuilder linkBuilder = new LinkBuilder();
40  			linkBuilder.setProtocol("https");
41  			String link = linkBuilder.toLink(request);
42  			assertEquals("https://example.com/aaa", link);
43  		}
44  
45  		// relative
46  		{
47  			LinkBuilder linkBuilder = new LinkBuilder();
48  			linkBuilder.setFile("/bbb");
49  			String link = linkBuilder.toLink(request);
50  			assertEquals("/bbb", link);
51  		}
52  
53  		// use default port
54  		{
55  			LinkBuilder linkBuilder = new LinkBuilder();
56  			linkBuilder.setPort(-1);
57  			linkBuilder.setFile("/bbb");
58  			String link = linkBuilder.toLink(request);
59  			assertEquals("/bbb", link);
60  		}
61  
62  		// set default port
63  		{
64  			LinkBuilder linkBuilder = new LinkBuilder();
65  			linkBuilder.setPort(80);
66  			linkBuilder.setFile("/bbb");
67  			String link = linkBuilder.toLink(request);
68  			assertEquals("/bbb", link);
69  		}
70  
71  		{
72  			LinkBuilder linkBuilder = new LinkBuilder();
73  			linkBuilder.setProtocol("http");
74  			linkBuilder.setPort(80);
75  			linkBuilder.setHost("example.com");
76  			linkBuilder.setFile("/bbb");
77  			String link = linkBuilder.toLink(request);
78  			assertEquals("/bbb", link);
79  		}
80  
81  		{
82  			LinkBuilder linkBuilder = new LinkBuilder();
83  			linkBuilder.setProtocol("http");
84  			linkBuilder.setPort(8080);
85  			linkBuilder.setHost("example.com");
86  			linkBuilder.setFile("/bbb");
87  			String link = linkBuilder.toLink(request);
88  			assertEquals("http://example.com:8080/bbb", link);
89  		}
90  
91  		{
92  			LinkBuilder linkBuilder = new LinkBuilder();
93  			linkBuilder.setProtocol("https");
94  			linkBuilder.setPort(-1);
95  			linkBuilder.setHost("example.com");
96  			linkBuilder.setFile("/bbb");
97  			String link = linkBuilder.toLink(request);
98  			assertEquals("https://example.com/bbb", link);
99  		}
100 
101 		{
102 			LinkBuilder linkBuilder = new LinkBuilder();
103 			linkBuilder.setProtocol("https");
104 			linkBuilder.setPort(443);
105 			linkBuilder.setHost("example.com");
106 			linkBuilder.setFile("/bbb");
107 			String link = linkBuilder.toLink(request);
108 			assertEquals("https://example.com/bbb", link);
109 		}
110 
111 		{
112 			LinkBuilder linkBuilder = new LinkBuilder();
113 			linkBuilder.setProtocol("https");
114 			linkBuilder.setPort(8443);
115 			linkBuilder.setHost("example.com");
116 			linkBuilder.setFile("/bbb");
117 			String link = linkBuilder.toLink(request);
118 			assertEquals("https://example.com:8443/bbb", link);
119 		}
120 
121 		verify(request);
122 	}
123 
124 	@Test
125 	public void http8080() throws MalformedURLException {
126 		HttpServletRequest request = createMock(HttpServletRequest.class);
127 		expect(request.getRequestURL()).andStubReturn(
128 				new StringBuffer("http://example.com:8080/aaa"));
129 		replay(request);
130 
131 		{
132 			LinkBuilder linkBuilder = new LinkBuilder();
133 			linkBuilder.setProtocol("http");
134 			linkBuilder.setPort(-1);
135 			linkBuilder.setHost("example.com");
136 			linkBuilder.setFile("/aaa");
137 			String link = linkBuilder.toLink(request);
138 			assertEquals("http://example.com/aaa", link);
139 		}
140 
141 		{
142 			LinkBuilder linkBuilder = new LinkBuilder();
143 			linkBuilder.setProtocol("http");
144 			linkBuilder.setPort(-1);
145 			linkBuilder.setHost("example.com");
146 			linkBuilder.setFile("/bbb");
147 			String link = linkBuilder.toLink(request);
148 			assertEquals("http://example.com/bbb", link);
149 		}
150 
151 		{
152 			LinkBuilder linkBuilder = new LinkBuilder();
153 			linkBuilder.setProtocol("http");
154 			linkBuilder.setPort(80);
155 			linkBuilder.setHost("example.com");
156 			linkBuilder.setFile("/bbb");
157 			String link = linkBuilder.toLink(request);
158 			assertEquals("http://example.com/bbb", link);
159 		}
160 
161 		{
162 			LinkBuilder linkBuilder = new LinkBuilder();
163 			linkBuilder.setProtocol("http");
164 			linkBuilder.setPort(8080);
165 			linkBuilder.setHost("example.com");
166 			linkBuilder.setFile("/bbb");
167 			String link = linkBuilder.toLink(request);
168 			assertEquals("/bbb", link);
169 		}
170 
171 		{
172 			LinkBuilder linkBuilder = new LinkBuilder();
173 			linkBuilder.setProtocol("https");
174 			linkBuilder.setPort(-1);
175 			linkBuilder.setHost("example.com");
176 			linkBuilder.setFile("/bbb");
177 			String link = linkBuilder.toLink(request);
178 			assertEquals("https://example.com/bbb", link);
179 		}
180 
181 		{
182 			LinkBuilder linkBuilder = new LinkBuilder();
183 			linkBuilder.setProtocol("https");
184 			linkBuilder.setPort(443);
185 			linkBuilder.setHost("example.com");
186 			linkBuilder.setFile("/bbb");
187 			String link = linkBuilder.toLink(request);
188 			assertEquals("https://example.com/bbb", link);
189 		}
190 
191 		{
192 			LinkBuilder linkBuilder = new LinkBuilder();
193 			linkBuilder.setProtocol("https");
194 			linkBuilder.setPort(8443);
195 			linkBuilder.setHost("example.com");
196 			linkBuilder.setFile("/bbb");
197 			String link = linkBuilder.toLink(request);
198 			assertEquals("https://example.com:8443/bbb", link);
199 		}
200 
201 		verify(request);
202 	}
203 
204 }