Develop and Download Open Source Software

Browse Subversion Repository

Contents of /connection/TestTcpipCtrl.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 191 - (show annotations) (download) (as text)
Fri Jan 4 02:49:36 2008 UTC (16 years, 3 months ago) by satofumi
File MIME type: text/x-c++src
File size: 3934 byte(s)
using namespace beego

1 /*!
2 \file
3 \brief TcpipCtrl のテスト
4
5 \author Satofumi KAMIMURA
6
7 $Id$
8 */
9
10 #include "TestTcpipCtrl.h"
11 #include "TcpipCtrl.h"
12 #include "TcpipAccept.h"
13 #include "ThreadCreator.h"
14
15 CPPUNIT_TEST_SUITE_REGISTRATION(TcpipCtrlTest);
16 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TcpipCtrlTest, "TcpipCtrlTest");
17
18 using namespace beego;
19
20
21 /*!
22 \brief オブジェクトの生成テスト
23 */
24 void TcpipCtrlTest::createTest(void) {
25 TcpipCtrl client;
26 CPPUNIT_ASSERT_EQUAL(false, client.isConnected());
27 }
28
29
30 enum { Port = 9763 };
31
32 static int connectThread(void* args) {
33 TcpipCtrl* con = static_cast<TcpipCtrl*>(args);
34
35 con->connect("localhost", Port);
36 return con->isConnected();
37 }
38
39 /*!
40 \brief 接続テスト
41 */
42 void TcpipCtrlTest::connectionTest(void) {
43
44 TcpipAccept server;
45 bool ret = server.activate(Port);
46 CPPUNIT_ASSERT_EQUAL(true, ret);
47
48 // 接続処理
49 TcpipCtrl con;
50 ThreadCreator thread(connectThread, &con);
51 thread.run();
52 thread.stop();
53 SDL_Delay(10);
54
55 // 接続待ちポートの起動
56 TcpipCtrl* server_con = server.accept(50, NULL);
57
58 CPPUNIT_ASSERT(server_con != NULL);
59 CPPUNIT_ASSERT_EQUAL(true, con.isConnected());
60 CPPUNIT_ASSERT_EQUAL(true, server_con->isConnected());
61
62 con.disconnect();
63 CPPUNIT_ASSERT_EQUAL(false, con.isConnected());
64
65 // 受信後に切断が認識されるため、以下のテストは保留
66 //CPPUNIT_ASSERT_EQUAL(false, server_con->isConnected());
67 }
68
69
70 /*!
71 \brief 送受信テスト
72 */
73 void TcpipCtrlTest::readWriteTest(void) {
74
75 TcpipAccept server;
76 bool ret = server.activate(Port);
77 CPPUNIT_ASSERT_EQUAL(true, ret);
78
79 // 接続処理
80 TcpipCtrl con;
81 ThreadCreator thread(connectThread, &con);
82 thread.run();
83 thread.stop();
84 SDL_Delay(10);
85
86 // 接続待ちポートの起動
87 TcpipCtrl* server_con = server.accept(50, NULL);
88 CPPUNIT_ASSERT_EQUAL(true, con.isConnected());
89 CPPUNIT_ASSERT_EQUAL(true, server_con->isConnected());
90
91 // 1文字送信、受信
92 int n = con.send("A", 1);
93 CPPUNIT_ASSERT_EQUAL(1, n);
94
95 char ch;
96 for (int i = 0; i < 10; ++i) {
97 n = server_con->recv(&ch, 1, 10);
98 if (n > 0) {
99 break;
100 }
101 }
102 CPPUNIT_ASSERT_EQUAL(1, n);
103 CPPUNIT_ASSERT_EQUAL('A', ch);
104
105 // n 文字送信、受信
106 n = con.send("ABC", 3);
107 CPPUNIT_ASSERT_EQUAL(3, n);
108
109 char buffer[] = { '\0', '\0', '\0', '\0' };
110 n = server_con->recv(buffer, 3, 50);
111 CPPUNIT_ASSERT_EQUAL(3, n);
112 CPPUNIT_ASSERT_EQUAL(std::string("ABC"), std::string(buffer));
113
114 // クライアントから送信した場合の受信タイムアウトのテスト
115 n = server_con->recv(&ch, 1, 0);
116 CPPUNIT_ASSERT_EQUAL(0, n);
117
118 // サーバからの送信した場合の受信タイムアウトテスト
119 n = con.recv(&ch, 1, 0);
120 CPPUNIT_ASSERT_EQUAL(0, n);
121
122 // 切断の検出
123 con.disconnect();
124 CPPUNIT_ASSERT_EQUAL(false, con.isConnected());
125
126 n = server_con->recv(&ch, 1, 0);
127 CPPUNIT_ASSERT(n < 0);
128 CPPUNIT_ASSERT_EQUAL(false, server_con->isConnected());
129 }
130
131
132 void TcpipCtrlTest::disconnectTest(void) {
133 TcpipAccept server;
134 bool ret = server.activate(Port);
135 CPPUNIT_ASSERT_EQUAL(true, ret);
136
137 // 接続処理
138 TcpipCtrl con;
139 ThreadCreator thread(connectThread, &con);
140 thread.run();
141 thread.stop();
142 SDL_Delay(10);
143
144 // 接続待ちポートの起動
145 TcpipCtrl* server_con = server.accept(50, NULL);
146 CPPUNIT_ASSERT_EQUAL(true, con.isConnected());
147 CPPUNIT_ASSERT_EQUAL(true, server_con->isConnected());
148
149 // n 文字送信
150 int n = con.send("ABC", 3);
151 CPPUNIT_ASSERT_EQUAL(3, n);
152
153 // 切断確認
154 con.disconnect();
155 CPPUNIT_ASSERT_EQUAL(false, con.isConnected());
156 CPPUNIT_ASSERT_EQUAL(true, server_con->isConnected());
157
158 for (int i = 0; i < 10; ++i) {
159 n = server_con->size(10);
160 if (n > 0) {
161 break;
162 }
163 }
164
165 // 受信データがあれば、切断状態にならないのを確認
166 CPPUNIT_ASSERT_EQUAL(3, server_con->size(10));
167
168 char buffer[] = { '\0', '\0', '\0', '\0' };
169 n = server_con->recv(buffer, 3, 10);
170 CPPUNIT_ASSERT_EQUAL(3, n);
171 CPPUNIT_ASSERT_EQUAL(std::string("ABC"), std::string(buffer));
172 CPPUNIT_ASSERT_EQUAL(false, server_con->isConnected());
173 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26