Skip to content

Commit

Permalink
vkconfig3: Add more unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
christophe-lunarg committed Oct 3, 2024
1 parent cd8dd2e commit 6ef539f
Show file tree
Hide file tree
Showing 10 changed files with 376 additions and 308 deletions.
62 changes: 8 additions & 54 deletions vkconfig_core/configuration_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,10 @@ void ConfigurationManager::SaveAllConfigurations() const {

const ConfigurationInfo *ConfigurationManager::GetActiveConfigurationInfo() const {
if (this->use_per_executable_configuration) {
return &this->configuration_infos.find(this->active_executable.c_str())->second;
if (this->active_executable.empty())
return nullptr;
else
return &this->configuration_infos.find(this->active_executable.c_str())->second;
} else {
return &this->configuration_infos.find(GLOBAL_CONFIGURATION_TOKEN)->second;
}
Expand All @@ -237,10 +240,6 @@ const ConfigurationInfo *ConfigurationManager::FindConfigurationInfo(const std::
return nullptr;
}

const std::map<std::string, ConfigurationInfo> &ConfigurationManager::GetConfigurationInfos() const {
return this->configuration_infos;
}

bool ConfigurationManager::HasActiveConfiguration() const {
if (this->GetActiveConfigurationInfo() == nullptr) {
return false;
Expand All @@ -255,6 +254,10 @@ bool ConfigurationManager::HasActiveConfiguration() const {
return false;
}

const std::map<std::string, ConfigurationInfo> &ConfigurationManager::GetConfigurationInfos() const {
return this->configuration_infos;
}

Configuration &ConfigurationManager::CreateConfiguration(const LayerManager &layers, const std::string &configuration_name) {
std::string configuration_key = MakeConfigurationName(available_configurations, configuration_name);

Expand Down Expand Up @@ -359,7 +362,6 @@ int ConfigurationManager::GetConfigurationIndex(const std::string &configuration
}
}

assert(0);
return -1;
}

Expand Down Expand Up @@ -446,54 +448,6 @@ void ConfigurationManager::ExportConfiguration(const LayerManager &layers, const
}
}

bool ConfigurationManager::CheckApiVersions(const std::vector<Layer> &available_layers, Configuration *selected_configuration,
std::string &log_versions) const {
return this->CompareLayersVersions(available_layers, selected_configuration, Version::VKCONFIG, log_versions, true);
}

bool ConfigurationManager::CheckLayersVersions(const std::vector<Layer> &available_layers, Configuration *selected_configuration,
std::string &log_versions) const {
return this->CompareLayersVersions(available_layers, selected_configuration, Version::NONE, log_versions, false);
}

bool ConfigurationManager::CompareLayersVersions(const std::vector<Layer> &available_layers, Configuration *selected_configuration,
const Version &version, std::string &log_versions, bool is_less) const {
assert(selected_configuration != nullptr);

Version current_version = version;

bool result = true;

for (std::size_t param_index = 0, param_count = selected_configuration->parameters.size(); param_index < param_count;
++param_index) {
const Parameter &parameter = selected_configuration->parameters[param_index];

if (parameter.control != LAYER_CONTROL_ON) {
continue;
}

for (std::size_t layer_index = 0, layer_count = available_layers.size(); layer_index < layer_count; ++layer_index) {
const Layer &layer = available_layers[layer_index];

if (layer.key == parameter.key) {
if (current_version == Version::NONE) {
current_version = layer.api_version;
}

if (is_less) {
if (layer.api_version.GetMinor() > version.GetMinor()) result = false;
} else {
if (layer.api_version.GetMinor() != current_version.GetMinor()) result = false;
}

log_versions += format("%s - %s\n", layer.key.c_str(), layer.api_version.str().c_str());
}
}
}

return result;
}

bool ConfigurationManager::GetPerExecutableConfig() const { return this->use_per_executable_configuration; }

void ConfigurationManager::SetPerExecutableConfig(bool enabled) { this->use_per_executable_configuration = enabled; }
Expand Down
8 changes: 0 additions & 8 deletions vkconfig_core/configuration_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,6 @@ class ConfigurationManager : public Serialize {

void SortConfigurations();

bool CheckLayersVersions(const std::vector<Layer>& available_layers, Configuration* selected_configuration,
std::string& log_versions) const;
bool CheckApiVersions(const std::vector<Layer>& available_layers, Configuration* selected_configuration,
std::string& log_versions) const;

bool Empty() const { return available_configurations.empty(); }

bool HasFile(const Configuration& configuration) const;
Expand All @@ -82,9 +77,6 @@ class ConfigurationManager : public Serialize {
Path last_path_export;

private:
bool CompareLayersVersions(const std::vector<Layer>& available_layers, Configuration* selected_configuration,
const Version& version, std::string& log_versions, bool is_less) const;

void RemoveConfigurationFiles();

void LoadConfigurationsPath(const LayerManager& layers);
Expand Down
11 changes: 2 additions & 9 deletions vkconfig_core/layer_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ bool LayerManager::Load(const QJsonObject &json_root_object) {

// LAYERS_PATHS_ENV_ADD: VK_ADD_LAYER_PATH env variables
{
const std::vector<std::string> &VK_ADD_LAYER_PATH = UniqueStrings(Split(qgetenv("VK_ADD_LAYER_PATH").toStdString(), SEPARATOR));
const std::vector<std::string> &VK_ADD_LAYER_PATH =
UniqueStrings(Split(qgetenv("VK_ADD_LAYER_PATH").toStdString(), SEPARATOR));
this->paths[LAYERS_PATHS_ENV_ADD].resize(VK_ADD_LAYER_PATH.size());
for (std::size_t i = 0, n = VK_ADD_LAYER_PATH.size(); i < n; ++i) {
this->paths[LAYERS_PATHS_ENV_ADD][i].path = VK_ADD_LAYER_PATH[i];
Expand Down Expand Up @@ -206,15 +207,9 @@ bool LayerManager::Save(QJsonObject &json_root_object) const {
}
}

QJsonArray json_removed_paths_array;
for (std::size_t i = 0, n = this->removed_paths.size(); i < n; ++i) {
json_removed_paths_array.append(this->removed_paths[i].RelativePath().c_str());
}

QJsonObject json_layers_object;
json_layers_object.insert("validated", json_layers_paths_object);
json_layers_object.insert("paths", json_paths_object);
json_layers_object.insert("removed_paths", json_removed_paths_array);

json_root_object.insert("layers", json_layers_object);

Expand Down Expand Up @@ -363,8 +358,6 @@ void LayerManager::AppendPath(const LayersPathInfo &info) {
}

void LayerManager::RemovePath(const LayersPathInfo &path_info) {
this->removed_paths.push_back(path_info.path);

const std::vector<Path> &layers_paths = CollectFilePaths(path_info.path);

for (std::size_t i = 0, n = layers_paths.size(); i < n; ++i) {
Expand Down
1 change: 0 additions & 1 deletion vkconfig_core/layer_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ class LayerManager : public Serialize {

std::vector<Layer> selected_layers;
std::array<std::vector<LayersPathInfo>, LAYERS_PATHS_COUNT> paths;
std::vector<Path> removed_paths; // TODO: Remove?

private:
std::map<Path, std::string> layers_validated;
Expand Down
1 change: 1 addition & 0 deletions vkconfig_core/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ vkConfigTest(test_path)
vkConfigTest(test_configuration)
vkConfigTest(test_configuration_built_in)
vkConfigTest(test_configuration_manager)
vkConfigTest(test_configurator)
vkConfigTest(test_executable_manager)
vkConfigTest(test_override)
vkConfigTest(test_application_singleton)
Expand Down
144 changes: 144 additions & 0 deletions vkconfig_core/test/test_configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,150 @@ TEST(test_configuration, SwitchLayerVersion) {
EXPECT_EQ(parameter_version_not_found->api_version, Version::LATEST);
}

TEST(test_configuration, gather_parameters_exist) {
LayerManager layer_manager;
layer_manager.LoadLayersFromPath(":/layers");

Configuration configuration;
configuration.key = "New Configuration";

configuration.GatherParameters(layer_manager);

EXPECT_STREQ(configuration.parameters[0].key.c_str(), "VK_LAYER_LUNARG_reference_1_1_0");
EXPECT_STREQ(configuration.parameters[1].key.c_str(), "VK_LAYER_LUNARG_reference_1_2_0");
EXPECT_STREQ(configuration.parameters[2].key.c_str(), "VK_LAYER_LUNARG_reference_1_2_1");

EXPECT_STREQ(configuration.parameters[3].key.c_str(), "VK_LAYER_LUNARG_test_00");
EXPECT_STREQ(configuration.parameters[4].key.c_str(), "VK_LAYER_LUNARG_test_01");
EXPECT_STREQ(configuration.parameters[5].key.c_str(), "VK_LAYER_LUNARG_test_02");
EXPECT_STREQ(configuration.parameters[6].key.c_str(), "VK_LAYER_LUNARG_test_03");
EXPECT_STREQ(configuration.parameters[7].key.c_str(), "VK_LAYER_LUNARG_test_04");
EXPECT_STREQ(configuration.parameters[8].key.c_str(), "VK_LAYER_LUNARG_test_05");
EXPECT_STREQ(configuration.parameters[9].key.c_str(), "VK_LAYER_LUNARG_test_06");

EXPECT_STREQ(configuration.parameters[10].key.c_str(), "VK_LAYER_LUNARG_version");

std::string missing_layer;
EXPECT_FALSE(HasMissingLayer(configuration.parameters, layer_manager, missing_layer));
EXPECT_TRUE(missing_layer.empty());
}

TEST(test_configuration, gather_parameters_repeat) {
LayerManager layer_manager;
layer_manager.LoadLayersFromPath(":/layers");

Configuration configuration;
configuration.key = "New Configuration";

configuration.GatherParameters(layer_manager);
configuration.GatherParameters(layer_manager); // Again, check for no duplication!

EXPECT_STREQ(configuration.parameters[0].key.c_str(), "VK_LAYER_LUNARG_reference_1_1_0");
EXPECT_STREQ(configuration.parameters[1].key.c_str(), "VK_LAYER_LUNARG_reference_1_2_0");
EXPECT_STREQ(configuration.parameters[2].key.c_str(), "VK_LAYER_LUNARG_reference_1_2_1");

EXPECT_STREQ(configuration.parameters[3].key.c_str(), "VK_LAYER_LUNARG_test_00");
EXPECT_STREQ(configuration.parameters[4].key.c_str(), "VK_LAYER_LUNARG_test_01");
EXPECT_STREQ(configuration.parameters[5].key.c_str(), "VK_LAYER_LUNARG_test_02");
EXPECT_STREQ(configuration.parameters[6].key.c_str(), "VK_LAYER_LUNARG_test_03");
EXPECT_STREQ(configuration.parameters[7].key.c_str(), "VK_LAYER_LUNARG_test_04");
EXPECT_STREQ(configuration.parameters[8].key.c_str(), "VK_LAYER_LUNARG_test_05");
EXPECT_STREQ(configuration.parameters[9].key.c_str(), "VK_LAYER_LUNARG_test_06");

EXPECT_STREQ(configuration.parameters[10].key.c_str(), "VK_LAYER_LUNARG_version");
}

TEST(test_configuration, gather_parameters_missing) {
LayerManager layer_manager;

Configuration configuration;
configuration.key = "New Configuration";

layer_manager.LoadLayersFromPath(":/layers");
configuration.GatherParameters(layer_manager);

layer_manager.Clear();
configuration.GatherParameters(layer_manager);

EXPECT_STREQ(configuration.parameters[0].key.c_str(), "VK_LAYER_LUNARG_reference_1_1_0");
EXPECT_STREQ(configuration.parameters[1].key.c_str(), "VK_LAYER_LUNARG_reference_1_2_0");
EXPECT_STREQ(configuration.parameters[2].key.c_str(), "VK_LAYER_LUNARG_reference_1_2_1");

EXPECT_STREQ(configuration.parameters[3].key.c_str(), "VK_LAYER_LUNARG_test_00");
EXPECT_STREQ(configuration.parameters[4].key.c_str(), "VK_LAYER_LUNARG_test_01");
EXPECT_STREQ(configuration.parameters[5].key.c_str(), "VK_LAYER_LUNARG_test_02");
EXPECT_STREQ(configuration.parameters[6].key.c_str(), "VK_LAYER_LUNARG_test_03");
EXPECT_STREQ(configuration.parameters[7].key.c_str(), "VK_LAYER_LUNARG_test_04");
EXPECT_STREQ(configuration.parameters[8].key.c_str(), "VK_LAYER_LUNARG_test_05");
EXPECT_STREQ(configuration.parameters[9].key.c_str(), "VK_LAYER_LUNARG_test_06");

EXPECT_STREQ(configuration.parameters[10].key.c_str(), "VK_LAYER_LUNARG_version");

std::string missing_layer;
EXPECT_TRUE(HasMissingLayer(configuration.parameters, layer_manager, missing_layer));
EXPECT_STREQ(missing_layer.c_str(), "VK_LAYER_LUNARG_reference_1_1_0");
}

TEST(test_configuration, HasMissingLayer_UnsupportPlatform) {
LayerManager layer_manager;

Configuration configuration;
configuration.key = "New Configuration";

layer_manager.LoadLayersFromPath(":/layers");
configuration.GatherParameters(layer_manager);

layer_manager.Clear();

for (std::size_t i = 0, n = configuration.parameters.size(); i < n; ++i) {
configuration.parameters[i].platform_flags = 0;
}

std::string missing_layer;
EXPECT_FALSE(HasMissingLayer(configuration.parameters, layer_manager, missing_layer));
EXPECT_TRUE(missing_layer.empty());
}

TEST(test_configuration, HasMissingLayer_Off) {
LayerManager layer_manager;

Configuration configuration;
configuration.key = "New Configuration";

layer_manager.LoadLayersFromPath(":/layers");
configuration.GatherParameters(layer_manager);

layer_manager.Clear();

for (std::size_t i = 0, n = configuration.parameters.size(); i < n; ++i) {
configuration.parameters[i].control = LAYER_CONTROL_OFF;
}

std::string missing_layer;
EXPECT_FALSE(HasMissingLayer(configuration.parameters, layer_manager, missing_layer));
EXPECT_TRUE(missing_layer.empty());
}

TEST(test_configuration, gather_parameters_missing_but_unsupported_platform) {
LayerManager layer_manager;

Configuration configuration;
configuration.key = "New Configuration";

layer_manager.LoadLayersFromPath(":/layers");
configuration.GatherParameters(layer_manager);

layer_manager.Clear();

for (std::size_t i = 0, n = configuration.parameters.size(); i < n; ++i) {
configuration.parameters[i].platform_flags = 0;
}

std::string missing_layer;
EXPECT_FALSE(HasMissingLayer(configuration.parameters, layer_manager, missing_layer));
EXPECT_TRUE(missing_layer.empty());
}

TEST(test_configuration, Reorder_full) {
LayerManager layer_manager;
layer_manager.LoadLayersFromPath(":/layers");
Expand Down
Loading

0 comments on commit 6ef539f

Please sign in to comment.