From 6567a7b534209284b423e9bfbe2dce9992d264b9 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 23 Sep 2016 17:26:03 +1200 Subject: [PATCH] Add tests for alerts enabling RPC safe mode --- src/test/alert_tests.cpp | 49 ++++++++++++++++++++++++++++++++--- src/test/data/alertTests.raw | Bin 1280 -> 1602 bytes 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/test/alert_tests.cpp b/src/test/alert_tests.cpp index ccfb6132..c9afafa9 100644 --- a/src/test/alert_tests.cpp +++ b/src/test/alert_tests.cpp @@ -13,6 +13,8 @@ #include "data/alertTests.raw.h" #include "main.h" +#include "rpcprotocol.h" +#include "rpcserver.h" #include "serialize.h" #include "streams.h" #include "util.h" @@ -25,6 +27,7 @@ #include #include #include +#include "json/json_spirit_reader_template.h" #include "key.h" #include "alertkeys.h" @@ -182,9 +185,22 @@ void GenerateAlertTests() ++alert.nID; SignAndSerialize(alert, sBuffer); + ++alert.nID; + alert.nPriority = 5000; + alert.strStatusBar = "Alert 3, disables RPC"; + alert.strRPCError = "RPC disabled"; + SignAndSerialize(alert, sBuffer); + + ++alert.nID; + alert.nPriority = 5000; + alert.strStatusBar = "Alert 4, re-enables RPC"; + alert.strRPCError = ""; + SignAndSerialize(alert, sBuffer); + ++alert.nID; alert.nMinVer = 11; alert.nMaxVer = 22; + alert.nPriority = 100; SignAndSerialize(alert, sBuffer); ++alert.nID; @@ -320,7 +336,7 @@ BOOST_AUTO_TEST_CASE(AlertNotify) alert.ProcessAlert(alertKey, false); std::vector r = read_lines(temp); - BOOST_CHECK_EQUAL(r.size(), 4u); + BOOST_CHECK_EQUAL(r.size(), 6u); // Windows built-in echo semantics are different than posixy shells. Quotes and // whitespace are printed literally. @@ -329,16 +345,43 @@ BOOST_AUTO_TEST_CASE(AlertNotify) BOOST_CHECK_EQUAL(r[0], "Alert 1"); BOOST_CHECK_EQUAL(r[1], "Alert 2, cancels 1"); BOOST_CHECK_EQUAL(r[2], "Alert 2, cancels 1"); - BOOST_CHECK_EQUAL(r[3], "Evil Alert; /bin/ls; echo "); // single-quotes should be removed + BOOST_CHECK_EQUAL(r[3], "Alert 3, disables RPC"); + BOOST_CHECK_EQUAL(r[4], "Alert 4, reenables RPC"); // dashes should be removed + BOOST_CHECK_EQUAL(r[5], "Evil Alert; /bin/ls; echo "); // single-quotes should be removed #else BOOST_CHECK_EQUAL(r[0], "'Alert 1' "); BOOST_CHECK_EQUAL(r[1], "'Alert 2, cancels 1' "); BOOST_CHECK_EQUAL(r[2], "'Alert 2, cancels 1' "); - BOOST_CHECK_EQUAL(r[3], "'Evil Alert; /bin/ls; echo ' "); + BOOST_CHECK_EQUAL(r[3], "'Alert 3, disables RPC' "); + BOOST_CHECK_EQUAL(r[4], "'Alert 4, reenables RPC' "); // dashes should be removed + BOOST_CHECK_EQUAL(r[5], "'Evil Alert; /bin/ls; echo ' "); #endif boost::filesystem::remove(temp); SetMockTime(0); + mapAlerts.clear(); +} + +BOOST_AUTO_TEST_CASE(AlertDisablesRPC) +{ + SetMockTime(11); + const std::vector& alertKey = Params(CBaseChainParams::MAIN).AlertKey(); + + // Command should work before alerts + BOOST_CHECK_EQUAL(GetWarnings("rpc"), ""); + + // First alert should disable RPC + alerts[5].ProcessAlert(alertKey, false); + BOOST_CHECK_EQUAL(alerts[5].strRPCError, "RPC disabled"); + BOOST_CHECK_EQUAL(GetWarnings("rpc"), "RPC disabled"); + + // Second alert should re-enable RPC + alerts[6].ProcessAlert(alertKey, false); + BOOST_CHECK_EQUAL(alerts[6].strRPCError, ""); + BOOST_CHECK_EQUAL(GetWarnings("rpc"), ""); + + SetMockTime(0); + mapAlerts.clear(); } static bool falseFunc() { return false; } diff --git a/src/test/data/alertTests.raw b/src/test/data/alertTests.raw index 019f2b0df7b1ce6d483dff6d22a148970c652d26..23fbfa98f6a119fde9887e57242550b4b837447f 100644 GIT binary patch delta 610 zcmZqRI>fU_sg!0VWkT2!KtoS&PU znpYwU;Th{Fq+}K+Cgr3SD+C2N^8hhSAjQqVg-L;h?dgubNsL~fj?Q@Rf2=V){1|&n z;F~wax$b9$GfP#AZJ89z|1N#ERC-cj-m5*OQOggVYX5Ce_qONXVf_bPjy4Yucn412 z&MaFGau^P`h(p|BqN7lhs+*bzcMSvB1#XuW;&t|<9z#MKj&pMV2BwMgS06W5cHIjK79osKVw-Hv ztXz-NZg&G$CPjuh@~g!@M4I|;`nRAosnY23+t)JJ+7%>MF4cC5iVKcd$fO`v?Yh3E zN>`C5AgQn>ckR>qXYzulJ+#`%G3_g`P5WNb0S4vV45SD4*AAXYuB`^X#o;%LJr z%_nw`E;;3!%)0S^&X*>R50B>Byp-E3&!ixWNJf-8;^mTXz>% delta 279 zcmX@a)4;Vsky*@#k%58128cmmPaufLz`!!Om_>QA0h3h3<|dhKDZ5k`zddjJLt*=| z-MKdwbqXvg_$|6S>!4_AdkB+)y&%st#;ky}zkki*r*N%}YVdo!j-xgVBR;KHO(u2Wi{w`W6K`vK7l-mc$0o-({zf6$Mkd0r^bg=AB!n@kE7 zw(jCCCc94^-Sd3@(G$^6-o>`L@y5QL_>a4F3X{o8g|NwSEV7divf4X+nEI=Z=~Z4# z}5vov}87G;ae-~DMT6=+{z%%tFy8nE^h&zh9;ja=Ijj9XTnU6|&$OjNeQ MPHMp^mbgcY0KWNXHvj+t