Support for split testsuite, launchmon in testsuite
[dyninst.git] / testsuite / src / remotetest.h
1 #include "comptester.h"
2 #include "TestMutator.h"
3
4 class MessageBuffer;
5
6 class Connection
7 {
8   private:
9    static const int accept_timeout = 60;
10    static const int recv_timeout = 60;
11    static int sockfd;
12    static std::string hostname;
13    static int port;
14    static bool has_hostport;
15
16    int fd;
17    bool has_error;
18
19    bool waitForAvailData(int sock, int timeout, bool &sock_error);
20   public:
21    Connection();
22    Connection(std::string host, int port);
23    ~Connection();
24
25    bool server_accept();
26    bool server_setup(std::string &hostname, int &port);
27    bool client_connect();
28
29    bool send_message(MessageBuffer &buffer);
30    bool recv_message(char* &buffer);
31    bool recv_return(char* &buffer);
32
33    bool hasError();
34 };
35
36 Connection *getConnection();
37 void setConnection(Connection *);
38
39 class RemoteComponentFE : public ComponentTester {
40   private:
41    std::string name;
42    Connection *connection;
43
44    RemoteComponentFE(std::string n, Connection *c);
45   public:
46    static RemoteComponentFE *createRemoteComponentFE(std::string n, Connection *c);
47    virtual ~RemoteComponentFE();
48
49    virtual test_results_t program_setup(ParameterDict &params);
50    virtual test_results_t program_teardown(ParameterDict &params);
51    virtual test_results_t group_setup(RunGroup *group, ParameterDict &params);
52    virtual test_results_t group_teardown(RunGroup *group, ParameterDict &params);
53    virtual test_results_t test_setup(TestInfo *test, ParameterDict &params);
54    virtual test_results_t test_teardown(TestInfo *test, ParameterDict &params);
55    virtual std::string getLastErrorMsg();
56 };
57
58 class RemoteTestFE : public TestMutator {
59   private:
60    TestInfo *test;
61    Connection *connection;
62
63    RemoteTestFE(TestInfo *test_, Connection *c);
64   public:
65    static RemoteTestFE *createRemoteTestFE(TestInfo *t, Connection *c);
66    virtual ~RemoteTestFE();
67
68    virtual bool hasCustomExecutionPath();
69    virtual test_results_t setup(ParameterDict &param);
70    virtual test_results_t executeTest();
71    virtual test_results_t postExecution();
72    virtual test_results_t teardown();
73 };
74
75 class RemoteBE {
76   private:
77    Connection *connection;
78    std::vector<RunGroup *> &groups;
79    std::map<std::string, ComponentTester *> nameToComponent;
80    std::map<std::pair<int, int>, TestMutator *> testToMutator;
81
82    void dispatchComp(char *message);
83    void dispatchTest(char *message);
84    void dispatchLoad(char *message);
85    void dispatchExit(char *message);
86
87    ComponentTester *getComponentBE(std::string name);
88    TestMutator *getTestBE(int group_index, int test_index);
89
90    void loadTest(char *message);
91    void loadModule(char *message);
92   public:
93    RemoteBE(std::vector<RunGroup *> &g, Connection *c);
94    virtual ~RemoteBE();
95    
96    void dispatch(char *message);
97 };
98
99 class RemoteOutputDriver : public TestOutputDriver {
100   private:
101    void send_log(std::string str);
102    Connection *connection;
103   public:
104
105    RemoteOutputDriver(Connection *c);
106    virtual void startNewTest(std::map<std::string, std::string> &attributes, TestInfo *test, RunGroup *group);
107    virtual void redirectStream(TestOutputStream stream, const char * filename);
108    virtual void logResult(test_results_t result, int stage=-1);
109    virtual void logCrash(std::string testname);
110    virtual void log(TestOutputStream stream, const char *fmt, ...);
111    virtual void vlog(TestOutputStream stream, const char *fmt, va_list args);
112    virtual void finalizeOutput();
113 };
114