From 70e9f0a278495cfc82133966407bd7ca3a099e6e Mon Sep 17 00:00:00 2001 From: Falk Werner Date: Sun, 29 Mar 2020 20:41:31 +0200 Subject: [PATCH] added tests for wfp_impl_getattr --- cmake/unit_tests.cmake | 1 + test/webfuse/mocks/mock_request.cc | 19 ++++----- test/webfuse/mocks/mock_request.hpp | 16 +------ .../tests/provider/operation/test_getattr.cc | 42 +++++++++++++++++++ 4 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 test/webfuse/tests/provider/operation/test_getattr.cc diff --git a/cmake/unit_tests.cmake b/cmake/unit_tests.cmake index adbde38..24cf694 100644 --- a/cmake/unit_tests.cmake +++ b/cmake/unit_tests.cmake @@ -47,6 +47,7 @@ add_executable(alltests test/webfuse/tests/provider/test_url.cc test/webfuse/tests/provider/test_client_protocol.cc test/webfuse/tests/provider/operation/test_close.cc + test/webfuse/tests/provider/operation/test_getattr.cc test/webfuse/tests/integration/test_integration.cc test/webfuse/tests/integration/server.cc test/webfuse/tests/integration/provider.cc diff --git a/test/webfuse/mocks/mock_request.cc b/test/webfuse/mocks/mock_request.cc index c2dd441..5b31c63 100644 --- a/test/webfuse/mocks/mock_request.cc +++ b/test/webfuse/mocks/mock_request.cc @@ -1,15 +1,14 @@ #include "webfuse/mocks/mock_request.hpp" #include -namespace +extern "C" { -extern "C" void -respond( +static void webfuse_test_MockRequest_respond( json_t * response, void * user_data) { - webfuse_test::Request * request = reinterpret_cast(user_data); + auto * request = reinterpret_cast(user_data); json_t * result = json_object_get(response, "result"); json_t * error = json_object_get(response, "error"); @@ -31,21 +30,17 @@ respond( } } - } namespace webfuse_test { -struct wfp_request * -request_create( - Request * req, - int id) +struct wfp_request * MockRequest::create_request(int id) { - struct wfp_request * request = reinterpret_cast(malloc(sizeof(struct wfp_request))); + auto * request = reinterpret_cast(malloc(sizeof(wfp_request))); + request->respond = &webfuse_test_MockRequest_respond; + request->user_data = reinterpret_cast(this); request->id = id; - request->user_data = reinterpret_cast(req); - request->respond = &respond; return request; } diff --git a/test/webfuse/mocks/mock_request.hpp b/test/webfuse/mocks/mock_request.hpp index 51884f4..fec99d2 100644 --- a/test/webfuse/mocks/mock_request.hpp +++ b/test/webfuse/mocks/mock_request.hpp @@ -10,26 +10,14 @@ namespace webfuse_test { -class Request -{ -public: - virtual ~Request() { } - virtual void respond(json_t * result, int id) = 0; - virtual void respond_error(json_t * error, int id) = 0; -}; - -class MockRequest: public Request +class MockRequest { public: + struct wfp_request * create_request(int id); MOCK_METHOD2(respond, void(json_t * result, int id)); MOCK_METHOD2(respond_error, void(json_t * error, int id)); }; -extern struct wfp_request * -request_create( - Request * req, - int id); - MATCHER_P3(GetAttrMatcher, inode, mode, file_type, "") { json_t * inode_holder = json_object_get(arg, "inode"); diff --git a/test/webfuse/tests/provider/operation/test_getattr.cc b/test/webfuse/tests/provider/operation/test_getattr.cc new file mode 100644 index 0000000..39a40c7 --- /dev/null +++ b/test/webfuse/tests/provider/operation/test_getattr.cc @@ -0,0 +1,42 @@ +#include "webfuse/provider/impl/operation/getattr.h" +#include "webfuse/mocks/mock_request.hpp" +#include + +using ::webfuse_test::MockRequest; +using ::webfuse_test::GetAttrMatcher; +using ::testing::_; + +TEST(wfp_impl_getattr, default_responds_error) +{ + MockRequest request; + auto * req = request.create_request(42); + EXPECT_CALL(request, respond_error(_,42)).Times(1); + + wfp_impl_getattr_default(req, 0, nullptr); +} + +TEST(wfp_impl_getattr, respond_file) +{ + MockRequest request; + auto * req = request.create_request(42); + EXPECT_CALL(request, respond(GetAttrMatcher(23, 0754, "file"), 42)).Times(1); + + struct stat buffer; + memset(&buffer, 0, sizeof(buffer)); + buffer.st_ino = 23; + buffer.st_mode = S_IFREG | 0754; + wfp_impl_respond_getattr(req, &buffer); +} + +TEST(wfp_impl_getattr, respond_dir) +{ + MockRequest request; + auto * req = request.create_request(42); + EXPECT_CALL(request, respond(GetAttrMatcher(23, 0754, "dir"), 42)).Times(1); + + struct stat buffer; + memset(&buffer, 0, sizeof(buffer)); + buffer.st_ino = 23; + buffer.st_mode = S_IFDIR | 0754; + wfp_impl_respond_getattr(req, &buffer); +} \ No newline at end of file