1//
2// SocketStreamTest.cpp
3//
4// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
5// and Contributors.
6//
7// SPDX-License-Identifier: BSL-1.0
8//
9
10
11#include "SocketStreamTest.h"
12#include "Poco/CppUnit/TestCaller.h"
13#include "Poco/CppUnit/TestSuite.h"
14#include "EchoServer.h"
15#include "Poco/Net/SocketStream.h"
16#include "Poco/Net/StreamSocket.h"
17#include "Poco/Net/ServerSocket.h"
18#include "Poco/Net/SocketAddress.h"
19#include "Poco/Net/NetException.h"
20#include "Poco/Timespan.h"
21#include "Poco/Stopwatch.h"
22
23
24using Poco::Net::Socket;
25using Poco::Net::SocketStream;
26using Poco::Net::StreamSocket;
27using Poco::Net::ServerSocket;
28using Poco::Net::SocketAddress;
29using Poco::Net::ConnectionRefusedException;
30using Poco::Timespan;
31using Poco::Stopwatch;
32using Poco::TimeoutException;
33using Poco::InvalidArgumentException;
34
35
36SocketStreamTest::SocketStreamTest(const std::string& name): CppUnit::TestCase(name)
37{
38}
39
40
41SocketStreamTest::~SocketStreamTest()
42{
43}
44
45
46void SocketStreamTest::testStreamEcho()
47{
48 EchoServer echoServer;
49 StreamSocket ss;
50 ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
51 SocketStream str(ss);
52 str << "hello";
53 assertTrue (str.good());
54 str.flush();
55 assertTrue (str.good());
56 ss.shutdownSend();
57
58 char buffer[5];
59 str.read(buffer, sizeof(buffer));
60 assertTrue (str.good());
61 assertTrue (str.gcount() == 5);
62 assertTrue (std::string(buffer, 5) == "hello");
63
64 ss.close();
65}
66
67
68void SocketStreamTest::testLargeStreamEcho()
69{
70 const int msgSize = 64000;
71 EchoServer echoServer;
72 StreamSocket ss;
73 ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
74 SocketStream str(ss);
75 ss.setSendBufferSize(msgSize);
76 ss.setReceiveBufferSize(msgSize);
77 std::string payload(msgSize, 'x');
78 str << payload;
79 assertTrue (str.good());
80 str.flush();
81 assertTrue (str.good());
82 ss.shutdownSend();
83
84 assertTrue (str.gcount() == 0);
85 char buffer[msgSize];
86 str.read(buffer, sizeof(buffer));
87 assertTrue (str.good());
88 assertTrue (str.gcount() == msgSize);
89
90 ss.close();
91}
92
93
94void SocketStreamTest::testEOF()
95{
96 StreamSocket ss;
97 SocketStream str(ss);
98 {
99 EchoServer echoServer;
100
101 ss.connect(SocketAddress("127.0.0.1", echoServer.port()));
102 str << "hello";
103 assertTrue (str.good());
104 str.flush();
105 assertTrue (str.good());
106 ss.shutdownSend();
107
108 char buffer[5];
109 str.read(buffer, sizeof(buffer));
110 assertTrue (str.good());
111 assertTrue (str.gcount() == 5);
112 assertTrue (std::string(buffer, 5) == "hello");
113 }
114
115 int c = str.get();
116 assertTrue (c == -1);
117 assertTrue (str.eof());
118
119 ss.close();
120}
121
122
123void SocketStreamTest::setUp()
124{
125}
126
127
128void SocketStreamTest::tearDown()
129{
130}
131
132
133CppUnit::Test* SocketStreamTest::suite()
134{
135 CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SocketStreamTest");
136
137 CppUnit_addTest(pSuite, SocketStreamTest, testStreamEcho);
138 CppUnit_addTest(pSuite, SocketStreamTest, testLargeStreamEcho);
139 CppUnit_addTest(pSuite, SocketStreamTest, testEOF);
140
141 return pSuite;
142}
143