#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);
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();
std::string TestConnectFails();
std::string TestConnectHangs();
std::string TestWriteFails();
std::string TestReadFails();
std::string TestSetSendBufferSizeFails();
std::string TestSetReceiveBufferSizeFails();
std::string TestSetNoDelayFails();
std::string TestBindFailsConnectSucceeds();
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);
std::string ReadFromSocket(pp::TCPSocket* socket,
char* buffer,
size_t num_bytes);
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);
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,
};
std::string RunCommandsExpendingFailures(pp::TCPSocket* socket, int commands);
pp::NetAddress test_server_addr_;
const PPB_TCPSocket_1_0* socket_interface_1_0_;
};
#endif