summaryrefslogtreecommitdiff
path: root/ucb/source/ucp/ftp/test_ftpurl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'ucb/source/ucp/ftp/test_ftpurl.cxx')
-rwxr-xr-xucb/source/ucp/ftp/test_ftpurl.cxx284
1 files changed, 284 insertions, 0 deletions
diff --git a/ucb/source/ucp/ftp/test_ftpurl.cxx b/ucb/source/ucp/ftp/test_ftpurl.cxx
new file mode 100755
index 000000000000..8e623c630aa8
--- /dev/null
+++ b/ucb/source/ucp/ftp/test_ftpurl.cxx
@@ -0,0 +1,284 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_ucb.hxx"
+#include <com/sun/star/ucb/OpenMode.hpp>
+#include "ftpurl.hxx"
+#include "ftploaderthread.hxx"
+#include "ftphandleprovider.hxx"
+#include "debughelper.hxx"
+#include <rtl/memory.h>
+#include <vector>
+
+#define TESTEVAL \
+ if(number_of_errors) \
+ fprintf(stderr,"errors in %s: %d\n",name,number_of_errors); \
+ return number_of_errors
+
+
+namespace ccsu = com::sun::star::ucb;
+
+
+struct ServerInfo {
+ rtl::OUString host;
+ rtl::OUString port;
+ rtl::OUString username;
+ rtl::OUString password;
+ rtl::OUString account;
+};
+
+
+class FTPHandleProviderI
+ : public ftp::FTPHandleProvider {
+
+public:
+
+ FTPHandleProviderI()
+ : p(new ftp::FTPLoaderThread) {
+ }
+
+ ~FTPHandleProviderI() {
+ delete p;
+ }
+
+ virtual CURL* handle() {
+ return p->handle();
+ }
+
+ bool forHost(const rtl::OUString& host,
+ const rtl::OUString& port,
+ const rtl::OUString& username,
+ rtl::OUString& password,
+ rtl::OUString& account)
+ {
+ for(unsigned int i = 0; i < m_ServerInfo.size(); ++i)
+ if(host == m_ServerInfo[i].host &&
+ port == m_ServerInfo[i].port &&
+ username == m_ServerInfo[i].username ) {
+ password = m_ServerInfo[i].password;
+ account = m_ServerInfo[i].account;
+ return true;
+ }
+
+ return false;
+ }
+
+ virtual bool setHost(const rtl::OUString& host,
+ const rtl::OUString& port,
+ const rtl::OUString& username,
+ const rtl::OUString& password,
+ const rtl::OUString& account)
+ {
+ ServerInfo inf;
+ inf.host = host;
+ inf.port = port;
+ inf.username = username;
+ inf.password = password;
+ inf.account = account;
+
+ bool present(false);
+ for(unsigned int i = 0; i < m_ServerInfo.size(); ++i)
+ if(host == m_ServerInfo[i].host &&
+ port == m_ServerInfo[i].port) {
+ m_ServerInfo[i] = inf;
+ present = true;
+ }
+
+ if(!present)
+ m_ServerInfo.push_back(inf);
+
+ return !present;
+
+ }
+
+
+private:
+
+ std::vector<ServerInfo> m_ServerInfo;
+ ftp::FTPLoaderThread *p;
+};
+
+
+
+// Here are some test for the parsing of an url.
+
+#define TESTURL \
+{ \
+ftp::FTPURL url(rtl::OUString::createFromAscii(ascii),&prov); \
+if(!url.username().equalsAscii(n)) {\
+++number_of_errors; \
+err_msg("wrong username: ",url.username()); \
+}}
+
+int test_ftpurl(void) {
+ const char* name = "test_ftpurl";
+ int number_of_errors = 0;
+
+ FTPHandleProviderI prov;
+ char* ascii,*n,*p;
+
+ ascii = "ftp://abi:psswd@host/eins/../drei", n = "abi", p = "psswd";
+ TESTURL;
+
+ ascii = "ftp://:psswd@host:22/eins/../drei", n = "anonymous", p = "psswd";
+ TESTURL;
+
+ ascii = "ftp://host/bla/../../test/", n = "anonymous", p = "";
+ TESTURL;
+
+ TESTEVAL;
+}
+
+
+int test_ftplist(void) {
+ int number_of_errors = 0;
+ const char* name = "test_ftplist";
+
+ FTPHandleProviderI provider;
+
+ ftp::FTPURL url(
+ rtl::OUString::createFromAscii(
+ "ftp://abi:psswd@abi-1/dir"),
+ &provider);
+
+ std::vector<ftp::FTPDirentry> vec =
+ url.list(com::sun::star::ucb::OpenMode::ALL);
+
+ if(vec.size() != 3)
+ ++number_of_errors;
+
+ if(!(vec[0].m_aName.equalsAscii("dir1") &&
+ vec[1].m_aName.equalsAscii("dir2") &&
+ vec[2].m_aName.equalsAscii("file1")))
+ ++number_of_errors;
+
+ TESTEVAL;
+}
+
+
+#define TESTPARENT \
+ { \
+ ftp::FTPURL url(rtl::OUString::createFromAscii(ascii),&prov); \
+ urlStr = url.parent(); \
+ if(!urlStr.equalsAscii(expect)) \
+ ++number_of_errors; \
+ }
+
+
+int test_ftpparent(void) {
+ int number_of_errors = 0;
+ const char* name = "test_ftpparent";
+ FTPHandleProviderI prov;
+
+ rtl::OUString urlStr;
+ char *ascii,*expect;
+
+ ascii = "ftp://abi:psswd@abi-1/file";
+ expect = "ftp://abi:psswd@abi-1/";
+ TESTPARENT;
+
+ ascii = "ftp://abi:psswd@abi-1/dir/../file";
+ expect = "ftp://abi:psswd@abi-1/";
+ TESTPARENT;
+
+ ascii = "ftp://abi:psswd@abi-1/..";
+ expect = "ftp://abi:psswd@abi-1/../..";
+ TESTPARENT;
+
+ ascii = "ftp://abi:psswd@abi-1/../../dir";
+ expect = "ftp://abi:psswd@abi-1/../..";
+ TESTPARENT;
+
+ ascii = "ftp://abi:psswd@abi-1/";
+ expect = "ftp://abi:psswd@abi-1/..";
+ TESTPARENT;
+
+ TESTEVAL;
+}
+
+
+int test_ftpproperties(void) {
+ int number_of_errors = 0;
+ const char* name = "test_ftpproperties";
+ FTPHandleProviderI provider;
+
+ ftp::FTPURL url(
+ rtl::OUString::createFromAscii(
+ "ftp://abi:psswd@abi-1/file"),
+ &provider);
+
+ ftp::FTPDirentry ade(url.direntry());
+
+ if(!(ade.m_aName.equalsAscii("file") &&
+ ade.isFile()))
+ ++number_of_errors;
+
+ TESTEVAL;
+}
+
+
+int test_ftpopen(void)
+{
+ int number_of_errors = 0;
+ const char* name = "test_ftpopen";
+
+ FTPHandleProviderI provider;
+ ftp::FTPURL url(
+ rtl::OUString::createFromAscii(
+ "ftp://abi:psswd@abi-1/file"),
+ &provider);
+
+ FILE* file = url.open();
+ if(file) {
+ int nbuf,ndest;
+ const int bffsz = 256;
+ char buff[bffsz];
+ char *dest = (char*) malloc(sizeof(char));
+ dest[0] = 0;
+ do {
+ rtl_zeroMemory((void*)buff,bffsz);
+ fread(buff,bffsz-1,1,file);
+ nbuf = strlen(buff);
+ ndest = strlen(dest);
+ dest = (char*)realloc(dest,ndest + nbuf + 1);
+ strncat(dest,buff,nbuf);
+ } while(nbuf == bffsz-1);
+ fclose(file);
+
+ const char* expected = "You are now looking at the filecontent.\n";
+ if(strcmp(expected,dest))
+ ++number_of_errors;
+ free(dest);
+ } else
+ ++number_of_errors;
+
+ TESTEVAL;
+}
+
+