| /* |
| * 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 <fstream> |
| #include <string> |
| |
| #include <android-base/file.h> |
| #include <android-base/properties.h> |
| #include "utility/ValidateXml.h" |
| |
| bool isFileReadable(std::string const& path) { |
| std::ifstream f(path); |
| return f.good(); |
| } |
| |
| TEST(CheckConfig, mediaProfilesValidation) { |
| RecordProperty("description", |
| "Verify that the media profiles file " |
| "is valid according to the schema"); |
| |
| // Schema path. |
| constexpr char const* xsdPath = "/data/local/tmp/media_profiles.xsd"; |
| |
| // If "media.settings.xml" is set, it will be used as an absolute path. |
| std::string mediaSettingsPath = android::base::GetProperty("media.settings.xml", ""); |
| if (mediaSettingsPath.empty()) { |
| // If "media.settings.xml" is not set, we will search through a list of |
| // file paths. |
| |
| constexpr char const* xmlSearchDirs[] = { |
| "/product/etc/", |
| "/odm/etc/", |
| "/vendor/etc/", |
| "/system/etc/", // Fallback directory |
| }; |
| |
| const std::string fileName = "media_profiles_V1_0.xml"; |
| |
| std::vector<std::string> xmlPaths = { |
| xmlSearchDirs[0] + fileName, |
| xmlSearchDirs[1] + fileName, |
| xmlSearchDirs[2] + fileName, |
| xmlSearchDirs[3] + fileName, |
| }; |
| |
| auto findXmlPath = |
| std::find_if(xmlPaths.begin(), xmlPaths.end(), isFileReadable); |
| ASSERT_TRUE(findXmlPath != xmlPaths.end()) |
| << "Cannot read from " << fileName |
| << " in any search directories (" |
| << xmlSearchDirs[0] << ", " |
| << xmlSearchDirs[1] << ", " |
| << xmlSearchDirs[2] << ", " |
| << xmlSearchDirs[3] << ")."; |
| |
| char const* xmlPath = findXmlPath->c_str(); |
| EXPECT_VALID_XML(xmlPath, xsdPath); |
| } else { |
| EXPECT_VALID_XML(mediaSettingsPath.c_str(), xsdPath); |
| } |
| } |