TsURI.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/unittest/core/uri/TsURI.cpp
22 
23  \brief A test suit for the Core URI API.
24 
25  \author Vinicius campanha
26  */
27 
28 // STL
29 #include <iostream>
30 
31 // TerraLib
32 #include <terralib/core/uri/URI.h>
33 #include <terralib/Exception.h>
34 
35 // Boost
36 #include <boost/test/unit_test.hpp>
37 
38 BOOST_AUTO_TEST_SUITE( uri_test_case )
39 
40 BOOST_AUTO_TEST_CASE( test_copy_constructor )
41 {
42  std::string address("http://www.dpi.inpe.br:80/terralib5/wiki/doku.php?id=wiki:documentation:devguide#modules");
43 
44  te::core::URI uri(address);
45 
46  BOOST_CHECK(uri.isValid());
47 
48  te::core::URI copy(uri);
49 
50  BOOST_CHECK(copy.isValid());
51 
52  BOOST_CHECK(uri.scheme() == "http");
53  BOOST_CHECK(uri.user() == "");
54  BOOST_CHECK(uri.password() == "");
55  BOOST_CHECK(uri.host() == "www.dpi.inpe.br");
56  BOOST_CHECK(uri.port() == "80");
57  BOOST_CHECK(uri.path() == "/terralib5/wiki/doku.php");
58  BOOST_CHECK(uri.query() == "id=wiki:documentation:devguide");
59  BOOST_CHECK(uri.fragment() == "modules");
60 
61  BOOST_CHECK(uri.scheme() == copy.scheme());
62  BOOST_CHECK(uri.user() == copy.user());
63  BOOST_CHECK(uri.password() == copy.password());
64  BOOST_CHECK(uri.host() == copy.host());
65  BOOST_CHECK(uri.port() == copy.port());
66  BOOST_CHECK(uri.path() == copy.path());
67  BOOST_CHECK(uri.query() == copy.query());
68  BOOST_CHECK(uri.fragment() == copy.fragment());
69 
70  return;
71 }
72 
73 BOOST_AUTO_TEST_CASE( test_copy_assignment )
74 {
75  std::string address("http://www.dpi.inpe.br:80/terralib5/wiki/doku.php?id=wiki:documentation:devguide#modules");
76  te::core::URI uri(address);
77 
78  BOOST_CHECK(uri.isValid());
79 
80  std::string address2("scheme2://user:password@sedac.ciesin.columbia.edu:70/geoserver/wcs?service=WCS&request=GetCapabilities#fragment");
81  te::core::URI uri2(address2);
82 
83  BOOST_CHECK(uri2.isValid());
84 
85  uri2 = uri;
86 
87  BOOST_CHECK(uri2.isValid());
88 
89  BOOST_CHECK(uri.scheme() == "http");
90  BOOST_CHECK(uri.user() == "");
91  BOOST_CHECK(uri.password() == "");
92  BOOST_CHECK(uri.host() == "www.dpi.inpe.br");
93  BOOST_CHECK(uri.port() == "80");
94  BOOST_CHECK(uri.path() == "/terralib5/wiki/doku.php");
95  BOOST_CHECK(uri.query() == "id=wiki:documentation:devguide");
96  BOOST_CHECK(uri.fragment() == "modules");
97 
98  BOOST_CHECK(uri.scheme() == uri2.scheme());
99  BOOST_CHECK(uri.user() == uri2.user());
100  BOOST_CHECK(uri.password() == uri2.password());
101  BOOST_CHECK(uri.host() == uri2.host());
102  BOOST_CHECK(uri.port() == uri2.port());
103  BOOST_CHECK(uri.path() == uri2.path());
104  BOOST_CHECK(uri.query() == uri2.query());
105  BOOST_CHECK(uri.fragment() == uri2.fragment());
106 
107  std::string address3("xmpp:example-node@example.com?message;subject=Hello%20World");
108  te::core::URI uri3(address3);
109 
110  BOOST_CHECK(uri3.isValid());
111 
112  uri = uri3;
113 
114  BOOST_CHECK(uri.isValid());
115 
116  BOOST_CHECK(uri.scheme() == uri3.scheme());
117  BOOST_CHECK(uri.user() == uri3.user());
118  BOOST_CHECK(uri.password() == uri3.password());
119  BOOST_CHECK(uri.host() == uri3.host());
120  BOOST_CHECK(uri.port() == uri3.port());
121  BOOST_CHECK(uri.path() == uri3.path());
122  BOOST_CHECK(uri.query() == uri3.query());
123  BOOST_CHECK(uri.fragment() == uri3.fragment());
124 
125  return;
126 }
127 
128 BOOST_AUTO_TEST_CASE( test_encode )
129 {
130  std::string address("scheme://host/ ãõáé");
131  te::core::URI uri(address);
132 
133  BOOST_CHECK(uri.isValid());
134 
135  std::string encoded("scheme://host/%20%C3%A3%C3%B5%C3%A1%C3%A9");
136 
137  BOOST_CHECK_EQUAL(uri.uri(), encoded);
138 
139  return;
140 }
141 
142 BOOST_AUTO_TEST_CASE( test_full_http_uri )
143 {
144  std::string address("http://www.dpi.inpe.br:80/terralib5/wiki/doku.php?id=wiki:documentation:devguide#modules");
145  te::core::URI uri(address);
146 
147  BOOST_CHECK(uri.isValid());
148 
149  BOOST_CHECK(uri.scheme() == "http");
150  BOOST_CHECK(uri.user() == "");
151  BOOST_CHECK(uri.password() == "");
152  BOOST_CHECK(uri.host() == "www.dpi.inpe.br");
153  BOOST_CHECK(uri.port() == "80");
154  BOOST_CHECK(uri.path() == "/terralib5/wiki/doku.php");
155  BOOST_CHECK(uri.query() == "id=wiki:documentation:devguide");
156  BOOST_CHECK(uri.fragment() == "modules");
157 
158  return;
159 }
160 
161 BOOST_AUTO_TEST_CASE( test_full_http_uri_2 )
162 {
163  std::string address("http://sedac.ciesin.columbia.edu/geoserver/wcs?service=WCS&request=GetCapabilities&version=2.0.1");
164  te::core::URI uri(address);
165 
166  BOOST_CHECK(uri.isValid());
167 
168  BOOST_CHECK(uri.scheme() == "http");
169  BOOST_CHECK(uri.user() == "");
170  BOOST_CHECK(uri.password() == "");
171  BOOST_CHECK(uri.host() == "sedac.ciesin.columbia.edu");
172  BOOST_CHECK(uri.port() == "");
173  BOOST_CHECK(uri.path() == "/geoserver/wcs");
174  BOOST_CHECK(uri.query() == "service=WCS&request=GetCapabilities&version=2.0.1");
175  BOOST_CHECK(uri.fragment() == "");
176 
177  return;
178 }
179 
180 BOOST_AUTO_TEST_CASE( test_ftp_uri )
181 {
182  std::string address("ftp://ftp.ftp.inpe.br:21/path/");
183  te::core::URI uri(address);
184 
185  BOOST_CHECK(uri.isValid());
186 
187  BOOST_CHECK(uri.scheme() == "ftp");
188  BOOST_CHECK(uri.user() == "");
189  BOOST_CHECK(uri.password() == "");
190  BOOST_CHECK(uri.host() == "ftp.ftp.inpe.br");
191  BOOST_CHECK(uri.port() == "21");
192  BOOST_CHECK(uri.path() == "/path/");
193  BOOST_CHECK(uri.query() == "");
194  BOOST_CHECK(uri.fragment() == "");
195 
196  return;
197 }
198 
199 BOOST_AUTO_TEST_CASE( test_ftp_authority_address_uri )
200 {
201  std::string address("ftp://user:password@ftp.ftp.inpe.br:21/path/");
202  te::core::URI uri(address);
203 
204  BOOST_CHECK(uri.isValid());
205 
206  BOOST_CHECK(uri.scheme() == "ftp");
207  BOOST_CHECK(uri.user() == "user");
208  BOOST_CHECK(uri.password() == "password");
209  BOOST_CHECK(uri.host() == "ftp.ftp.inpe.br");
210  BOOST_CHECK(uri.port() == "21");
211  BOOST_CHECK(uri.path() == "/path/");
212  BOOST_CHECK(uri.query() == "");
213  BOOST_CHECK(uri.fragment() == "");
214 
215  return;
216 }
217 
218 BOOST_AUTO_TEST_CASE( test_opaque_full_address )
219 {
220  std::string address("xmpp:example-node@example.com?message;subject=Hello%20World");
221  te::core::URI uri(address);
222 
223  BOOST_CHECK(uri.isValid());
224 
225  BOOST_CHECK(uri.scheme() == "xmpp");
226  BOOST_CHECK(uri.user() == "");
227  BOOST_CHECK(uri.password() == "");
228  BOOST_CHECK(uri.host() == "");
229  BOOST_CHECK(uri.port() == "");
230  BOOST_CHECK(uri.path() == "example-node@example.com");
231  BOOST_CHECK(uri.query() == "message;subject=Hello%20World");
232  BOOST_CHECK(uri.fragment() == "");
233 
234  return;
235 }
236 
237 BOOST_AUTO_TEST_CASE( test_http_partial_adress )
238 {
239  std::string address("http://www.dpi.inpe.br:80");
240 
241  te::core::URI uri(address);
242 
243  BOOST_CHECK(uri.isValid());
244 
245  BOOST_CHECK(uri.scheme() == "http");
246  BOOST_CHECK(uri.user() == "");
247  BOOST_CHECK(uri.password() == "");
248  BOOST_CHECK(uri.host() == "www.dpi.inpe.br");
249  BOOST_CHECK(uri.port() == "80");
250  BOOST_CHECK(uri.path() == "");
251  BOOST_CHECK(uri.query() == "");
252  BOOST_CHECK(uri.fragment() == "");
253 }
254 
255 BOOST_AUTO_TEST_CASE( test_http_partial_adress_2 )
256 {
257  std::string address("http://www.dpi.inpe.br");
258 
259  te::core::URI uri(address);
260 
261  BOOST_CHECK(uri.isValid());
262 
263  BOOST_CHECK(uri.scheme() == "http");
264  BOOST_CHECK(uri.user() == "");
265  BOOST_CHECK(uri.password() == "");
266  BOOST_CHECK(uri.host() == "www.dpi.inpe.br");
267  BOOST_CHECK(uri.port() == "");
268  BOOST_CHECK(uri.path() == "");
269  BOOST_CHECK(uri.query() == "");
270  BOOST_CHECK(uri.fragment() == "");
271 }
272 
273 BOOST_AUTO_TEST_CASE( test_pgsql_uri )
274 {
275  std::string address("pgsql://user:password@atlas.dpi.inpe.br:5433/bdqueimadas?client_encoding=UTF8&max_connections=20");
276 
277  te::core::URI uri(address);
278 
279  BOOST_CHECK(uri.isValid());
280 
281  BOOST_CHECK(uri.scheme() == "pgsql");
282  BOOST_CHECK(uri.user() == "user");
283  BOOST_CHECK(uri.password() == "password");
284  BOOST_CHECK(uri.host() == "atlas.dpi.inpe.br");
285  BOOST_CHECK(uri.port() == "5433");
286  BOOST_CHECK(uri.path() == "/bdqueimadas");
287  BOOST_CHECK(uri.query() == "client_encoding=UTF8&max_connections=20");
288  BOOST_CHECK(uri.fragment() == "");
289 }
290 
291 BOOST_AUTO_TEST_CASE( test_http_uri_3 )
292 {
293  std::string address("http://chronos.dpi.inpe.br/wfs");
294 
295  te::core::URI uri(address);
296 
297  BOOST_CHECK(uri.isValid());
298 
299  BOOST_CHECK(uri.scheme() == "http");
300  BOOST_CHECK(uri.user() == "");
301  BOOST_CHECK(uri.password() == "");
302  BOOST_CHECK(uri.host() == "chronos.dpi.inpe.br");
303  BOOST_CHECK(uri.port() == "");
304  BOOST_CHECK(uri.path() == "/wfs");
305  BOOST_CHECK(uri.query() == "");
306  BOOST_CHECK(uri.fragment() == "");
307 }
308 
309 BOOST_AUTO_TEST_CASE( test_http_uri_4 )
310 {
311  std::string address("http://chronos.dpi.inpe.br/wms");
312 
313  te::core::URI uri(address);
314 
315  BOOST_CHECK(uri.isValid());
316 
317  BOOST_CHECK(uri.scheme() == "http");
318  BOOST_CHECK(uri.user() == "");
319  BOOST_CHECK(uri.password() == "");
320  BOOST_CHECK(uri.host() == "chronos.dpi.inpe.br");
321  BOOST_CHECK(uri.port() == "");
322  BOOST_CHECK(uri.path() == "/wms");
323  BOOST_CHECK(uri.query() == "");
324  BOOST_CHECK(uri.fragment() == "");
325 }
326 
327 BOOST_AUTO_TEST_CASE( test_http_uri_5 )
328 {
329  std::string address("http://xxx.xxx.xx/yyy/yyy");
330 
331  te::core::URI uri(address);
332 
333  BOOST_CHECK(uri.isValid());
334 
335  BOOST_CHECK(uri.scheme() == "http");
336  BOOST_CHECK(uri.user() == "");
337  BOOST_CHECK(uri.password() == "");
338  BOOST_CHECK(uri.host() == "xxx.xxx.xx");
339  BOOST_CHECK(uri.port() == "");
340  BOOST_CHECK(uri.path() == "/yyy/yyy");
341  BOOST_CHECK(uri.query() == "");
342  BOOST_CHECK(uri.fragment() == "");
343 }
344 
345 BOOST_AUTO_TEST_CASE( test_http_uri_6 )
346 {
347  std::string address("http://xxx.xxx.xx/yyy/yyy?");
348 
349  te::core::URI uri(address);
350 
351  BOOST_CHECK(uri.isValid());
352 
353  BOOST_CHECK(uri.scheme() == "http");
354  BOOST_CHECK(uri.user() == "");
355  BOOST_CHECK(uri.password() == "");
356  BOOST_CHECK(uri.host() == "xxx.xxx.xx");
357  BOOST_CHECK(uri.port() == "");
358  BOOST_CHECK(uri.path() == "/yyy/yyy");
359  BOOST_CHECK(uri.query() == "");
360  BOOST_CHECK(uri.fragment() == "");
361 }
362 
363 BOOST_AUTO_TEST_CASE( test_file_uri_1 )
364 {
365  std::string address("file:///home/gribeiro/data");
366 
367  te::core::URI uri(address);
368 
369  BOOST_CHECK(uri.isValid());
370 
371  BOOST_CHECK(uri.scheme() == "file");
372  BOOST_CHECK(uri.user() == "");
373  BOOST_CHECK(uri.password() == "");
374  BOOST_CHECK(uri.host() == "");
375  BOOST_CHECK(uri.port() == "");
376  BOOST_CHECK(uri.path() == "/home/gribeiro/data");
377  BOOST_CHECK(uri.query() == "");
378  BOOST_CHECK(uri.fragment() == "");
379 }
380 
381 BOOST_AUTO_TEST_CASE( test_file_uri_2 )
382 {
383  std::string address("file:///home/gribeiro/data/arq.shp");
384 
385  te::core::URI uri(address);
386 
387  BOOST_CHECK(uri.isValid());
388 
389  BOOST_CHECK(uri.scheme() == "file");
390  BOOST_CHECK(uri.user() == "");
391  BOOST_CHECK(uri.password() == "");
392  BOOST_CHECK(uri.host() == "");
393  BOOST_CHECK(uri.port() == "");
394  BOOST_CHECK(uri.path() == "/home/gribeiro/data/arq.shp");
395  BOOST_CHECK(uri.query() == "");
396  BOOST_CHECK(uri.fragment() == "");
397 }
398 
399 BOOST_AUTO_TEST_CASE(test_file_uri_3)
400 {
401  std::string address("file://C:/data/vector/mapa_distritos_sp.shp");
402 
403  te::core::URI uri(address);
404 
405  BOOST_CHECK(uri.isValid());
406 
407  BOOST_CHECK(uri.scheme() == "file");
408  BOOST_CHECK(uri.user() == "");
409  BOOST_CHECK(uri.password() == "");
410  BOOST_CHECK(uri.host() == "C");
411  BOOST_CHECK(uri.port() == "");
412  BOOST_CHECK(uri.path() == ":/data/vector/mapa_distritos_sp.shp");
413  BOOST_CHECK(uri.query() == "");
414  BOOST_CHECK(uri.fragment() == "");
415 }
416 
417 BOOST_AUTO_TEST_SUITE_END()
std::string path() const
Retrieving the path.
Definition: URI.cpp:118
std::string scheme() const
Retrieving the scheme.
Definition: URI.cpp:93
std::string fragment() const
Retrieving the fragment.
Definition: URI.cpp:128
std::string password() const
Retrieving the password information.
Definition: URI.cpp:103
bool isValid() const
Return if the given URI is valid or not.
Definition: URI.cpp:133
std::string query() const
Retrieving the query.
Definition: URI.cpp:123
std::string port() const
Retrieving the port.
Definition: URI.cpp:113
BOOST_AUTO_TEST_SUITE(uri_test_case) BOOST_AUTO_TEST_CASE(test_copy_constructor)
Definition: TsURI.cpp:38
std::string host() const
Retrieving the host.
Definition: URI.cpp:108
const std::string & uri() const
Retrieving the full URI.
Definition: URI.cpp:88
A class for representing an Uniform Resource Identifier (URI).
Definition: URI.h:49
A class for representing an Uniform Resource Identifier (URI).
BOOST_AUTO_TEST_CASE(test_copy_assignment)
Definition: TsURI.cpp:73
std::string user() const
Retrieving the user information.
Definition: URI.cpp:98