net/relayd: add PHPunit API controller tests (#643)

This commit is contained in:
Frank Brendel
2018-04-05 14:48:38 +02:00
committed by Franco Fichtner
parent 31c80c05aa
commit 8b46f3fafc
5 changed files with 503 additions and 33 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
PLUGIN_NAME= relayd
PLUGIN_VERSION= 2.0.d
PLUGIN_REVISION= 4
PLUGIN_REVISION= 5
PLUGIN_DEPENDS= relayd
PLUGIN_COMMENT= Relayd Load Balancer
PLUGIN_MAINTAINER= frank.brendel@eurolog.com
@@ -44,12 +44,21 @@ class SettingsController extends ApiControllerBase
static protected $internalModelName = 'relayd';
static protected $internalModelClass = '\OPNsense\Relayd\Relayd';
public $mdlRelayd = null;
/**
* list with valid model node types
*/
private $nodeTypes = array('general', 'host', 'tablecheck', 'table', 'protocol', 'virtualserver');
/**
* initialize object properties
*/
public function onConstruct()
{
$this->mdlRelayd = new Relayd();
}
/**
* query relayd settings
* @param $nodeType
@@ -61,14 +70,13 @@ class SettingsController extends ApiControllerBase
$result = array("result" => "failed");
if ($this->request->isGet() && $nodeType != null) {
$this->validateNodeType($nodeType);
$mdlRelayd = new Relayd();
if ($nodeType == 'general') {
$node = $mdlRelayd->getNodeByReference($nodeType);
$node = $this->mdlRelayd->getNodeByReference($nodeType);
} else {
if($uuid != null) {
$node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
$node = $this->mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
} else {
$node = $mdlRelayd->$nodeType->Add();
$node = $this->mdlRelayd->$nodeType->Add();
}
}
if ($node != null) {
@@ -91,30 +99,41 @@ class SettingsController extends ApiControllerBase
$result = array("result" => "failed", "validations" => array());
if ($this->request->isPost() && $this->request->hasPost("relayd") && $nodeType != null) {
$this->validateNodeType($nodeType);
$mdlRelayd = new Relayd();
if ($nodeType == 'general') {
$node = $mdlRelayd->getNodeByReference($nodeType);
$node = $this->mdlRelayd->getNodeByReference($nodeType);
} else {
if($uuid != null) {
$node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
$node = $this->mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
} else {
$node = $mdlRelayd->$nodeType->Add();
$node = $this->mdlRelayd->$nodeType->Add();
}
}
if ($node != null) {
$relaydInfo = $this->request->getPost("relayd");
// perform plugin specific validations
if ($nodeType == 'virtualserver') {
// preset defaults for validations
if(empty($relaydInfo[$nodeType]['type'])) {
$relaydInfo[$nodeType]['type'] = $node->type->__toString();
}
if(empty($relaydInfo[$nodeType]['transport_tablemode'])) {
$relaydInfo[$nodeType]['transport_tablemode'] = $node->transport_tablemode->__toString();
}
if(empty($relaydInfo[$nodeType]['backuptransport_tablemode'])) {
$relaydInfo[$nodeType]['backuptransport_tablemode'] = $node->backuptransport_tablemode->__toString();
}
if ($relaydInfo[$nodeType]['type'] == 'redirect') {
if ($relaydInfo[$nodeType]['transport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['transport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for redirects.";
}
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for redirects.";
}
}
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for redirects.";
}
}
if ($relaydInfo[$nodeType]['type'] == 'relay') {
if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') {
@@ -149,7 +168,7 @@ class SettingsController extends ApiControllerBase
}
$node->setNodes($relaydInfo[$nodeType]);
$valMsgs = $mdlRelayd->performValidation();
$valMsgs = $this->mdlRelayd->performValidation();
foreach ($valMsgs as $field => $msg) {
$fieldnm = str_replace($node->__reference, "relayd." . $nodeType, $msg->getField());
$result["validations"][$fieldnm] = $msg->getMessage();
@@ -157,7 +176,7 @@ class SettingsController extends ApiControllerBase
if (empty($result["validations"])) {
unset($result["validations"]);
$result['result'] = 'ok';
$mdlRelayd->serializeToConfig();
$this->mdlRelayd->serializeToConfig();
Config::getInstance()->save();
if ($nodeType == 'general' && $relaydInfo['general']['enabled'] == '0') {
$svcRelayd = new ServiceController();
@@ -181,11 +200,10 @@ class SettingsController extends ApiControllerBase
if ($nodeType != null) {
$this->validateNodeType($nodeType);
if ($uuid != null) {
$mdlRelayd = new Relayd();
$node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
$node = $this->mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
if ($node != null) {
$nodeName = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid . '.name')->__toString();
if ($mdlRelayd->$nodeType->del($uuid) == true) {
$nodeName = $this->mdlRelayd->getNodeByReference($nodeType . '.' . $uuid . '.name')->__toString();
if ($this->mdlRelayd->$nodeType->del($uuid) == true) {
// delete relations
switch ($nodeType) {
case 'host':
@@ -203,7 +221,7 @@ class SettingsController extends ApiControllerBase
$this->deleteRelations('virtualserver', 'protocol', $uuid, 'protocol', $nodeName, $mdlRelayd);
break;
}
$mdlRelayd->serializeToConfig();
$this->mdlRelayd->serializeToConfig();
Config::getInstance()->save();
$result["result"] = "ok";
}
@@ -223,8 +241,7 @@ class SettingsController extends ApiControllerBase
$this->sessionClose();
if ($this->request->isPost() && $nodeType != null) {
$this->validateNodeType($nodeType);
$mdlRelayd = new Relayd();
$grid = new UIModelGrid($mdlRelayd->$nodeType);
$grid = new UIModelGrid($this->mdlRelayd->$nodeType);
$fields = array();
switch ($nodeType) {
case 'host':
@@ -267,9 +284,9 @@ class SettingsController extends ApiControllerBase
* @param &$mdlRelayd
* @throws \Exception
*/
private function deleteRelations($nodeType = null, $nodeField = null, $relUuid = null, $relNodeType = null, $relNodeName = null, &$mdlRelayd = null)
private function deleteRelations($nodeType = null, $nodeField = null, $relUuid = null, $relNodeType = null, $relNodeName = null)
{
$nodes = $mdlRelayd->$nodeType->getNodes();
$nodes = $this->mdlRelayd->$nodeType->getNodes();
// get nodes with relations
foreach ($nodes as $nodeUuid => $node) {
// get relation uuids
@@ -277,14 +294,14 @@ class SettingsController extends ApiControllerBase
// remove uuid from field
if ($fieldUuid == $relUuid) {
$refField = $nodeType . '.' . $nodeUuid . '.' . $nodeField;
$relNode = $mdlRelayd->getNodeByReference($refField);
$relNode = $this->mdlRelayd->getNodeByReference($refField);
$nodeRels = str_replace($relUuid, '', $relNode->__toString());
$nodeRels = str_replace(',,', ',', $nodeRels);
$nodeRels = rtrim($nodeRels, ',');
$nodeRels = ltrim($nodeRels, ',');
$mdlRelayd->setNodeByReference($refField, $nodeRels);
$this->mdlRelayd->setNodeByReference($refField, $nodeRels);
if ($relNode->isEmptyAndRequired()) {
$nodeName = $mdlRelayd->getNodeByReference($nodeType . '.' . $nodeUuid . '.name')->__toString();
$nodeName = $this->mdlRelayd->getNodeByReference($nodeType . '.' . $nodeUuid . '.name')->__toString();
throw new \Exception("Cannot delete $relNodeType '$relNodeName' from $nodeType '$nodeName'");
}
}
@@ -0,0 +1,453 @@
<?php
/**
* Copyright (C) 2018 EURO-LOG AG
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
namespace tests\OPNsense\Relayd\Api;
require_once("config.inc");
use \OPNsense\Core\Config;
class RelaydTest extends \PHPUnit\Framework\TestCase
{
/**
* list with model node types
*/
private $nodeTypes = array('host', 'tablecheck', 'table', 'protocol', 'virtualserver');
// holds the SettingsController object
protected static $setRelayd;
public static function setUpBeforeClass()
{
self::$setRelayd = new \OPNsense\Relayd\Api\SettingsController;
}
private function cleanupNodes($nodeType = null)
{
$nodes = self::$setRelayd->mdlRelayd->$nodeType->getNodes();
foreach ($nodes as $nodeUuid => $node) {
self::$setRelayd->mdlRelayd->$nodeType->del($nodeUuid);
}
}
/**
* test getAction
*/
public function testGet()
{
$this->assertInstanceOf('\OPNsense\Relayd\Api\SettingsController', self::$setRelayd);
$this->expectException(Exception);
$response = self::$setRelayd->getAction('wrong_node_type');
$testConfig = [];
$response = self::$setRelayd->getAction('general');
$testConfig['general'] = $response['relayd']['general'];
$this->assertEquals($response['result'], 'ok');
$this->assertArrayHasKey('enabled', $response['relayd']['general']);
return $testConfig;
}
/**
* test searchAction
* @depends testGet
*/
public function testSearch($testConfig)
{
$_SERVER['REQUEST_METHOD'] = 'POST';
$_POST = array('current' => '1', 'rowCount' => '7');
foreach ($this->nodeTypes as $nodeType) {
$response = self::$setRelayd->searchAction($nodeType);
$this->assertArrayHasKey('total', $response);
$testConfig[$nodeType] = $response['rows'];
}
return $testConfig;
}
/**
* test delAction
* not really a test if the config is empty, but we will delete something later
* @depends testSearch
*/
public function testReset($testConfig)
{
$_SERVER['REQUEST_METHOD'] = 'POST';
foreach (array_reverse($this->nodeTypes) as $nodeType) {
foreach ($testConfig[$nodeType] as $node) {
$response = self::$setRelayd->delAction($nodeType, $node['uuid']);
$this->assertEquals($response['result'], 'ok');
}
}
// need an assertion here to succeed this test on empty config
$this->assertTrue(true);
}
/**
* test setAction general
* @depends testReset
*/
public function testSetGeneral()
{
$_SERVER['REQUEST_METHOD'] = 'POST';
// interval too small
$_POST = array('relayd' => ['general' => ['interval' => '0']]);
$response = self::$setRelayd->setAction('general');
$this->assertCount(1, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.general.interval'], 'Check interval must be greater than 0');
// set correct interval and incorrect timeout (s. testServiceController)
$_POST = array('relayd' => ['general' => ['interval' => '10', 'timeout' => 86400, 'enabled' => '0']]);
$response = self::$setRelayd->setAction('general');
$this->assertEquals($response['response'], "OK\n\n");
}
/**
* test setAction for hosts
* @depends testReset
*/
public function testSetHost()
{
$_SERVER['REQUEST_METHOD'] = 'POST';
// empty host name
$_POST = array('relayd' => ['host' => ['address' => '127.0.0.1']]);
$response = self::$setRelayd->setAction('host');
$this->assertCount(1, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.host.name'], 'Should be a string between 1 and 255 characters. Allowed characters are letters and numbers as well as underscore, minus, dot and space.');
$this->cleanupNodes('host');
// check mask
$_POST = array('relayd' => ['host' => ['name' => 'test$Host', 'address' => '127.0.0.$']]);
$response = self::$setRelayd->setAction('host');
$this->assertCount(2, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.host.name'], 'Should be a string between 1 and 255 characters. Allowed characters are letters and numbers as well as underscore, minus, dot and space.');
$this->assertEquals($response['validations']['relayd.host.address'], 'Please specify a valid servername or IP address.');
$this->cleanupNodes('host');
// create host for ServiceControllerTest
$_POST = array('relayd' => ['host' => ['name' => 'testHost', 'address' => '127.0.0.1']]);
$response = self::$setRelayd->setAction('host');
$this->assertEquals($response['result'], 'ok');
}
/**
* test setAction for tables
* @depends testSetHost
*/
public function testSetTable()
{
$_SERVER['REQUEST_METHOD'] = 'POST';
// check mask and missing host
$_POST = array('relayd' => ['table' => ['name' => 'test$Table', 'hosts' => 'aaa-111-bbb-222']]);
$response = self::$setRelayd->setAction('table');
$this->assertCount(2, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.table.name'], 'Should be a string between 1 and 255 characters. Allowed characters are letters and numbers as well as underscore, minus, dot and space.');
$this->assertEquals($response['validations']['relayd.table.hosts'], 'Host not found');
$this->cleanupNodes('table');
// create table for ServiceControllerTest
$_POST = array('current' => '1', 'rowCount' => '7', 'searchPhrase' => 'testHost');
$response = self::$setRelayd->searchAction('host');
$this->assertArrayHasKey('total', $response);
$_POST = array('relayd' => ['table' => ['name' => 'testTable', 'enabled' => 1, 'hosts' => $response['rows'][0]['uuid']]]);
$response = self::$setRelayd->setAction('table');
}
/**
* test setAction for tablechecks
* @depends testSearch
* @depends testReset
*/
public function testSetTableCheck()
{
$_SERVER['REQUEST_METHOD'] = 'POST';
// wrong option
$_POST = array('relayd' => ['tablecheck' => ['name' => 'test$Check', 'type' => 'ABCXYZ']]);
$response = self::$setRelayd->setAction('tablecheck');
$this->assertCount(2, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.tablecheck.name'], 'Should be a string between 1 and 255 characters. Allowed characters are letters and numbers as well as underscore, minus, dot and space.');
$this->assertEquals($response['validations']['relayd.tablecheck.type'], 'option not in list');
$this->cleanupNodes('tablecheck');
// type 'send' without 'expect'
$_POST = array('relayd' => ['tablecheck' => ['name' => 'testSend', 'type' => 'send']]);
$response = self::$setRelayd->setAction('tablecheck');
$this->assertCount(1, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.tablecheck.expect'], 'Expect Pattern cannot be empty.');
$this->cleanupNodes('tablecheck');
// type 'script' without 'path'
$_POST = array('relayd' => ['tablecheck' => ['name' => 'testScript', 'type' => 'script']]);
$response = self::$setRelayd->setAction('tablecheck');
$this->assertCount(1, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.tablecheck.path'], 'Script path cannot be empty.');
$this->cleanupNodes('tablecheck');
// type 'http' without 'code' and 'digest'
$_POST = array('relayd' => ['tablecheck' => ['name' => 'testTableCheck', 'type' => 'http', 'path' => 'http://www.example.com']]);
$response = self::$setRelayd->setAction('tablecheck');
$this->assertCount(2, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.tablecheck.code'], 'Provide one of Response Code or Message Digest.');
$this->assertEquals($response['validations']['relayd.tablecheck.digest'], 'Provide one of Response Code or Message Digest.');
$this->cleanupNodes('tablecheck');
// create tablecheck for ServiceControllerTest
$_POST = array('relayd' => [
'tablecheck' => [
'name' => 'testTableCheck',
'type' => 'http',
'path' => '/',
'host' => 'localhost',
'code' => '403',
'ssl' => '1']]);
$response = self::$setRelayd->setAction('tablecheck');
$this->assertEquals($response['result'], 'ok');
}
/**
* test setAction for protocols
* @depends testSearch
* @depends testReset
*/
public function testSetProtocol()
{
$_SERVER['REQUEST_METHOD'] = 'POST';
// missing 'name' wrong 'type'
$_POST = array('relayd' => ['protocol' => ['name' => 'test$Protocol', 'type' => 'ABCXYZ']]);
$response = self::$setRelayd->setAction('protocol');
$this->assertCount(2, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.protocol.name'], 'Should be a string between 1 and 255 characters. Allowed characters are letters and numbers as well as underscore, minus, dot and space.');
$this->assertEquals($response['validations']['relayd.protocol.type'], 'option not in list');
$this->cleanupNodes('protocol');
// create protocol for ServiceControllerTest
$_POST = array('relayd' => ['protocol' => ['name' => 'testProtocol', 'type' => 'tcp', 'options' => 'nodelay, socket buffer 65536']]);
$response = self::$setRelayd->setAction('protocol');
$this->assertEquals($response['result'], 'ok');
}
/**
* test setAction for virtualservers
* @depends testSearch
* @depends testReset
*/
public function testSetVirtualServer()
{
$_SERVER['REQUEST_METHOD'] = 'POST';
// search table and tablecheck
$_POST = array('current' => '1', 'rowCount' => '7', 'searchPhrase' => 'testTable');
$response = self::$setRelayd->searchAction('table');
$this->assertArrayHasKey('total', $response);
$tableUuid = $response['rows'][0]['uuid'];
$_POST = array('current' => '1', 'rowCount' => '7', 'searchPhrase' => 'testTableCheck');
$response = self::$setRelayd->searchAction('tablecheck');
$this->assertArrayHasKey('total', $response);
$tableCheckUuid = $response['rows'][0]['uuid'];
$_POST = array('current' => '1', 'rowCount' => '7', 'searchPhrase' => 'testProtocol');
$response = self::$setRelayd->searchAction('protocol');
$this->assertArrayHasKey('total', $response);
$protocolUuid = $response['rows'][0]['uuid'];
// check mask, misisng table, tablecheck, wrong/missing listen port/address
$_POST = array('relayd' => [
'virtualserver' => [
'name' => 'test{}VirtualServer',
'listen_startport' => '123456',
]]);
$response = self::$setRelayd->setAction('virtualserver');
$this->assertCount(5, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.virtualserver.name'], 'Should be a string between 1 and 255 characters. Allowed characters are letters and numbers as well as underscore, minus, dot and space.');
$this->assertEquals($response['validations']['relayd.virtualserver.listen_address'], 'Please specify a valid servername or IP address.');
$this->assertEquals($response['validations']['relayd.virtualserver.listen_startport'], 'A valid Port number must be specified.');
$this->assertEquals($response['validations']['relayd.virtualserver.transport_table'], 'Table not found');
$this->assertEquals($response['validations']['relayd.virtualserver.transport_tablecheck'], 'Table check not found');
$this->cleanupNodes('virtualserver');
// wrong tablemodes, missing ModelRelationField targets
$_POST = array('relayd' => [
'virtualserver' => [
'name' => 'testVirtualServer',
'listen_address' => '127.0.0.1',
'listen_startport' => '444',
'transport_table' => $tableUuid,
'transport_tablemode' => 'least-states',
'transport_tablecheck' => $tableCheckUuid,
]]);
$response = self::$setRelayd->setAction('virtualserver');
$this->assertCount(1, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.virtualserver.transport_tablemode'], 'Scheduler \'least-states\' not supported for relays.');
$this->cleanupNodes('virtualserver');
// wron scheduler, missing protocol
$_POST = array('relayd' => [
'virtualserver' => [
'name' => 'testVirtualServer',
'type' => 'redirect',
'listen_address' => '127.0.0.1',
'listen_startport' => '444',
'transport_table' => $tableUuid,
'transport_tablemode' => 'least-states',
'transport_tablecheck' => $tableCheckUuid,
'backuptransport_table' => $tableUuid,
'backuptransport_tablemode' => 'random',
'backuptransport_tablecheck' => $tableCheckUuid,
'protocol' => 'aaa-bbb-123-456'
]]);
$response = self::$setRelayd->setAction('virtualserver');
$this->assertCount(2, $response['validations']);
$this->assertEquals($response['result'], 'failed');
$this->assertEquals($response['validations']['relayd.virtualserver.backuptransport_tablemode'], 'Scheduler \'random\' not supported for redirects.');
$this->assertEquals($response['validations']['relayd.virtualserver.protocol'], 'Protocol not found');
$this->cleanupNodes('virtualserver');
// create virtualserver for ServiceControllerTest
$_POST = array('relayd' => [
'virtualserver' => [
'name' => 'testVirtualServer',
'enabled' => '1',
'listen_address' => '127.0.0.1',
'listen_startport' => '444',
'transport_table' => $tableUuid,
'transport_port' => '443',
'transport_tablecheck' => $tableCheckUuid,
'protocol' => $protocolUuid
]]);
$response = self::$setRelayd->setAction('virtualserver');
$this->assertEquals($response['result'], 'ok');
}
/**
* ServiceControllerTest
* @depends testSetGeneral
* @depends testSetHost
* @depends testSetTable
* @depends testSetTableCheck
* @depends testSetProtocol
* @depends testSetVirtualServer
*/
public function testServiceController()
{
$svcRelayd = new \OPNsense\Relayd\Api\ServiceController;
$_SERVER['REQUEST_METHOD'] = 'POST';
// generate template and test it by Relayd
$response = $svcRelayd->configtestAction();
$this->assertEquals($response['template'], 'OK');
$this->assertEquals($response['result'], "global timeout exceeds interval\ntable timeout exceeds interval: testTable:443");
$_POST = array('relayd' => ['general' => ['timeout' => '200']]);
$response = self::$setRelayd->setAction('general');
$this->assertEquals($response['result'], 'ok');
$response = $svcRelayd->configtestAction();
$this->assertEquals($response['template'], 'OK');
$this->assertEquals($response['result'], 'configuration OK');
// status
$response = $svcRelayd->statusAction();
$this->assertEquals($response['status'], 'disabled');
// enable
$_POST = array('relayd' => ['general' => ['enabled' => '1']]);
$response = self::$setRelayd->setAction('general');
$this->assertEquals($response['result'], 'ok');
// reconfigure
$response = $svcRelayd->reconfigureAction();
$this->assertEquals($response['status'], 'ok');
// start
$response = $svcRelayd->startAction();
$this->assertEquals($response['response'], "OK\n\n");
// status
$response = $svcRelayd->statusAction();
$this->assertEquals($response['status'], 'running');
}
/**
* StatusControllerTest
* @depends testServiceController
*/
public function testStatusController()
{
$statRelayd = new \OPNsense\Relayd\Api\StatusController;
$response = $statRelayd->sumAction();
$this->assertEquals($response['result'], 'ok');
$this->assertEquals($response['rows'][0]['type'], 'relay');
$this->assertEquals($response['rows'][0]['name'], 'testVirtualServer');
$this->assertEquals($response['rows'][0]['tables'][1]['name'], 'testTable:443');
$this->assertEquals($response['rows'][0]['tables'][1]['status'], 'active (1 hosts)');
$this->assertEquals($response['rows'][0]['tables'][1]['hosts'][1]['name'], '127.0.0.1');
$response = $statRelayd->toggleAction('table', 1, 'disable');
$this->assertEquals($response['result'], 'ok');
$this->assertEquals($response['output'], 'command succeeded');
}
/**
* cleanup config
* @depends testStatusController
*/
public function testCleanup()
{
$svcRelayd = new \OPNsense\Relayd\Api\ServiceController;
$response = $svcRelayd->stopAction();
$this->assertEquals($response['response'], "OK\n\n");
foreach (array_reverse($this->nodeTypes) as $nodeType) {
$this->cleanupNodes($nodeType);
}
$general = self::$setRelayd->mdlRelayd->getNodeByReference('general');
$general->setNodes(array('enabled' => '0'));
self::$setRelayd->mdlRelayd->serializeToConfig();
Config::getInstance()->save();
$this->assertTrue(true);
}
}
@@ -4,7 +4,7 @@ type:script
message:starting relayd
[stop]
command:/usr/local/etc/rc.d/relayd stop
command:/usr/local/etc/rc.d/relayd stop; exit 0
type:script
message:stopping relayd
@@ -38,8 +38,8 @@ table <{{ name }}>{{ disable }} {
{% if helpers.exists('OPNsense.relayd.protocol') %}
{% for protocol in helpers.toList('OPNsense.relayd.protocol') %}
{{ protocol.type }} protocol "{{protocol.name}}" {
{{ protocol.options }}
protocol "{{protocol.name}}" {
{{ protocol.type }} { {{ protocol.options }} }
}
{% endfor %}
{% endif %}