3#include <gmock/gmock.h>
4#include <gtest/gtest.h>
17using ::testing::Return;
18using ::testing::SizeIs;
19using ::testing::StrictMock;
24class ContractInstanceManagerTest :
public ::testing::Test {
35TEST_F(ContractInstanceManagerTest, EmptyProtocolContractSlotReturnsNullopt)
39 ProtocolContracts protocol_contracts;
40 for (uint32_t i = 0; i < 6; i++) {
42 protocol_contracts.derived_addresses[i] =
AztecAddress(
FF(0x1000 + i));
52 TreeStates tree_states = {};
53 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
63 auto result = manager.get_contract_instance(empty_slot_address);
66 EXPECT_FALSE(result.has_value());
70 ASSERT_THAT(events, SizeIs(1));
71 EXPECT_EQ(events[0].
address, empty_slot_address);
72 EXPECT_FALSE(events[0].
exists);
73 EXPECT_TRUE(events[0].is_protocol_contract);
74 EXPECT_EQ(events[0].contract_instance, ContractInstance{});
78TEST_F(ContractInstanceManagerTest, ValidProtocolContractReturnsInstance)
81 ProtocolContracts protocol_contracts;
83 protocol_contracts.derived_addresses[0] = derived_addr;
94 TreeStates tree_states = {};
95 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
96 EXPECT_CALL(
contract_db, get_contract_instance(protocol_address)).WillOnce(Return(
instance));
102 auto result = manager.get_contract_instance(protocol_address);
105 ASSERT_TRUE(result.has_value());
106 EXPECT_EQ(result.value(),
instance);
110 ASSERT_THAT(events, SizeIs(1));
111 EXPECT_EQ(events[0].
address, protocol_address);
112 EXPECT_TRUE(events[0].
exists);
113 EXPECT_TRUE(events[0].is_protocol_contract);
114 EXPECT_EQ(events[0].contract_instance,
instance);
118TEST_F(ContractInstanceManagerTest, RegularContractExistsReturnsInstance)
120 ProtocolContracts protocol_contracts;
131 TreeStates tree_states = {};
132 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
133 EXPECT_CALL(
contract_db, get_contract_instance(regular_address)).WillOnce(Return(
instance));
140 .WillOnce(Return(
true));
143 EXPECT_CALL(update_check, check_current_class_id(regular_address,
instance));
146 auto result = manager.get_contract_instance(regular_address);
149 ASSERT_TRUE(result.has_value());
150 EXPECT_EQ(result.value(),
instance);
154 ASSERT_THAT(events, SizeIs(1));
155 EXPECT_EQ(events[0].
address, regular_address);
156 EXPECT_TRUE(events[0].
exists);
157 EXPECT_FALSE(events[0].is_protocol_contract);
161TEST_F(ContractInstanceManagerTest, RegularContractNotExistsReturnsNullopt)
163 ProtocolContracts protocol_contracts;
170 TreeStates tree_states = {};
171 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
179 .WillOnce(Return(
false));
182 auto result = manager.get_contract_instance(non_existent_address);
184 EXPECT_FALSE(result.has_value());
188 ASSERT_THAT(events, SizeIs(1));
189 EXPECT_EQ(events[0].
address, non_existent_address);
190 EXPECT_FALSE(events[0].
exists);
191 EXPECT_FALSE(events[0].is_protocol_contract);
FieldGreaterThan field_gt
std::shared_ptr< Napi::ThreadSafeFunction > instance
#define MAX_PROTOCOL_CONTRACTS
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
StrictMock< MockHighLevelMerkleDB > merkle_db
StrictMock< MockContractDB > contract_db
EventEmitter< DataCopyEvent > event_emitter
StrictMock< MockUpdateCheck > update_check
ContractInstance random_contract_instance()
TEST_F(IPATest, ChallengesAreZero)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept