diff --git a/plist b/plist
index 5c4ef46897..5be4b87ca3 100644
--- a/plist
+++ b/plist
@@ -1029,7 +1029,8 @@
/usr/local/opnsense/mvc/script/run_migrations.php
/usr/local/opnsense/mvc/script/run_validations.php
/usr/local/opnsense/mvc/tests/app/config/config.php
-/usr/local/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/config.xml
+/usr/local/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/array.xml
+/usr/local/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/object.xml
/usr/local/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigTest.php
/usr/local/opnsense/mvc/tests/app/models/OPNsense/ACL/AclConfig/config.xml
/usr/local/opnsense/mvc/tests/app/models/OPNsense/ACL/AclTest.php
diff --git a/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/config.xml b/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/array.xml
similarity index 100%
rename from src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/config.xml
rename to src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/array.xml
diff --git a/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/object.xml b/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/object.xml
new file mode 100644
index 0000000000..9fdc78cb9c
--- /dev/null
+++ b/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigConfig/backup/object.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ disabled
+
+
+
diff --git a/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigTest.php b/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigTest.php
index 0765c212d4..3831196d59 100644
--- a/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigTest.php
+++ b/src/opnsense/mvc/tests/app/library/OPNsense/Core/ConfigTest.php
@@ -43,19 +43,19 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
/**
* test construct
*/
- public function testCanBeCreated()
+ public function testCanBeArray()
{
self::cleanupTestFiles();
- // switch config to test set for this type
(new AppConfig())->update('application.configDir', self::$configDir);
+ (new AppConfig())->update('application.configDefault', self::$configDir . '/backup/array.xml');
Config::getInstance()->forceReload();
$this->assertNotEmpty(Config::getInstance()->toArray(['rule']));
}
/**
- * @depends testCanBeCreated
+ * @depends testCanBeArray
*/
public function test_to_from_array()
{
@@ -69,7 +69,39 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
$cnf->fromArray($test);
- $this->assertEquals(file_get_contents(self::$configDir . '/backup/config.xml'), (string)$cnf);
+ $this->assertEquals(file_get_contents(self::$configDir . '/backup/array.xml'), (string)$cnf);
+ }
+
+ /**
+ * test construct
+ */
+ public function testCanBeObject()
+ {
+ self::cleanupTestFiles();
+
+ (new AppConfig())->update('application.configDir', self::$configDir);
+ (new AppConfig())->update('application.configDefault', self::$configDir . '/backup/object.xml');
+ Config::getInstance()->forceReload();
+
+ $this->assertNotEmpty(Config::getInstance()->object());
+ }
+
+ /**
+ * @depends testCanBeObject
+ */
+ public function test_to_from_object()
+ {
+ $cnf = Config::getInstance();
+
+ $ramode = (string)$cnf->object()->dhcpdv6->lan->ramode;
+
+ /* test that deleting items does not leave whitespace behind and closes parent */
+ unset($cnf->object()->dhcpdv6->lan->ramode);
+ $this->assertEquals($cnf->object()->dhcpdv6->lan->asXml(), '');
+
+ /* put the node back with the previous value and check that it opens again too */
+ $cnf->object()->dhcpdv6->lan->addChild('ramode', $ramode);
+ $this->assertEquals(file_get_contents(self::$configDir . '/backup/object.xml'), (string)$cnf);
}
/**