[pve-devel] [PATCH pve-common v1 13/23] tests: sectionconfig: add case for an ident. prop on two plugins

Max R. Carrara m.carrara at proxmox.com
Fri Dec 19 20:44:48 CET 2025


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 <m.carrara at proxmox.com>
---
 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





More information about the pve-devel mailing list