File: Socket_test.C

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 239,848 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 93
file content (123 lines) | stat: -rw-r--r-- 2,572 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//


#include <BALL/CONCEPT/classTest.h>

///////////////////////////
#include <BALL/SYSTEM/networking.h>

///////////////////////////

using namespace BALL;

class SimpleTCPServerTestThread
	: public TCPServerThread
{
	public:
		SimpleTCPServerTestThread(Size port, bool async, bool restart)
			: TCPServerThread(port, async, restart),
				sent_async("HelloAsync!"),
				sent_sync("HelloSync!")
		{}

		void handleConnection() 
		{
			getline(connected_stream_, received);

			connected_stream_ << sent_sync << std::endl;
		}

		void handleAsyncConnection() 
		{
			getline(connected_stream_, received);

			connected_stream_ << sent_async << std::endl;
		}

		String received;
		String sent_async;
		String sent_sync;
};

START_TEST(Socket)
using namespace BALL;

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
	  
CHECK([EXTRA] simple asynchronous socket transmission to/from threaded server)
	SimpleTCPServerTestThread server(0, true, false);
	server.start();

	Size port = server.getPort();

	// starting up can take a few moments, so we wait up
	Size retries = 0;
	while ((port == 0) && (retries < 20))
	{
		SLEEP_FOR_MSECS((retries + 1) * 200);
		port = server.getPort();
		++retries;
	}

	TEST_NOT_EQUAL(port, 0);
	if (port > 0)
	{
		String sent("Hello, world!");

		TCPIOStream stream("localhost", port);
		stream << sent << std::endl;

		String received;
		stream >> received;

		SLEEP_FOR_MSECS(10);
		TEST_EQUAL(sent, server.received);
		TEST_EQUAL(received, server.sent_async);	
	}
	server.deactivate();
	server.terminate();
	server.wait();
RESULT
	
CHECK([EXTRA] simple synchronous socket transmission to/from threaded server)
	SimpleTCPServerTestThread server(0, false, false);
	server.start();

	Size port = server.getPort();

	// starting up can take a few moments, so we wait up
	Size retries = 0;
	while ((port == 0) && (retries < 20))
	{
		SLEEP_FOR_MSECS((retries + 1) * 200);
		port = server.getPort();
		++retries;
	}

	TEST_NOT_EQUAL(port, 0);
	if (port > 0)
	{
		String sent("Hello, world!");

		TCPIOStream stream("localhost", port);
		stream << sent << std::endl;

		String received;
		stream >> received;
		SLEEP_FOR_MSECS(10);
		TEST_EQUAL(sent, server.received);
		TEST_EQUAL(received, server.sent_sync);	
	}

	server.deactivate();
	server.terminate();
	server.wait();
RESULT
	

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
END_TEST