main-acceptance.cpp
Go to the documentation of this file.00001 #include "Qt.h"
00002 #include "Utils/CalitkoMocks/TesterApplication.h"
00003 #include "3rdParty/cppunit/extensions/TestFactoryRegistry.h"
00004 #include "3rdParty/cppunit/ui/text/TestRunner.h"
00005
00030 #include "Utils/CalitkoMocks/CoCppUnit.h"
00031 #include "Utils/CalitkoMocks/Mocks.h"
00032 #include "Protocols/Http/ClientHttpSession.h"
00033 #include "Protocols/Http/ClientHttpSessionFactory.h"
00034 #include "Protocols/Http/ClientHttpSessionStatus.h"
00035 #include "Protocols/Http/HeaderBase.h"
00036 #include "Protocols/Http/ResponseHeader.h"
00037 #include "Protocols/Generics/IpResolvingTransportFactory.h"
00038 #include "Protocols/Generics/TcpTransportFactory.h"
00039 #include "Protocols/Generics/QtNameResolver.h"
00040
00041 #include <iostream>
00042
00043 class MemoryFile : public Protocols::Http::File
00044 {
00045 public:
00046 bool write (const QByteArray &bytes, bool = true)
00047 {
00048 bytes_ += bytes;
00049 return true;
00050 }
00051
00052 QByteArray bytes_;
00053 };
00054
00055 using Protocols::Generics::Data;
00056 using Protocols::Generics::IpResolvingTransportFactory;
00057 using Protocols::Generics::TcpTransportFactory;
00058 using Protocols::Generics::TransportFactory;
00059 using Protocols::Generics::QtNameResolver;
00060 using Protocols::Http::ClientHttpSession;
00061 using Protocols::Http::ClientHttpSessionFactory;
00062 using Protocols::Http::HeaderBase;
00063 using Protocols::Http::ResponseHeader;
00064 using namespace Utils::CalitkoMocks;
00065 using Utils::Uri;
00066
00067 class HttpDownloader : public Protocols::Http::ClientHttpSessionFactoryStatus,
00068 public Protocols::Http::ClientHttpSessionStatus
00069 {
00070 ClientHttpSessionFactory clientHttpSessionFactory_;
00071 ClientHttpSession *session_;
00072 MemoryFile memoryFile;
00073
00074 public:
00075 HttpDownloader (TransportFactory *transportFactory)
00076 : clientHttpSessionFactory_ (transportFactory),
00077 session_ (0),
00078 memoryFile()
00079 {
00080 }
00081
00082 ~HttpDownloader()
00083 {
00084 }
00085
00086 void download (const QByteArray &url)
00087 {
00088 qDebug() << "starting" << url;
00089 clientHttpSessionFactory_.createSession (Uri::fromUnencoded (url), this, this);
00090 }
00091
00092
00093 void clientHttpSessionFactorySucceeded (const Uri &uri,
00094 ClientHttpSession *session)
00095 {
00096 session_ = session;
00097 session_->open();
00098 session_->get (uri, &memoryFile);
00099 }
00100
00101 void clientHttpSessionFactoryFailed (const Uri &)
00102 {
00103 qDebug() << "FAILED to open session!";
00104 done();
00105 }
00106
00107
00108 void clientHttpSessionResponseStarted (const ResponseHeader &header)
00109 {
00110 qDebug() << "Response Header:";
00111 qDebug() << header.toRawBytes();
00112 }
00113
00114 void clientHttpSessionResponseFinished (const HeaderBase &header)
00115 {
00116 qDebug() << "FINISHED";
00117 qDebug() << header.toRawBytes();
00118 qDebug() << "Response DATA:";
00119 std::cout.write (memoryFile.bytes_.constData(), memoryFile.bytes_.size());
00120 session_->close();
00121 }
00122
00123 void clientHttpSessionInvaidResponse (const Data &)
00124 {
00125 qDebug() << "INVALID RESPONSE";
00126 done();
00127 }
00128
00129 void clientHttpSessionClosing()
00130 {
00131 qDebug() << "Closing session...";
00132 }
00133
00134 void clientHttpSessionClosed()
00135 {
00136 qDebug() << "Session closed.";
00137 done();
00138 }
00139
00140 private:
00141 void done()
00142 {
00143 if (session_ != 0)
00144 clientHttpSessionFactory_.destroySession (session_);
00145 QCoreApplication::exit(0);
00146 }
00147 };
00148
00149 class AcceptanceEnvironment
00150 {
00151 public:
00152 QtNameResolver qtNameResolver;
00153 TcpTransportFactory tcpTransportFactory;
00154 };
00155
00156 class CalitkoApplication
00157 {
00158 IpResolvingTransportFactory ipResolvingTransportFactory_;
00159
00160 public:
00161
00162 HttpDownloader downloader;
00163
00164 CalitkoApplication (AcceptanceEnvironment *);
00165 ~CalitkoApplication();
00166 };
00167
00168 CalitkoApplication::CalitkoApplication (AcceptanceEnvironment *environment)
00169 : ipResolvingTransportFactory_ (&environment->tcpTransportFactory,
00170 &environment->qtNameResolver),
00171 downloader (&ipResolvingTransportFactory_)
00172 {
00173 }
00174
00175 CalitkoApplication::~CalitkoApplication()
00176 {
00177 }
00178
00179 class HttpDownloadAcceptance : public CppUnit::TestFixture
00180 {
00181 CPPUNIT_TEST_SUITE (HttpDownloadAcceptance);
00182 CPPUNIT_TEST (testDownloadHttpResourceAtOnce);
00183 CPPUNIT_TEST_SUITE_END();
00184
00185 auto_ptr <AcceptanceEnvironment> environment;
00186 auto_ptr <CalitkoApplication> calitko;
00187
00188 public:
00189 void setUp()
00190 {
00191 environment.reset (new AcceptanceEnvironment);
00192 calitko.reset (new CalitkoApplication (environment.get()));
00193 }
00194
00195 void tearDown()
00196 {
00197 calitko.reset();
00198 environment.reset();
00199 }
00200
00231 void testDownloadHttpResourceAtOnce()
00232 {
00233
00234
00235
00236
00237
00238
00239 HttpDownloader *downloader = &calitko->downloader;
00240 downloader->download ("http://bzr.calitko.org/developers/peter/");
00241
00242 CPPUNIT_ASSERT (TesterApplication::exec(10000) == 0);
00243 }
00244 };
00245
00246 CPPUNIT_TEST_SUITE_REGISTRATION (HttpDownloadAcceptance);
00247
00248 using namespace CppUnit;
00249
00250 int main(int argc, char** argv)
00251 {
00252 TesterApplication app (argc, argv);
00253 TextUi::TestRunner runner;
00254 TestFactoryRegistry ®istry = TestFactoryRegistry::getRegistry();
00255 runner.addTest (registry.makeTest());
00256 bool wasSuccessful = runner.run ("", false);
00257 return !wasSuccessful;
00258 }