set ( CPP_FILES main.cpp
- test_raw_ip.cpp
- test_admin_conf.cpp
- test_tariff.cpp
test_conffiles.cpp
test_fee_charge_rules.cpp
test_reconnect_on_tariff_change.cpp
test_disable_session_log.cpp
test_filter_params_log.cpp
- test_crypto.cpp
- test_bfstream.cpp
../projects/stargazer/tariff_impl.cpp
../projects/stargazer/user_impl.cpp
../projects/stargazer/user_property.cpp )
set ( THREADS_PREFER_PTHREAD_FLAG ON )
find_package ( Threads REQUIRED )
+find_package ( Boost REQUIRED unit_test_framework )
+add_definitions ( -DBOOST_TEST_DYN_LINK )
add_definitions ( -DUSE_ABSTRACT_SETTINGS )
+add_executable ( test_admin_conf test_admin_conf.cpp )
+target_link_libraries ( test_admin_conf Boost::unit_test_framework )
+add_test ( admin_conf test_admin_conf )
+
+add_executable ( test_raw_ip test_raw_ip.cpp )
+target_link_libraries ( test_raw_ip Boost::unit_test_framework )
+add_test ( raw_ip test_raw_ip )
+
+add_executable ( test_bfstream test_bfstream.cpp )
+target_link_libraries ( test_bfstream crypto Boost::unit_test_framework )
+add_test ( bfstream test_bfstream )
+
+add_executable ( test_crypto test_crypto.cpp )
+target_link_libraries ( test_crypto crypto Boost::unit_test_framework )
+add_test ( stgcrypto test_crypto )
+
+add_executable ( test_tariff test_tariff.cpp ../projects/stargazer/tariff_impl.cpp )
+target_link_libraries ( test_tariff crypto common Boost::unit_test_framework )
+target_include_directories ( test_tariff PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
+add_test ( tariff test_tariff )
+
add_executable ( tests ${CPP_FILES} )
target_link_libraries ( tests conffiles crypto logger scriptexecuter common Threads::Threads )
-#ifndef __LONG_STRING_H__
-#define __LONG_STRING_H__
+#pragma once
-std::string longString = "<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U";
+#include <string>
-#endif
+const std::string longString = "<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U<GetUsers><User result=\"ok\"><Login value=\"test6\"/><Password value=\"123456\" /><Cash value=\"0.000000\"/><FreeMb value=\"0.000000\"/><Credit value=\"0.000000\"/><Tariff value=\"In.Pi\"/><Note value=\"\"/><Phone value=\"\"/><Address value=\"\"/><Email value=\"\"/><UserData0 value=\"\" /><UserData1 value=\"\" /><UserData2 value=\"\" /><UserData3 value=\"\" /><UserData4 value=\"\" /><UserData5 value=\"\" /><UserData6 value=\"\" /><UserData7 value=\"\" /><UserData8 value=\"\" /><UserData9 value=\"\" /><Name value=\"\"/><Group value=\"\"/><Status value=\"0\"/><AOnline value=\"0\"/><CurrIP value=\"0.0.0.0\"/><IP value=\"192.168.1.5\"/><Traff MU0=\"0\" MU1=\"0\" MU2=\"0\" MU3=\"0\" MU4=\"0\" MU5=\"0\" MU6=\"0\" MU7=\"0\" MU8=\"0\" MU9=\"0\" MD0=\"0\" MD1=\"0\" MD2=\"0\" MD3=\"0\" MD4=\"0\" MD5=\"0\" MD6=\"0\" MD7=\"0\" MD8=\"0\" MD9=\"0\"/><Down value=\"0\"/><DisableDetailStat value=\"0\"/><Passive value=\"0\"/><LastCash value=\"0.000000\"/><LastTimeCash value=\"0\"/><LastActivityTime value=\"0\"/><CreditExpire value=\"0\"/><AuthorizedBy></AuthorizedBy></U";
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGAdminConf
#include "stg/admin_conf.h"
-namespace tut
-{
- struct priv_data {
- enum {
- MIX2 = 0x0002C6C6, // 210321032
- ONES = 0x00015555,
- MIX3 = 0x00031B1B, // 321032103
- TWOS = 0x0002AAAA,
- MIX1 = 0x0000E4E4, // 012301230
- THREES = 0x0003FFFF
- };
- };
-
- typedef test_group<priv_data> tg;
- tg priv_test_group("PRIV tests group");
-
- typedef tg::object testobject;
-
- template<>
- template<>
- void testobject::test<1>()
- {
- set_test_name("Check default constructor");
-
- STG::Priv zero;
-
- ensure("zero.userStat == 0", zero.userStat == 0);
- ensure("zero.userConf == 0", zero.userConf == 0);
- ensure("zero.userCash == 0", zero.userCash == 0);
- ensure("zero.userPasswd == 0", zero.userPasswd == 0);
- ensure("zero.userAddDel == 0", zero.userAddDel == 0);
- ensure("zero.adminChg == 0", zero.adminChg == 0);
- ensure("zero.tariffChg == 0", zero.tariffChg == 0);
- ensure("zero.serviceChg == 0", zero.serviceChg == 0);
- ensure("zero.corpChg == 0", zero.corpChg == 0);
-
- ensure("zero.toInt() == 0", zero.toInt() == 0);
- }
-
- template<>
- template<>
- void testobject::test<2>()
- {
- set_test_name("Check uint32_t conversions");
-
- for (uint8_t i = 0; i < 4; ++i) {
-
- // 'i' is extra trash in high bits
-
- STG::Priv priv1(ONES | (i << 0x12)); // All 1
-
- ensure_equals("priv1.userStat == 1", priv1.userStat, 1);
- ensure_equals("priv1.userConf == 1", priv1.userConf, 1);
- ensure_equals("priv1.userCash == 1", priv1.userCash, 1);
- ensure_equals("priv1.userPasswd == 1", priv1.userPasswd, 1);
- ensure_equals("priv1.userAddDel == 1", priv1.userAddDel, 1);
- ensure_equals("priv1.adminChg == 1", priv1.adminChg, 1);
- ensure_equals("priv1.tariffChg == 1", priv1.tariffChg, 1);
- ensure_equals("priv1.serviceChg == 1", priv1.serviceChg, 1);
- ensure_equals("priv1.corpChg == 1", priv1.corpChg, 1);
-
- ensure_equals("priv1.toInt() == 0x00015555", priv1.toInt(), static_cast<uint32_t>(ONES));
-
- STG::Priv priv2(TWOS | (i << 0x12)); // All 2
-
- ensure_equals("priv2.userStat == 2", priv2.userStat, 2);
- ensure_equals("priv2.userConf == 2", priv2.userConf, 2);
- ensure_equals("priv2.userCash == 2", priv2.userCash, 2);
- ensure_equals("priv2.userPasswd == 2", priv2.userPasswd, 2);
- ensure_equals("priv2.userAddDel == 2", priv2.userAddDel, 2);
- ensure_equals("priv2.adminChg == 2", priv2.adminChg, 2);
- ensure_equals("priv2.tariffChg == 2", priv2.tariffChg, 2);
- ensure_equals("priv2.serviceChg == 2", priv2.serviceChg, 2);
- ensure_equals("priv2.corpChg == 2", priv2.corpChg, 2);
-
- ensure_equals("priv2.toInt() = 0x0002AAAA", priv2.toInt(), static_cast<uint32_t>(TWOS));
-
- STG::Priv priv3(THREES | (i << 0x12)); // All 3
-
- ensure_equals("priv3.userStat == 3", priv3.userStat, 3);
- ensure_equals("priv3.userConf == 3", priv3.userConf, 3);
- ensure_equals("priv3.userCash == 3", priv3.userCash, 3);
- ensure_equals("priv3.userPasswd == 3", priv3.userPasswd, 3);
- ensure_equals("priv3.userAddDel == 3", priv3.userAddDel, 3);
- ensure_equals("priv3.adminChg == 3", priv3.adminChg, 3);
- ensure_equals("priv3.tariffChg == 3", priv3.tariffChg, 3);
- ensure_equals("priv3.serviceChg == 3", priv3.serviceChg, 3);
- ensure_equals("priv3.corpChg == 3", priv3.corpChg, 3);
-
- ensure_equals("priv3.toInt() = 0x0003FFFF", priv3.toInt(), static_cast<uint32_t>(THREES));
-
- STG::Priv pm1(MIX1 | (i << 0x12)); // 012301230
-
- ensure_equals("pm1.userStat == 0", pm1.userStat, 0);
- ensure_equals("pm1.userConf == 1", pm1.userConf, 1);
- ensure_equals("pm1.userCash == 2", pm1.userCash, 2);
- ensure_equals("pm1.userPasswd == 3", pm1.userPasswd, 3);
- ensure_equals("pm1.userAddDel == 0", pm1.userAddDel, 0);
- ensure_equals("pm1.adminChg == 1", pm1.adminChg, 1);
- ensure_equals("pm1.tariffChg == 2", pm1.tariffChg, 2);
- ensure_equals("pm1.serviceChg == 3", pm1.serviceChg, 3);
- ensure_equals("pm1.corpChg == 0", pm1.corpChg, 0);
-
- ensure_equals("pm1.toInt() = 0xE4E4", pm1.toInt(), static_cast<uint32_t>(MIX1));
-
- STG::Priv pm2(MIX2 | (i << 0x12)); // 210321032
-
- ensure_equals("pm2.userStat == 2", pm2.userStat, 2);
- ensure_equals("pm2.userConf == 1", pm2.userConf, 1);
- ensure_equals("pm2.userCash == 0", pm2.userCash, 0);
- ensure_equals("pm2.userPasswd == 3", pm2.userPasswd, 3);
- ensure_equals("pm2.userAddDel == 2", pm2.userAddDel, 2);
- ensure_equals("pm2.adminChg == 1", pm2.adminChg, 1);
- ensure_equals("pm2.tariffChg == 0", pm2.tariffChg, 0);
- ensure_equals("pm2.serviceChg == 3", pm2.serviceChg, 3);
- ensure_equals("pm2.corpChg == 2", pm2.corpChg, 2);
-
- ensure_equals("pm2.toInt() = 0x0002C6C6", pm2.toInt(), static_cast<uint32_t>(MIX2));
-
- STG::Priv pm3(MIX3 | (i << 0x12)); // 321032103
-
- ensure_equals("pm3.userStat == 3", pm3.userStat, 3);
- ensure_equals("pm3.userConf == 2", pm3.userConf, 2);
- ensure_equals("pm3.userCash == 1", pm3.userCash, 1);
- ensure_equals("pm3.userPasswd == 0", pm3.userPasswd, 0);
- ensure_equals("pm3.userAddDel == 3", pm3.userAddDel, 3);
- ensure_equals("pm3.adminChg == 2", pm3.adminChg, 2);
- ensure_equals("pm3.tariffChg == 1", pm3.tariffChg, 1);
- ensure_equals("pm3.serviceChg == 0", pm3.serviceChg, 0);
- ensure_equals("pm3.corpChg == 3", pm3.corpChg, 3);
-
- ensure_equals("pm3.toInt() = 0x00031B1B", pm3.toInt(), static_cast<uint32_t>(MIX3));
-
- }
-
- }
-
- template<>
- template<>
- void testobject::test<3>()
- {
- set_test_name("Check explicit uint32_t conversions");
-
- for (uint8_t i = 0; i < 4; ++i) {
-
- // 'i' is extra trash in high bits
-
- STG::Priv priv1(ONES | (i << 0x12)); // All 1
-
-
- ensure_equals("priv1.userStat == 1", priv1.userStat, 1);
- ensure_equals("priv1.userConf == 1", priv1.userConf, 1);
- ensure_equals("priv1.userCash == 1", priv1.userCash, 1);
- ensure_equals("priv1.userPasswd == 1", priv1.userPasswd, 1);
- ensure_equals("priv1.userAddDel == 1", priv1.userAddDel, 1);
- ensure_equals("priv1.adminChg == 1", priv1.adminChg, 1);
- ensure_equals("priv1.tariffChg == 1", priv1.tariffChg, 1);
- ensure_equals("priv1.serviceChg == 1", priv1.serviceChg, 1);
- ensure_equals("priv1.corpChg == 1", priv1.corpChg, 1);
-
- ensure_equals("priv1.toInt() == 0x00015555", priv1.toInt(), static_cast<uint32_t>(ONES));
+#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 <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
- STG::Priv priv2(TWOS | (i << 0x12)); // All 2
+#include <cstdint>
- ensure_equals("priv2.userStat == 2", priv2.userStat, 2);
- ensure_equals("priv2.userConf == 2", priv2.userConf, 2);
- ensure_equals("priv2.userCash == 2", priv2.userCash, 2);
- ensure_equals("priv2.userPasswd == 2", priv2.userPasswd, 2);
- ensure_equals("priv2.userAddDel == 2", priv2.userAddDel, 2);
- ensure_equals("priv2.adminChg == 2", priv2.adminChg, 2);
- ensure_equals("priv2.tariffChg == 2", priv2.tariffChg, 2);
- ensure_equals("priv2.serviceChg == 2", priv2.serviceChg, 2);
- ensure_equals("priv2.corpChg == 2", priv2.corpChg, 2);
-
- ensure_equals("priv2.toInt() = 0x0002AAAA", priv2.toInt(), static_cast<uint32_t>(TWOS));
-
- STG::Priv priv3(THREES | (i << 0x12)); // All 3
-
- ensure_equals("priv3.userStat == 3", priv3.userStat, 3);
- ensure_equals("priv3.userConf == 3", priv3.userConf, 3);
- ensure_equals("priv3.userCash == 3", priv3.userCash, 3);
- ensure_equals("priv3.userPasswd == 3", priv3.userPasswd, 3);
- ensure_equals("priv3.userAddDel == 3", priv3.userAddDel, 3);
- ensure_equals("priv3.adminChg == 3", priv3.adminChg, 3);
- ensure_equals("priv3.tariffChg == 3", priv3.tariffChg, 3);
- ensure_equals("priv3.serviceChg == 3", priv3.serviceChg, 3);
- ensure_equals("priv3.corpChg == 3", priv3.corpChg, 3);
-
- ensure_equals("priv3.toInt() = 0x0003FFFF", priv3.toInt(), static_cast<uint32_t>(THREES));
-
- STG::Priv pm1(MIX1 | (i << 0x12)); // 012301230
-
- ensure_equals("pm1.userStat == 0", pm1.userStat, 0);
- ensure_equals("pm1.userConf == 1", pm1.userConf, 1);
- ensure_equals("pm1.userCash == 2", pm1.userCash, 2);
- ensure_equals("pm1.userPasswd == 3", pm1.userPasswd, 3);
- ensure_equals("pm1.userAddDel == 0", pm1.userAddDel, 0);
- ensure_equals("pm1.adminChg == 1", pm1.adminChg, 1);
- ensure_equals("pm1.tariffChg == 2", pm1.tariffChg, 2);
- ensure_equals("pm1.serviceChg == 3", pm1.serviceChg, 3);
- ensure_equals("pm1.corpChg == 0", pm1.corpChg, 0);
-
- ensure_equals("pm1.toInt() = 0xE4E4", pm1.toInt(), static_cast<uint32_t>(MIX1));
-
- STG::Priv pm2(MIX2 | (i << 0x12)); // 210321032
-
- ensure_equals("pm2.userStat == 2", pm2.userStat, 2);
- ensure_equals("pm2.userConf == 1", pm2.userConf, 1);
- ensure_equals("pm2.userCash == 0", pm2.userCash, 0);
- ensure_equals("pm2.userPasswd == 3", pm2.userPasswd, 3);
- ensure_equals("pm2.userAddDel == 2", pm2.userAddDel, 2);
- ensure_equals("pm2.adminChg == 1", pm2.adminChg, 1);
- ensure_equals("pm2.tariffChg == 0", pm2.tariffChg, 0);
- ensure_equals("pm2.serviceChg == 3", pm2.serviceChg, 3);
- ensure_equals("pm2.corpChg == 2", pm2.corpChg, 2);
-
- ensure_equals("pm2.toInt() = 0x0002C6C6", pm2.toInt(), static_cast<uint32_t>(MIX2));
+namespace
+{
- STG::Priv pm3(MIX3 | (i << 0x12)); // 321032103
+constexpr uint32_t MIX2 = 0x0002C6C6; // 210321032
+constexpr uint32_t ONES = 0x00015555;
+constexpr uint32_t MIX3 = 0x00031B1B; // 321032103
+constexpr uint32_t TWOS = 0x0002AAAA;
+constexpr uint32_t MIX1 = 0x0000E4E4; // 012301230
+constexpr uint32_t THREES = 0x0003FFFF;
- ensure_equals("pm3.userStat == 3", pm3.userStat, 3);
- ensure_equals("pm3.userConf == 2", pm3.userConf, 2);
- ensure_equals("pm3.userCash == 1", pm3.userCash, 1);
- ensure_equals("pm3.userPasswd == 0", pm3.userPasswd, 0);
- ensure_equals("pm3.userAddDel == 3", pm3.userAddDel, 3);
- ensure_equals("pm3.adminChg == 2", pm3.adminChg, 2);
- ensure_equals("pm3.tariffChg == 1", pm3.tariffChg, 1);
- ensure_equals("pm3.serviceChg == 0", pm3.serviceChg, 0);
- ensure_equals("pm3.corpChg == 3", pm3.corpChg, 3);
+}
- ensure_equals("pm3.toInt() = 0x00031B1B", pm3.toInt(), static_cast<uint32_t>(MIX3));
+BOOST_AUTO_TEST_SUITE(AdminConf)
- }
+BOOST_AUTO_TEST_CASE(DefaultConstructor)
+{
+ STG::Priv zero;
+
+ BOOST_CHECK_EQUAL(zero.userStat, 0);
+ BOOST_CHECK_EQUAL(zero.userConf, 0);
+ BOOST_CHECK_EQUAL(zero.userCash, 0);
+ BOOST_CHECK_EQUAL(zero.userPasswd, 0);
+ BOOST_CHECK_EQUAL(zero.userAddDel, 0);
+ BOOST_CHECK_EQUAL(zero.adminChg, 0);
+ BOOST_CHECK_EQUAL(zero.tariffChg, 0);
+ BOOST_CHECK_EQUAL(zero.serviceChg, 0);
+ BOOST_CHECK_EQUAL(zero.corpChg, 0);
+
+ BOOST_CHECK_EQUAL(zero.toInt(), 0);
+}
+BOOST_AUTO_TEST_CASE(UINT32Conversions)
+{
+ for (uint8_t i = 0; i < 4; ++i)
+ {
+ // 'i' is extra garbage in high bits
+
+ STG::Priv priv1(ONES | (i << 0x12)); // All 1
+
+ BOOST_CHECK_EQUAL(priv1.userStat, 1);
+ BOOST_CHECK_EQUAL(priv1.userConf, 1);
+ BOOST_CHECK_EQUAL(priv1.userCash, 1);
+ BOOST_CHECK_EQUAL(priv1.userPasswd, 1);
+ BOOST_CHECK_EQUAL(priv1.userAddDel, 1);
+ BOOST_CHECK_EQUAL(priv1.adminChg, 1);
+ BOOST_CHECK_EQUAL(priv1.tariffChg, 1);
+ BOOST_CHECK_EQUAL(priv1.serviceChg, 1);
+ BOOST_CHECK_EQUAL(priv1.corpChg, 1);
+
+ BOOST_CHECK_EQUAL(priv1.toInt(), static_cast<uint32_t>(ONES));
+
+ STG::Priv priv2(TWOS | (i << 0x12)); // All 2
+
+ BOOST_CHECK_EQUAL(priv2.userStat, 2);
+ BOOST_CHECK_EQUAL(priv2.userConf, 2);
+ BOOST_CHECK_EQUAL(priv2.userCash, 2);
+ BOOST_CHECK_EQUAL(priv2.userPasswd, 2);
+ BOOST_CHECK_EQUAL(priv2.userAddDel, 2);
+ BOOST_CHECK_EQUAL(priv2.adminChg, 2);
+ BOOST_CHECK_EQUAL(priv2.tariffChg, 2);
+ BOOST_CHECK_EQUAL(priv2.serviceChg, 2);
+ BOOST_CHECK_EQUAL(priv2.corpChg, 2);
+
+ BOOST_CHECK_EQUAL(priv2.toInt(), static_cast<uint32_t>(TWOS));
+
+ STG::Priv priv3(THREES | (i << 0x12)); // All 3
+
+ BOOST_CHECK_EQUAL(priv3.userStat, 3);
+ BOOST_CHECK_EQUAL(priv3.userConf, 3);
+ BOOST_CHECK_EQUAL(priv3.userCash, 3);
+ BOOST_CHECK_EQUAL(priv3.userPasswd, 3);
+ BOOST_CHECK_EQUAL(priv3.userAddDel, 3);
+ BOOST_CHECK_EQUAL(priv3.adminChg, 3);
+ BOOST_CHECK_EQUAL(priv3.tariffChg, 3);
+ BOOST_CHECK_EQUAL(priv3.serviceChg, 3);
+ BOOST_CHECK_EQUAL(priv3.corpChg, 3);
+
+ BOOST_CHECK_EQUAL(priv3.toInt(), static_cast<uint32_t>(THREES));
+
+ STG::Priv pm1(MIX1 | (i << 0x12)); // 012301230
+
+ BOOST_CHECK_EQUAL(pm1.userStat, 0);
+ BOOST_CHECK_EQUAL(pm1.userConf, 1);
+ BOOST_CHECK_EQUAL(pm1.userCash, 2);
+ BOOST_CHECK_EQUAL(pm1.userPasswd, 3);
+ BOOST_CHECK_EQUAL(pm1.userAddDel, 0);
+ BOOST_CHECK_EQUAL(pm1.adminChg, 1);
+ BOOST_CHECK_EQUAL(pm1.tariffChg, 2);
+ BOOST_CHECK_EQUAL(pm1.serviceChg, 3);
+ BOOST_CHECK_EQUAL(pm1.corpChg, 0);
+
+ BOOST_CHECK_EQUAL(pm1.toInt(), static_cast<uint32_t>(MIX1));
+
+ STG::Priv pm2(MIX2 | (i << 0x12)); // 210321032
+
+ BOOST_CHECK_EQUAL(pm2.userStat, 2);
+ BOOST_CHECK_EQUAL(pm2.userConf, 1);
+ BOOST_CHECK_EQUAL(pm2.userCash, 0);
+ BOOST_CHECK_EQUAL(pm2.userPasswd, 3);
+ BOOST_CHECK_EQUAL(pm2.userAddDel, 2);
+ BOOST_CHECK_EQUAL(pm2.adminChg, 1);
+ BOOST_CHECK_EQUAL(pm2.tariffChg, 0);
+ BOOST_CHECK_EQUAL(pm2.serviceChg, 3);
+ BOOST_CHECK_EQUAL(pm2.corpChg, 2);
+
+ BOOST_CHECK_EQUAL(pm2.toInt(), static_cast<uint32_t>(MIX2));
+
+ STG::Priv pm3(MIX3 | (i << 0x12)); // 321032103
+
+ BOOST_CHECK_EQUAL(pm3.userStat, 3);
+ BOOST_CHECK_EQUAL(pm3.userConf, 2);
+ BOOST_CHECK_EQUAL(pm3.userCash, 1);
+ BOOST_CHECK_EQUAL(pm3.userPasswd, 0);
+ BOOST_CHECK_EQUAL(pm3.userAddDel, 3);
+ BOOST_CHECK_EQUAL(pm3.adminChg, 2);
+ BOOST_CHECK_EQUAL(pm3.tariffChg, 1);
+ BOOST_CHECK_EQUAL(pm3.serviceChg, 0);
+ BOOST_CHECK_EQUAL(pm3.corpChg, 3);
+
+ BOOST_CHECK_EQUAL(pm3.toInt(), static_cast<uint32_t>(MIX3));
}
-
}
+
+BOOST_AUTO_TEST_SUITE_END()
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGBFStream
#include "longstring.h"
#include "stg/bfstream.h"
+#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 <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
#include <algorithm>
#include <string>
#include <cstring>
namespace
{
-class TRACKER
+class Tracker
{
public:
- TRACKER() : m_lastSize(0), m_callCount(0), m_lastBlock(NULL) {}
- ~TRACKER() { delete[] m_lastBlock; }
- bool Call(const void * block, size_t size)
+ Tracker() : m_lastSize(0), m_callCount(0), m_lastBlock(NULL) {}
+ ~Tracker() { delete[] m_lastBlock; }
+ void Call(const void* block, size_t size)
{
- delete[] m_lastBlock;
- if (size > 0)
+ delete[] m_lastBlock;
+ if (size > 0)
{
- m_lastBlock = new char[size];
- memcpy(m_lastBlock, block, size);
- m_result.append(m_lastBlock, size);
+ m_lastBlock = new char[size];
+ memcpy(m_lastBlock, block, size);
+ m_result.append(m_lastBlock, size);
}
- else
- m_lastBlock = NULL;
- m_lastSize = size;
- ++m_callCount;
- return true;
+ else
+ m_lastBlock = NULL;
+ m_lastSize = size;
+ ++m_callCount;
}
size_t LastSize() const { return m_lastSize; }
size_t CallCount() const { return m_callCount; }
- const void * LastBlock() const { return m_lastBlock; }
+ const void* LastBlock() const { return m_lastBlock; }
const std::string& Result() const { return m_result; }
private:
size_t m_lastSize;
size_t m_callCount;
- char * m_lastBlock;
+ char* m_lastBlock;
std::string m_result;
};
-bool DecryptCallback(const void * block, size_t size, void * data);
+bool DecryptCallback(const void* block, size_t size, void* data);
class Decryptor
{
public:
- Decryptor(const std::string & key)
+ Decryptor(const std::string& key)
: m_stream(key, DecryptCallback, this)
{}
- bool Call(const void * block, size_t size)
+ void Call(const void* block, size_t size)
{
m_stream.Put(block, size);
- return true;
}
- bool Put(const void * block, size_t size)
+ void Put(const void* block, size_t size)
{
- const char * data = static_cast<const char *>(block);
+ const auto* data = static_cast<const char*>(block);
size = strnlen(data, size);
m_result.append(data, size);
- return true;
}
void Flush()
std::string m_result;
};
-bool EncryptCallback(const void * block, size_t size, void * data)
+bool EncryptCallback(const void* block, size_t size, void* data)
+{
+ auto& decryptor = *static_cast<Decryptor*>(data);
+ decryptor.Call(block, size);
+ return true;
+}
+
+bool DecryptCallback(const void* block, size_t size, void* data)
{
-Decryptor & decryptor = *static_cast<Decryptor *>(data);
-return decryptor.Call(block, size);
+ auto& decryptor = *static_cast<Decryptor*>(data);
+ decryptor.Put(block, size);
+ return true;
+}
+
+bool Callback(const void* block, size_t size, void* data)
+{
+ auto& tracker = *static_cast<Tracker*>(data);
+ tracker.Call(block, size);
+ return true;
+}
+
}
-bool DecryptCallback(const void * block, size_t size, void * data)
+BOOST_AUTO_TEST_SUITE(BFStream)
+
+BOOST_AUTO_TEST_CASE(Mechanics)
{
-Decryptor & decryptor = *static_cast<Decryptor *>(data);
-return decryptor.Put(block, size);
+ Tracker tracker;
+ STG::ENCRYPT_STREAM stream("pr7Hhen", Callback, &tracker);
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 0);
+
+ uint32_t block[2] = {0x12345678, 0x87654321};
+ stream.Put(&block[0], sizeof(block[0]));
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 0);
+ stream.Put(&block[1], sizeof(block[1]));
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 1);
+
+ uint32_t block2[4] = {0x12345678, 0x87654321, 0x12345678, 0x87654321};
+ stream.Put(&block2[0], sizeof(block2[0]) * 3);
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 2);
+ stream.Put(&block2[3], sizeof(block2[3]));
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 3);
}
-bool Callback(const void * block, size_t size, void * data)
+BOOST_AUTO_TEST_CASE(Encryption)
{
-TRACKER & tracker = *static_cast<TRACKER *>(data);
-return tracker.Call(block, size);
+ Tracker tracker;
+ STG::ENCRYPT_STREAM stream("pr7Hhen", Callback, &tracker);
+
+ uint32_t block[2] = {0x12345678, 0x87654321};
+ stream.Put(&block[0], sizeof(block[0]));
+ BOOST_CHECK_EQUAL(tracker.LastSize(), 0);
+ BOOST_CHECK_EQUAL(tracker.LastBlock(), static_cast<const void *>(NULL));
+ stream.Put(&block[1], sizeof(block[1]));
+ BOOST_CHECK_EQUAL(tracker.LastSize(), 8);
+ const uint32_t * ptr = static_cast<const uint32_t *>(tracker.LastBlock());
+ BOOST_CHECK_EQUAL(ptr[0], 0xd3988cd);
+ BOOST_CHECK_EQUAL(ptr[1], 0x7996c6d6);
+
+ uint32_t block2[4] = {0x12345678, 0x87654321, 0x12345678, 0x87654321};
+ stream.Put(&block2[0], sizeof(block2[0]) * 3);
+ BOOST_CHECK_EQUAL(tracker.LastSize(), 8);
+ ptr = static_cast<const uint32_t *>(tracker.LastBlock());
+ BOOST_CHECK_EQUAL(ptr[0], 0xd3988cd);
+ BOOST_CHECK_EQUAL(ptr[1], 0x7996c6d6);
+
+ stream.Put(&block2[3], sizeof(block2[3]));
+ BOOST_CHECK_EQUAL(tracker.LastSize(), 8);
+ ptr = static_cast<const uint32_t *>(tracker.LastBlock());
+ BOOST_CHECK_EQUAL(ptr[0], 0xd3988cd);
+ BOOST_CHECK_EQUAL(ptr[1], 0x7996c6d6);
}
+BOOST_AUTO_TEST_CASE(LongStringProcessing)
+{
+ Tracker tracker;
+ STG::ENCRYPT_STREAM estream("pr7Hhen", Callback, &tracker);
+ const std::string source = "This is a test long string for checking stream encryption/decryption. \"abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ\"";
+ std::vector<char> buffer(source.length() + 9, 0);
+
+ estream.Put(source.c_str(), source.length() + 1, true);
+ BOOST_CHECK(tracker.LastSize() >= source.length() + 1);
+ BOOST_CHECK(tracker.LastBlock() != NULL);
+ memcpy(buffer.data(), tracker.LastBlock(), std::min(tracker.LastSize(), buffer.size()));
+
+ STG::DECRYPT_STREAM dstream("pr7Hhen", Callback, &tracker);
+ dstream.Put(buffer.data(), buffer.size(), true);
+ BOOST_CHECK(tracker.LastSize() >= buffer.size());
+ BOOST_CHECK(tracker.LastBlock() != NULL);
+ memcpy(buffer.data(), tracker.LastBlock(), std::min(tracker.LastSize(), buffer.size()));
+
+ BOOST_CHECK_EQUAL(std::string(buffer.data()), source);
}
-namespace tut
+BOOST_AUTO_TEST_CASE(VeryLongStringProcessing)
{
- struct bfstream_data {
- };
-
- typedef test_group<bfstream_data> tg;
- tg bfstream_test_group("BFStream tests group");
-
- typedef tg::object testobject;
-
- template<>
- template<>
- void testobject::test<1>()
- {
- set_test_name("Check bfstream mechanics");
-
- TRACKER tracker;
- STG::ENCRYPT_STREAM stream("pr7Hhen", Callback, &tracker);
- ensure_equals("CallCount() == 0 after construction", tracker.CallCount(), 0);
-
- uint32_t block[2] = {0x12345678, 0x87654321};
- stream.Put(&block[0], sizeof(block[0]));
- ensure_equals("CallCount() == 0 after first put", tracker.CallCount(), 0);
- stream.Put(&block[1], sizeof(block[1]));
- ensure_equals("CallCount() == 1 after second put", tracker.CallCount(), 1);
-
- uint32_t block2[4] = {0x12345678, 0x87654321, 0x12345678, 0x87654321};
- stream.Put(&block2[0], sizeof(block2[0]) * 3);
- ensure_equals("CallCount() == 2 after third put", tracker.CallCount(), 2);
- stream.Put(&block2[3], sizeof(block2[3]));
- ensure_equals("CallCount() == 3 after fourth put", tracker.CallCount(), 3);
- }
-
- template<>
- template<>
- void testobject::test<2>()
- {
- set_test_name("Check bfstream encryption");
-
- TRACKER tracker;
- STG::ENCRYPT_STREAM stream("pr7Hhen", Callback, &tracker);
-
- uint32_t block[2] = {0x12345678, 0x87654321};
- stream.Put(&block[0], sizeof(block[0]));
- ensure_equals("LastSize() == 0 after first put", tracker.LastSize(), 0);
- ensure_equals("LastBlock() == NULL after first put", tracker.LastBlock(), static_cast<const void *>(NULL));
- stream.Put(&block[1], sizeof(block[1]));
- ensure_equals("LastSize() == 8 after second put", tracker.LastSize(), 8);
- const uint32_t * ptr = static_cast<const uint32_t *>(tracker.LastBlock());
- ensure_equals("ptr[0] == 0xd3988cd after second put", ptr[0], 0xd3988cd);
- ensure_equals("ptr[1] == 0x7996c6d6 after second put", ptr[1], 0x7996c6d6);
-
- uint32_t block2[4] = {0x12345678, 0x87654321, 0x12345678, 0x87654321};
- stream.Put(&block2[0], sizeof(block2[0]) * 3);
- ensure_equals("LastSize() == 8 after third put", tracker.LastSize(), 8);
- ptr = static_cast<const uint32_t *>(tracker.LastBlock());
- ensure_equals("ptr[0] == 0xd3988cd after third put", ptr[0], 0xd3988cd);
- ensure_equals("ptr[1] == 0x7996c6d6 after third put", ptr[1], 0x7996c6d6);
-
- stream.Put(&block2[3], sizeof(block2[3]));
- ensure_equals("LastSize() == 8 after fourth put", tracker.LastSize(), 8);
- ptr = static_cast<const uint32_t *>(tracker.LastBlock());
- ensure_equals("ptr[0] == 0xd3988cd after fourth put", ptr[0], 0xd3988cd);
- ensure_equals("ptr[1] == 0x7996c6d6 after fourth put", ptr[1], 0x7996c6d6);
- }
-
- template<>
- template<>
- void testobject::test<3>()
- {
- set_test_name("Check bfstream long string processing");
-
- TRACKER tracker;
- STG::ENCRYPT_STREAM estream("pr7Hhen", Callback, &tracker);
- std::string source = "This is a test long string for checking stream encryption/decryption. \"abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ\"";
- char buffer[source.length() + 9];
- memset(buffer, 0, sizeof(buffer));
-
- estream.Put(source.c_str(), source.length() + 1, true);
- ensure("Encryption long string LastSize()", tracker.LastSize() >= source.length() + 1);
- ensure("Encryption long string LastBlock() != NULL", tracker.LastBlock() != NULL);
- memcpy(buffer, tracker.LastBlock(), std::min(tracker.LastSize(), sizeof(buffer)));
-
- STG::DECRYPT_STREAM dstream("pr7Hhen", Callback, &tracker);
- dstream.Put(buffer, sizeof(buffer), true);
- ensure("Decryption long string LastSize() decryption", tracker.LastSize() >= sizeof(buffer));
- ensure("Decryption long string LastBlock() != NULL", tracker.LastBlock() != NULL);
- memcpy(buffer, tracker.LastBlock(), std::min(tracker.LastSize(), sizeof(buffer)));
-
- ensure_equals("Decrypt(Encrypt(source)) == source", std::string(buffer), source);
- }
-
- template<>
- template<>
- void testobject::test<4>()
- {
- set_test_name("Check bfstream very long string processing");
-
- Decryptor decryptor("pr7Hhen");
- STG::ENCRYPT_STREAM estream("pr7Hhen", EncryptCallback, &decryptor);
- //char buffer[source.length() + 9];
- //memset(buffer, 0, sizeof(buffer));
-
- estream.Put(longString.c_str(), longString.length() + 1, true);
- //ensure("Encryption long string LastSize()", tracker.LastSize() >= source.length() + 1);
- //ensure("Encryption long string LastBlock() != NULL", tracker.LastBlock() != NULL);
- //memcpy(buffer, tracker.LastBlock(), std::min(tracker.LastSize(), sizeof(buffer)));
-
- //dstream.Put(buffer, sizeof(buffer), true);
- //ensure("Decryption long string LastSize() decryption", tracker.LastSize() >= sizeof(buffer));
- //ensure("Decryption long string LastBlock() != NULL", tracker.LastBlock() != NULL);
- //memcpy(buffer, tracker.LastBlock(), std::min(tracker.LastSize(), sizeof(buffer)));
-
- ensure_equals("Decrypt(Encrypt(source)) == source", decryptor.Result(), longString);
- }
-
- template<>
- template<>
- void testobject::test<5>()
- {
- set_test_name("Check bfstream mechanics");
-
- TRACKER tracker;
- STG::ENCRYPT_STREAM stream("pr7Hhen", Callback, &tracker);
- ensure_equals("CallCount() == 0 after construction", tracker.CallCount(), 0);
-
- uint32_t block[2] = {0x12345678, 0x87654321};
- stream.Put(&block[0], sizeof(block[0]));
- ensure_equals("CallCount() == 0 after first put", tracker.CallCount(), 0);
- stream.Put(&block[1], sizeof(block[1]));
- ensure_equals("CallCount() == 1 after second put", tracker.CallCount(), 1);
- stream.Put(&block[0], 0, true); // Check last callback
- ensure_equals("CallCount() == 2 after third (null) put", tracker.CallCount(), 2);
- }
+ Decryptor decryptor("pr7Hhen");
+ STG::ENCRYPT_STREAM estream("pr7Hhen", EncryptCallback, &decryptor);
+
+ estream.Put(longString.c_str(), longString.length() + 1, true);
+ BOOST_CHECK_EQUAL(decryptor.Result(), longString);
}
+
+BOOST_AUTO_TEST_CASE(Mechanics2)
+{
+ Tracker tracker;
+ STG::ENCRYPT_STREAM stream("pr7Hhen", Callback, &tracker);
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 0);
+
+ uint32_t block[2] = {0x12345678, 0x87654321};
+ stream.Put(&block[0], sizeof(block[0]));
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 0);
+ stream.Put(&block[1], sizeof(block[1]));
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 1);
+ stream.Put(&block[0], 0, true); // Check last callback
+ BOOST_CHECK_EQUAL(tracker.CallCount(), 2);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGCrypto
#include "stg/blowfish.h"
+#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 <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+#include <string>
+#include <vector>
+#include <array>
+
namespace
{
-bool equalCtx(const BLOWFISH_CTX & a, const BLOWFISH_CTX & b)
+bool equalCtx(const BLOWFISH_CTX& a, const BLOWFISH_CTX& b)
{
for (size_t i = 0; i < sizeof(a.P); ++i)
- if (a.P[i] != b.P[i]) {
+ if (a.P[i] != b.P[i])
+ {
//printf("Failed for P at %d: 0%x != 0%x\n", i, a.P[i], b.P[i]);
return false;
}
for (size_t i = 0; i < 4; ++i)
for (size_t j = 0; j < 256; ++j)
- if (a.S[i][j] != b.S[i][j]) {
+ if (a.S[i][j] != b.S[i][j])
+ {
//printf("Failed for S at %d, %d: 0%x != 0%x\n", i, j, a.S[i][j], b.S[i][j]);
return false;
bool equalString(const char* a, const char* b, size_t length)
{
- bool res = true;
for (size_t i = 0; i < length; ++i)
- if (a[i] != b[i]) {
+ if (a[i] != b[i])
+ {
//printf("Failed at pos %d: %hhu != %hhu\n", i, a[i], b[i]);
- res = false;
+ return false;
}
- return res;
+ return true;
}
const BLOWFISH_CTX testCtx =
} // namespace anonymous
-namespace tut
-{
- struct crypto_data {
- };
-
- typedef test_group<crypto_data> tg;
- tg crypto_test_group("Crypto tests group");
-
- typedef tg::object testobject;
-
- template<>
- template<>
- void testobject::test<1>()
- {
- set_test_name("Check context creation");
-
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- ensure("ctx == testCtx", equalCtx(ctx, testCtx));
- }
-
- template<>
- template<>
- void testobject::test<2>()
- {
- set_test_name("Check encryption");
-
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- uint32_t a = 0x12345678;
- uint32_t b = 0x87654321;
- Blowfish_Encrypt(&ctx, &a, &b);
-
- ensure_equals("a == 0xd3988cd", a, 0xd3988cd);
- ensure_equals("b == 0x7996c6d6", b, 0x7996c6d6);
- }
-
- template<>
- template<>
- void testobject::test<3>()
- {
- set_test_name("Check decryption");
-
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- uint32_t a = 0xd3988cd;
- uint32_t b = 0x7996c6d6;
- Blowfish_Decrypt(&ctx, &a, &b);
-
- ensure_equals("a == 0x12345678", a, 0x12345678);
- ensure_equals("b == 0x87654321", b, 0x87654321);
- }
-
- template<>
- template<>
- void testobject::test<4>()
- {
- set_test_name("Check block encryption");
-
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- uint32_t block[2] = {0x12345678, 0x87654321};
- EncryptBlock(&block, &block, &ctx);
-
- ensure_equals("block[0] == 0xd3988cd", block[0], 0xd3988cd);
- ensure_equals("block[1] == 0x7996c6d6", block[1], 0x7996c6d6);
- }
-
- template<>
- template<>
- void testobject::test<5>()
- {
- set_test_name("Check block decryption");
-
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- uint32_t block[2] = {0xd3988cd, 0x7996c6d6};
- DecryptBlock(&block, &block, &ctx);
-
- ensure_equals("block[0] == 0x12345678", block[0], 0x12345678);
- ensure_equals("block[1] == 0x87654321", block[1], 0x87654321);
- }
-
- template<>
- template<>
- void testobject::test<6>()
- {
- set_test_name("Check string encryption");
+BOOST_AUTO_TEST_SUITE(Crypto)
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- char res[8];
- EncryptString(res, "testtest", 8, &ctx);
+BOOST_AUTO_TEST_CASE(ContextCreation)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ BOOST_CHECK(equalCtx(ctx, testCtx));
+}
- ensure("EncryptString(\"testtest\") == testString", equalString(res, (char *)testString, 8));
- }
+BOOST_AUTO_TEST_CASE(Encryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t a = 0x12345678;
+ uint32_t b = 0x87654321;
+ Blowfish_Encrypt(&ctx, &a, &b);
+
+ BOOST_CHECK_EQUAL(a, 0xd3988cd);
+ BOOST_CHECK_EQUAL(b, 0x7996c6d6);
+}
- template<>
- template<>
- void testobject::test<7>()
- {
- set_test_name("Check long string encryption");
+BOOST_AUTO_TEST_CASE(Decryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t a = 0xd3988cd;
+ uint32_t b = 0x7996c6d6;
+ Blowfish_Decrypt(&ctx, &a, &b);
+
+ BOOST_CHECK_EQUAL(a, 0x12345678);
+ BOOST_CHECK_EQUAL(b, 0x87654321);
+}
- BLOWFISH_CTX ctx;
- InitContext("pr7Hhen", 7, &ctx);
- std::string source("abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- char longTest[source.length() + 8];
- EncryptString(longTest, source.c_str(), source.length() + 1, &ctx);
- DecryptString(longTest, longTest, sizeof(longTest), &ctx);
+BOOST_AUTO_TEST_CASE(BlockEncryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t block[2] = {0x12345678, 0x87654321};
+ EncryptBlock(&block, &block, &ctx);
- ensure_equals("DecryptString(EncryptString(longTest)) == longTest", source, std::string(longTest));
- }
+ BOOST_CHECK_EQUAL(block[0], 0xd3988cd);
+ BOOST_CHECK_EQUAL(block[1], 0x7996c6d6);
+}
- template<>
- template<>
- void testobject::test<8>()
- {
- set_test_name("Check old string encryption");
+BOOST_AUTO_TEST_CASE(BlockDecryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ uint32_t block[2] = {0xd3988cd, 0x7996c6d6};
+ DecryptBlock(&block, &block, &ctx);
- BLOWFISH_CTX ctx;
- InitContext("123456", 7, &ctx);
- const unsigned char source[] = {0xe9, 0xfe, 0xcb, 0xc5, 0xad, 0x3e, 0x87, 0x39,
- 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb,
- 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb,
- 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb};
- char res[32];
- DecryptString(res, source, 32, &ctx);
+ BOOST_CHECK_EQUAL(block[0], 0x12345678);
+ BOOST_CHECK_EQUAL(block[1], 0x87654321);
+}
- ensure_equals("DecryptString(...) == 'admin'", std::string(res), "admin");
- }
+BOOST_AUTO_TEST_CASE(StringEncryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ char res[8];
+ EncryptString(res, "testtest", 8, &ctx);
- template<>
- template<>
- void testobject::test<9>()
- {
- set_test_name("Check new string encryption");
+ BOOST_CHECK(equalString(res, reinterpret_cast<const char*>(testString), 8));
+}
- BLOWFISH_CTX ctx;
- InitContext("123456", 7, &ctx);
- const unsigned char source[] = {0xe9, 0xfe, 0xcb, 0xc5, 0xad, 0x3e, 0x87, 0x39,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- char res[32];
- DecryptString(res, source, 32, &ctx);
+BOOST_AUTO_TEST_CASE(LongStringEncryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("pr7Hhen", 7, &ctx);
+ const std::string source("abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ std::vector<char> longTest(source.length() + 8);
+ EncryptString(longTest.data(), source.c_str(), source.length() + 1, &ctx);
+ DecryptString(longTest.data(), longTest.data(), longTest.size(), &ctx);
+
+ BOOST_CHECK_EQUAL(source, std::string(longTest.data()));
+}
- ensure_equals("DecryptString(...) == 'admin'", std::string(res), "admin");
- }
+BOOST_AUTO_TEST_CASE(OldStringEncryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("123456", 7, &ctx);
+ const unsigned char source[] = {0xe9, 0xfe, 0xcb, 0xc5, 0xad, 0x3e, 0x87, 0x39,
+ 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb,
+ 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb,
+ 0x3d, 0xd5, 0xf4, 0xed, 0xb0, 0x15, 0xe6, 0xcb};
+ std::array<char, 32> res{};
+ DecryptString(res.data(), source, res.size(), &ctx);
+
+ BOOST_CHECK_EQUAL(std::string(res.data()), "admin");
+}
+BOOST_AUTO_TEST_CASE(NewStringEncryption)
+{
+ BLOWFISH_CTX ctx;
+ InitContext("123456", 7, &ctx);
+ const unsigned char source[] = {0xe9, 0xfe, 0xcb, 0xc5, 0xad, 0x3e, 0x87, 0x39,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ std::array<char, 32> res{};
+ DecryptString(res.data(), source, 32, &ctx);
+
+ BOOST_CHECK_EQUAL(std::string(res.data()), "admin");
}
+
+BOOST_AUTO_TEST_SUITE_END()
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
+#define BOOST_TEST_MODULE STGRawIP
+
+#include "raw_ip_packet_old.h"
+#include "stg/raw_ip_packet.h"
+
+#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 <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
#include <cstdlib>
#include <cstdint>
#include <ctime>
#include <iostream>
-#include "tut/tut.hpp"
-
-#include "raw_ip_packet_old.h"
-#include "stg/raw_ip_packet.h"
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
-#ifndef ITERATIONS
-#define ITERATIONS 1000
-#endif
+namespace
+{
-void genVector(uint8_t * buf);
+constexpr size_t ITERATIONS = 1000;
-namespace STG
+std::array<uint8_t, 68> genVector()
{
-std::ostream & operator<<(std::ostream & stream, const RawPacket & p);
+ std::array<uint8_t, 68> res;
+ for (size_t i = 0; i < 68; ++i)
+ res[i] = rand() % 256;
+ res[0] = (res[0] & 0xF0) | 0x05; // Fix header length
+ return res;
}
-namespace tut
-{
- struct rp_data {
- };
-
- typedef test_group<rp_data> tg;
- tg rp_test_group("STG::RawPacket tests group");
-
- typedef tg::object testobject;
-
- template<>
- template<>
- void testobject::test<1>()
- {
- set_test_name("Check structure consistency");
-
- STG::RawPacket rp;
- rp.rawPacket.header.ipHeader.ip_v = 4;
- rp.rawPacket.header.ipHeader.ip_hl = 5;
- rp.rawPacket.header.ipHeader.ip_tos = 0;
- rp.rawPacket.header.ipHeader.ip_len = htons(40); // 20 of header + 20 of data
- rp.rawPacket.header.ipHeader.ip_p = 6;
- rp.rawPacket.header.ipHeader.ip_src.s_addr = inet_addr("192.168.0.1");
- rp.rawPacket.header.ipHeader.ip_dst.s_addr = inet_addr("192.168.0.101");
- rp.rawPacket.header.sPort = htons(80);
- rp.rawPacket.header.dPort = htons(38546);
-
- ensure_equals("IP header size (explicitly)", sizeof(rp.rawPacket.header.ipHeader), static_cast<size_t>(20));
- ensure_equals("IP version", rp.GetIPVersion(), 4);
- ensure_equals("IP header size (with options)", rp.GetHeaderLen(), 20);
- ensure_equals("Underlying protocol version", rp.GetProto(), 6);
- ensure_equals("Packet length", rp.GetLen(), static_cast<uint32_t>(40));
- ensure_equals("Source IP address", rp.GetSrcIP(), inet_addr("192.168.0.1"));
- ensure_equals("Destination IP address", rp.GetDstIP(), inet_addr("192.168.0.101"));
- ensure_equals("Source port number", rp.GetSrcPort(), 80);
- ensure_equals("Destination port number", rp.GetDstPort(), 38546);
- }
-
- template<>
- template<>
- void testobject::test<2>()
- {
- srand(time(NULL));
- for (size_t i = 0; i < ITERATIONS; ++i) {
- RAW_PACKET_OLD p1;
- STG::RawPacket p2;
- STG::RawPacket p3;
-
- uint8_t buf[68];
- genVector(buf);
-
- memcpy(p1.pckt, buf, 68);
- memcpy(p2.rawPacket.data, buf, 68);
- memcpy(p3.rawPacket.data, buf, 68);
-
- ensure_equals("IP versions", p1.GetIPVersion(), p2.GetIPVersion());
- ensure_equals("IP headers length", p1.GetHeaderLen(), p2.GetHeaderLen());
- ensure_equals("Protocols", p1.GetProto(), p2.GetProto());
- ensure_equals("Source IPs", p1.GetSrcIP(), p2.GetSrcIP());
- ensure_equals("Destination IPs", p1.GetDstIP(), p2.GetDstIP());
- ensure_equals("Source ports", p1.GetSrcPort(), p2.GetSrcPort());
- ensure_equals("Destination ports", p1.GetDstPort(), p2.GetDstPort());
-
- ensure_equals("Self equallity", p2, p3);
- ensure_equals("Reverse self equallity", p3, p2);
- }
- }
}
-inline
-void genVector(uint8_t * buf)
+namespace std
{
- for (size_t i = 0; i < 68; ++i) {
- buf[i] = rand() % 256;
- }
- buf[0] = (buf[0] & 0xF0) | 0x05; // Fix header length
-}
-std::ostream & STG::operator<<(std::ostream & stream, const RawPacket & p)
+std::ostream & operator<<(std::ostream& stream, const STG::RawPacket& p)
{
- stream.unsetf(std::ios::dec);
stream.setf(std::ios::hex);
for (size_t i = 0; i < sizeof(p.rawPacket.data); ++i) {
stream << static_cast<unsigned>(p.rawPacket.data[i]);
}
- stream.unsetf(std::ios::hex);
stream.setf(std::ios::dec);
return stream;
}
+
+}
+
+BOOST_AUTO_TEST_SUITE(RawIP)
+
+BOOST_AUTO_TEST_CASE(StructureConsistency)
+{
+ STG::RawPacket rp;
+ rp.rawPacket.header.ipHeader.ip_v = 4;
+ rp.rawPacket.header.ipHeader.ip_hl = 5;
+ rp.rawPacket.header.ipHeader.ip_tos = 0;
+ rp.rawPacket.header.ipHeader.ip_len = htons(40); // 20 of header + 20 of data
+ rp.rawPacket.header.ipHeader.ip_p = 6;
+ rp.rawPacket.header.ipHeader.ip_src.s_addr = inet_addr("192.168.0.1");
+ rp.rawPacket.header.ipHeader.ip_dst.s_addr = inet_addr("192.168.0.101");
+ rp.rawPacket.header.sPort = htons(80);
+ rp.rawPacket.header.dPort = htons(38546);
+
+ BOOST_CHECK_EQUAL(sizeof(rp.rawPacket.header.ipHeader), static_cast<size_t>(20));
+ BOOST_CHECK_EQUAL(rp.GetIPVersion(), 4);
+ BOOST_CHECK_EQUAL(rp.GetHeaderLen(), 20);
+ BOOST_CHECK_EQUAL(rp.GetProto(), 6);
+ BOOST_CHECK_EQUAL(rp.GetLen(), static_cast<uint32_t>(40));
+ BOOST_CHECK_EQUAL(rp.GetSrcIP(), inet_addr("192.168.0.1"));
+ BOOST_CHECK_EQUAL(rp.GetDstIP(), inet_addr("192.168.0.101"));
+ BOOST_CHECK_EQUAL(rp.GetSrcPort(), 80);
+ BOOST_CHECK_EQUAL(rp.GetDstPort(), 38546);
+}
+
+BOOST_AUTO_TEST_CASE(RandomTests)
+{
+ srand(time(NULL));
+ for (size_t i = 0; i < ITERATIONS; ++i)
+ {
+ RAW_PACKET_OLD p1;
+ STG::RawPacket p2;
+ STG::RawPacket p3;
+
+ const auto buf = genVector();
+
+ memcpy(p1.pckt, buf.data(), 68);
+ memcpy(p2.rawPacket.data, buf.data(), 68);
+ memcpy(p3.rawPacket.data, buf.data(), 68);
+
+ BOOST_CHECK_EQUAL(p1.GetIPVersion(), p2.GetIPVersion());
+ BOOST_CHECK_EQUAL(p1.GetHeaderLen(), p2.GetHeaderLen());
+ BOOST_CHECK_EQUAL(p1.GetProto(), p2.GetProto());
+ BOOST_CHECK_EQUAL(p1.GetSrcIP(), p2.GetSrcIP());
+ BOOST_CHECK_EQUAL(p1.GetDstIP(), p2.GetDstIP());
+ BOOST_CHECK_EQUAL(p1.GetSrcPort(), p2.GetSrcPort());
+ BOOST_CHECK_EQUAL(p1.GetDstPort(), p2.GetDstPort());
+
+ BOOST_CHECK_EQUAL(p2, p3);
+ BOOST_CHECK_EQUAL(p3, p2);
+ }
+}
+
+BOOST_AUTO_TEST_SUITE_END()
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGTariff
#include "stg/tariff_conf.h"
#include "tariff_impl.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 <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+BOOST_AUTO_TEST_SUITE(Tariffs)
+
+BOOST_AUTO_TEST_CASE(Construction)
+{
+ STG::TariffData td("test");
+ td.tariffConf.fee = 1;
+ td.tariffConf.free = 2;
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
+ td.tariffConf.passiveCost = 4;
+ td.dirPrice[0].mDay = 30;
+ td.dirPrice[0].hDay = 9;
+ td.dirPrice[0].mNight = 30;
+ td.dirPrice[0].hNight = 21;
+ td.dirPrice[0].priceDayA = 0;
+ td.dirPrice[0].priceDayB = 1;
+ td.dirPrice[0].priceNightA = 2;
+ td.dirPrice[0].priceNightB = 3;
+ td.dirPrice[0].threshold = 4;
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 0;
+ const STG::TariffImpl tariff(td);
+
+ BOOST_CHECK(tariff.GetFreeMb() == td.tariffConf.free);
+ BOOST_CHECK(tariff.GetPassiveCost() == td.tariffConf.passiveCost);
+ BOOST_CHECK(tariff.GetFee() == td.tariffConf.fee);
+ BOOST_CHECK(tariff.GetFree() == td.tariffConf.free);
+ BOOST_CHECK(tariff.GetName() == td.tariffConf.name);
+ BOOST_CHECK(tariff.GetTraffType() == td.tariffConf.traffType);
+ BOOST_CHECK(tariff.GetThreshold(0) == td.dirPrice[0].threshold);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+}
+
+BOOST_AUTO_TEST_CASE(TraffTypes)
+{
+ STG::TariffData td("test");
+ td.tariffConf.fee = 1;
+ td.tariffConf.free = 2;
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP;
+ td.tariffConf.passiveCost = 4;
+ td.dirPrice[0].mDay = 30;
+ td.dirPrice[0].hDay = 9;
+ td.dirPrice[0].mNight = 30;
+ td.dirPrice[0].hNight = 21;
+ td.dirPrice[0].priceDayA = 0;
+ td.dirPrice[0].priceDayB = 1;
+ td.dirPrice[0].priceNightA = 2;
+ td.dirPrice[0].priceNightB = 3;
+ td.dirPrice[0].threshold = 4;
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 0;
+ STG::TariffImpl tariff(td);
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_UP);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 3);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 2);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 1);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 0);
+
+ td.tariffConf.traffType = STG::Tariff::TRAFF_DOWN;
+ tariff = td;
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_DOWN);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 0);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 1);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 2);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 3);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+
+ td.tariffConf.traffType = STG::Tariff::TRAFF_MAX;
+ tariff = td;
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_MAX);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 3);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
+ tariff = td;
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_UP_DOWN);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+}
+
+BOOST_AUTO_TEST_CASE(NormalIntervalPrices)
+{
+ STG::TariffData td("test");
+ td.tariffConf.fee = 1;
+ td.tariffConf.free = 2;
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
+ td.tariffConf.passiveCost = 4;
+ td.dirPrice[0].mDay = 30;
+ td.dirPrice[0].hDay = 9;
+ td.dirPrice[0].mNight = 30;
+ td.dirPrice[0].hNight = 21;
+ td.dirPrice[0].priceDayA = 0;
+ td.dirPrice[0].priceDayB = 1;
+ td.dirPrice[0].priceNightA = 2;
+ td.dirPrice[0].priceNightB = 3;
+ td.dirPrice[0].threshold = 4;
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 0;
+ STG::TariffImpl tariff(td);
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 1); // Near 17:30, 6 > 4 DB
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 2); // Near 22:30, 0 < 4 NA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 3); // Near 22:30, 6 > 4 NB
+
+ td.dirPrice[0].singlePrice = 1;
+ tariff = td;
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 1); // Near 17:30, 6 > 4 DB
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 1); // Near 22:30, 6 > 4 DB
+
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 1;
+ tariff = td;
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 6 > 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 2); // Near 22:30, 0 < 4 NA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 2); // Near 22:30, 6 > 4 NA
+
+ td.dirPrice[0].singlePrice = 1;
+ td.dirPrice[0].noDiscount = 1;
+ tariff = td;
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 6 > 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 6 > 4 DA
+}
+
+BOOST_AUTO_TEST_CASE(ConstructionForDayNightInversion)
+{
+ STG::TariffData td("test");
+ td.tariffConf.fee = 1;
+ td.tariffConf.free = 2;
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
+ td.tariffConf.passiveCost = 4;
+ td.dirPrice[0].mDay = 30;
+ td.dirPrice[0].hDay = 21;
+ td.dirPrice[0].mNight = 30;
+ td.dirPrice[0].hNight = 9;
+ td.dirPrice[0].priceDayA = 0;
+ td.dirPrice[0].priceDayB = 1;
+ td.dirPrice[0].priceNightA = 2;
+ td.dirPrice[0].priceNightB = 3;
+ td.dirPrice[0].threshold = 4;
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 0;
+ const STG::TariffImpl tariff(td);
+
+ BOOST_CHECK(tariff.GetFreeMb() == td.tariffConf.free);
+ BOOST_CHECK(tariff.GetPassiveCost() == td.tariffConf.passiveCost);
+ BOOST_CHECK(tariff.GetFee() == td.tariffConf.fee);
+ BOOST_CHECK(tariff.GetFree() == td.tariffConf.free);
+ BOOST_CHECK(tariff.GetName() == td.tariffConf.name);
+ BOOST_CHECK(tariff.GetTraffType() == td.tariffConf.traffType);
+ BOOST_CHECK(tariff.GetThreshold(0) == td.dirPrice[0].threshold);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+}
+
+BOOST_AUTO_TEST_CASE(TraffTypeForDayNightInversion)
+{
+ STG::TariffData td("test");
+ td.tariffConf.fee = 1;
+ td.tariffConf.free = 2;
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP;
+ td.tariffConf.passiveCost = 4;
+ td.dirPrice[0].mDay = 30;
+ td.dirPrice[0].hDay = 21;
+ td.dirPrice[0].mNight = 30;
+ td.dirPrice[0].hNight = 9;
+ td.dirPrice[0].priceDayA = 0;
+ td.dirPrice[0].priceDayB = 1;
+ td.dirPrice[0].priceNightA = 2;
+ td.dirPrice[0].priceNightB = 3;
+ td.dirPrice[0].threshold = 4;
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 0;
+ STG::TariffImpl tariff(td);
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_UP);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 3);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 2);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 1);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 0);
+
+ td.tariffConf.traffType = STG::Tariff::TRAFF_DOWN;
+ tariff = td;
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_DOWN);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 0);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 1);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 2);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 3);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+
+ td.tariffConf.traffType = STG::Tariff::TRAFF_MAX;
+ tariff = td;
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_MAX);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 3);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 4);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 5);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
+ tariff = td;
+
+ BOOST_CHECK(tariff.GetTraffType() == STG::Tariff::TRAFF_UP_DOWN);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(6, 0), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(5, 1), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(4, 2), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(3, 3), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(2, 4), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(1, 5), 6);
+ BOOST_CHECK_EQUAL(tariff.GetTraffByType(0, 6), 6);
+}
+
+BOOST_AUTO_TEST_CASE(NormalIntervalPricesForDayNightInversion)
+{
+ STG::TariffData td("test");
+ td.tariffConf.fee = 1;
+ td.tariffConf.free = 2;
+ td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
+ td.tariffConf.passiveCost = 4;
+ td.dirPrice[0].mDay = 30;
+ td.dirPrice[0].hDay = 21;
+ td.dirPrice[0].mNight = 30;
+ td.dirPrice[0].hNight = 9;
+ td.dirPrice[0].priceDayA = 0;
+ td.dirPrice[0].priceDayB = 1;
+ td.dirPrice[0].priceNightA = 2;
+ td.dirPrice[0].priceNightB = 3;
+ td.dirPrice[0].threshold = 4;
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 0;
+ STG::TariffImpl tariff(td);
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 2); // Near 17:30, 0 < 4 NA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 3); // Near 17:30, 6 > 4 NB
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 1); // Near 22:30, 6 > 4 DB
+
+ td.dirPrice[0].singlePrice = 1;
+ tariff = td;
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA (ignore night)
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 1); // Near 17:30, 6 > 4 DB (ignore night)
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA (ignore night)
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 1); // Near 22:30, 6 > 4 DB (ignore night)
+
+ td.dirPrice[0].singlePrice = 0;
+ td.dirPrice[0].noDiscount = 1;
+ tariff = td;
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 2); // Near 17:30, 0 < 4 NA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 2); // Near 17:30, 6 > 4 NA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 6 > 4 DA
+
+ td.dirPrice[0].singlePrice = 1;
+ td.dirPrice[0].noDiscount = 1;
+ tariff = td;
+
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA (ignore night)
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 6 > 4 DA (ignore night)
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA (ignore night)
+ BOOST_CHECK_EQUAL(tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 6 > 4 DA (ignore night)
+}
+
+BOOST_AUTO_TEST_CASE(ChangePolicyAllow)
+{
+ STG::TariffData td("test");
+ td.tariffConf.changePolicy = STG::Tariff::ALLOW;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
+
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
+
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), true);
+
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl equal(td);
+
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), true);
+
+ td.tariffConf.fee = 150;
+ const STG::TariffImpl expensive(td);
+
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), true);
+}
+
+BOOST_AUTO_TEST_CASE(ChangePolicyToCheap)
{
- struct tariff_data {
- };
-
- typedef test_group<tariff_data> tg;
- tg tariff_test_group("TARIFF tests group");
-
- typedef tg::object testobject;
-
- template<>
- template<>
- void testobject::test<1>()
- {
- set_test_name("Check construction");
-
- STG::TariffData td("test");
- td.tariffConf.fee = 1;
- td.tariffConf.free = 2;
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
- td.tariffConf.passiveCost = 4;
- td.dirPrice[0].mDay = 30;
- td.dirPrice[0].hDay = 9;
- td.dirPrice[0].mNight = 30;
- td.dirPrice[0].hNight = 21;
- td.dirPrice[0].priceDayA = 0;
- td.dirPrice[0].priceDayB = 1;
- td.dirPrice[0].priceNightA = 2;
- td.dirPrice[0].priceNightB = 3;
- td.dirPrice[0].threshold = 4;
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 0;
- STG::TariffImpl tariff(td);
-
- ensure("freeMb = 2", tariff.GetFreeMb() == td.tariffConf.free);
- ensure("passiveCost = 4", tariff.GetPassiveCost() == td.tariffConf.passiveCost);
- ensure("fee = 1", tariff.GetFee() == td.tariffConf.fee);
- ensure("free (alias of freeMb) = 2", tariff.GetFree() == td.tariffConf.free);
- ensure("name = \"test\"'", tariff.GetName() == td.tariffConf.name);
- ensure("traffType = TRAFF_UP_DOWN", tariff.GetTraffType() == td.tariffConf.traffType);
- ensure("threshold[0] = 4", tariff.GetThreshold(0) == td.dirPrice[0].threshold);
- ensure_equals("traffByType(6, 0) = 6", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 6", tariff.GetTraffByType(5, 1), 6);
- ensure_equals("traffByType(4, 2) = 6", tariff.GetTraffByType(4, 2), 6);
- ensure_equals("traffByType(3, 3) = 6", tariff.GetTraffByType(3, 3), 6);
- ensure_equals("traffByType(2, 4) = 6", tariff.GetTraffByType(2, 4), 6);
- ensure_equals("traffByType(1, 5) = 6", tariff.GetTraffByType(1, 5), 6);
- ensure_equals("traffByType(0, 6) = 6", tariff.GetTraffByType(0, 6), 6);
- }
-
- template<>
- template<>
- void testobject::test<2>()
- {
- set_test_name("Check traff types");
-
- STG::TariffData td("test");
- td.tariffConf.fee = 1;
- td.tariffConf.free = 2;
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP;
- td.tariffConf.passiveCost = 4;
- td.dirPrice[0].mDay = 30;
- td.dirPrice[0].hDay = 9;
- td.dirPrice[0].mNight = 30;
- td.dirPrice[0].hNight = 21;
- td.dirPrice[0].priceDayA = 0;
- td.dirPrice[0].priceDayB = 1;
- td.dirPrice[0].priceNightA = 2;
- td.dirPrice[0].priceNightB = 3;
- td.dirPrice[0].threshold = 4;
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 0;
- STG::TariffImpl tariff(td);
-
- ensure("traffType = TRAFF_UP", tariff.GetTraffType() == STG::Tariff::TRAFF_UP);
- ensure_equals("traffByType(6, 0) = 6 for UP", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 5 for UP", tariff.GetTraffByType(5, 1), 5);
- ensure_equals("traffByType(4, 2) = 4 for UP", tariff.GetTraffByType(4, 2), 4);
- ensure_equals("traffByType(3, 3) = 3 for UP", tariff.GetTraffByType(3, 3), 3);
- ensure_equals("traffByType(2, 4) = 2 for UP", tariff.GetTraffByType(2, 4), 2);
- ensure_equals("traffByType(1, 5) = 1 for UP", tariff.GetTraffByType(1, 5), 1);
- ensure_equals("traffByType(0, 6) = 0 for UP", tariff.GetTraffByType(0, 6), 0);
-
- td.tariffConf.traffType = STG::Tariff::TRAFF_DOWN;
- tariff = td;
-
- ensure("traffType = TRAFF_DOWN", tariff.GetTraffType() == STG::Tariff::TRAFF_DOWN);
- ensure_equals("traffByType(6, 0) = 0 for DOWN", tariff.GetTraffByType(6, 0), 0);
- ensure_equals("traffByType(5, 1) = 1 for DOWN", tariff.GetTraffByType(5, 1), 1);
- ensure_equals("traffByType(4, 2) = 2 for DOWN", tariff.GetTraffByType(4, 2), 2);
- ensure_equals("traffByType(3, 3) = 3 for DOWN", tariff.GetTraffByType(3, 3), 3);
- ensure_equals("traffByType(2, 4) = 4 for DOWN", tariff.GetTraffByType(2, 4), 4);
- ensure_equals("traffByType(1, 5) = 5 for DOWN", tariff.GetTraffByType(1, 5), 5);
- ensure_equals("traffByType(0, 6) = 6 for DOWN", tariff.GetTraffByType(0, 6), 6);
-
- td.tariffConf.traffType = STG::Tariff::TRAFF_MAX;
- tariff = td;
-
- ensure("traffType = TRAFF_MAX", tariff.GetTraffType() == STG::Tariff::TRAFF_MAX);
- ensure_equals("traffByType(6, 0) = 6 for MAX", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 5 for MAX", tariff.GetTraffByType(5, 1), 5);
- ensure_equals("traffByType(4, 2) = 4 for MAX", tariff.GetTraffByType(4, 2), 4);
- ensure_equals("traffByType(3, 3) = 3 for MAX", tariff.GetTraffByType(3, 3), 3);
- ensure_equals("traffByType(2, 4) = 4 for MAX", tariff.GetTraffByType(2, 4), 4);
- ensure_equals("traffByType(1, 5) = 5 for MAX", tariff.GetTraffByType(1, 5), 5);
- ensure_equals("traffByType(0, 6) = 6 for MAX", tariff.GetTraffByType(0, 6), 6);
-
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
- tariff = td;
-
- ensure("traffType = TRAFF_UP_DOWN", tariff.GetTraffType() == STG::Tariff::TRAFF_UP_DOWN);
- ensure_equals("traffByType(6, 0) = 6 for UP_DOWN", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 6 for UP_DOWN", tariff.GetTraffByType(5, 1), 6);
- ensure_equals("traffByType(4, 2) = 6 for UP_DOWN", tariff.GetTraffByType(4, 2), 6);
- ensure_equals("traffByType(3, 3) = 6 for UP_DOWN", tariff.GetTraffByType(3, 3), 6);
- ensure_equals("traffByType(2, 4) = 6 for UP_DOWN", tariff.GetTraffByType(2, 4), 6);
- ensure_equals("traffByType(1, 5) = 6 for UP_DOWN", tariff.GetTraffByType(1, 5), 6);
- ensure_equals("traffByType(0, 6) = 6 for UP_DOWN", tariff.GetTraffByType(0, 6), 6);
- }
-
- template<>
- template<>
- void testobject::test<3>()
- {
- set_test_name("Check normal interval prices");
-
- STG::TariffData td("test");
- td.tariffConf.fee = 1;
- td.tariffConf.free = 2;
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
- td.tariffConf.passiveCost = 4;
- td.dirPrice[0].mDay = 30;
- td.dirPrice[0].hDay = 9;
- td.dirPrice[0].mNight = 30;
- td.dirPrice[0].hNight = 21;
- td.dirPrice[0].priceDayA = 0;
- td.dirPrice[0].priceDayB = 1;
- td.dirPrice[0].priceNightA = 2;
- td.dirPrice[0].priceNightB = 3;
- td.dirPrice[0].threshold = 4;
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 0;
- STG::TariffImpl tariff(td);
-
- ensure_equals("0000 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
- ensure_equals("0001 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 1); // Near 17:30, 6 > 4 DB
- ensure_equals("0010 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 2); // Near 22:30, 0 < 4 NA
- ensure_equals("0011 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 3); // Near 22:30, 6 > 4 NB
-
- td.dirPrice[0].singlePrice = 1;
- tariff = td;
-
- ensure_equals("0100 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
- ensure_equals("0101 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 1); // Near 17:30, 6 > 4 DB
- ensure_equals("0110 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
- ensure_equals("0111 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 1); // Near 22:30, 6 > 4 DB
-
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 1;
- tariff = td;
-
- ensure_equals("1000 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
- ensure_equals("1001 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 6 > 4 DA
- ensure_equals("1010 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 2); // Near 22:30, 0 < 4 NA
- ensure_equals("1011 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 2); // Near 22:30, 6 > 4 NA
-
- td.dirPrice[0].singlePrice = 1;
- td.dirPrice[0].noDiscount = 1;
- tariff = td;
-
- ensure_equals("1100 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA
- ensure_equals("1101 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 6 > 4 DA
- ensure_equals("1110 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
- ensure_equals("1111 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 6 > 4 DA
- }
-
- template<>
- template<>
- void testobject::test<4>()
- {
- set_test_name("Check construction for day-night inversion");
-
- STG::TariffData td("test");
- td.tariffConf.fee = 1;
- td.tariffConf.free = 2;
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
- td.tariffConf.passiveCost = 4;
- td.dirPrice[0].mDay = 30;
- td.dirPrice[0].hDay = 21;
- td.dirPrice[0].mNight = 30;
- td.dirPrice[0].hNight = 9;
- td.dirPrice[0].priceDayA = 0;
- td.dirPrice[0].priceDayB = 1;
- td.dirPrice[0].priceNightA = 2;
- td.dirPrice[0].priceNightB = 3;
- td.dirPrice[0].threshold = 4;
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 0;
- STG::TariffImpl tariff(td);
-
- ensure("freeMb = 2", tariff.GetFreeMb() == td.tariffConf.free);
- ensure("passiveCost = 4", tariff.GetPassiveCost() == td.tariffConf.passiveCost);
- ensure("fee = 1", tariff.GetFee() == td.tariffConf.fee);
- ensure("free (alias of freeMb) = 2", tariff.GetFree() == td.tariffConf.free);
- ensure("name = \"test\"'", tariff.GetName() == td.tariffConf.name);
- ensure("traffType = TRAFF_UP_DOWN", tariff.GetTraffType() == td.tariffConf.traffType);
- ensure("threshold[0] = 4", tariff.GetThreshold(0) == td.dirPrice[0].threshold);
- ensure_equals("traffByType(6, 0) = 6", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 6", tariff.GetTraffByType(5, 1), 6);
- ensure_equals("traffByType(4, 2) = 6", tariff.GetTraffByType(4, 2), 6);
- ensure_equals("traffByType(3, 3) = 6", tariff.GetTraffByType(3, 3), 6);
- ensure_equals("traffByType(2, 4) = 6", tariff.GetTraffByType(2, 4), 6);
- ensure_equals("traffByType(1, 5) = 6", tariff.GetTraffByType(1, 5), 6);
- ensure_equals("traffByType(0, 6) = 6", tariff.GetTraffByType(0, 6), 6);
- }
-
- template<>
- template<>
- void testobject::test<5>()
- {
- set_test_name("Check traff types for day-night inversion");
-
- STG::TariffData td("test");
- td.tariffConf.fee = 1;
- td.tariffConf.free = 2;
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP;
- td.tariffConf.passiveCost = 4;
- td.dirPrice[0].mDay = 30;
- td.dirPrice[0].hDay = 21;
- td.dirPrice[0].mNight = 30;
- td.dirPrice[0].hNight = 9;
- td.dirPrice[0].priceDayA = 0;
- td.dirPrice[0].priceDayB = 1;
- td.dirPrice[0].priceNightA = 2;
- td.dirPrice[0].priceNightB = 3;
- td.dirPrice[0].threshold = 4;
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 0;
- STG::TariffImpl tariff(td);
-
- ensure("traffType = TRAFF_UP", tariff.GetTraffType() == STG::Tariff::TRAFF_UP);
- ensure_equals("traffByType(6, 0) = 6 for UP", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 5 for UP", tariff.GetTraffByType(5, 1), 5);
- ensure_equals("traffByType(4, 2) = 4 for UP", tariff.GetTraffByType(4, 2), 4);
- ensure_equals("traffByType(3, 3) = 3 for UP", tariff.GetTraffByType(3, 3), 3);
- ensure_equals("traffByType(2, 4) = 2 for UP", tariff.GetTraffByType(2, 4), 2);
- ensure_equals("traffByType(1, 5) = 1 for UP", tariff.GetTraffByType(1, 5), 1);
- ensure_equals("traffByType(0, 6) = 0 for UP", tariff.GetTraffByType(0, 6), 0);
-
- td.tariffConf.traffType = STG::Tariff::TRAFF_DOWN;
- tariff = td;
-
- ensure("traffType = TRAFF_DOWN", tariff.GetTraffType() == STG::Tariff::TRAFF_DOWN);
- ensure_equals("traffByType(6, 0) = 0 for DOWN", tariff.GetTraffByType(6, 0), 0);
- ensure_equals("traffByType(5, 1) = 1 for DOWN", tariff.GetTraffByType(5, 1), 1);
- ensure_equals("traffByType(4, 2) = 2 for DOWN", tariff.GetTraffByType(4, 2), 2);
- ensure_equals("traffByType(3, 3) = 3 for DOWN", tariff.GetTraffByType(3, 3), 3);
- ensure_equals("traffByType(2, 4) = 4 for DOWN", tariff.GetTraffByType(2, 4), 4);
- ensure_equals("traffByType(1, 5) = 5 for DOWN", tariff.GetTraffByType(1, 5), 5);
- ensure_equals("traffByType(0, 6) = 6 for DOWN", tariff.GetTraffByType(0, 6), 6);
-
- td.tariffConf.traffType = STG::Tariff::TRAFF_MAX;
- tariff = td;
-
- ensure("traffType = TRAFF_MAX", tariff.GetTraffType() == STG::Tariff::TRAFF_MAX);
- ensure_equals("traffByType(6, 0) = 6 for MAX", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 5 for MAX", tariff.GetTraffByType(5, 1), 5);
- ensure_equals("traffByType(4, 2) = 4 for MAX", tariff.GetTraffByType(4, 2), 4);
- ensure_equals("traffByType(3, 3) = 3 for MAX", tariff.GetTraffByType(3, 3), 3);
- ensure_equals("traffByType(2, 4) = 4 for MAX", tariff.GetTraffByType(2, 4), 4);
- ensure_equals("traffByType(1, 5) = 5 for MAX", tariff.GetTraffByType(1, 5), 5);
- ensure_equals("traffByType(0, 6) = 6 for MAX", tariff.GetTraffByType(0, 6), 6);
-
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
- tariff = td;
-
- ensure("traffType = TRAFF_UP_DOWN", tariff.GetTraffType() == STG::Tariff::TRAFF_UP_DOWN);
- ensure_equals("traffByType(6, 0) = 6 for UP_DOWN", tariff.GetTraffByType(6, 0), 6);
- ensure_equals("traffByType(5, 1) = 6 for UP_DOWN", tariff.GetTraffByType(5, 1), 6);
- ensure_equals("traffByType(4, 2) = 6 for UP_DOWN", tariff.GetTraffByType(4, 2), 6);
- ensure_equals("traffByType(3, 3) = 6 for UP_DOWN", tariff.GetTraffByType(3, 3), 6);
- ensure_equals("traffByType(2, 4) = 6 for UP_DOWN", tariff.GetTraffByType(2, 4), 6);
- ensure_equals("traffByType(1, 5) = 6 for UP_DOWN", tariff.GetTraffByType(1, 5), 6);
- ensure_equals("traffByType(0, 6) = 6 for UP_DOWN", tariff.GetTraffByType(0, 6), 6);
- }
-
- template<>
- template<>
- void testobject::test<6>()
- {
- set_test_name("Check normal interval prices for day-night inversion");
-
- STG::TariffData td("test");
- td.tariffConf.fee = 1;
- td.tariffConf.free = 2;
- td.tariffConf.traffType = STG::Tariff::TRAFF_UP_DOWN;
- td.tariffConf.passiveCost = 4;
- td.dirPrice[0].mDay = 30;
- td.dirPrice[0].hDay = 21;
- td.dirPrice[0].mNight = 30;
- td.dirPrice[0].hNight = 9;
- td.dirPrice[0].priceDayA = 0;
- td.dirPrice[0].priceDayB = 1;
- td.dirPrice[0].priceNightA = 2;
- td.dirPrice[0].priceNightB = 3;
- td.dirPrice[0].threshold = 4;
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 0;
- STG::TariffImpl tariff(td);
-
- ensure_equals("0000 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 2); // Near 17:30, 0 < 4 NA
- ensure_equals("0001 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 3); // Near 17:30, 6 > 4 NB
- ensure_equals("0010 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
- ensure_equals("0011 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 1); // Near 22:30, 6 > 4 DB
-
- td.dirPrice[0].singlePrice = 1;
- tariff = td;
-
- ensure_equals("0100 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA (ignore night)
- ensure_equals("0101 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 1); // Near 17:30, 6 > 4 DB (ignore night)
- ensure_equals("0110 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA (ignore night)
- ensure_equals("0111 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 1); // Near 22:30, 6 > 4 DB (ignore night)
-
- td.dirPrice[0].singlePrice = 0;
- td.dirPrice[0].noDiscount = 1;
- tariff = td;
-
- ensure_equals("1000 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 2); // Near 17:30, 0 < 4 NA
- ensure_equals("1001 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 2); // Near 17:30, 6 > 4 NA
- ensure_equals("1010 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA
- ensure_equals("1011 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 6 > 4 DA
-
- td.dirPrice[0].singlePrice = 1;
- td.dirPrice[0].noDiscount = 1;
- tariff = td;
-
- ensure_equals("1100 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 0 < 4 DA (ignore night)
- ensure_equals("1101 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286461245), 0); // Near 17:30, 6 > 4 DA (ignore night)
- ensure_equals("1110 == 0", tariff.GetPriceWithTraffType(0, 0 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 0 < 4 DA (ignore night)
- ensure_equals("1111 == 0", tariff.GetPriceWithTraffType(0, 6 * 1024 * 1024, 0, 1286479245), 0); // Near 22:30, 6 > 4 DA (ignore night)
- }
-
- template<>
- template<>
- void testobject::test<7>()
- {
- set_test_name("Check changePolicy - ALLOW");
-
- STG::TariffData td("test");
- td.tariffConf.changePolicy = STG::Tariff::ALLOW;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
-
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
-
- ensure_equals("Allow cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), true);
-
- td.tariffConf.fee = 100;
- STG::TariffImpl equal(td);
-
- ensure_equals("Allow equal", tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), true);
-
- td.tariffConf.fee = 150;
- STG::TariffImpl expensive(td);
-
- ensure_equals("Allow expensive", tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), true);
- }
-
- template<>
- template<>
- void testobject::test<8>()
- {
- set_test_name("Check changePolicy - TO_CHEAP");
-
- STG::TariffData td("test");
- td.tariffConf.changePolicy = STG::Tariff::TO_CHEAP;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
-
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
-
- ensure_equals("Allow cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), true);
-
- td.tariffConf.fee = 100;
- STG::TariffImpl equal(td);
-
- ensure_equals("Prohibit equal", tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), false);
-
- td.tariffConf.fee = 150;
- STG::TariffImpl expensive(td);
-
- ensure_equals("Prohibit expensive", tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), false);
- }
-
- template<>
- template<>
- void testobject::test<9>()
- {
- set_test_name("Check changePolicy - TO_EXPENSIVE");
+ STG::TariffData td("test");
+ td.tariffConf.changePolicy = STG::Tariff::TO_CHEAP;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
- STG::TariffData td("test");
- td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), true);
- ensure_equals("Prohibit cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl equal(td);
- td.tariffConf.fee = 100;
- STG::TariffImpl equal(td);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), false);
- ensure_equals("Allow equal", tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), true);
+ td.tariffConf.fee = 150;
+ const STG::TariffImpl expensive(td);
- td.tariffConf.fee = 150;
- STG::TariffImpl expensive(td);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), false);
+}
- ensure_equals("Allow expensive", tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), true);
- }
+BOOST_AUTO_TEST_CASE(ChangePolicyToExpensive)
+{
+ STG::TariffData td("test");
+ td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
- template<>
- template<>
- void testobject::test<10>()
- {
- set_test_name("Check changePolicy - DENY");
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
- STG::TariffData td("test");
- td.tariffConf.changePolicy = STG::Tariff::DENY;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl equal(td);
- ensure_equals("Prohibit cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), true);
- td.tariffConf.fee = 100;
- STG::TariffImpl equal(td);
+ td.tariffConf.fee = 150;
+ const STG::TariffImpl expensive(td);
- ensure_equals("Prohibit equal", tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), false);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), true);
+}
- td.tariffConf.fee = 150;
- STG::TariffImpl expensive(td);
+BOOST_AUTO_TEST_CASE(ChangePolicyDeny)
+{
+ STG::TariffData td("test");
+ td.tariffConf.changePolicy = STG::Tariff::DENY;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
+
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
- ensure_equals("Prohibit expensive", tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), false);
- }
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
- template<>
- template<>
- void testobject::test<11>()
- {
- set_test_name("Check changePolicyTimeout < current time");
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl equal(td);
- STG::TariffData td("test");
- td.tariffConf.changePolicyTimeout = 1451606400;
- td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(equal, 1461606400).empty(), false);
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
+ td.tariffConf.fee = 150;
+ const STG::TariffImpl expensive(td);
- ensure_equals("Allow cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), true);
- }
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(expensive, 1461606400).empty(), false);
+}
+
+BOOST_AUTO_TEST_CASE(ChangePolicyTimeoutInThePast)
+{
+ STG::TariffData td("test");
+ td.tariffConf.changePolicyTimeout = 1451606400;
+ td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
- template<>
- template<>
- void testobject::test<12>()
- {
- set_test_name("Check changePolicyTimeout > current time");
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
- STG::TariffData td("test");
- td.tariffConf.changePolicyTimeout = 1483228800;
- td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), true);
+}
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
+BOOST_AUTO_TEST_CASE(ChangePolicyTimeoutInFuture)
+{
+ STG::TariffData td("test");
+ td.tariffConf.changePolicyTimeout = 1483228800;
+ td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
- ensure_equals("Prohibit cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
- }
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
- template<>
- template<>
- void testobject::test<13>()
- {
- set_test_name("Check changePolicyTimeout = 0");
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
+}
- STG::TariffData td("test");
- td.tariffConf.changePolicyTimeout = 0;
- td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
- td.tariffConf.fee = 100;
- STG::TariffImpl tariff(td);
+BOOST_AUTO_TEST_CASE(ChangePolicyTimeoutNow)
+{
+ STG::TariffData td("test");
+ td.tariffConf.changePolicyTimeout = 0;
+ td.tariffConf.changePolicy = STG::Tariff::TO_EXPENSIVE;
+ td.tariffConf.fee = 100;
+ const STG::TariffImpl tariff(td);
- td.tariffConf.fee = 50;
- STG::TariffImpl cheaper(td);
+ td.tariffConf.fee = 50;
+ const STG::TariffImpl cheaper(td);
- ensure_equals("Prohibit cheaper", tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
- }
+ BOOST_CHECK_EQUAL(tariff.TariffChangeIsAllowed(cheaper, 1461606400).empty(), false);
}
+
+BOOST_AUTO_TEST_SUITE_END()