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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#ifndef TEST_CONTROLLER_H
#define TEST_CONTROLLER_H
#include <IceUtil/Shared.h>
#include <IceUtil/Mutex.h>
#include <Glacier2/Session.h>
#include <Test.h>
#include <vector>
#include <string>
struct SessionTuple
{
Glacier2::SessionPrx session;
Glacier2::SessionControlPrx sessionControl;
bool configured;
SessionTuple() {}
SessionTuple(Glacier2::SessionPrx s, Glacier2::SessionControlPrx control):
session(s),
sessionControl(control),
configured(false)
{}
SessionTuple(const SessionTuple& st):
session(st.session),
sessionControl(st.sessionControl),
configured(st.configured)
{
}
SessionTuple&
operator=(const SessionTuple& rhs)
{
if(this == &rhs)
{
return *this;
}
session = rhs.session;
sessionControl = rhs.sessionControl;
configured = rhs.configured;
return *this;
}
};
/*
* The test controller manipulates the router's filter tables for this session.
*/
struct TestCase
{
std::string proxy;
bool expectedResult;
TestCase(const std::string& s, const bool b) : proxy(s), expectedResult(b) {}
};
struct TestConfiguration
{
std::string description;
std::vector<TestCase> cases;
std::vector<std::string> categoryFiltersAccept;
std::vector<std::string> adapterIdFiltersAccept;
std::vector<Ice::Identity> objectIdFiltersAccept;
};
//
// The test controller acts like a test server of sorts. It manages the
// configuration of the test's session and provides the client with test
// cases and expected outcomes.
//
class TestControllerI : public Test::TestController
{
public:
TestControllerI(const std::string&);
//
// Slice to C++ mapping.
//
void step(const Glacier2::SessionPrx& currentSession, const Test::TestToken& currentState,
Test::TestToken& newState, const Ice::Current&);
void shutdown(const Ice::Current&);
//
// Internal methods.
//
void addSession(const SessionTuple&);
void notifyDestroy(const Glacier2::SessionControlPrx&);
private:
IceUtil::Mutex _mutex;
std::vector<SessionTuple> _sessions;
std::vector<TestConfiguration> _configurations;
};
typedef IceUtil::Handle<TestControllerI> TestControllerIPtr;
#endif
|