1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
ULib/tests/ulib/test_url.cpp
stefanocasazza 7f4ea259ca fix
2018-03-30 14:12:27 +02:00

324 lines
11 KiB
C++

// test_url.cpp
#include <ulib/url.h>
#include <ulib/file.h>
#include <ulib/utility/des3.h>
#include <ulib/utility/base64.h>
#include <ulib/utility/string_ext.h>
#include <iostream>
static void check(const UString& dati, const UString& file)
{
U_TRACE(5,"check(%p,%p)", &dati, &file)
if (u_isUrlEncodeNeeded(U_STRING_TO_PARAM(dati)))
{
uint32_t sz = dati.size() * 4;
UString buffer1(sz), buffer2(sz);
Url::encode(dati, buffer1);
Url::decode(buffer1, buffer2);
U_INTERNAL_DUMP("buffer1 = %#.*S", U_STRING_TO_TRACE(buffer1))
U_INTERNAL_DUMP("dati = %#.*S", U_STRING_TO_TRACE(dati))
U_INTERNAL_DUMP("buffer2 = %#.*S", U_STRING_TO_TRACE(buffer2))
U_ASSERT( dati == buffer2 )
}
}
int U_EXPORT main(int argc, char* argv[])
{
U_ULIB_INIT(argv);
U_TRACE(5,"main(%d)", argc)
UString filename;
while (cin >> filename)
{
UString dati = UFile::contentOf(filename);
check(dati, filename);
}
Url url[22] = {
Url(U_STRING_FROM_CONSTANT("http://www.cs.wustl.edu/")),
Url(U_STRING_FROM_CONSTANT("http://www.cs.wustl.edu/index.html")),
Url(U_STRING_FROM_CONSTANT("http://www.cs.wustl.edu/form?var=foo")),
Url(U_STRING_FROM_CONSTANT("http://www.notexist.com:8080/index.html")),
Url(U_STRING_FROM_CONSTANT("http://www.notexist.com:80/index.html")),
Url(U_STRING_FROM_CONSTANT("http://www.notexist.com:80?var=foo")),
Url(U_STRING_FROM_CONSTANT("ftp://foo")),
Url(U_STRING_FROM_CONSTANT("http://www/?kkk//")),
Url(U_STRING_FROM_CONSTANT("ftp://www.cs.wustl.edu/")),
Url(U_STRING_FROM_CONSTANT("ftp://user@www.cs.wustl.edu/")),
Url(U_STRING_FROM_CONSTANT("ftp://user:pass@www.cs.wustl.edu/")),
Url(U_STRING_FROM_CONSTANT("ftp://user:pass@www.cs.wustl.edu/path")),
Url(U_STRING_FROM_CONSTANT("ftp://www.cs.wustl.edu")),
Url(U_STRING_FROM_CONSTANT("http://www.cs.wustl.edu/index.html")),
Url(U_STRING_FROM_CONSTANT("mailto:ace-users@cs.wustl.edu")),
Url(U_STRING_FROM_CONSTANT("mailto:majordomo@cs.wustl.edu?Subject: subscribe ace-users")),
Url(U_STRING_FROM_CONSTANT("mailto:nobody")),
Url(U_STRING_FROM_CONSTANT("http://www.cs.wustl.edu")),
Url(U_STRING_FROM_CONSTANT("file:/etc/passwd")),
Url(U_STRING_FROM_CONSTANT("http://www.cs.wustl.edu/form?var=foo&url=http%3a//www/%3fkkk//")),
Url(U_STRING_FROM_CONSTANT("http://a:b@host.com:8080/p/a/t/h?query=string#hash")),
Url(U_STRING_FROM_CONSTANT("https://tools.ietf.org/id/draft-snell-link-method-01.html#rfc.section.5"))
};
uint32_t i;
for (i = 0; i < 22; ++i)
{
cout << '"' << url[i] << "\" "
<< '"' << url[i].getService() << "\" "
<< '"' << url[i].getUser() << "\" "
<< '"' << url[i].getHost() << "\" "
<< '"' << url[i].getPort() << "\" "
<< '"' << url[i].getPath() << "\" "
<< '"' << url[i].getQuery() << "\" "
<< '"' << url[i].getFragment() << "\"\n";
}
for (i = 0; i < 22; ++i)
{
url[i].eraseUser();
url[i].eraseQuery();
}
Url u = url[2];
u.setService(U_CONSTANT_TO_PARAM("http"));
u.setUser(U_CONSTANT_TO_PARAM("pippo"));
u.setHost(U_CONSTANT_TO_PARAM("www.unirel.com"));
u.setPort(8080);
u.setPath(U_CONSTANT_TO_PARAM("/usr/src"));
u.setQuery(U_CONSTANT_TO_PARAM("var1=foo&var2=bar"));
cout << '"' << u << "\" "
<< '"' << u.getService() << "\" "
<< '"' << u.getUser() << "\" "
<< '"' << u.getHost() << "\" "
<< '"' << u.getPort() << "\" "
<< '"' << u.getPath() << "\" "
<< '"' << u.getQuery() << "\"\n";
U_ASSERT( u.isQuery() )
u.setPath(U_CONSTANT_TO_PARAM("/info"));
u.addQuery(U_CONSTANT_TO_PARAM("ip"), U_CONSTANT_TO_PARAM("10.30.1.130"));
u.addQuery(U_CONSTANT_TO_PARAM("ap"), U_CONSTANT_TO_PARAM("ap@palazzoVecchio"));
u.setPath(U_CONSTANT_TO_PARAM("/info"));
u.addQuery(U_CONSTANT_TO_PARAM("ip"), U_CONSTANT_TO_PARAM("10.30.1.131"));
u.addQuery(U_CONSTANT_TO_PARAM("ap"), U_CONSTANT_TO_PARAM("ap@palazzoNuovo"));
U_ASSERT( u.isQuery() )
UString info = u.getPathAndQuery();
U_INTERNAL_ASSERT(info)
cout << '"' << info << "\"\n";
#define URL_BASE64 "U2FsdGVkX18CtybN+EswQN4oGqmRmH7OWMvKC+ilxpxcjzTKOGEbkZfq+UlZXtX/+IZx6d3nf/MXiDX6Exp6V5AAQLRquwujP6ZqOVNqJYxc8weXv8X1e0z1rykGr75k1AAjhl411QzESBTLxW7r+1V59mD6r3LKGxdFQj3hJ7UxntSyVzkMW9wjAmc2mffbqsauh2s2TFClAO/gzLnOt5OCmQ/bWbsdITU+d+8H/AHXPVGSMKHFtg=="
#define URL_BASE64URL "U2FsdGVkX18CtybN-EswQN4oGqmRmH7OWMvKC-ilxpxcjzTKOGEbkZfq-UlZXtX_-IZx6d3nf_MXiDX6Exp6V5AAQLRquwujP6ZqOVNqJYxc8weXv8X1e0z1rykGr75k1AAjhl411QzESBTLxW7r-1V59mD6r3LKGxdFQj3hJ7UxntSyVzkMW9wjAmc2mffbqsauh2s2TFClAO_gzLnOt5OCmQ_bWbsdITU-d-8H_AHXPVGSMKHFtg"
#define URL_ENDCODED "U2FsdGVkX18CtybN%2BEswQN4oGqmRmH7OWMvKC%2BilxpxcjzTKOGEbkZfq%2BUlZXtX/%2BIZx6d3nf/MXiDX6Exp6V5AAQLRquwujP6ZqOVNqJYxc8weXv8X1e0z1rykGr75k1AAjhl411QzESBTLxW7r%2B1V59mD6r3LKGxdFQj3hJ7UxntSyVzkMW9wjAmc2mffbqsauh2s2TFClAO/gzLnOt5OCmQ/bWbsdITU%2Bd%2B8H/AHXPVGSMKHFtg%3D%3D"
#define URL_ENDCODED_BASE64URL "U2FsdGVkX1808rcrEGMANm0PQYLvNaoTBgfLjgnPI68jOshyAcHRgBBe9OcJ-2sU-PoM_mFzlkMECF9fiXdbVf0CgVYc3AWmS43m9_tSPF7eFUlsWApYKv-LvPjbcNXLJltNgAXVc71XuVKqPqB6mSjIhmcJAtFZ86TB3FXLkNVz0QcQLcSCQ_UFQ0kNOe89TJ3dHvQ-Wkx8JfPu8qEotnxUourW6xVq3Vrp_9ArkB_1dK9Ag8Okz7AEv9v-AZw9011syWIY57E_jx_IkGNEWA"
bool ok = u_isBase64(U_CONSTANT_TO_PARAM(URL_BASE64));
U_INTERNAL_ASSERT(ok)
ok = u_isUrlEncodeNeeded(U_CONSTANT_TO_PARAM(URL_BASE64));
U_INTERNAL_ASSERT(ok)
ok = u_isUrlEncodeNeeded(U_CONSTANT_TO_PARAM(URL_BASE64URL));
U_INTERNAL_ASSERT_EQUALS(ok, false)
ok = u_isUrlEncoded(U_CONSTANT_TO_PARAM(URL_ENDCODED), false);
U_INTERNAL_ASSERT(ok)
ok = u_isBase64(U_CONSTANT_TO_PARAM(URL_ENDCODED));
U_INTERNAL_ASSERT_EQUALS(ok, false)
ok = u_isBase64(U_CONSTANT_TO_PARAM("name=stefano"));
U_INTERNAL_ASSERT(ok)
ok = u_isUrlEncoded(U_CONSTANT_TO_PARAM("name=stefano"), false);
U_INTERNAL_ASSERT_EQUALS(ok, false)
UString value_decoded(U_CAPACITY), output(U_CAPACITY);
Url::decode(U_CONSTANT_TO_PARAM(URL_ENDCODED), value_decoded);
U_INTERNAL_ASSERT(value_decoded.equal(U_CONSTANT_TO_PARAM(URL_BASE64)))
ok = u_isUrlEncoded(U_CONSTANT_TO_PARAM(URL_BASE64), false);
U_INTERNAL_ASSERT_EQUALS(ok, false)
ok = u_isUrlEncoded(U_CONSTANT_TO_PARAM(URL_BASE64URL), false);
U_INTERNAL_ASSERT_EQUALS(ok, false)
ok = u_isUrlEncoded(U_CONSTANT_TO_PARAM("address+space+usage%3A12.81+MBytes+-+rss+usage%3A3.59+MBytes"), false);
U_INTERNAL_ASSERT(ok)
ok = u_isUrlEncodeNeeded(U_CONSTANT_TO_PARAM(URL_ENDCODED));
U_INTERNAL_ASSERT_EQUALS(ok, false)
UBase64::decode(U_CONSTANT_TO_PARAM(URL_BASE64), value_decoded);
U_INTERNAL_ASSERT(value_decoded)
UBase64::decodeUrl(U_CONSTANT_TO_PARAM(URL_BASE64URL), output);
U_INTERNAL_ASSERT(output)
U_INTERNAL_ASSERT_EQUALS(value_decoded, output)
UBase64::decodeAll(U_CONSTANT_TO_PARAM(URL_BASE64), output);
U_INTERNAL_ASSERT(output)
U_INTERNAL_ASSERT_EQUALS(value_decoded, output)
UBase64::decodeAll(U_CONSTANT_TO_PARAM(URL_BASE64URL), output);
U_INTERNAL_ASSERT(output)
U_INTERNAL_ASSERT_EQUALS(value_decoded, output)
ok = u_isUrlEncoded(U_CONSTANT_TO_PARAM(URL_ENDCODED_BASE64URL), false);
U_INTERNAL_ASSERT_EQUALS(ok, false)
UBase64::decodeUrl(U_CONSTANT_TO_PARAM(URL_ENDCODED_BASE64URL), value_decoded);
U_INTERNAL_ASSERT(output)
UDES3::setPassword("vivalatopa");
UDES3::decode(value_decoded, output);
U_INTERNAL_ASSERT(output)
ok = u_isUrlEncoded(U_STRING_TO_PARAM(output), true);
U_INTERNAL_DUMP("output = %#.*S", U_STRING_TO_TRACE(output))
U_INTERNAL_ASSERT(ok)
UVector<UString> name_value(16);
uint32_t sz = UStringExt::getNameValueFromData(output, name_value, U_CONSTANT_TO_PARAM("&"));
U_INTERNAL_ASSERT_EQUALS(sz, 16)
U_INTERNAL_ASSERT_EQUALS(name_value[0], "uid")
U_INTERNAL_ASSERT_EQUALS(name_value[1], "00:14:a5:6e:9c:cb")
U_INTERNAL_ASSERT_EQUALS(name_value[14], "redir_to")
U_INTERNAL_ASSERT_EQUALS(name_value[15], "http%253A//www.mozilla.org/about/")
ok = u_isUrlEncodeNeeded(U_STRING_TO_PARAM(name_value[1]));
U_INTERNAL_ASSERT(ok)
name_value.clear();
#define URL_POSTLOGIN "http://wifi-aaa.comune.fi.it/postlogin?mac=5c%3A8d%3A4e%3Aa7%3A74%3A40&ip=172.23.2.161&redirect=U2FsdGVkX1-jGSSiNI6XOekzyr2xDlex52Qeh-fNJVtDONBxP0j0LeKlMabvbvUDH75M0L-gPcu0nq3pwcr8rQArIp_gKhB14kxy_I_zpIhx_orRFrC57gsE3SO_vUFe4YStiDZwMMwmBwq5PKqA38gRzOkO9A0xEX5YTBifJfrKakP6lv_W_VqecGL7_iDD0JU5Pj_C3sueeRkDm48CVDgGfeukuhOmYuyJ0WaBBR_uISr1pZOkiYlYDEbrcda-9xU4XNl4hiPJoLdQdsEcHQ&gateway=172.23.0.1%3A5280&timeout=0&token=3683958071&ap=315@U2FsdGVkX1_7rc7eJavUIWeMdzfYhxTv6NYyaEibEX0"
UString postlogin = U_STRING_FROM_CONSTANT(URL_POSTLOGIN);
Url post(postlogin);
ok = post.getQuery(name_value);
U_INTERNAL_ASSERT(ok)
info = post.get();
post.eraseQuery();
ok = post.setQuery(name_value);
U_INTERNAL_ASSERT(ok)
ok = post.get().equal(U_CONSTANT_TO_PARAM(URL_POSTLOGIN));
U_INTERNAL_ASSERT(ok)
/*
U_ASSERT( u.getService() == UString( u.getService(buffer, sizeof(buffer)) ) )
U_ASSERT( u.getUser() == UString( u.getUser(buffer, sizeof(buffer)) ) )
U_ASSERT( u.getHost() == UString( u.getHost(buffer, sizeof(buffer)) ) )
U_ASSERT( u.getPortNumber() == 8080 )
U_ASSERT( u.getPath() == UString( u.getPath(buffer, sizeof(buffer)) ) )
U_ASSERT( u.getQuery() == UString( u.getQuery(buffer, sizeof(buffer)) ) )
*/
/*
UString entry(1000), value(1000);
U_ASSERT( u.firstQuery(entry, value) == u.firstQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2)) )
U_ASSERT( entry == UString(buffer1) )
U_ASSERT( value == UString(buffer2) )
U_ASSERT( entry == UString(U_CONSTANT_TO_PARAM("var1")) )
U_ASSERT( value == UString(U_CONSTANT_TO_PARAM("foo")) )
u.firstQuery(entry, value);
u.nextQuery(entry, value);
u.firstQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2));
u.nextQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2));
U_ASSERT( entry == UString(buffer1) )
U_ASSERT( value == UString(buffer2) )
U_ASSERT( entry == U_STRING_FROM_CONSTANT("var2") )
U_ASSERT( value == U_STRING_FROM_CONSTANT("ba") )
u.addQuery(U_CONSTANT_TO_PARAM("var3"), U_CONSTANT_TO_PARAM("co"));
u.firstQuery(entry, value);
u.nextQuery(entry, value);
u.nextQuery(entry, value);
U_ASSERT( u.firstQuery(entry, value) == u.firstQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2)) )
u.nextQuery(entry, value);
u.nextQuery(entry, value);
u.firstQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2));
u.nextQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2));
u.nextQuery(buffer1, sizeof(buffer1), buffer2, sizeof(buffer2));
U_ASSERT( entry == UString(buffer1) )
U_ASSERT( value == UString(buffer2) )
U_ASSERT( entry == U_STRING_FROM_CONSTANT("var3") )
U_ASSERT( value == U_STRING_FROM_CONSTANT("co") )
entry = U_STRING_FROM_CONSTANT("var2");
U_ASSERT( u.findQuery(entry, value) == true )
U_ASSERT( entry == U_STRING_FROM_CONSTANT("var2") )
U_ASSERT( value == U_STRING_FROM_CONSTANT("ba") )
entry.clear();
value = U_STRING_FROM_CONSTANT("foo");
U_ASSERT( u.findQuery(entry, value) == true )
U_ASSERT( entry == U_STRING_FROM_CONSTANT("var1") )
U_ASSERT( value == U_STRING_FROM_CONSTANT("foo") )
*/
}