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
|
#include "catch2_common.h"
SCENARIO("Connection to invalid nodb device name")
{
REQUIRE_NOTHROW(Tango::DeviceProxy("tango://localhost:0/invalid/test/dev#dbase=no"));
}
template <class Base>
class DoubleROAttrServer : public Base
{
public:
using Base::Base;
Tango::DevDouble *attr_double_value_read;
constexpr static Tango::DevDouble SIMPLE_SERVER_DOUBLE_VALUE = 42.1234;
~DoubleROAttrServer() override
{
std::cout << "DoubleROAttrServer: in destructor" << std::endl;
delete_device();
}
void delete_device() override
{
std::cout << "DoubleROAttrServer: in delete_device()" << std::endl;
delete[] attr_double_value_read;
}
void init_device() override
{
// at server initialization
std::cout << "DoubleROAttrServer: in init_device" << std::endl;
attr_double_value_read = new Tango::DevDouble[1];
*attr_double_value_read = SIMPLE_SERVER_DOUBLE_VALUE;
}
void read_attribute(Tango::Attribute &attr)
{
std::cout << "DoubleROAttrServer: Reading attribute... " << std::endl;
attr.set_value(attr_double_value_read);
}
static void attribute_factory(std::vector<Tango::Attr *> &attrs)
{
attrs.push_back(
new TangoTest::AutoAttr<&DoubleROAttrServer::read_attribute>("double_value", Tango::DEV_DOUBLE));
}
};
TANGO_TEST_AUTO_DEV_TMPL_INSTANTIATE(DoubleROAttrServer, 3)
SCENARIO("Test connection and reading a double RO attribute on a nodb device")
{
int idlver = GENERATE(TangoTest::idlversion(3));
GIVEN("a device proxy to a IDLv" << idlver << " nodb device")
{
TangoTest::Context ctx{"no_db_connection", "DoubleROAttrServer", idlver};
auto dp_ptr = ctx.get_proxy();
REQUIRE(idlver == dp_ptr->get_idl_version());
Tango::DevDouble double_val = 0.0;
THEN("we can ping the device")
{
REQUIRE_NOTHROW(dp_ptr->ping());
AND_THEN("we can read the double_value attribute")
{
REQUIRE_NOTHROW(
[&]()
{
auto da = dp_ptr->read_attribute("double_value");
da >> double_val;
}());
REQUIRE(double_val == DoubleROAttrServer<TANGO_BASE_CLASS>::SIMPLE_SERVER_DOUBLE_VALUE);
}
}
AND_WHEN("we stop the server")
{
REQUIRE_NOTHROW(ctx.stop_server());
double_val = 0.0;
THEN("We can no longer read the double_value attribute")
{
using TangoTest::FirstErrorMatches, TangoTest::Reason;
REQUIRE_THROWS_MATCHES(
[&]()
{
auto da = dp_ptr->read_attribute("double_value");
da >> double_val;
}(),
Tango::DevFailed,
FirstErrorMatches(Reason(Tango::API_CorbaException)));
}
REQUIRE(double_val == 0.0);
}
}
}
|