PHP Classes

File: UnitTests/ConfTest.php

Recommend this page to a friend!
  Classes of Aleksey Nemiro   PHP Nginx Config   UnitTests/ConfTest.php   Download  
File: UnitTests/ConfTest.php
Role: Unit test script
Content type: text/plain
Description: Unit test script
Class: PHP Nginx Config
Read and write Nginx server configuration files
Author: By
Last change:
Date: 8 years ago
Size: 9,311 bytes
 

Contents

Class file image Download
<?php
namespace Nemiro\Nginx\Test
{
 
 
/*
   * Copyright © Aleksey Nemiro, 2015. All rights reserved.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */

 
require_once '../Conf.php';

  use
Nemiro\Nginx\Conf as NginxConf;

  class
ConfTest
 
{
   
    function
__construct()
    {
     
$this->LoadTest();
     
$this->SaveTest();
     
$this->CreateTest();
    }

    private function
LoadTest()
    {
      echo
'<h1>LoadTest</h1>';

     
$conf = new NginxConf('test.conf');
     
$i = 1;

      echo
sprintf('Test #%d: Get directive by name ? ', $i);
      if (
$conf['server'] != NULL)
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Get directive from Directives ? ', $i);
      if (
$conf['server']->Directives['root']->ParametersAsString() == '/home/example.org/html')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']->Directives['root']->Parameters[0]);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: ParametersAsString ? ', $i);
      if (
$conf['server']['server_name']->ParametersAsString() == 'example.org')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['server_name']->ParametersAsString());
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Get parameter by index ? ', $i);
      if (
$conf['server']->Directives['root']->Parameters[0] == '/home/example.org/html')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']->Directives['root']->Parameters[0]);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Parameters with spaces by index ? ', $i);
      if (
$conf['server']['auth_basic']->Parameters[0] == 'Test server')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['auth_basic']->Parameters);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Parameters with spaces via ParametersAsString ? ', $i);
      if (
$conf['server']['auth_basic']->ParametersAsString() == '"Test server"')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['auth_basic']->Parameters);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Groups ? ', $i);
      if (
$conf['server']['location']->IsGroup())
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location']->IsGroup());
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Get group item #1 ? ', $i);
      if (
$conf['server']['location'][0]['proxy_pass']->ParametersAsString() == 'http://127.0.0.1:8080')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location'][0]);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Get group item #2 (explicit) ? ', $i);
      if (
$conf['server']->Directives['location']->Directives[1]->Directives['expires']->Parameters[0] == 'max')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location'][1]);
      }
      echo
'<br />';
   
     
$i++;
      echo
sprintf('Test #%d: FirstChild and ParametersAsString ? ', $i);
      if (
$conf['server']['location']->FirstChild()->ParametersAsString() == '/')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location']->FirstChild());
      }
      echo
'<br />';
     
     
$i++;
      echo
sprintf('Test #%d: LastChild and Parameters by index ? ', $i);
      if (
$conf['server']->Directives['location']->LastChild()->Parameters[1] == '^(?<page>[\w\d]+)([\.]{1}).ashx$')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location']->LastChild());
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Access to a non-existent directive ? ', $i);
      if (
$conf['server123'] == NULL)
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Access to a non-existent directive from Directives ? ', $i);
      if (
$conf->Items['server123'] == NULL)
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
      }
      echo
'<br />';
    }

    private function
SaveTest()
    {
      echo
'<h1>SaveTest</h1>';

     
$conf = new NginxConf('test.conf');

     
$conf['server']['server_name']->Parameters = array('kbyte.ru', 'www.kbyte.ru', 'forum.kbyte.ru');
     
$conf['server']['root']->Parameters = array('/home/kbyte.ru/www');

     
$new_location = NginxConf::CreateDirective('location');

     
$new_location->AddParameter(array('~*', '\.aspx$'));
     
$new_location->AddDirective('index', array('Default.aspx', 'default.aspx'));
     
$new_location->AddDirective('proxy_pass', array('http://127.0.0.1:8080'));

     
$proxy_set_header = NginxConf::CreateGroup('proxy_set_header');
     
$proxy_set_header->AddDirective(array('X-Real-IP', '$remote_addr'));
     
$proxy_set_header->AddDirective(array('X-Forwarded-For', '$remote_addr'));
     
$proxy_set_header->AddDirective(array('Host', '$host'));
     
$proxy_set_header->AddTo($new_location);

     
$new_location->AddTo($conf['server']);

     
$conf->Save('test-save.conf');

     
// read
     
$conf = new NginxConf('test-save.conf');

     
$i = 1;
      echo
sprintf('Test #%d: Simple directives ? ', $i);
      if
      (
       
$conf['server']['server_name'][0] == 'kbyte.ru' &&
       
$conf['server']['server_name'][1] == 'www.kbyte.ru' &&
       
$conf['server']['server_name']->ParametersAsString() == 'kbyte.ru www.kbyte.ru forum.kbyte.ru' &&
       
$conf['server']->Directives['root']->ParametersAsString() == '/home/kbyte.ru/www'
     
)
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['server_name']);
       
var_dump($conf['server']->Directives['root']);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: Block directives ? ', $i);
      if (
$conf['server']->Directives['location']->LastChild()->ChildCount() == 3)
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location']->LastChild());
      }
      echo
'<br />';

     
// output
     
echo '<pre>'.file_get_contents('test-save.conf').'</pre>';

     
// remove
     
unlink('test-save.conf');
    }

    private function
CreateTest()
    {
      echo
'<h1>CreateTest</h1>';

     
$conf = new NginxConf();
     
$conf->Add(NginxConf::CreateDirective('server'));
     
$conf['server']->AddDirective('server_name', array('example.org', 'www.example.org'));
     
$conf['server']->AddDirective('root', array('/home/example.org/www'));
     
$location = NginxConf::CreateDirective('location', '/');
     
$location->AddDirective('index', array('index.php', 'index.html', 'index.htm'));
     
$location->AddTo($conf['server']);

     
// save
     
$conf->Save('test-create.conf');

     
// read
     
$conf = new NginxConf('test-create.conf');

     
$i = 1;
      echo
sprintf('Test #%d: server_name ? ', $i);
      if (
$conf['server']->Directives['server_name']->Parameters[0] == 'example.org')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['server_name']);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: root ? ', $i);
      if (
$conf['server']->Directives['root']->Parameters[0] == '/home/example.org/www')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['root']);
      }
      echo
'<br />';

     
$i++;
      echo
sprintf('Test #%d: location ? ', $i);
      if (
$conf['server']['location']['index'][0] == 'index.php')
      {
       
$this->Success();
      }
      else
      {
       
$this->Fail();
       
var_dump($conf['server']['location']);
      }
      echo
'<br />';

     
// output
     
echo '<pre>'.file_get_contents('test-create.conf').'</pre>';

     
// remove
     
unlink('test-create.conf');
    }

    private function
Success()
    {
      echo
'<span style="color:#008000;">[ Success ]</span>';
    }

    private function
Fail()
    {
      echo
'<span style="color:red">[ Fail ]</span>';
    }

  }


  new
ConfTest();
}