C++ベースのLightweightなHTTPサーバー
| Revision | 56a8027977afc42ac00b6d522957bd4c84101ed2 (tree) |
|---|---|
| Time | 2013-01-13 21:14:08 |
| Author | Michio Hirai <smg_ykz@user...> |
| Commiter | Michio Hirai |
[Refactor] Further refine the unit test for cm::SocketServer and cm::SocketClient classes
| @@ -1,4 +1,6 @@ | ||
| 1 | 1 | |
| 2 | +#include <sched.h> | |
| 3 | + | |
| 2 | 4 | #include <vector> |
| 3 | 5 | #include <iostream> |
| 4 | 6 |
| @@ -11,6 +13,7 @@ | ||
| 11 | 13 | #include "cm_socket_client.h" |
| 12 | 14 | #include "cm_event.h" |
| 13 | 15 | #include "mt_range.h" |
| 16 | +#include "cm_mutex.h" | |
| 14 | 17 | |
| 15 | 18 | namespace { |
| 16 | 19 |
| @@ -83,10 +86,7 @@ private: | ||
| 83 | 86 | SocketIf* socket_if_; |
| 84 | 87 | static unsigned int mock_creation_count_; |
| 85 | 88 | |
| 86 | - virtual SocketIf* doClone(int fd) const | |
| 87 | - { | |
| 88 | - return 0; | |
| 89 | - } | |
| 89 | + MOCK_CONST_METHOD1(doClone, SocketIf*(int fd)); | |
| 90 | 90 | }; |
| 91 | 91 | |
| 92 | 92 | unsigned int SocketIfMock::mock_creation_count_ = 0; |
| @@ -94,11 +94,12 @@ unsigned int SocketIfMock::mock_creation_count_ = 0; | ||
| 94 | 94 | class CmSocketServerThread |
| 95 | 95 | { |
| 96 | 96 | public: |
| 97 | - CmSocketServerThread() | |
| 97 | + CmSocketServerThread(cm::Mutex* mutex) | |
| 98 | 98 | : server_(cm::SOCKET_TYPE_INET_STREAM, "0.0.0.0", 8888), |
| 99 | 99 | event_(cm::Event::tsdInstance()), |
| 100 | 100 | accepted_sockets_() |
| 101 | 101 | { |
| 102 | + cm::Mutex::Lock lock(*mutex); | |
| 102 | 103 | event_.addHandlerRead(*this, &CmSocketServerThread::accept, server_); |
| 103 | 104 | } |
| 104 | 105 |
| @@ -156,62 +157,36 @@ private: | ||
| 156 | 157 | std::vector<cm::SocketIf*> accepted_sockets_; |
| 157 | 158 | }; |
| 158 | 159 | |
| 159 | -class CmSocketClientThread | |
| 160 | +TEST(CmSocketServerTest, inet_anyaddr) | |
| 160 | 161 | { |
| 161 | -public: | |
| 162 | - CmSocketClientThread() | |
| 163 | - : client_(cm::SOCKET_TYPE_INET_STREAM), event_(cm::Event::tsdInstance()), | |
| 164 | - socket_() | |
| 165 | - { | |
| 166 | - socket_ = client_.connect("127.0.0.1", 8888); | |
| 167 | - } | |
| 162 | + cm::Mutex mutex; | |
| 163 | + cm::Thread<CmSocketServerThread, cm::Mutex> server_thread("server_thread"); | |
| 164 | + server_thread.create(&mutex); | |
| 168 | 165 | |
| 169 | - void run() | |
| 170 | 166 | { |
| 167 | + sched_yield(); | |
| 168 | + cm::Mutex::Lock lock(mutex); | |
| 169 | + cm::SocketClient client(cm::SOCKET_TYPE_INET_STREAM); | |
| 170 | + | |
| 171 | + mt::AutoPtr<cm::SocketIf> sock = client.connect("127.0.0.1", 8888); | |
| 172 | + EXPECT_NE(sock.get(), static_cast<cm::SocketIf*>(0)); | |
| 173 | + | |
| 171 | 174 | char buffer[20]; |
| 172 | 175 | memset(buffer, 0, sizeof(buffer)); |
| 173 | 176 | strcpy(buffer, "hello world!"); |
| 174 | 177 | size_t bytes_written = 0u; |
| 175 | - socket_->write(bytes_written, buffer, sizeof(buffer)); | |
| 178 | + sock->write(bytes_written, buffer, sizeof(buffer)); | |
| 179 | + sock.reset(); | |
| 180 | + | |
| 176 | 181 | memset(buffer, 0, sizeof(buffer)); |
| 177 | 182 | strcpy(buffer, "good bye world!"); |
| 178 | - socket_->write(bytes_written, buffer, sizeof(buffer)); | |
| 179 | - socket_.reset(); | |
| 180 | - } | |
| 181 | 183 | |
| 182 | -private: | |
| 183 | - cm::SocketClient client_; | |
| 184 | - cm::Event& event_; | |
| 185 | - mt::AutoPtr<cm::SocketIf> socket_; | |
| 186 | -}; | |
| 187 | - | |
| 188 | - | |
| 189 | -TEST(CmSocketServerTest, inet_anyaddr) | |
| 190 | -{ | |
| 191 | - cm::Thread<CmSocketServerThread> server_thread("server_thread"); | |
| 192 | - server_thread.create(); | |
| 184 | + sock = client.connect("127.0.0.1", 8888); | |
| 185 | + EXPECT_NE(sock.get(), static_cast<cm::SocketIf*>(0)); | |
| 193 | 186 | |
| 194 | - sleep(2); | |
| 195 | - cm::SocketClient client(cm::SOCKET_TYPE_INET_STREAM); | |
| 196 | - | |
| 197 | - mt::AutoPtr<cm::SocketIf> sock = client.connect("127.0.0.1", 8888); | |
| 198 | - EXPECT_NE(sock.get(), static_cast<cm::SocketIf*>(0)); | |
| 199 | - | |
| 200 | - char buffer[20]; | |
| 201 | - memset(buffer, 0, sizeof(buffer)); | |
| 202 | - strcpy(buffer, "hello world!"); | |
| 203 | - size_t bytes_written = 0u; | |
| 204 | - sock->write(bytes_written, buffer, sizeof(buffer)); | |
| 205 | - sock.reset(); | |
| 206 | - | |
| 207 | - memset(buffer, 0, sizeof(buffer)); | |
| 208 | - strcpy(buffer, "good bye world!"); | |
| 209 | - | |
| 210 | - sock = client.connect("127.0.0.1", 8888); | |
| 211 | - EXPECT_NE(sock.get(), static_cast<cm::SocketIf*>(0)); | |
| 212 | - | |
| 213 | - sock->write(bytes_written, buffer, sizeof(buffer)); | |
| 214 | - sock.reset(); | |
| 187 | + sock->write(bytes_written, buffer, sizeof(buffer)); | |
| 188 | + sock.reset(); | |
| 189 | + } | |
| 215 | 190 | |
| 216 | 191 | server_thread.join(); |
| 217 | 192 | } |