Develop and Download Open Source Software

Browse Subversion Repository

Contents of /connection/TestSocketSet.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: 2247 byte(s)
using namespace beego

1 /*!
2 \file
3 \brief SocketSet のテスト
4
5 \author Satofumi KAMIMURA
6
7 $Id$
8 */
9
10 #include "TestSocketSet.h"
11 #include "SocketSet.h"
12 #include "TcpipCtrl.h"
13 #include "TcpipAccept.h"
14 #include "ThreadCreator.h"
15
16 CPPUNIT_TEST_SUITE_REGISTRATION(SocketSetTest);
17 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(SocketSetTest, "SocketSetTest");
18
19 using namespace beego;
20
21
22 enum { Port = 9763 };
23
24 static int connectThread(void* args) {
25 TcpipCtrl* con = static_cast<TcpipCtrl*>(args);
26
27 con->connect("localhost", Port);
28 return con->isConnected();
29 }
30
31
32 /*!
33 \brief 受信確認のテスト
34 */
35 void SocketSetTest::readCheckTest(void) {
36 TcpipAccept server;
37 bool ret = server.activate(Port);
38 CPPUNIT_ASSERT_EQUAL(true, ret);
39
40 SocketSet socket_set(1);
41
42 // 接続処理
43 TcpipCtrl con;
44 ThreadCreator thread(connectThread, &con);
45 thread.run();
46 thread.stop();
47 SDL_Delay(10);
48
49 // 接続待ちポートの起動
50 TcpipCtrl* server_con = server.accept(10, &socket_set);
51 CPPUNIT_ASSERT(server_con);
52 CPPUNIT_ASSERT_EQUAL(true, con.isConnected());
53 CPPUNIT_ASSERT_EQUAL(true, server_con->isConnected());
54
55 // 1文字送信、受信
56 int n = con.send("A", 1);
57 CPPUNIT_ASSERT_EQUAL(1, n);
58
59 char ch;
60 for (int i = 0; i < 10; ++i) {
61 n = socket_set.check(10);
62 if (n > 0) {
63 break;
64 }
65 }
66 CPPUNIT_ASSERT_EQUAL(1, n);
67
68 for (int i = 0; i < 10; ++i) {
69 n = server_con->recv(&ch, 1, 10);
70 if (n > 0) {
71 break;
72 }
73 }
74 if (n <= 0) {
75 //fprintf(stderr, " %d: %s, %s\n", n, server_con->what(), con.what());
76 }
77 CPPUNIT_ASSERT_EQUAL(1, n);
78 CPPUNIT_ASSERT_EQUAL('A', ch);
79
80 // n 文字送信、受信
81 n = con.send("ABC", 3);
82 CPPUNIT_ASSERT_EQUAL(3, n);
83
84 n = socket_set.check(50);
85 CPPUNIT_ASSERT_EQUAL(1, n);
86
87 char buffer[] = { '\0', '\0', '\0', '\0' };
88 n = server_con->recv(buffer, 3, 50);
89 CPPUNIT_ASSERT_EQUAL(3, n);
90 CPPUNIT_ASSERT_EQUAL(std::string("ABC"), std::string(buffer));
91
92 // 受信タイムアウトのテスト
93 n = socket_set.check(50);
94 CPPUNIT_ASSERT_EQUAL(0, n);
95
96 // 切断の検出
97 con.disconnect();
98 CPPUNIT_ASSERT_EQUAL(false, con.isConnected());
99
100 n = socket_set.check(0);
101 CPPUNIT_ASSERT_EQUAL(1, n);
102
103 n = server_con->recv(&ch, 1, 0);
104 CPPUNIT_ASSERT(n < 0);
105 CPPUNIT_ASSERT_EQUAL(false, server_con->isConnected());
106 }

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