diff options
author | Mark Salyzyn <salyzyn@google.com> | 2017-05-02 08:56:15 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2017-05-04 11:41:17 -0700 |
commit | 0f6a270d24ba373fdb74b2059e0366ba4fbbd8fe (patch) | |
tree | 1d566ba399526fb43366be62afbaff1b426a86ac | |
parent | 3d7ee068e0a0ce707965835f58abce65189abda4 (diff) |
libcutils: fs_config internal table alias test
Private interface to permit testing only added to fs_config to
expose android_files and android_dirs.
Make sure that both paths to a partition are specified in fs_config
internal tables.
Test: gTest libcutils-unit-test --gtest_filter=fs_config.*
Bug: 37703469
Change-Id: Ida5fccdb786dc6d67325005d4fdd1fa1ffaef396
-rw-r--r-- | libcutils/fs_config.cpp | 6 | ||||
-rw-r--r-- | libcutils/tests/Android.bp | 3 | ||||
-rw-r--r-- | libcutils/tests/fs_config.cpp | 76 |
3 files changed, 84 insertions, 1 deletions
diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp index a2dd67776..2b3443f3f 100644 --- a/libcutils/fs_config.cpp +++ b/libcutils/fs_config.cpp @@ -92,6 +92,9 @@ static const struct fs_path_config android_dirs[] = { { 00755, AID_ROOT, AID_ROOT, 0, 0 }, // clang-format on }; +#ifndef __ANDROID_VNDK__ +auto __for_testing_only__android_dirs = android_dirs; +#endif // Rules for files. // These rules are applied based on "first match", so they @@ -238,6 +241,9 @@ static const struct fs_path_config android_files[] = { { 00644, AID_ROOT, AID_ROOT, 0, 0 }, // clang-format on }; +#ifndef __ANDROID_VNDK__ +auto __for_testing_only__android_files = android_files; +#endif static size_t strip(const char* path, size_t len, const char suffix[]) { if (len < strlen(suffix)) return len; diff --git a/libcutils/tests/Android.bp b/libcutils/tests/Android.bp index a0b1d7ba3..788419038 100644 --- a/libcutils/tests/Android.bp +++ b/libcutils/tests/Android.bp @@ -27,7 +27,8 @@ cc_defaults { "test_str_parms.cpp", "android_get_control_socket_test.cpp", "android_get_control_file_test.cpp", - "multiuser_test.cpp" + "multiuser_test.cpp", + "fs_config.cpp", ], }, diff --git a/libcutils/tests/fs_config.cpp b/libcutils/tests/fs_config.cpp new file mode 100644 index 000000000..3917a0b2e --- /dev/null +++ b/libcutils/tests/fs_config.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +#include <string> + +#include <gtest/gtest.h> + +#include <android-base/strings.h> + +#include <private/android_filesystem_config.h> + +extern const struct fs_path_config* __for_testing_only__android_dirs; +extern const struct fs_path_config* __for_testing_only__android_files; + +static void check_one(const struct fs_path_config* paths, const std::string& prefix, + const std::string& alternate) { + for (size_t idx = 0; paths[idx].prefix; ++idx) { + std::string path(paths[idx].prefix); + if (android::base::StartsWith(path, prefix.c_str())) { + path = alternate + path.substr(prefix.length()); + size_t second; + for (second = 0; paths[second].prefix; ++second) { + if (path == paths[second].prefix) break; + } + if (!paths[second].prefix) { + // guaranteed to fail expectations, trigger test failure with + // a message that reports the violation as an inequality. + EXPECT_STREQ((prefix + path.substr(alternate.length())).c_str(), path.c_str()); + } + } + } +} + +static void check_two(const struct fs_path_config* paths, const std::string& prefix) { + ASSERT_FALSE(paths == nullptr); + std::string alternate = "system/" + prefix; + check_one(paths, prefix, alternate); + check_one(paths, alternate, prefix); +} + +TEST(fs_config, vendor_dirs_alias) { + check_two(__for_testing_only__android_dirs, "vendor/"); +} + +TEST(fs_config, vendor_files_alias) { + check_two(__for_testing_only__android_files, "vendor/"); +} + +TEST(fs_config, oem_dirs_alias) { + check_two(__for_testing_only__android_dirs, "oem/"); +} + +TEST(fs_config, oem_files_alias) { + check_two(__for_testing_only__android_files, "oem/"); +} + +TEST(fs_config, odm_dirs_alias) { + check_two(__for_testing_only__android_dirs, "odm/"); +} + +TEST(fs_config, odm_files_alias) { + check_two(__for_testing_only__android_files, "odm/"); +} |