• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package tests.support;
19 
20 import java.io.FileInputStream;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.util.Hashtable;
24 
25 /**
26  * This class is responsible for providing the dynamic names and addresses for
27  * the java.net classes. There are two directories which need to be placed on an
28  * ftp server and an http server which should accompany this source. The
29  * ftp-files have to be placed on an ftp server and have to be the root of a
30  * user jcltest with password jclpass. The testres files must be available on an
31  * HTTP server and the name and location can be configured below.
32  */
33 public class Support_Configuration {
34 
35     public static String DomainAddress = "apache.org";
36 
37     public static String WebName = "jcltest.";
38 
39     public static final String HomeAddress;
40 
41     public static String TestResourcesDir = "/testres231";
42 
43     public static final String TestResources;
44 
45     public static String HomeAddressResponse = "HTTP/1.1 200 OK";
46 
47     public static String HomeAddressSoftware = "Jetty(6.0.x)";
48 
49     public static String ProxyServerTestHost = "jcltest.apache.org";
50 
51     public static String SocksServerTestHost = "jcltest.apache.org";
52 
53     public static int SocksServerTestPort = 1080;
54 
55     // Need an IP address that does not resolve to a host name
56     public static String UnresolvedIP = "192.168.99.99";
57 
58     // the bytes for an address which represents an address which is not
59     // one of the addresses for any of our machines on which tests will run
60     // it is used to verify we get the expected error when we try to bind
61     // to an address that is not one of the machines local addresses
62     public static byte nonLocalAddressBytes[] = { 1, 0, 0, 0 };
63 
64     public static String InetTestIP = "127.0.0.1";
65 
66     public static String InetTestIP2 = "127.0.0.1";
67 
68     public static final String HomeAddress6 = "jcltest6.apache.org";
69 
70     public static String ProxyServerTestHostIPv6 = "jcltest6.apache.org";
71 
72     // ip address that resolves to a host that is not present on the local
73     // network
74     // this allows us to check the timeouts for connect
75     public static String ResolvedNotExistingHost = "9.26.194.72";
76 
77     /**
78      * You can compute the hash code with the following code: try { String name =
79      * "whatever.xxx.com";
80      * System.out.println(InetAddress.getByName(name).hashCode()); } catch
81      * (UnknownHostException e) {}
82      */
83 
84     public static String FTPTestAddress = "jcltest:jclpass@localhost";
85 
86     public static String URLConnectionLastModifiedString = "Mon, 14 Jun 1999 21:06:22 GMT";
87 
88     public static long URLConnectionLastModified = 929394382000L;
89 
90     public static boolean RunCommTests = false;
91 
92     public static String Port1 = "COM1";
93 
94     public static String Port2 = "COM2";
95 
96     static Hashtable<String, String> props = null;
97 
98     static {
loadProperties()99         loadProperties();
100         HomeAddress = WebName + DomainAddress;
101         TestResources = HomeAddress + TestResourcesDir;
102     }
103 
loadProperties()104     static void loadProperties() {
105         InputStream in = null;
106         Hashtable<String, String> props = new Hashtable<String, String>();
107 
108         String iniName = System.getProperty("test.ini.file", "JCLAuto.ini");
109         if (System.getProperty("test.comm") != null) {
110             RunCommTests = true;
111         }
112 
113         try {
114             in = new FileInputStream(iniName);
115         } catch (IOException e) {
116         } catch (Exception e) {
117             System.out.println("SupportConfiguration.loadProperties()");
118             System.out.println(e);
119             e.printStackTrace();
120         }
121         if (in == null) {
122             try {
123                 Class<?> cl = Class
124                         .forName("com.ibm.support.Support_Configuration");
125                 in = cl.getResourceAsStream(iniName);
126             } catch (ClassNotFoundException e) {
127             }
128         }
129         try {
130             if (in != null) {
131                 load(in, props);
132             }
133         } catch (IOException e) {
134         }
135         if (props.size() == 0) {
136             return;
137         }
138         String value;
139 
140         value = props.get("DomainAddress");
141         if (value != null) {
142             DomainAddress = value;
143         }
144 
145         value = props.get("WebName");
146         if (value != null) {
147             WebName = value;
148         }
149 
150         value = props.get("TestResourcesDir");
151         if (value != null) {
152             TestResourcesDir = value;
153         }
154         value = props.get("HomeAddressResponse");
155         if (value != null) {
156             HomeAddressResponse = value;
157         }
158 
159         value = props.get("HomeAddressSoftware");
160         if (value != null) {
161             HomeAddressSoftware = value;
162         }
163 
164         value = props.get("ProxyServerTestHost");
165         if (value != null) {
166             ProxyServerTestHost = value;
167         }
168 
169         value = props.get("SocksServerTestHost");
170         if (value != null) {
171             SocksServerTestHost = value;
172         }
173 
174         value = props.get("SocksServerTestPort");
175         if (value != null) {
176             SocksServerTestPort = Integer.parseInt(value);
177         }
178 
179         value = props.get("UnresolvedIP");
180         if (value != null) {
181             UnresolvedIP = value;
182         }
183 
184         value = props.get("FTPTestAddress");
185         if (value != null) {
186             FTPTestAddress = value;
187         }
188 
189         value = props.get("URLConnectionLastModifiedString");
190         if (value != null) {
191             URLConnectionLastModifiedString = value;
192         }
193 
194         value = props.get("URLConnectionLastModified");
195         if (value != null) {
196             URLConnectionLastModified = Long.parseLong(value);
197         }
198 
199         value = props.get("Port1");
200         if (value != null) {
201             Port1 = value;
202         }
203 
204         value = props.get("Port2");
205         if (value != null) {
206             Port2 = value;
207         }
208 
209         value = props.get("ProxyServerTestHostIPv6");
210         if (value != null) {
211             ProxyServerTestHostIPv6 = value;
212         }
213 
214         value = props.get("ResolvedNotExistingHost");
215         if (value != null) {
216             ResolvedNotExistingHost = value;
217         }
218 
219     }
220 
load(InputStream in, Hashtable<String, String> result)221     static void load(InputStream in, Hashtable<String, String> result) throws IOException {
222         int NONE = 0, SLASH = 1, UNICODE = 2, CONTINUE = 3, DONE = 4, IGNORE = 5;
223         int mode = NONE, unicode = 0, count = 0, nextChar;
224         StringBuffer key = new StringBuffer(), value = new StringBuffer(), buffer = key;
225         boolean firstChar = true;
226 
227         while ((nextChar = in.read()) != -1) {
228             if (mode == UNICODE) {
229                 int digit = Character.digit((char) nextChar, 16);
230                 if (digit >= 0) {
231                     unicode = (unicode << 4) + digit;
232                     if (++count < 4) {
233                         continue;
234                     }
235                 }
236                 mode = NONE;
237                 buffer.append((char) unicode);
238                 if (nextChar != '\n') {
239                     continue;
240                 }
241             }
242             if (mode == SLASH) {
243                 mode = NONE;
244                 switch (nextChar) {
245                     case '\r':
246                         mode = CONTINUE; // Look for a following \n
247                         continue;
248                     case '\n':
249                         mode = IGNORE; // Ignore whitespace on the next line
250                         continue;
251                     case 'b':
252                         nextChar = '\b';
253                         break;
254                     case 'f':
255                         nextChar = '\f';
256                         break;
257                     case 'n':
258                         nextChar = '\n';
259                         break;
260                     case 'r':
261                         nextChar = '\r';
262                         break;
263                     case 't':
264                         nextChar = '\t';
265                         break;
266                     case 'u':
267                         mode = UNICODE;
268                         unicode = count = 0;
269                         continue;
270                 }
271             } else {
272                 switch (nextChar) {
273                     case '#':
274                     case '!':
275                         if (firstChar) {
276                             while ((nextChar = in.read()) != -1) {
277                                 if (nextChar == '\r' || nextChar == '\n') {
278                                     break;
279                                 }
280                             }
281                             continue;
282                         }
283                         break;
284                     case '\n':
285                         if (mode == CONTINUE) { // Part of a \r\n sequence
286                             mode = IGNORE; // Ignore whitespace on the next line
287                             continue;
288                         }
289                         // fall into the next case
290                     case '\r':
291                         mode = NONE;
292                         firstChar = true;
293                         if (key.length() > 0 || buffer == value) {
294                             result.put(key.toString(), value.toString());
295                         }
296                         key.setLength(0);
297                         value.setLength(0);
298                         buffer = key;
299                         continue;
300                     case '\\':
301                         mode = SLASH;
302                         continue;
303                     case ':':
304                     case '=':
305                         if (buffer == key) {
306                             buffer = value;
307                             continue;
308                         }
309                         break;
310                 }
311                 char c = (char) nextChar;
312                 if ((c >= 0x1c && c <= 0x20) || (c >= 0x9 && c <= 0xd)) {
313                     if (mode == CONTINUE) {
314                         mode = IGNORE;
315                     }
316                     if (buffer.length() == 0 || mode == IGNORE) {
317                         continue;
318                     }
319                     if (buffer == key) {
320                         mode = DONE;
321                         continue;
322                     }
323                 }
324                 if (mode == IGNORE || mode == CONTINUE) {
325                     mode = NONE;
326                 }
327             }
328             firstChar = false;
329             if (mode == DONE) {
330                 buffer = value;
331                 mode = NONE;
332             }
333             buffer.append((char) nextChar);
334         }
335         if (key.length() > 0 || buffer == value) {
336             result.put(key.toString(), value.toString());
337         }
338     }
339 
340 }
341