ConfigurationTest.php 5.8 KB

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