| // Copyright 2013 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PPAPI_TESTS_TEST_TCP_SOCKET_H_ |
| #define PPAPI_TESTS_TEST_TCP_SOCKET_H_ |
| |
| #include <stddef.h> |
| |
| #include <string> |
| |
| #include "ppapi/c/pp_stdint.h" |
| #include "ppapi/c/ppb_tcp_socket.h" |
| #include "ppapi/cpp/net_address.h" |
| #include "ppapi/tests/test_case.h" |
| |
| namespace pp { |
| class TCPSocket; |
| } |
| |
| class TestTCPSocket: public TestCase { |
| public: |
| explicit TestTCPSocket(TestingInstance* instance); |
| |
| // TestCase implementation. |
| virtual bool Init(); |
| virtual void RunTests(const std::string& filter); |
| |
| private: |
| std::string TestConnect(); |
| std::string TestReadWrite(); |
| std::string TestSetOption(); |
| std::string TestListen(); |
| std::string TestBacklog(); |
| std::string TestInterface_1_0(); |
| std::string TestUnexpectedCalls(); |
| |
| // The higher level test fixture is responsible for making socket methods |
| // behave in the expected manner. The *Fails tests expect the specified even |
| // to fail with PP_ERROR_FAILED, and the *Hangs test expect the specified |
| // operation to never complete, at least until teardown starts. |
| std::string TestConnectFails(); |
| std::string TestConnectHangs(); |
| std::string TestWriteFails(); |
| std::string TestReadFails(); |
| std::string TestSetSendBufferSizeFails(); |
| std::string TestSetReceiveBufferSizeFails(); |
| std::string TestSetNoDelayFails(); |
| // When a bind call fails, normally the socket is reuseable. |
| std::string TestBindFailsConnectSucceeds(); |
| // This is needed in addition to the above test in the case where a bind |
| // failure is simulated in a way that also closes the NetworkContext pipe. |
| std::string TestBindFails(); |
| std::string TestBindHangs(); |
| std::string TestListenFails(); |
| std::string TestListenHangs(); |
| std::string TestAcceptFails(); |
| std::string TestAcceptHangs(); |
| std::string TestAcceptedSocketWriteFails(); |
| std::string TestAcceptedSocketReadFails(); |
| std::string TestBindConnectFails(); |
| std::string TestBindConnectHangs(); |
| |
| std::string ReadFirstLineFromSocket(pp::TCPSocket* socket, std::string* s); |
| std::string ReadFirstLineFromSocket_1_0(PP_Resource socket, |
| std::string* s); |
| // Expects to read exactly |num_bytes| from the socket. Stops once exactly |
| // |num_bytes| have been read. |
| std::string ReadFromSocket(pp::TCPSocket* socket, |
| char* buffer, |
| size_t num_bytes); |
| // Reads from |socket| until a read error occurs, and sets |read_data| and |
| // |error| accordingly. Only fails if a Read() call returns more data than the |
| // buffer that was passed in to it. |
| std::string ReadFromSocketUntilError(pp::TCPSocket* socket, |
| std::string* read_data, |
| int* error); |
| std::string WriteToSocket(pp::TCPSocket* socket, const std::string& s); |
| std::string WriteToSocket_1_0(PP_Resource socket, const std::string& s); |
| |
| // Sets |address| to an address usable for Bind(). Returned address uses the |
| // IP address used to talk to |test_server_addr_| and a port of 0, so Bind() |
| // calls to it should succeed. |
| std::string GetAddressToBind(pp::NetAddress* address); |
| |
| std::string StartListen(pp::TCPSocket* socket, int32_t backlog); |
| |
| enum Command { |
| kBind = 0x1, |
| kListen = 0x2, |
| kAccept = 0x4, |
| kConnect = 0x8, |
| kReadWrite = 0x10, |
| kAllCommands = -1, |
| }; |
| // Runs |commands|, consisting of one or more Command values on |socket|, |
| // expecting all of them to fail with PP_ERROR_FAILED. Useful for testing |
| // invalid state transitions. |
| std::string RunCommandsExpendingFailures(pp::TCPSocket* socket, int commands); |
| |
| // Address of the EmbeddedTestServer set up by the browser test fixture. |
| pp::NetAddress test_server_addr_; |
| |
| const PPB_TCPSocket_1_0* socket_interface_1_0_; |
| }; |
| |
| #endif // PPAPI_TESTS_TEST_TCP_SOCKET_H_ |