Browse Source

Auto merge of #1027 - ThisIsNotOfficialCodeItsJustForks:t862-trivial-mock-test-example, r=ebfull

Add example mock test of CheckTransaction

Closes #862.
pull/145/head
zkbot 8 years ago
parent
commit
658cdb15f7
  1. 2
      src/Makefile.gtest.include
  2. 24
      src/consensus/validation.h
  3. 27
      src/gtest/test_checktransaction.cpp

2
src/Makefile.gtest.include

@ -13,7 +13,7 @@ zcash_gtest_SOURCES = \
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)
if ENABLE_WALLET
zcash_gtest_LDADD += $(LIBBITCOIN_WALLET)

24
src/consensus/validation.h

@ -33,7 +33,7 @@ private:
bool pourVerify;
public:
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="",
bool corruptionIn=false) {
chRejectCode = chRejectCodeIn;
@ -45,43 +45,43 @@ public:
mode = MODE_INVALID;
return ret;
}
bool SetPerformPourVerification(bool pourVerifyIn) {
virtual bool SetPerformPourVerification(bool pourVerifyIn) {
pourVerify = pourVerifyIn;
}
bool PerformPourVerification() {
virtual bool PerformPourVerification() {
return pourVerify;
}
bool Invalid(bool ret = false,
virtual bool Invalid(bool ret = false,
unsigned char _chRejectCode=0, std::string _strRejectReason="") {
return DoS(0, ret, _chRejectCode, _strRejectReason);
}
bool Error(std::string strRejectReasonIn="") {
virtual bool Error(std::string strRejectReasonIn="") {
if (mode == MODE_VALID)
strRejectReason = strRejectReasonIn;
mode = MODE_ERROR;
return false;
}
bool IsValid() const {
virtual bool IsValid() const {
return mode == MODE_VALID;
}
bool IsInvalid() const {
virtual bool IsInvalid() const {
return mode == MODE_INVALID;
}
bool IsError() const {
virtual bool IsError() const {
return mode == MODE_ERROR;
}
bool IsInvalid(int &nDoSOut) const {
virtual bool IsInvalid(int &nDoSOut) const {
if (IsInvalid()) {
nDoSOut = nDoS;
return true;
}
return false;
}
bool CorruptionPossible() const {
virtual bool CorruptionPossible() const {
return corruptionPossible;
}
unsigned char GetRejectCode() const { return chRejectCode; }
std::string GetRejectReason() const { return strRejectReason; }
virtual unsigned char GetRejectCode() const { return chRejectCode; }
virtual std::string GetRejectReason() const { return strRejectReason; }
};
#endif // BITCOIN_CONSENSUS_VALIDATION_H

27
src/gtest/test_checktransaction.cpp

@ -1,4 +1,5 @@
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "main.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");
}
}
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…
Cancel
Save