Auto merge of #1027 - ThisIsNotOfficialCodeItsJustForks:t862-trivial-mock-test-example, r=ebfull
Add example mock test of CheckTransaction Closes #862.
This commit is contained in:
commit
658cdb15f7
|
@ -13,7 +13,7 @@ zcash_gtest_SOURCES = \
|
||||||
|
|
||||||
zcash_gtest_CPPFLAGS = -DMULTICORE -fopenmp -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DSTATIC
|
zcash_gtest_CPPFLAGS = -DMULTICORE -fopenmp -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DSTATIC
|
||||||
|
|
||||||
zcash_gtest_LDADD = -lgtest $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) \
|
zcash_gtest_LDADD = -lgtest -lgmock $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) \
|
||||||
$(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1)
|
$(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1)
|
||||||
if ENABLE_WALLET
|
if ENABLE_WALLET
|
||||||
zcash_gtest_LDADD += $(LIBBITCOIN_WALLET)
|
zcash_gtest_LDADD += $(LIBBITCOIN_WALLET)
|
||||||
|
|
|
@ -33,7 +33,7 @@ private:
|
||||||
bool pourVerify;
|
bool pourVerify;
|
||||||
public:
|
public:
|
||||||
CValidationState() : mode(MODE_VALID), nDoS(0), chRejectCode(0), corruptionPossible(false), pourVerify(true) {}
|
CValidationState() : mode(MODE_VALID), nDoS(0), chRejectCode(0), corruptionPossible(false), pourVerify(true) {}
|
||||||
bool DoS(int level, bool ret = false,
|
virtual bool DoS(int level, bool ret = false,
|
||||||
unsigned char chRejectCodeIn=0, std::string strRejectReasonIn="",
|
unsigned char chRejectCodeIn=0, std::string strRejectReasonIn="",
|
||||||
bool corruptionIn=false) {
|
bool corruptionIn=false) {
|
||||||
chRejectCode = chRejectCodeIn;
|
chRejectCode = chRejectCodeIn;
|
||||||
|
@ -45,43 +45,43 @@ public:
|
||||||
mode = MODE_INVALID;
|
mode = MODE_INVALID;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
bool SetPerformPourVerification(bool pourVerifyIn) {
|
virtual bool SetPerformPourVerification(bool pourVerifyIn) {
|
||||||
pourVerify = pourVerifyIn;
|
pourVerify = pourVerifyIn;
|
||||||
}
|
}
|
||||||
bool PerformPourVerification() {
|
virtual bool PerformPourVerification() {
|
||||||
return pourVerify;
|
return pourVerify;
|
||||||
}
|
}
|
||||||
bool Invalid(bool ret = false,
|
virtual bool Invalid(bool ret = false,
|
||||||
unsigned char _chRejectCode=0, std::string _strRejectReason="") {
|
unsigned char _chRejectCode=0, std::string _strRejectReason="") {
|
||||||
return DoS(0, ret, _chRejectCode, _strRejectReason);
|
return DoS(0, ret, _chRejectCode, _strRejectReason);
|
||||||
}
|
}
|
||||||
bool Error(std::string strRejectReasonIn="") {
|
virtual bool Error(std::string strRejectReasonIn="") {
|
||||||
if (mode == MODE_VALID)
|
if (mode == MODE_VALID)
|
||||||
strRejectReason = strRejectReasonIn;
|
strRejectReason = strRejectReasonIn;
|
||||||
mode = MODE_ERROR;
|
mode = MODE_ERROR;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool IsValid() const {
|
virtual bool IsValid() const {
|
||||||
return mode == MODE_VALID;
|
return mode == MODE_VALID;
|
||||||
}
|
}
|
||||||
bool IsInvalid() const {
|
virtual bool IsInvalid() const {
|
||||||
return mode == MODE_INVALID;
|
return mode == MODE_INVALID;
|
||||||
}
|
}
|
||||||
bool IsError() const {
|
virtual bool IsError() const {
|
||||||
return mode == MODE_ERROR;
|
return mode == MODE_ERROR;
|
||||||
}
|
}
|
||||||
bool IsInvalid(int &nDoSOut) const {
|
virtual bool IsInvalid(int &nDoSOut) const {
|
||||||
if (IsInvalid()) {
|
if (IsInvalid()) {
|
||||||
nDoSOut = nDoS;
|
nDoSOut = nDoS;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool CorruptionPossible() const {
|
virtual bool CorruptionPossible() const {
|
||||||
return corruptionPossible;
|
return corruptionPossible;
|
||||||
}
|
}
|
||||||
unsigned char GetRejectCode() const { return chRejectCode; }
|
virtual unsigned char GetRejectCode() const { return chRejectCode; }
|
||||||
std::string GetRejectReason() const { return strRejectReason; }
|
virtual std::string GetRejectReason() const { return strRejectReason; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_CONSENSUS_VALIDATION_H
|
#endif // BITCOIN_CONSENSUS_VALIDATION_H
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
|
@ -24,3 +25,29 @@ TEST(checktransaction_tests, check_vpub_not_both_nonzero) {
|
||||||
EXPECT_EQ(state.GetRejectReason(), "bad-txns-vpubs-both-nonzero");
|
EXPECT_EQ(state.GetRejectReason(), "bad-txns-vpubs-both-nonzero");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MockCValidationState : public CValidationState {
|
||||||
|
public:
|
||||||
|
MOCK_METHOD5(DoS, bool(int level, bool ret,
|
||||||
|
unsigned char chRejectCodeIn, std::string strRejectReasonIn,
|
||||||
|
bool corruptionIn));
|
||||||
|
MOCK_METHOD1(SetPerformPourVerification, bool(bool pourVerifyIn));
|
||||||
|
MOCK_METHOD0(PerformPourVerification, bool());
|
||||||
|
MOCK_METHOD3(Invalid, bool(bool ret,
|
||||||
|
unsigned char _chRejectCode, std::string _strRejectReason));
|
||||||
|
MOCK_METHOD1(Error, bool(std::string strRejectReasonIn));
|
||||||
|
MOCK_CONST_METHOD0(IsValid, bool());
|
||||||
|
MOCK_CONST_METHOD0(IsInvalid, bool());
|
||||||
|
MOCK_CONST_METHOD0(IsError, bool());
|
||||||
|
MOCK_CONST_METHOD1(IsInvalid, bool(int &nDoSOut));
|
||||||
|
MOCK_CONST_METHOD0(CorruptionPossible, bool());
|
||||||
|
MOCK_CONST_METHOD0(GetRejectCode, unsigned char());
|
||||||
|
MOCK_CONST_METHOD0(GetRejectReason, std::string());
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST(checktransaction_tests, mock_proof_of_concept) {
|
||||||
|
CTransaction tx;
|
||||||
|
MockCValidationState state;
|
||||||
|
EXPECT_CALL(state, DoS(10, false, REJECT_INVALID, "bad-txns-vin-empty", false)).Times(1);
|
||||||
|
CheckTransaction(tx, state);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue