/*############################################################################## Copyright (C) 2012 HPCC Systems. All rights reserved. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ############################################################################## */ #ifdef _USE_CPPUNIT #include "jlib.hpp" #include "jlog.hpp" #include "uri.hpp" #include #include #include // CPPUNIT_ASSERT is too slow, even when not matching failure #define ASSERT(a) { if (!(a)) CPPUNIT_ASSERT(a); } // =============================================================== jURI - URI parser class URITests : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( URITests ); CPPUNIT_TEST(testURIError); CPPUNIT_TEST(testURIUnknwon); CPPUNIT_TEST(testURILocal); CPPUNIT_TEST(testURIDali); CPPUNIT_TEST_SUITE_END(); const IContextLogger &logctx; void test_uri(const char * str, bool shouldBeURI, URISchemeType scheme=URIScheme_error, const char * server=NULL, const char * path=NULL) { bool isURI = URI::isURI(str); ASSERT(isURI == shouldBeURI); if (!isURI) return; // Now, validate URI try { URI res(str); ASSERT(res.getScheme() == scheme); // No need to validate the rest if (scheme == URIScheme_error) return; StringBuffer response; res.appendServerStr(response); ASSERT(strcmp(response.str(), server) == 0); response.clear(); res.appendPathStr(response); ASSERT(strcmp(response.str(), path) == 0); } catch (IException *e) { StringBuffer buf; logctx.CTXLOG("Exception: %s", e->errorMessage(buf).str()); e->Release(); ASSERT(false); // Check exception log } } public: URITests() : logctx(queryDummyContextLogger()) {} void testURIError() { test_uri("You, shall not, pass!", false); test_uri("http://almost there...", false); } void testURIUnknwon() { test_uri("ftp://www.hpccsystems.com/", true); test_uri("gopher://www.hpccsystems.com/", true); test_uri("https://www.hpccsystems.com:443/", true); test_uri("http://user:passwd@www.hpccsystems.com:8080/my/path?is=full#of-stuff", true); } void testURILocal() { test_uri("file:///opt/HPCCSystems/examples/IMDB/ActorsInMovies.ecl", true, URIScheme_file, "", "/opt/HPCCSystems/examples/IMDB/ActorsInMovies.ecl"); } void testURIDali() { // Dali file types test_uri("hpcc://mydali/path/to/file", true, URIScheme_hpcc, "mydali", "path/to/file"); test_uri("hpcc://mydali/path/to/superfile?super", true, URIScheme_hpcc, "mydali", "path/to/superfile?super"); test_uri("hpcc://mydali/path/to/superfile?super#subname", true, URIScheme_hpcc, "mydali", "path/to/superfile?super#subname"); test_uri("hpcc://mydali/path/to/streamfile?stream", true, URIScheme_hpcc, "mydali", "path/to/streamfile?stream"); test_uri("hpcc://mydali/path/to/streamfile?stream#047", true, URIScheme_hpcc, "mydali", "path/to/streamfile?stream#47"); // Variations in Dali location test_uri("hpcc://mydali:7070/path/to/file", true, URIScheme_hpcc, "mydali:7070", "path/to/file"); test_uri("hpcc://user@mydali:7070/path/to/file", true, URIScheme_hpcc, "user@mydali:7070", "path/to/file"); test_uri("hpcc://user@mydali/path/to/file", true, URIScheme_hpcc, "user@mydali", "path/to/file"); test_uri("hpcc://user:passwd@mydali:7070/path/to/file", true, URIScheme_hpcc, "user:passwd@mydali:7070", "path/to/file"); test_uri("hpcc://user:passwd@mydali/path/to/file", true, URIScheme_hpcc, "user:passwd@mydali", "path/to/file"); } }; CPPUNIT_TEST_SUITE_REGISTRATION( URITests ); CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( URITests, "URITests" ); #endif // _USE_CPPUNIT