diff --git a/cmake/unit_tests.cmake b/cmake/unit_tests.cmake index 24cf694..1205ae4 100644 --- a/cmake/unit_tests.cmake +++ b/cmake/unit_tests.cmake @@ -25,6 +25,7 @@ add_executable(alltests test/webfuse/utils/path.c test/webfuse/utils/static_filesystem.c test/webfuse/utils/ws_server.cc + test/webfuse/mocks/fake_invokation_context.cc test/webfuse/mocks/mock_authenticator.cc test/webfuse/mocks/mock_request.cc test/webfuse/mocks/mock_provider_client.cc diff --git a/test/webfuse/mocks/fake_invokation_context.cc b/test/webfuse/mocks/fake_invokation_context.cc new file mode 100644 index 0000000..4aea3ee --- /dev/null +++ b/test/webfuse/mocks/fake_invokation_context.cc @@ -0,0 +1,17 @@ +#include "webfuse/mocks/fake_invokation_context.hpp" + +namespace webfuse_test +{ + +wfp_impl_invokation_context create_context(MockProvider& provider, wfp_request * request) +{ + wfp_impl_invokation_context context = + { + provider.get_provider(), + provider.get_userdata(), + request + }; + return context; +} + +} \ No newline at end of file diff --git a/test/webfuse/mocks/fake_invokation_context.hpp b/test/webfuse/mocks/fake_invokation_context.hpp new file mode 100644 index 0000000..07eb971 --- /dev/null +++ b/test/webfuse/mocks/fake_invokation_context.hpp @@ -0,0 +1,16 @@ +#ifndef FAKE_INVOCATION_CONTEXT_HPP +#define FAKE_INVOCATION_CONTEXT_HPP + +#include "webfuse/provider/impl/provider.h" +#include "webfuse/mocks/mock_provider.hpp" + +namespace webfuse_test +{ + +wfp_impl_invokation_context create_context( + MockProvider& provider, + wfp_request * request = nullptr); + +} + +#endif \ No newline at end of file diff --git a/test/webfuse/tests/provider/operation/test_close.cc b/test/webfuse/tests/provider/operation/test_close.cc index 8c5fc2d..3769579 100644 --- a/test/webfuse/tests/provider/operation/test_close.cc +++ b/test/webfuse/tests/provider/operation/test_close.cc @@ -1,25 +1,13 @@ #include "webfuse/provider/impl/operation/close.h" #include "webfuse/mocks/mock_provider.hpp" +#include "webfuse/mocks/fake_invokation_context.hpp" #include using ::webfuse_test::MockProvider; +using ::webfuse_test::create_context; using ::testing::_; -namespace -{ - wfp_impl_invokation_context create_context(MockProvider& provider) - { - wfp_impl_invokation_context context = - { - provider.get_provider(), - provider.get_userdata(), - nullptr - }; - return context; - } -} - TEST(wfp_close, close) { int inode = 42; diff --git a/test/webfuse/tests/provider/operation/test_getattr.cc b/test/webfuse/tests/provider/operation/test_getattr.cc index 39a40c7..b499d1c 100644 --- a/test/webfuse/tests/provider/operation/test_getattr.cc +++ b/test/webfuse/tests/provider/operation/test_getattr.cc @@ -1,10 +1,27 @@ #include "webfuse/provider/impl/operation/getattr.h" #include "webfuse/mocks/mock_request.hpp" -#include +#include "webfuse/mocks/mock_provider.hpp" +#include "webfuse/mocks/fake_invokation_context.hpp" +#include +#include + +using ::webfuse_test::MockProvider; using ::webfuse_test::MockRequest; using ::webfuse_test::GetAttrMatcher; +using ::webfuse_test::create_context; using ::testing::_; +using ::testing::Invoke; + +namespace +{ + +void free_request(wfp_request * request, ino_t) +{ + free(request); +} + +} TEST(wfp_impl_getattr, default_responds_error) { @@ -39,4 +56,52 @@ TEST(wfp_impl_getattr, respond_dir) buffer.st_ino = 23; buffer.st_mode = S_IFDIR | 0754; wfp_impl_respond_getattr(req, &buffer); -} \ No newline at end of file +} + +TEST(wfp_impl_getattr, invoke_provider) +{ + ino_t inode = 23; + MockProvider provider; + EXPECT_CALL(provider,getattr(_, inode)).Times(1).WillOnce(Invoke(free_request)); + + wfp_request request = {nullptr, nullptr, 0}; + wfp_impl_invokation_context context = create_context(provider, &request); + + json_t * params = json_array(); + json_array_append_new(params, json_string("test.filesystem")); + json_array_append_new(params, json_integer(inode)); + + wfp_impl_getattr(&context, params, 42); + json_decref(params); +} + +TEST(wfp_impl_getattr, fail_invalid_param_count) +{ + MockProvider provider; + EXPECT_CALL(provider,getattr(_, _)).Times(0); + + wfp_request request = {nullptr, nullptr, 0}; + wfp_impl_invokation_context context = create_context(provider, &request); + + json_t * params = json_array(); + json_array_append_new(params, json_string("test.filesystem")); + + wfp_impl_getattr(&context, params, 42); + json_decref(params); +} + +TEST(wfp_impl_getattr, fail_invalid_inode_type) +{ + MockProvider provider; + EXPECT_CALL(provider,getattr(_, _)).Times(0); + + wfp_request request = {nullptr, nullptr, 0}; + wfp_impl_invokation_context context = create_context(provider, &request); + + json_t * params = json_array(); + json_array_append_new(params, json_string("test.filesystem")); + json_array_append_new(params, json_string("42")); + + wfp_impl_getattr(&context, params, 42); + json_decref(params); +}