This is an automated email from the ASF dual-hosted git repository. gaurava pushed a commit to branch get-x-platform in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit fdbd121e71a92c6c4c120fe1288b3e565e07b946 Author: Gautham Banasandra <[email protected]> AuthorDate: Sun Feb 20 12:01:07 2022 +0530 Add unit tests --- .../native/libhdfspp/tests/tools/CMakeLists.txt | 3 + .../native/libhdfspp/tests/tools/hdfs-get-mock.cc | 56 ++++++++++++++++++ .../native/libhdfspp/tests/tools/hdfs-get-mock.h | 68 ++++++++++++++++++++++ .../libhdfspp/tests/tools/hdfs-tool-tests.cc | 14 +++++ 4 files changed, 141 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/CMakeLists.txt b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/CMakeLists.txt index 56755ad..769e5da 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/CMakeLists.txt +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/CMakeLists.txt @@ -35,6 +35,7 @@ add_executable(hdfs_tool_tests hdfs-count-mock.cc hdfs-mkdir-mock.cc hdfs-rm-mock.cc + hdfs-get-mock.cc main.cc) target_include_directories(hdfs_tool_tests PRIVATE ../tools @@ -54,6 +55,7 @@ target_include_directories(hdfs_tool_tests PRIVATE ../../tools/hdfs-count ../../tools/hdfs-mkdir ../../tools/hdfs-rm + ../../tools/hdfs-get ../../tools/hdfs-cat) target_link_libraries(hdfs_tool_tests PRIVATE gmock_main @@ -72,5 +74,6 @@ target_link_libraries(hdfs_tool_tests PRIVATE hdfs_count_lib hdfs_mkdir_lib hdfs_rm_lib + hdfs_get_lib hdfs_cat_lib) add_test(hdfs_tool_tests hdfs_tool_tests) diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-get-mock.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-get-mock.cc new file mode 100644 index 0000000..713564e --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-get-mock.cc @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <functional> +#include <memory> +#include <string> +#include <vector> + +#include <gmock/gmock.h> +#include <gtest/gtest.h> + +#include "hdfs-get-mock.h" +#include "hdfs-tool-tests.h" + +namespace hdfs::tools::test { +GetMock::~GetMock() = default; + +void GetMock::SetExpectations( + std::function<std::unique_ptr<GetMock>()> test_case, + const std::vector<std::string> &args) const { + // Get the pointer to the function that defines the test case + const auto test_case_func = + test_case.target<std::unique_ptr<GetMock> (*)()>(); + ASSERT_NE(test_case_func, nullptr); + + // Set the expected method calls and their corresponding arguments for each + // test case + if (*test_case_func == &CallHelp<GetMock>) { + EXPECT_CALL(*this, HandleHelp()).Times(1).WillOnce(testing::Return(true)); + return; + } + + if (*test_case_func == &Pass2Paths<GetMock>) { + const auto arg1 = args[0]; + const auto arg2 = args[1]; + EXPECT_CALL(*this, HandlePath(arg1, arg2)) + .Times(1) + .WillOnce(testing::Return(true)); + } +} +} // namespace hdfs::tools::test diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-get-mock.h b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-get-mock.h new file mode 100644 index 0000000..535f715 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-get-mock.h @@ -0,0 +1,68 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIBHDFSPP_TOOLS_HDFS_GET_MOCK +#define LIBHDFSPP_TOOLS_HDFS_GET_MOCK + +#include <functional> +#include <memory> +#include <string> +#include <vector> + +#include <gmock/gmock.h> + +#include "hdfs-get.h" + +namespace hdfs::tools::test { +/** + * {@class GetMock} is an {@class Get} whereby it mocks the + * HandleHelp and HandlePath methods for testing their functionality. + */ +class GetMock : public hdfs::tools::Get { +public: + /** + * {@inheritdoc} + */ + GetMock(const int argc, char **argv) : Get(argc, argv) {} + + // Abiding to the Rule of 5 + GetMock(const GetMock &) = delete; + GetMock(GetMock &&) = delete; + GetMock &operator=(const GetMock &) = delete; + GetMock &operator=(GetMock &&) = delete; + ~GetMock() override; + + /** + * Defines the methods and the corresponding arguments that are expected + * to be called on this instance of {@link HdfsTool} for the given test case. + * + * @param test_case An {@link std::function} object that points to the + * function defining the test case + * @param args The arguments that are passed to this test case + */ + void SetExpectations(std::function<std::unique_ptr<GetMock>()> test_case, + const std::vector<std::string> &args = {}) const; + + MOCK_METHOD(bool, HandleHelp, (), (const, override)); + + MOCK_METHOD(bool, HandlePath, (const std::string &, const std::string &), + (const, override)); +}; +} // namespace hdfs::tools::test + +#endif diff --git a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-tool-tests.cc b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-tool-tests.cc index 7678834..50d555a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-tool-tests.cc +++ b/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tests/tools/hdfs-tool-tests.cc @@ -31,6 +31,7 @@ #include "hdfs-df-mock.h" #include "hdfs-disallow-snapshot-mock.h" #include "hdfs-du-mock.h" +#include "hdfs-get-mock.h" #include "hdfs-mkdir-mock.h" #include "hdfs-move-to-local-mock.h" #include "hdfs-rename-snapshot-mock.h" @@ -109,6 +110,11 @@ INSTANTIATE_TEST_SUITE_P( Pass2Paths<hdfs::tools::test::CopyToLocalMock>)); INSTANTIATE_TEST_SUITE_P( + HdfsGet, HdfsToolBasicTest, + testing::Values(CallHelp<hdfs::tools::test::GetMock>, + Pass2Paths<hdfs::tools::test::GetMock>)); + +INSTANTIATE_TEST_SUITE_P( HdfsMoveToLocal, HdfsToolBasicTest, testing::Values(CallHelp<hdfs::tools::test::MoveToLocalMock>, Pass2Paths<hdfs::tools::test::MoveToLocalMock>)); @@ -174,6 +180,10 @@ INSTANTIATE_TEST_SUITE_P( testing::Values(Pass3Paths<hdfs::tools::test::CopyToLocalMock>)); INSTANTIATE_TEST_SUITE_P( + HdfsGet, HdfsToolNegativeTestThrows, + testing::Values(Pass3Paths<hdfs::tools::test::GetMock>)); + +INSTANTIATE_TEST_SUITE_P( HdfsMoveToLocal, HdfsToolNegativeTestThrows, testing::Values(Pass3Paths<hdfs::tools::test::MoveToLocalMock>)); @@ -221,6 +231,10 @@ INSTANTIATE_TEST_SUITE_P( testing::Values(PassAPath<hdfs::tools::test::CopyToLocalMock>)); INSTANTIATE_TEST_SUITE_P( + HdfsGet, HdfsToolNegativeTestNoThrow, + testing::Values(PassAPath<hdfs::tools::test::GetMock>)); + +INSTANTIATE_TEST_SUITE_P( HdfsDeleteSnapshot, HdfsToolNegativeTestNoThrow, testing::Values(PassAPath<hdfs::tools::test::DeleteSnapshotMock>)); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
