From f04ed3c1372d15d1b0d10e4f1cd3f2c756317a9c Mon Sep 17 00:00:00 2001 From: Kostas Kyrimis Date: Mon, 12 Dec 2022 19:15:49 +0200 Subject: [PATCH] Simplify Mocks and test --- src/query/v2/plan/operator.cpp | 2 +- tests/unit/mock_helpers.hpp | 89 +++++++++++-------- .../query_v2_create_expand_multiframe.cpp | 45 ++++------ 3 files changed, 73 insertions(+), 63 deletions(-) diff --git a/src/query/v2/plan/operator.cpp b/src/query/v2/plan/operator.cpp index c909cc466..012981e44 100644 --- a/src/query/v2/plan/operator.cpp +++ b/src/query/v2/plan/operator.cpp @@ -2468,7 +2468,7 @@ class DistributedCreateExpandCursor : public Cursor { std::vector ExpandCreationInfoToRequests(MultiFrame &multi_frame, ExecutionContext &context) const { std::vector edge_requests; - auto reader = multi_frame.GetValidFramesConsumer(); + auto reader = multi_frame.GetValidFramesModifier(); for (auto &frame : reader) { const auto &edge_info = self_.edge_info_; diff --git a/tests/unit/mock_helpers.hpp b/tests/unit/mock_helpers.hpp index 5201aa210..0010d5986 100644 --- a/tests/unit/mock_helpers.hpp +++ b/tests/unit/mock_helpers.hpp @@ -13,51 +13,70 @@ #include #include +#include "query/v2/common.hpp" +#include "query/v2/context.hpp" #include "query/v2/plan/operator.hpp" #include "query/v2/request_router.hpp" -namespace memgraph { -class MockedRequestRouter : public query::v2::RequestRouterInterface { +namespace memgraph::query::v2 { +class MockedRequestRouter : public RequestRouterInterface { public: - MOCK_METHOD1(ScanVertices, std::vector(std::optional label)); - MOCK_METHOD1(CreateVertices, std::vector(std::vector)); - MOCK_METHOD1(ExpandOne, std::vector(msgs::ExpandOneRequest)); - MOCK_METHOD1(CreateExpand, std::vector(std::vector)); - MOCK_METHOD1(GetProperties, std::vector(msgs::GetPropertiesRequest)); - MOCK_METHOD0(StartTransaction, void()); - MOCK_METHOD0(Commit, void()); + MOCK_METHOD(std::vector, ScanVertices, (std::optional label)); + MOCK_METHOD(std::vector, CreateVertices, (std::vector)); + MOCK_METHOD(std::vector, ExpandOne, (msgs::ExpandOneRequest)); + MOCK_METHOD(std::vector, CreateExpand, (std::vector)); + MOCK_METHOD(std::vector, GetProperties, (msgs::GetPropertiesRequest)); + MOCK_METHOD(void, StartTransaction, ()); + MOCK_METHOD(void, Commit, ()); - MOCK_CONST_METHOD1(NameToEdgeType, storage::v3::EdgeTypeId(const std::string &)); - MOCK_CONST_METHOD1(NameToProperty, storage::v3::PropertyId(const std::string &)); - MOCK_CONST_METHOD1(NameToLabel, storage::v3::LabelId(const std::string &)); - MOCK_CONST_METHOD1(LabelToName, storage::v3::LabelId(const std::string &)); - MOCK_CONST_METHOD1(PropertyToName, const std::string &(storage::v3::PropertyId)); - MOCK_CONST_METHOD1(LabelToName, const std::string &(storage::v3::LabelId label)); - MOCK_CONST_METHOD1(EdgeTypeToName, const std::string &(storage::v3::EdgeTypeId type)); - MOCK_CONST_METHOD1(MaybeNameToProperty, std::optional(const std::string &)); - MOCK_CONST_METHOD1(MaybeNameToEdgeType, std::optional(const std::string &)); - MOCK_CONST_METHOD1(MaybeNameToLabel, std::optional(const std::string &)); - MOCK_CONST_METHOD1(IsPrimaryLabel, bool(storage::v3::LabelId)); - MOCK_CONST_METHOD2(IsPrimaryKey, bool(storage::v3::LabelId, storage::v3::PropertyId)); + MOCK_METHOD(storage::v3::EdgeTypeId, NameToEdgeType, (const std::string &), (const)); + MOCK_METHOD(storage::v3::PropertyId, NameToProperty, (const std::string &), (const)); + MOCK_METHOD(storage::v3::LabelId, NameToLabel, (const std::string &), (const)); + MOCK_METHOD(storage::v3::LabelId, LabelToName, (const std::string &), (const)); + MOCK_METHOD(const std::string &, PropertyToName, (storage::v3::PropertyId), (const)); + MOCK_METHOD(const std::string &, LabelToName, (storage::v3::LabelId label), (const)); + MOCK_METHOD(const std::string &, EdgeTypeToName, (storage::v3::EdgeTypeId type), (const)); + MOCK_METHOD(std::optional, MaybeNameToProperty, (const std::string &), (const)); + MOCK_METHOD(std::optional, MaybeNameToEdgeType, (const std::string &), (const)); + MOCK_METHOD(std::optional, MaybeNameToLabel, (const std::string &), (const)); + MOCK_METHOD(bool, IsPrimaryLabel, (storage::v3::LabelId), (const)); + MOCK_METHOD(bool, IsPrimaryKey, (storage::v3::LabelId, storage::v3::PropertyId), (const)); }; -class MockedLogicalOperator : query::v2::plan::LogicalOperator { +class MockedLogicalOperator : public plan::LogicalOperator { public: - MOCK_CONST_METHOD1(MakeCursor, query::v2::plan::UniqueCursorPtr(utils::MemoryResource *)); - MOCK_CONST_METHOD1(OutputSymbols, std::vector(const expr::SymbolTable &)); - MOCK_CONST_METHOD1(ModifiedSymbols, std::vector(const expr::SymbolTable &)); - MOCK_CONST_METHOD0(HasSingleInput, bool()); - MOCK_CONST_METHOD0(input, std::shared_ptr()); - MOCK_METHOD1(set_input, void(std::shared_ptr)); - MOCK_CONST_METHOD1(Clone, std::unique_ptr(query::v2::AstStorage *storage)); + MOCK_METHOD(plan::UniqueCursorPtr, MakeCursor, (utils::MemoryResource *), (const)); + MOCK_METHOD(std::vector, ModifiedSymbols, (const expr::SymbolTable &), (const)); + MOCK_METHOD(bool, HasSingleInput, (), (const)); + MOCK_METHOD(std::shared_ptr, input, (), (const)); + MOCK_METHOD(void, set_input, (std::shared_ptr)); + MOCK_METHOD(std::unique_ptr, Clone, (AstStorage * storage), (const)); + MOCK_METHOD(bool, Accept, (plan::HierarchicalLogicalOperatorVisitor & visitor)); }; -class MockedCursor : memgraph::query::v2::plan::Cursor { +class MockedCursor : public plan::Cursor { public: - MOCK_METHOD2(Pull, bool(query::v2::Frame &, expr::ExecutionContext &)); - MOCK_METHOD2(PullMultiple, void(query::v2::MultiFrame &, expr::ExecutionContext &)); - MOCK_METHOD0(Reset, void()); - MOCK_METHOD0(Shutdown, void()); + MOCK_METHOD(bool, Pull, (Frame &, expr::ExecutionContext &)); + MOCK_METHOD(void, PullMultiple, (MultiFrame &, expr::ExecutionContext &)); + MOCK_METHOD(void, Reset, ()); + MOCK_METHOD(void, Shutdown, ()); }; -} // namespace memgraph +inline expr::ExecutionContext MakeContext(const expr::AstStorage &storage, const expr::SymbolTable &symbol_table, + RequestRouterInterface *router, IdAllocator *id_alloc) { + expr::ExecutionContext context; + context.symbol_table = symbol_table; + context.evaluation_context.properties = NamesToProperties(storage.properties_, router); + context.evaluation_context.labels = NamesToLabels(storage.labels_, router); + context.edge_ids_alloc = id_alloc; + context.request_router = router; + return context; +} + +inline MockedLogicalOperator &BaseToMock(plan::LogicalOperator *op) { + return *static_cast(op); +} + +inline MockedCursor &BaseToMock(plan::Cursor *cursor) { return *static_cast(cursor); } + +} // namespace memgraph::query::v2 diff --git a/tests/unit/query_v2_create_expand_multiframe.cpp b/tests/unit/query_v2_create_expand_multiframe.cpp index f6f6567db..5b4c1e2ec 100644 --- a/tests/unit/query_v2_create_expand_multiframe.cpp +++ b/tests/unit/query_v2_create_expand_multiframe.cpp @@ -9,6 +9,7 @@ // by the Apache License, Version 2.0, included in the file // licenses/APL.txt. +#include #include "mock_helpers.hpp" #include "query/v2/bindings/frame.hpp" @@ -22,24 +23,7 @@ #include "utils/logging.hpp" #include "utils/memory.hpp" -using namespace memgraph::query::v2; -using namespace memgraph::query::v2::plan; -namespace memgraph { -class TestTemplate : public testing::Test { - protected: - void SetUp() override {} -}; - -ExecutionContext MakeContext(const AstStorage &storage, const SymbolTable &symbol_table, RequestRouterInterface *router, - IdAllocator *id_alloc) { - ExecutionContext context; - context.symbol_table = symbol_table; - context.evaluation_context.properties = NamesToProperties(storage.properties_, router); - context.evaluation_context.labels = NamesToLabels(storage.labels_, router); - context.edge_ids_alloc = id_alloc; - context.request_router = router; - return context; -} +namespace memgraph::query::v2 { MultiFrame CreateMultiFrame(const size_t max_pos, const Symbol &src, const Symbol &dst, MockedRequestRouter *router) { static constexpr size_t frame_size = 100; @@ -60,14 +44,15 @@ MultiFrame CreateMultiFrame(const size_t max_pos, const Symbol &src, const Symbo return multi_frame; } -TEST_F(TestTemplate, CreateExpand) { - MockedRequestRouter router; +TEST(CreateExpandTest, Cursor) { + using testing::_; + using testing::Return; AstStorage ast; SymbolTable symbol_table; - query::v2::plan::NodeCreationInfo node; - query::v2::plan::EdgeCreationInfo edge; + plan::NodeCreationInfo node; + plan::EdgeCreationInfo edge; edge.edge_type = msgs::EdgeTypeId::FromUint(1); edge.direction = EdgeAtom::Direction::IN; auto id_alloc = IdAllocator(0, 100); @@ -75,14 +60,20 @@ TEST_F(TestTemplate, CreateExpand) { const auto &src = symbol_table.CreateSymbol("n", true); node.symbol = symbol_table.CreateSymbol("u", true); - auto create_expand = query::v2::plan::CreateExpand(node, edge, nullptr, src, true); + auto once_cur = plan::MakeUniqueCursorPtr(utils::NewDeleteResource()); + EXPECT_CALL(BaseToMock(once_cur.get()), PullMultiple(_, _)).Times(1); + + std::shared_ptr once_op = std::make_shared(); + EXPECT_CALL(BaseToMock(once_op.get()), MakeCursor(_)).Times(1).WillOnce(Return(std::move(once_cur))); + + auto create_expand = plan::CreateExpand(node, edge, once_op, src, true); auto cursor = create_expand.MakeCursor(utils::NewDeleteResource()); - EXPECT_CALL(router, CreateExpand(testing::_)) - .Times(1) - .WillOnce(::testing::Return(std::vector{})); + MockedRequestRouter router; + EXPECT_CALL(router, CreateExpand(_)).Times(1).WillOnce(Return(std::vector{})); auto context = MakeContext(ast, symbol_table, &router, &id_alloc); auto multi_frame = CreateMultiFrame(context.symbol_table.max_position(), src, node.symbol, &router); cursor->PullMultiple(multi_frame, context); } -} // namespace memgraph + +} // namespace memgraph::query::v2