diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/VirtualIPField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/VirtualIPField.php new file mode 100644 index 000000000..99553846b --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/VirtualIPField.php @@ -0,0 +1,91 @@ +vipType = $value; + } + + /** + * generate validation data (list of virtual ips) + */ + protected function actionPostLoadingEvent() + { + if (!isset(self::$internalStaticOptionList[$this->vipType])) { + self::$internalStaticOptionList[$this->vipType] = array(); + $configObj = Config::getInstance()->object(); + if (!empty($configObj->virtualip) && !empty($configObj->virtualip->vip)) { + $filter_types = explode(',', $this->vipType); + foreach ($configObj->virtualip->vip as $vip) { + if ($this->vipType == '*' || in_array($vip->mode, $filter_types)) { + if (isset($configObj->{$vip->interface}->descr)) { + $intf_name = $configObj->{$vip->interface}->descr; + } else { + $intf_name = $vip->interface; + } + if (!empty($vip->vhid)) { + $caption = sprintf( + gettext("[%s] %s on %s (vhid %s)"), $vip->subnet, $vip->descr, $intf_name, $vip->vhid + ); + } else { + $caption = sprintf(gettext("[%s] %s on %s"), $vip->subnet, $vip->descr, $intf_name); + } + self::$internalStaticOptionList[$this->vipType][(string)$vip->subnet] = $caption; + } + } + natcasesort(self::$internalStaticOptionList[$this->vipType]); + } + } + $this->internalOptionList = self::$internalStaticOptionList[$this->vipType]; + } +} diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/VirtualIPFieldTest.php b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/VirtualIPFieldTest.php new file mode 100644 index 000000000..05c50cd8f --- /dev/null +++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/VirtualIPFieldTest.php @@ -0,0 +1,103 @@ +assertInstanceOf('\OPNsense\Base\FieldTypes\VirtualIPField', new VirtualIPField()); + // switch config to test set for this type + FactoryDefault::getDefault()->get('config')->globals->config_path = __DIR__ . '/VirtualIPFieldTest/'; + Config::getInstance()->forceReload(); + } + + /** + * @depends testCanBeCreated + */ + public function testCarp() + { + // init field + $field = new VirtualIPField(); + $field->setType("carp"); + $field->eventPostLoading(); + $this->assertContains('10.100.0.10', array_keys($field->getNodeData())); + $this->assertNotContains('172.11.1.0', array_keys($field->getNodeData())); + } + + /** + * @depends testCanBeCreated + */ + public function testIPAlias() + { + // init field + $field = new VirtualIPField(); + $field->setType("ipalias"); + $field->eventPostLoading(); + $this->assertContains('172.11.1.0', array_keys($field->getNodeData())); + $this->assertNotContains('10.207.0.1', array_keys($field->getNodeData())); + } + + /** + * @depends testCanBeCreated + */ + public function testOther() + { + // init field + $field = new VirtualIPField(); + $field->setType("other"); + $field->eventPostLoading(); + $this->assertNotContains('172.11.1.0', array_keys($field->getNodeData())); + $this->assertContains('10.207.0.1', array_keys($field->getNodeData())); + } + + + /** + * type is not a container + */ + public function testIsContainer() + { + $field = new VirtualIPField(); + $this->assertFalse($field->isContainer()); + } +} diff --git a/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/VirtualIPFieldTest/config.xml b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/VirtualIPFieldTest/config.xml new file mode 100644 index 000000000..a1277a296 --- /dev/null +++ b/src/opnsense/mvc/tests/app/models/OPNsense/Base/FieldTypes/VirtualIPFieldTest/config.xml @@ -0,0 +1,58 @@ + + + + + if001 + WAN + 1 + dhcp + + + if002 + LAN + 1 + + + + + network + 24 + ipalias + lan + test_vip_1 + 172.11.1.0 + + + network + 24 + other + wan + test_vip_2 + 10.207.0.1 + + + single + 24 + carp + lan + test_vip_3 + 10.100.0.10 + 9 + 0 + 1 + opnsense + + + single + 24 + carp + wan + test_vip_4 + 10.100.0.11 + 9 + 0 + 1 + opnsense + + +