X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/9f3223722138dadc2f6cd54dfcbad3d19a3db4d6..bc6cac0e474dfe2feb4983aef98f99e23a98ffc4:/tests/test_reconnect_on_tariff_change.cpp diff --git a/tests/test_reconnect_on_tariff_change.cpp b/tests/test_reconnect_on_tariff_change.cpp index e60e5989..c47bc1fd 100644 --- a/tests/test_reconnect_on_tariff_change.cpp +++ b/tests/test_reconnect_on_tariff_change.cpp @@ -1,51 +1,167 @@ -#include "tut/tut.hpp" +#define BOOST_TEST_MODULE STGReconnectOnTariffChange +#include "stg/admin.h" #include "stg/user_property.h" #include "user_impl.h" #include "testsettings.h" #include "testtariffs.h" -#include "testadmin.h" #include "teststore.h" +#include "testauth.h" +#include "testusers.h" +#include "testservices.h" -namespace tut +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wold-style-cast" +#pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wsign-compare" +#pragma GCC diagnostic ignored "-Wparentheses" +#include +#pragma GCC diagnostic pop + +volatile time_t stgTime = 0; + +namespace +{ + +class AfterConnectedNotifier : public STG::PropertyNotifierBase +{ + public: + AfterConnectedNotifier() + : m_connects(0), + m_disconnects(0) + {} + + void notify(const bool& oldValue, const bool& newValue) override + { + if (!oldValue && newValue) + ++m_connects; + if (oldValue && !newValue) + ++m_disconnects; + } + + size_t connects() const { return m_connects; } + size_t disconnects() const { return m_disconnects; } + + private: + size_t m_connects; + size_t m_disconnects; +}; + +class Settings : public TestSettings +{ + public: + Settings(bool reconnectOnTariffChange) + : m_reconnectOnTariffChange(reconnectOnTariffChange) + {} + + bool GetReconnectOnTariffChange() const { return m_reconnectOnTariffChange; } + + private: + bool m_reconnectOnTariffChange; +}; + +} + +BOOST_AUTO_TEST_SUITE(ReconnectOnTariffChange) + +BOOST_AUTO_TEST_CASE(NormalBehavior) +{ + Settings settings(false); + TestTariffs tariffs; + tariffs.ReadTariffs(); + STG::Admin admin(STG::Priv(0xFFFF), {}, {}); + TestStore store; + TestAuth auth; + TestUsers users; + TestServices services; + STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services); + + AfterConnectedNotifier connectionNotifier; + + user.AddConnectedAfterNotifier(&connectionNotifier); + + STG::UserProperty & tariffName = user.GetProperties().tariffName; + STG::UserProperty & ips = user.GetProperties().ips; + + ips = STG::UserIPs::parse("*"); + + BOOST_CHECK_EQUAL(user.GetConnected(), false); + BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast(0)); + BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast(0)); + + BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), NO_TARIFF_NAME); + + user.Authorize(inet_strington("127.0.0.1"), 0, &auth); + user.Run(); + + BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true); + + BOOST_CHECK_EQUAL(user.GetConnected(), true); + BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast(1)); + BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast(0)); + + tariffName = "test"; + BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test"); + + BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true); + + BOOST_CHECK_EQUAL(user.GetConnected(), true); + BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast(1)); + BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast(0)); +} + +BOOST_AUTO_TEST_CASE(Reconnect) { - struct reconnect_on_tariff_change_data { - }; + Settings settings(true); + + TestSettings * s1 = &settings; + STG::Settings * s2 = &settings; + + BOOST_CHECK(settings.GetReconnectOnTariffChange()); + BOOST_CHECK(s1->GetReconnectOnTariffChange()); + BOOST_CHECK(s2->GetReconnectOnTariffChange()); + + TestTariffs tariffs; + STG::Admin admin(STG::Priv(0xFFFF), {}, {}); + TestStore store; + TestAuth auth; + TestUsers users; + TestServices services; + STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services); - typedef test_group tg; - tg reconnect_on_tariff_change_test_group("Reconnect on tariff change tests group"); + AfterConnectedNotifier connectionNotifier; - typedef tg::object testobject; + user.AddConnectedAfterNotifier(&connectionNotifier); - class TEST_SETTINGS_LOCAL : public TEST_SETTINGS { - public: - TEST_SETTINGS_LOCAL(bool _reconnectOnTariffChange) - : reconnectOnTariffChange(_reconnectOnTariffChange) - {} + STG::UserProperty & tariffName = user.GetProperties().tariffName; + STG::UserProperty & ips = user.GetProperties().ips; - bool GetReconnectOnTariffChange() const { return reconnectOnTariffChange; } + ips = STG::UserIPs::parse("*"); - private: - bool reconnectOnTariffChange; - }; + BOOST_CHECK_EQUAL(user.GetConnected(), false); + BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast(0)); + BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast(0)); - template<> - template<> - void testobject::test<1>() - { - set_test_name("Check normal behaviour"); + BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), NO_TARIFF_NAME); - TEST_SETTINGS_LOCAL settings(false); - TEST_TARIFFS tariffs; - TEST_ADMIN admin; - TEST_STORE store; - USER_IMPL user(&settings, &store, &tariffs, &admin, NULL); + user.Authorize(inet_strington("127.0.0.1"), 0, &auth); + user.Run(); - USER_PROPERTY & tariffName(user.GetProperty().tariffName); + BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true); - ensure_equals("user.tariffName == NO_TARIFF_NAME", user.GetProperty().tariffName.ConstData(), NO_TARIFF_NAME); - tariffName = "test"; - ensure_equals("user.tariffName == 'test'", user.GetProperty().tariffName.ConstData(), "test"); - } + BOOST_CHECK_EQUAL(user.GetConnected(), true); + BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast(1)); + BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast(0)); + + tariffName = "test"; + BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test"); + + BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true); + + BOOST_CHECK_EQUAL(user.GetConnected(), true); + BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast(2)); + BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast(1)); } + +BOOST_AUTO_TEST_SUITE_END()