|
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