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

Reply via email to