| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <?php declare(strict_types=1);
- use PHPUnit\Framework\TestCase;
- use PrivateBin\Configuration;
- class ConfigurationTest extends TestCase
- {
- private $_minimalConfig;
- private $_options;
- private $_path;
- public function setUp(): void
- {
- /* Setup Routine */
- Helper::confBackup();
- $this->_minimalConfig = '[main]' . PHP_EOL . '[model]' . PHP_EOL . '[model_options]';
- $this->_options = Configuration::getDefaults();
- $this->_options['model_options']['dir'] = PATH . $this->_options['model_options']['dir'];
- $this->_path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'privatebin_cfg';
- if (!is_dir($this->_path)) {
- mkdir($this->_path);
- }
- }
- public function tearDown(): void
- {
- /* Tear Down Routine */
- Helper::rmDir($this->_path);
- if (is_file(CONF)) {
- unlink(CONF);
- }
- Helper::confRestore();
- }
- public function testDefaultConfigFile()
- {
- $conf = new Configuration;
- $this->assertEquals($this->_options, $conf->get(), 'default configuration is correct');
- }
- public function testHandleFreshConfigFile()
- {
- Helper::createIniFile(CONF, $this->_options);
- $conf = new Configuration;
- $this->assertEquals($this->_options, $conf->get(), 'newly generated configuration is correct');
- }
- public function testHandleMissingConfigFile()
- {
- if (is_file(CONF)) {
- unlink(CONF);
- }
- $conf = new Configuration;
- $this->assertEquals($this->_options, $conf->get(), 'returns correct defaults on missing file');
- }
- public function testHandleBlankConfigFile()
- {
- file_put_contents(CONF, '');
- $this->expectException(Exception::class);
- $this->expectExceptionCode(2);
- new Configuration;
- }
- public function testHandleMinimalConfigFile()
- {
- file_put_contents(CONF, $this->_minimalConfig);
- $conf = new Configuration;
- $this->assertEquals($this->_options, $conf->get(), 'returns correct defaults on empty file');
- }
- public function testHandleInvalidSection()
- {
- file_put_contents(CONF, $this->_minimalConfig);
- $conf = new Configuration;
- $this->expectException(Exception::class);
- $this->expectExceptionCode(3);
- $conf->getKey('foo', 'bar');
- }
- public function testHandleInvalidKey()
- {
- file_put_contents(CONF, $this->_minimalConfig);
- $conf = new Configuration;
- $this->expectException(Exception::class);
- $this->expectExceptionCode(4);
- $conf->getKey('foo');
- }
- public function testHandleGetKey()
- {
- file_put_contents(CONF, $this->_minimalConfig);
- $conf = new Configuration;
- $this->assertEquals($this->_options['main']['sizelimit'], $conf->getKey('sizelimit'), 'get default size');
- }
- public function testHandleWrongTypes()
- {
- $original_options = $this->_options;
- $original_options['main']['syntaxhighlightingtheme'] = 'foo';
- $options = $original_options;
- $options['main']['discussion'] = 'true';
- $options['main']['opendiscussion'] = 0;
- $options['main']['password'] = -1; // evaluates to TRUE
- $options['main']['fileupload'] = 'false';
- $options['expire_options']['foo'] = 'bar';
- $options['formatter_options'][] = 'foo';
- Helper::createIniFile(CONF, $options);
- $conf = new Configuration;
- $original_options['expire_options']['foo'] = intval('bar');
- $original_options['formatter_options'][0] = 'foo';
- $this->assertEquals($original_options, $conf->get(), 'incorrect types are corrected');
- }
- public function testHandleMissingSubKeys()
- {
- $options = $this->_options;
- unset($options['expire_options']['1week']);
- unset($options['expire_options']['1year']);
- unset($options['expire_options']['never']);
- $sri_key = array_key_first($options['sri']);
- $valid_sri = $options['sri'][$sri_key];
- $options['sri'][$sri_key] = ''; // empty string should get replaced with default
- $options['sri']['js/example.js'] = 'some invalid SRI hash';
- Helper::createIniFile(CONF, $options);
- $conf = new Configuration;
- // restore expected results
- $options['expire']['default'] = '5min';
- $options['sri'][$sri_key] = $valid_sri;
- $this->assertEquals($options, $conf->get(), 'not overriding "missing" subkeys');
- }
- public function testConfigPath()
- {
- // setup
- $configFile = $this->_path . DIRECTORY_SEPARATOR . 'conf.php';
- $options = $this->_options;
- $options['main']['name'] = 'OtherBin';
- Helper::createIniFile($configFile, $options);
- // test
- putenv('CONFIG_PATH=' . $this->_path);
- $conf = new Configuration;
- $this->assertEquals('OtherBin', $conf->getKey('name'), 'changing config path is supported');
- // cleanup environment
- if (is_file($configFile)) {
- unlink($configFile);
- }
- putenv('CONFIG_PATH');
- }
- }
|