1
0

ConfigurationTest.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php declare(strict_types=1);
  2. use PHPUnit\Framework\TestCase;
  3. use PrivateBin\Configuration;
  4. class ConfigurationTest extends TestCase
  5. {
  6. private $_minimalConfig;
  7. private $_options;
  8. private $_path;
  9. public function setUp(): void
  10. {
  11. /* Setup Routine */
  12. Helper::confBackup();
  13. $this->_minimalConfig = '[main]' . PHP_EOL . '[model]' . PHP_EOL . '[model_options]';
  14. $this->_options = Configuration::getDefaults();
  15. $this->_options['model_options']['dir'] = PATH . $this->_options['model_options']['dir'];
  16. $this->_path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'privatebin_cfg';
  17. if (!is_dir($this->_path)) {
  18. mkdir($this->_path);
  19. }
  20. }
  21. public function tearDown(): void
  22. {
  23. /* Tear Down Routine */
  24. Helper::rmDir($this->_path);
  25. if (is_file(CONF)) {
  26. unlink(CONF);
  27. }
  28. Helper::confRestore();
  29. }
  30. public function testDefaultConfigFile()
  31. {
  32. $conf = new Configuration;
  33. $this->assertEquals($this->_options, $conf->get(), 'default configuration is correct');
  34. }
  35. public function testHandleFreshConfigFile()
  36. {
  37. Helper::createIniFile(CONF, $this->_options);
  38. $conf = new Configuration;
  39. $this->assertEquals($this->_options, $conf->get(), 'newly generated configuration is correct');
  40. }
  41. public function testHandleMissingConfigFile()
  42. {
  43. if (is_file(CONF)) {
  44. unlink(CONF);
  45. }
  46. $conf = new Configuration;
  47. $this->assertEquals($this->_options, $conf->get(), 'returns correct defaults on missing file');
  48. }
  49. public function testHandleBlankConfigFile()
  50. {
  51. file_put_contents(CONF, '');
  52. $this->expectException(Exception::class);
  53. $this->expectExceptionCode(2);
  54. new Configuration;
  55. }
  56. public function testHandleMinimalConfigFile()
  57. {
  58. file_put_contents(CONF, $this->_minimalConfig);
  59. $conf = new Configuration;
  60. $this->assertEquals($this->_options, $conf->get(), 'returns correct defaults on empty file');
  61. }
  62. public function testHandleInvalidSection()
  63. {
  64. file_put_contents(CONF, $this->_minimalConfig);
  65. $conf = new Configuration;
  66. $this->expectException(Exception::class);
  67. $this->expectExceptionCode(3);
  68. $conf->getKey('foo', 'bar');
  69. }
  70. public function testHandleInvalidKey()
  71. {
  72. file_put_contents(CONF, $this->_minimalConfig);
  73. $conf = new Configuration;
  74. $this->expectException(Exception::class);
  75. $this->expectExceptionCode(4);
  76. $conf->getKey('foo');
  77. }
  78. public function testHandleGetKey()
  79. {
  80. file_put_contents(CONF, $this->_minimalConfig);
  81. $conf = new Configuration;
  82. $this->assertEquals($this->_options['main']['sizelimit'], $conf->getKey('sizelimit'), 'get default size');
  83. }
  84. public function testHandleWrongTypes()
  85. {
  86. $original_options = $this->_options;
  87. $original_options['main']['syntaxhighlightingtheme'] = 'foo';
  88. $options = $original_options;
  89. $options['main']['discussion'] = 'true';
  90. $options['main']['opendiscussion'] = 0;
  91. $options['main']['password'] = -1; // evaluates to TRUE
  92. $options['main']['fileupload'] = 'false';
  93. $options['expire_options']['foo'] = 'bar';
  94. $options['formatter_options'][] = 'foo';
  95. Helper::createIniFile(CONF, $options);
  96. $conf = new Configuration;
  97. $original_options['expire_options']['foo'] = intval('bar');
  98. $original_options['formatter_options'][0] = 'foo';
  99. $this->assertEquals($original_options, $conf->get(), 'incorrect types are corrected');
  100. }
  101. public function testHandleMissingSubKeys()
  102. {
  103. $options = $this->_options;
  104. unset($options['expire_options']['1week']);
  105. unset($options['expire_options']['1year']);
  106. unset($options['expire_options']['never']);
  107. $sri_key = array_key_first($options['sri']);
  108. $valid_sri = $options['sri'][$sri_key];
  109. $options['sri'][$sri_key] = ''; // empty string should get replaced with default
  110. $options['sri']['js/example.js'] = 'some invalid SRI hash';
  111. Helper::createIniFile(CONF, $options);
  112. $conf = new Configuration;
  113. // restore expected results
  114. $options['expire']['default'] = '5min';
  115. $options['sri'][$sri_key] = $valid_sri;
  116. $this->assertEquals($options, $conf->get(), 'not overriding "missing" subkeys');
  117. }
  118. public function testConfigPath()
  119. {
  120. // setup
  121. $configFile = $this->_path . DIRECTORY_SEPARATOR . 'conf.php';
  122. $options = $this->_options;
  123. $options['main']['name'] = 'OtherBin';
  124. Helper::createIniFile($configFile, $options);
  125. // test
  126. putenv('CONFIG_PATH=' . $this->_path);
  127. $conf = new Configuration;
  128. $this->assertEquals('OtherBin', $conf->getKey('name'), 'changing config path is supported');
  129. // cleanup environment
  130. if (is_file($configFile)) {
  131. unlink($configFile);
  132. }
  133. putenv('CONFIG_PATH');
  134. }
  135. }