diff options
Diffstat (limited to 'libmodprobe/libmodprobe_ext_test.cpp')
| -rw-r--r-- | libmodprobe/libmodprobe_ext_test.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libmodprobe/libmodprobe_ext_test.cpp b/libmodprobe/libmodprobe_ext_test.cpp new file mode 100644 index 0000000000..0f073cb5c2 --- /dev/null +++ b/libmodprobe/libmodprobe_ext_test.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2019 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 <sys/stat.h> +#include <sys/syscall.h> + +#include <string> +#include <vector> + +#include <android-base/logging.h> +#include <android-base/strings.h> +#include <android-base/unique_fd.h> +#include <gtest/gtest.h> + +#include <modprobe/modprobe.h> + +#include "libmodprobe_test.h" + +bool Modprobe::Insmod(const std::string& path_name) { + auto deps = GetDependencies(MakeCanonical(path_name)); + if (deps.empty()) { + return false; + } + if (std::find(test_modules.begin(), test_modules.end(), deps.front()) == test_modules.end()) { + return false; + } + for (auto it = modules_loaded.begin(); it != modules_loaded.end(); ++it) { + if (android::base::StartsWith(*it, path_name)) { + return true; + } + } + std::string options; + auto options_iter = module_options_.find(MakeCanonical(path_name)); + if (options_iter != module_options_.end()) { + options = " " + options_iter->second; + } + modules_loaded.emplace_back(path_name + options); + return true; +} + +bool Modprobe::ModuleExists(const std::string& module_name) { + auto deps = GetDependencies(module_name); + if (deps.empty()) { + // missing deps can happen in the case of an alias + return false; + } + return std::find(test_modules.begin(), test_modules.end(), deps.front()) != test_modules.end(); +} |
