blob: aecea1f219912174f21cdd958cfcf0c0cfa8db07 [file] [log] [blame]
/*
* 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);
}
}