|
19 | 19 | #include "features/netsocket/InternetSocket.h"
|
20 | 20 | #include "NetworkStack_stub.h"
|
21 | 21 |
|
| 22 | +extern std::list<uint32_t> eventFlagsStubNextRetval; |
| 23 | + |
| 24 | +// InternetSocket is an abstract class, so we have to test it via its child. |
22 | 25 | class stubInternetSocket : public InternetSocket {
|
23 | 26 | protected:
|
24 | 27 | nsapi_error_t return_value = 0;
|
25 | 28 | public:
|
26 |
| - virtual void event() |
27 |
| - { |
28 |
| - if (_callback) { |
29 |
| - _callback.call(); |
30 |
| - } |
31 |
| - } |
32 |
| - |
33 | 29 | virtual nsapi_error_t connect(const SocketAddress &address)
|
34 | 30 | {
|
35 | 31 | return return_value;
|
@@ -60,6 +56,15 @@ class stubInternetSocket : public InternetSocket {
|
60 | 56 | {
|
61 | 57 | return return_value;
|
62 | 58 | }
|
| 59 | + |
| 60 | + // Testing functions |
| 61 | + void add_reader (void) { _readers++;} |
| 62 | + void rem_reader (void) { _readers--;} |
| 63 | + void add_writer (void) { _writers++;} |
| 64 | + void rem_writer (void) { _writers--;} |
| 65 | + void add_pending (void) { _pending++;} |
| 66 | + void rem_pending (void) { _pending--;} |
| 67 | + |
63 | 68 | protected:
|
64 | 69 | virtual nsapi_protocol_t get_proto()
|
65 | 70 | {
|
@@ -94,7 +99,6 @@ TEST_F(TestInternetSocket, constructor)
|
94 | 99 | EXPECT_TRUE(socket);
|
95 | 100 | }
|
96 | 101 |
|
97 |
| - |
98 | 102 | TEST_F(TestInternetSocket, open_null_stack)
|
99 | 103 | {
|
100 | 104 | EXPECT_EQ(socket->open(NULL), NSAPI_ERROR_PARAMETER);
|
@@ -126,34 +130,81 @@ TEST_F(TestInternetSocket, close)
|
126 | 130 | EXPECT_EQ(socket->close(), NSAPI_ERROR_OK);
|
127 | 131 | }
|
128 | 132 |
|
| 133 | +TEST_F(TestInternetSocket, close_no_open) |
| 134 | +{ |
| 135 | + stack.return_value = NSAPI_ERROR_OK; |
| 136 | + EXPECT_EQ(socket->close(), NSAPI_ERROR_OK); |
| 137 | +} |
| 138 | + |
| 139 | +TEST_F(TestInternetSocket, close_during_read) |
| 140 | +{ |
| 141 | + stack.return_value = NSAPI_ERROR_OK; |
| 142 | + socket->open((NetworkStack *)&stack); |
| 143 | + // when c++11 is available use something like the code below to test the blocking behavior |
| 144 | + // socket->add_reader(); |
| 145 | + // std::async(c[](){std::this_thread::sleep_for(1ms); socket->rem_reader()}); |
| 146 | + EXPECT_EQ(socket->close(), NSAPI_ERROR_OK); |
| 147 | +} |
| 148 | + |
129 | 149 | TEST_F(TestInternetSocket, modify_multicast_group)
|
130 | 150 | {
|
131 | 151 | SocketAddress a("127.0.0.1", 1024);
|
132 | 152 | stack.return_value = NSAPI_ERROR_OK;
|
133 | 153 | socket->open((NetworkStack *)&stack);
|
134 |
| - |
| 154 | + // when c++11 is available use something like the code below to test the blocking behavior |
| 155 | + // socket->add_reader(); |
| 156 | + // std::async(c[](){std::this_thread::sleep_for(1ms); socket->rem_reader()}); |
135 | 157 | EXPECT_EQ(socket->join_multicast_group(a), NSAPI_ERROR_UNSUPPORTED);
|
136 | 158 | EXPECT_EQ(socket->leave_multicast_group(a), NSAPI_ERROR_UNSUPPORTED);
|
137 | 159 | }
|
138 | 160 |
|
139 |
| -TEST_F(TestInternetSocket, set_blocking) |
| 161 | +// set_blocking and set_timeout are tested within TCPSocket. |
| 162 | + |
| 163 | +TEST_F(TestInternetSocket, bind_no_socket) |
| 164 | +{ |
| 165 | + EXPECT_EQ(socket->bind(1), NSAPI_ERROR_NO_SOCKET); |
| 166 | +} |
| 167 | + |
| 168 | +TEST_F(TestInternetSocket, bind) |
| 169 | +{ |
| 170 | + socket->open((NetworkStack *)&stack); |
| 171 | + EXPECT_EQ(socket->bind("127.0.0.1", 80), NSAPI_ERROR_OK); |
| 172 | +} |
| 173 | + |
| 174 | +TEST_F(TestInternetSocket, bind_nullstring) |
140 | 175 | {
|
141 |
| - socket->set_blocking(false); |
142 |
| - socket->set_blocking(true); |
| 176 | + socket->open((NetworkStack *)&stack); |
| 177 | + EXPECT_EQ(socket->bind(NULL, 80), NSAPI_ERROR_OK); |
143 | 178 | }
|
144 | 179 |
|
| 180 | +// setsockopt and getsockopt are really just calling the underlying stack functions |
| 181 | + |
145 | 182 | TEST_F(TestInternetSocket, setsockopt_no_stack)
|
146 | 183 | {
|
147 |
| - socket->close(); |
148 | 184 | EXPECT_EQ(socket->setsockopt(0, 0, 0, 0), NSAPI_ERROR_NO_SOCKET);
|
149 | 185 | }
|
150 | 186 |
|
| 187 | +TEST_F(TestInternetSocket, setsockopt) |
| 188 | +{ |
| 189 | + socket->open((NetworkStack *)&stack); |
| 190 | + EXPECT_EQ(socket->setsockopt(0, 0, 0, 0), NSAPI_ERROR_UNSUPPORTED); |
| 191 | +} |
| 192 | + |
| 193 | +TEST_F(TestInternetSocket, getsockopt_no_stack) |
| 194 | +{ |
| 195 | + EXPECT_EQ(socket->getsockopt(0, 0, 0, 0), NSAPI_ERROR_NO_SOCKET); |
| 196 | +} |
| 197 | + |
| 198 | +TEST_F(TestInternetSocket, getsockopt) |
| 199 | +{ |
| 200 | + socket->open((NetworkStack *)&stack); |
| 201 | + EXPECT_EQ(socket->getsockopt(0, 0, 0, 0), NSAPI_ERROR_UNSUPPORTED); |
| 202 | +} |
| 203 | + |
151 | 204 | TEST_F(TestInternetSocket, sigio)
|
152 | 205 | {
|
153 | 206 | callback_is_called = false;
|
154 |
| - // I'm calling sigio() through the DEPRECATED method, just to get coverage for both. |
155 |
| - // Not sure if this is wise at all, we should not aim for 100% |
156 | 207 | socket->sigio(mbed::callback(my_callback));
|
157 |
| - socket->event(); |
| 208 | + socket->close(); // Trigger event; |
158 | 209 | EXPECT_EQ(callback_is_called, true);
|
159 | 210 | }
|
0 commit comments