Add a PVE::SectionConfig test case in which one plugin defines an identical property as another plugin.
In both create and update schema, that property does is shared between both plugins, that is it does not have any `type-property` / `instance-types` attributes. Signed-off-by: Max R. Carrara <[email protected]> --- test/SectionConfig/schema_isolated_test.pl | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/test/SectionConfig/schema_isolated_test.pl b/test/SectionConfig/schema_isolated_test.pl index bc2c551..4b14d8a 100755 --- a/test/SectionConfig/schema_isolated_test.pl +++ b/test/SectionConfig/schema_isolated_test.pl @@ -172,6 +172,137 @@ package IdenticalPropertiesOnDifferentPlugins { } } +package IdenticalPropertyOnDifferentPlugin { + use base qw(TestPackage); + + sub desc($class) { + return "defining identical properties on different plugins does not lead to" + . " 'oneOf' being used inside either createSchema or updateSchema"; + } + + package IdenticalPropertyOnDifferentPlugin::PluginBase { + use base qw(PVE::SectionConfig); + + my $DEFAULT_DATA = {}; + + sub private($class) { + return $DEFAULT_DATA; + } + }; + + package IdenticalPropertyOnDifferentPlugin::PluginOne { + use base qw(IdenticalPropertyOnDifferentPlugin::PluginBase); + + sub type($class) { + return 'one'; + } + + sub properties($class) { + return { + 'prop-one' => { + type => 'string', + optional => 1, + }, + }; + } + + sub options($class) { + return { + 'prop-one' => { + optional => 1, + }, + }; + } + }; + + package IdenticalPropertyOnDifferentPlugin::PluginTwo { + use base qw(IdenticalPropertyOnDifferentPlugin::PluginBase); + + sub type($class) { + return 'two'; + } + + sub properties($class) { + return { + 'prop-one' => { + type => 'string', + optional => 1, + }, + 'prop-two' => { + type => 'string', + optional => 1, + }, + }; + } + + sub options($class) { + return { + 'prop-one' => { + optional => 1, + }, + 'prop-two' => { + optional => 1, + }, + }; + } + }; + + sub expected_isolated_createSchema($class) { + return { + type => 'object', + additionalProperties => 0, + properties => { + type => { + type => 'string', + enum => [ + "one", "two", + ], + }, + 'prop-one' => { + type => 'string', + optional => 1, + }, + 'prop-two' => { + 'instance-types' => [ + "two", + ], + 'type-property' => 'type', + type => 'string', + optional => 1, + }, + }, + }; + } + + sub expected_isolated_updateSchema($class) { + return { + type => 'object', + additionalProperties => 0, + properties => { + type => { + type => 'string', + enum => [ + "one", "two", + ], + }, + 'prop-one' => { + type => 'string', + optional => 1, + }, + 'prop-two' => { + 'instance-types' => [ + "two", + ], + 'type-property' => 'type', + type => 'string', + optional => 1, + }, + $SectionConfig::Helpers::UPDATE_SCHEMA_DEFAULT_PROPERTIES->%*, + }, + }; + } +} + sub test_compare_deeply($got, $expected, $test_name, $test_package) { $test_name = "$test_package - $test_name"; my $description = $test_package->desc(); -- 2.47.3 _______________________________________________ pve-devel mailing list [email protected] https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
