]> git.saurik.com Git - wxWidgets.git/blame - tests/uris/ftp.cpp
wxRTC: save and load the 'shown' status in case there's a situation where layout...
[wxWidgets.git] / tests / uris / ftp.cpp
CommitLineData
ec0e0939
FM
1///////////////////////////////////////////////////////////////////////////////
2// Name: tests/uris/ftp.cpp
3// Purpose: wxFTP unit test
4// Author: Francesco Montorsi (extracted from console sample)
5// Created: 2010-05-23
ec0e0939
FM
6// Copyright: (c) 2010 wxWidgets team
7///////////////////////////////////////////////////////////////////////////////
8
9// ----------------------------------------------------------------------------
10// headers
11// ----------------------------------------------------------------------------
12
13#include "testprec.h"
14
15#ifdef __BORLANDC__
16 #pragma hdrstop
17#endif
18
19#ifndef WX_PRECOMP
20 #include "wx/wx.h"
21#endif // WX_PRECOMP
22
23#include <wx/protocol/ftp.h>
24
25#define FTP_ANONYMOUS
26
27#ifdef FTP_ANONYMOUS
28 static const char *hostname = "ftp.wxwidgets.org";
29 static const char *directory = "/pub/2.8.11";
30 static const char *invalid_filename = "a_file_which_does_not_exist";
31 static const char *valid_filename = "MD5SUM";
32 // NOTE: choose a small file or otherwise the FTPTestCase::Download()
33 // function will take (a lot of) time to complete!
34#else
35 static const char *hostname = "localhost";
36 static const char *user = "guest";
37 static const char *password = "";
38 static const char *directory = "/etc";
39 static const char *invalid_filename = "issue";
40 static const char *valid_filename = "hosts";
41#endif
42
43// ----------------------------------------------------------------------------
44// test class
45// ----------------------------------------------------------------------------
46
47class FTPTestCase : public CppUnit::TestCase
48{
49public:
50 FTPTestCase() {}
51
52 virtual void setUp();
53 virtual void tearDown();
54
55private:
56 CPPUNIT_TEST_SUITE( FTPTestCase );
57 CPPUNIT_TEST( List );
58 CPPUNIT_TEST( Download );
59 CPPUNIT_TEST( FileSize );
60 CPPUNIT_TEST( Misc );
61#ifndef FTP_ANONYMOUS
62 CPPUNIT_TEST( Upload );
63#endif
64 CPPUNIT_TEST_SUITE_END();
65
66 void List();
67 void Download();
68 void FileSize();
69 void Misc();
70 void Upload();
71
72 wxFTP *m_ftp;
73
74 DECLARE_NO_COPY_CLASS(FTPTestCase)
75};
76
20ba398d
FM
77// NOTE: we do not run FTPTestCase suite by default because buildslaves typically
78// do not have FTP connectivity enabled by default...
79//CPPUNIT_TEST_SUITE_REGISTRATION( FTPTestCase );
ec0e0939 80
e3778b4d 81// also include in its own registry so that these tests can be run alone
ec0e0939
FM
82CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FTPTestCase, "FTPTestCase" );
83
84
85void FTPTestCase::setUp()
86{
87 wxSocketBase::Initialize();
88
89 // wxFTP cannot be a static variable as its ctor needs to access
90 // wxWidgets internals after it has been initialized
91 m_ftp = new wxFTP;
92
93#ifndef FTP_ANONYMOUS
94 m_ftp->SetUser(user);
95 m_ftp->SetPassword(password);
96#endif // FTP_ANONYMOUS/!FTP_ANONYMOUS
97}
98
99void FTPTestCase::tearDown()
100{
101 delete m_ftp;
102
103 wxSocketBase::Shutdown();
104}
105
106void FTPTestCase::List()
107{
108 CPPUNIT_ASSERT( m_ftp->Connect(hostname) );
109
110 // test CWD
111 CPPUNIT_ASSERT( m_ftp->ChDir(directory) );
112
113 // test NLIST and LIST
114 wxArrayString files;
115 CPPUNIT_ASSERT( m_ftp->GetFilesList(files) );
116 CPPUNIT_ASSERT( m_ftp->GetDirList(files) );
117
118 CPPUNIT_ASSERT( m_ftp->ChDir(wxT("..")) );
119}
120
121void FTPTestCase::Download()
122{
123 CPPUNIT_ASSERT( m_ftp->Connect(hostname) );
124 CPPUNIT_ASSERT( m_ftp->ChDir(directory) );
125
126 // test RETR
127 wxInputStream *in1 = m_ftp->GetInputStream(invalid_filename);
128 CPPUNIT_ASSERT( in1 == NULL );
129 delete in1;
130
131 wxInputStream *in2 = m_ftp->GetInputStream(valid_filename);
132 CPPUNIT_ASSERT( in2 != NULL );
133
134 size_t size = in2->GetSize();
135 wxChar *data = new wxChar[size];
136 CPPUNIT_ASSERT( in2->Read(data, size).GetLastError() == wxSTREAM_NO_ERROR );
137
138 delete [] data;
139 delete in2;
140}
141
142void FTPTestCase::FileSize()
143{
144 CPPUNIT_ASSERT( m_ftp->Connect(hostname) );
145
146 CPPUNIT_ASSERT( m_ftp->ChDir(directory) );
147
148 CPPUNIT_ASSERT( m_ftp->FileExists(valid_filename) );
149
150 int size = m_ftp->GetFileSize(valid_filename);
151 CPPUNIT_ASSERT( size != -1 );
152}
153
154void FTPTestCase::Misc()
155{
156 CPPUNIT_ASSERT( m_ftp->Connect(hostname) );
157
158 CPPUNIT_ASSERT( m_ftp->SendCommand(wxT("STAT")) == '2' );
159 CPPUNIT_ASSERT( m_ftp->SendCommand(wxT("HELP SITE")) == '2' );
160}
161
162#ifndef FTP_ANONYMOUS
163void FTPTestCase::Upload()
164{
165 CPPUNIT_ASSERT( m_ftp->Connect(hostname) );
166
167 // upload a file
168 static const wxChar *file1 = wxT("test1");
169 wxOutputStream *out = m_ftp->GetOutputStream(file1);
170 CPPUNIT_ASSERT( out != NULL );
171 CPPUNIT_ASSERT( out->Write("First hello", 11).GetLastError() == wxSTREAM_NO_ERROR );
172 delete out;
173
174 // send a command to check the remote file
175 CPPUNIT_ASSERT( m_ftp->SendCommand(wxString(wxT("STAT ")) + file1) == '2' );
176 CPPUNIT_ASSERT( m_ftp->GetLastResult() == "11" );
177}
178#endif
179
180