4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
21using ::testing::Return;
22using ::testing::SizeIs;
23using ::testing::StrictMock;
30class MockContractInstanceManager :
public ContractInstanceManagerInterface {
35class BytecodeManagerTest :
public ::testing::Test {
54TEST_F(BytecodeManagerTest, RetrievalAndDeduplication)
74 EXPECT_CALL(
contract_db, get_contract_class(instance1.current_class_id))
78 EXPECT_CALL(
poseidon2,
hash(_)).WillOnce(Return(klass.public_bytecode_commitment));
80 TreeStates tree_states = {};
81 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
84 BytecodeId result1 = tx_bytecode_manager.get_bytecode(address1);
85 EXPECT_EQ(result1, klass.public_bytecode_commitment);
90 EXPECT_THAT(retrieval_events_dump, SizeIs(1));
91 EXPECT_EQ(retrieval_events_dump[0].address, address1);
92 EXPECT_EQ(retrieval_events_dump[0].bytecode_id, klass.public_bytecode_commitment);
93 EXPECT_FALSE(retrieval_events_dump[0].error);
101 EXPECT_THAT(decomposition_events_dump, SizeIs(1));
102 EXPECT_EQ(decomposition_events_dump[0].bytecode_id, klass.public_bytecode_commitment);
108 EXPECT_CALL(
contract_db, get_contract_class(instance1.current_class_id))
111 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
114 BytecodeId result2 = tx_bytecode_manager.get_bytecode(address1);
115 EXPECT_EQ(result2, klass.public_bytecode_commitment);
119 EXPECT_THAT(retrieval_events_dump, SizeIs(1));
120 EXPECT_EQ(retrieval_events_dump[0].address, address1);
121 EXPECT_EQ(retrieval_events_dump[0].bytecode_id, klass.public_bytecode_commitment);
123 EXPECT_THAT(hashing_events_dump, SizeIs(0));
125 EXPECT_THAT(decomposition_events_dump, SizeIs(0));
130 instance2.current_class_id = instance1.current_class_id + 1;
135 EXPECT_CALL(
contract_db, get_contract_class(instance2.current_class_id))
138 EXPECT_CALL(
merkle_db, get_tree_state()).WillOnce(Return(tree_states));
141 BytecodeId result3 = tx_bytecode_manager.get_bytecode(address2);
142 EXPECT_EQ(result3, klass.public_bytecode_commitment);
146 EXPECT_THAT(retrieval_events_dump, SizeIs(1));
147 EXPECT_EQ(retrieval_events_dump[0].address, address2);
148 EXPECT_EQ(retrieval_events_dump[0].bytecode_id, klass.public_bytecode_commitment);
150 EXPECT_THAT(hashing_events_dump, SizeIs(0));
152 EXPECT_THAT(decomposition_events_dump, SizeIs(0));
EventEmitter< BytecodeDecompositionEvent > decomposition_events
StrictMock< MockHighLevelMerkleDB > merkle_db
EventEmitter< InstructionFetchingEvent > instruction_fetching_events
EventEmitter< BytecodeRetrievalEvent > retrieval_events
BytecodeHasher bytecode_hasher
StrictMock< MockContractDB > contract_db
StrictMock< MockContractInstanceManager > contract_instance_manager
EventEmitter< BytecodeHashingEvent > hashing_events
AztecAddress contract_address
void hash(State &state) noexcept
ContractClass random_contract_class(size_t bytecode_size)
ContractInstance random_contract_instance()
TEST_F(IPATest, ChallengesAreZero)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept