diff --git a/iceoryx_hoofs/CMakeLists.txt b/iceoryx_hoofs/CMakeLists.txt index 52ed77faebd..ba8b20f09cc 100644 --- a/iceoryx_hoofs/CMakeLists.txt +++ b/iceoryx_hoofs/CMakeLists.txt @@ -142,6 +142,7 @@ add_library(iceoryx_hoofs source/concurrent/active_object.cpp source/concurrent/loffli.cpp source/cxx/deadline_timer.cpp + source/cxx/filesystem.cpp source/cxx/helplets.cpp source/cxx/generic_raii.cpp source/cxx/unique_id.cpp diff --git a/iceoryx_hoofs/test/moduletests/test_cxx_filesystem.cpp b/iceoryx_hoofs/test/moduletests/test_cxx_filesystem.cpp new file mode 100644 index 00000000000..3cbdc90bdef --- /dev/null +++ b/iceoryx_hoofs/test/moduletests/test_cxx_filesystem.cpp @@ -0,0 +1,107 @@ +// Copyright (c) 2022 by Apex.AI Inc. All rights reserved. +// +// Licensed 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. +// +// SPDX-License-Identifier: Apache-2.0 + +#include "iceoryx_hoofs/cxx/filesystem.hpp" +#include "test.hpp" + +namespace +{ +using namespace ::testing; +using namespace iox::cxx; + +using permsBaseType_t = std::underlying_type::type; + +TEST(filesystem_test, permsSatisfiesBinaryOrOperationCorrectly) +{ + constexpr perms TEST_VALUE_LHS = perms::others_write; + constexpr perms TEST_VALUE_RHS = perms::group_all; + + constexpr auto BASE_VALUE_LHS = static_cast(TEST_VALUE_LHS); + constexpr auto BASE_VALUE_RHS = static_cast(TEST_VALUE_RHS); + + EXPECT_THAT(static_cast(TEST_VALUE_LHS | TEST_VALUE_RHS), Eq(BASE_VALUE_LHS | BASE_VALUE_RHS)); +} + +TEST(filesystem_test, permsSatisfiesBinaryAndOperationCorrectly) +{ + constexpr perms TEST_VALUE_LHS = perms::others_read; + constexpr perms TEST_VALUE_RHS = perms::mask; + + constexpr auto BASE_VALUE_LHS = static_cast(TEST_VALUE_LHS); + constexpr auto BASE_VALUE_RHS = static_cast(TEST_VALUE_RHS); + + EXPECT_THAT(static_cast(TEST_VALUE_LHS & TEST_VALUE_RHS), Eq(BASE_VALUE_LHS & BASE_VALUE_RHS)); +} + +TEST(filesystem_test, permsSatisfiesBinaryExclusiveOrOperationCorrectly) +{ + constexpr perms TEST_VALUE_LHS = perms::set_gid; + constexpr perms TEST_VALUE_RHS = perms::set_uid; + + constexpr auto BASE_VALUE_LHS = static_cast(TEST_VALUE_LHS); + constexpr auto BASE_VALUE_RHS = static_cast(TEST_VALUE_RHS); + + EXPECT_THAT(static_cast(TEST_VALUE_LHS ^ TEST_VALUE_RHS), Eq(BASE_VALUE_LHS ^ BASE_VALUE_RHS)); +} + +TEST(filesystem_test, permsSatisfiesBinaryComplementOperationCorrectly) +{ + constexpr perms TEST_VALUE = perms::owner_read; + + constexpr auto BASE_VALUE = static_cast(TEST_VALUE); + + EXPECT_THAT(static_cast(~TEST_VALUE), Eq(~BASE_VALUE)); +} + +TEST(filesystem_test, permsSatisfiesBinaryOrAssignmentOperationCorrectly) +{ + constexpr perms TEST_VALUE = perms::sticky_bit; + constexpr perms TEST_VALUE_RHS = perms::group_read; + + auto sutBaseValue = static_cast(TEST_VALUE); + constexpr auto BASE_VALUE_RHS = static_cast(TEST_VALUE_RHS); + + perms sut = TEST_VALUE; + + EXPECT_THAT(static_cast(sut |= TEST_VALUE_RHS), Eq(sutBaseValue |= BASE_VALUE_RHS)); +} + +TEST(filesystem_test, permsSatisfiesBinaryAndAssignmentOperationCorrectly) +{ + constexpr perms TEST_VALUE = perms::others_exec; + constexpr perms TEST_VALUE_RHS = perms::others_all; + + auto sutBaseValue = static_cast(TEST_VALUE); + constexpr auto BASE_VALUE_RHS = static_cast(TEST_VALUE_RHS); + + perms sut = TEST_VALUE; + + EXPECT_THAT(static_cast(sut &= TEST_VALUE_RHS), Eq(sutBaseValue &= BASE_VALUE_RHS)); +} + +TEST(filesystem_test, permsSatisfiesBinaryExclusiveOrAssignmentOperationCorrectly) +{ + constexpr perms TEST_VALUE = perms::none; + constexpr perms TEST_VALUE_RHS = perms::owner_all; + + auto sutBaseValue = static_cast(TEST_VALUE); + constexpr auto BASE_VALUE_RHS = static_cast(TEST_VALUE_RHS); + + perms sut = TEST_VALUE; + + EXPECT_THAT(static_cast(sut ^= TEST_VALUE_RHS), Eq(sutBaseValue ^= BASE_VALUE_RHS)); +} +} // namespace