ConfigurationTest.php 5.6 KB

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