summaryrefslogtreecommitdiff
path: root/test/socket_test.hh
blob: de716197be716588fb621717aab3f085aee4e669 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef SOCKET_TEST_HH
#define SOCKET_TEST_HH

#include "unique_fd.hh"

#include <gtest/gtest.h>
#include <utility>

class Buffer;
class Logger;
class Looper;
class RoBuffer;

class SocketTest : public testing::Test {
public:
  class Client {
  public:
    virtual ~Client() = default;

    virtual void write(std::string_view data) = 0;
    virtual void write(std::function<void(Buffer*)> writer) = 0;
    virtual std::string_view received() const = 0;
    virtual void forget(size_t bytes) = 0;
    virtual void read(std::function<void(RoBuffer*)> reader) = 0;
    virtual bool closed() const = 0;

    virtual void wait(Logger* logger) = 0;

  protected:
    Client() = default;
    Client(Client const&) = delete;
    Client& operator=(Client const&) = delete;
  };

protected:
  SocketTest();

  std::pair<unique_fd, unique_fd> create_pair();

  std::unique_ptr<Client> create_client(unique_fd&& fd);

  std::shared_ptr<Looper> const& looper() { return looper_; }

private:
  std::shared_ptr<Looper> looper_;
};

#endif  // SOCKET_TEST_HH