PageRenderTime 26ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 1ms

/tests/HTTPConditionalGetTest.php

https://github.com/soitun/minify
PHP | 150 lines | 131 code | 9 blank | 10 comment | 5 complexity | b643ec5ada08a848ccff7bb7cb003188 MD5 | raw file
  1. <?php
  2. namespace Minify\Test;
  3. use HTTP_ConditionalGet;
  4. class HTTPConditionalGetTest extends TestCase
  5. {
  6. public function TestData()
  7. {
  8. /*
  9. * NOTE: calculate $lmTime as parameter
  10. * because dataProviders are executed before tests run,
  11. * and in fact each test is new instance of the class, so can't share data
  12. * other than parameters.
  13. */
  14. $lmTime = time() - 900;
  15. $gmtTime = gmdate('D, d M Y H:i:s \G\M\T', $lmTime);
  16. $tests = array(
  17. array(
  18. 'lm' => $lmTime,
  19. 'desc' => 'client has valid If-Modified-Since',
  20. 'inm' => null,
  21. 'ims' => $gmtTime,
  22. 'exp' => array(
  23. 'Vary' => 'Accept-Encoding',
  24. 'Last-Modified' => $gmtTime,
  25. 'ETag' => "\"pri{$lmTime}\"",
  26. 'Cache-Control' => 'max-age=0, private',
  27. '_responseCode' => 'HTTP/1.0 304 Not Modified',
  28. 'isValid' => true,
  29. )
  30. ),
  31. array(
  32. 'lm' => $lmTime,
  33. 'desc' => 'client has valid If-Modified-Since with trailing semicolon',
  34. 'inm' => null,
  35. 'ims' => $gmtTime . ';',
  36. 'exp' => array(
  37. 'Vary' => 'Accept-Encoding',
  38. 'Last-Modified' => $gmtTime,
  39. 'ETag' => "\"pri{$lmTime}\"",
  40. 'Cache-Control' => 'max-age=0, private',
  41. '_responseCode' => 'HTTP/1.0 304 Not Modified',
  42. 'isValid' => true,
  43. ),
  44. ),
  45. array(
  46. 'lm' => $lmTime,
  47. 'desc' => 'client has valid ETag (non-encoded version)',
  48. 'inm' => "\"badEtagFoo\", \"pri{$lmTime}\"",
  49. 'ims' => null,
  50. 'exp' => array(
  51. 'Vary' => 'Accept-Encoding',
  52. 'Last-Modified' => $gmtTime,
  53. 'ETag' => "\"pri{$lmTime}\"",
  54. 'Cache-Control' => 'max-age=0, private',
  55. '_responseCode' => 'HTTP/1.0 304 Not Modified',
  56. 'isValid' => true,
  57. ),
  58. ),
  59. array(
  60. 'lm' => $lmTime,
  61. 'desc' => 'client has valid ETag (gzip version)',
  62. 'inm' => "\"badEtagFoo\", \"pri{$lmTime};gz\"",
  63. 'ims' => null,
  64. 'exp' => array(
  65. 'Vary' => 'Accept-Encoding',
  66. 'Last-Modified' => $gmtTime,
  67. 'ETag' => "\"pri{$lmTime};gz\"",
  68. 'Cache-Control' => 'max-age=0, private',
  69. '_responseCode' => 'HTTP/1.0 304 Not Modified',
  70. 'isValid' => true,
  71. ),
  72. ),
  73. array(
  74. 'lm' => $lmTime,
  75. 'desc' => 'no conditional get',
  76. 'inm' => null,
  77. 'ims' => null,
  78. 'exp' => array(
  79. 'Vary' => 'Accept-Encoding',
  80. 'Last-Modified' => $gmtTime,
  81. 'ETag' => "\"pri{$lmTime};gz\"",
  82. 'Cache-Control' => 'max-age=0, private',
  83. 'isValid' => false,
  84. ),
  85. ),
  86. array(
  87. 'lm' => $lmTime,
  88. 'desc' => 'client has invalid ETag',
  89. 'inm' => '"pri' . ($lmTime - 300) . '"',
  90. 'ims' => null,
  91. 'exp' => array(
  92. 'Vary' => 'Accept-Encoding',
  93. 'Last-Modified' => $gmtTime,
  94. 'ETag' => "\"pri{$lmTime};gz\"",
  95. 'Cache-Control' => 'max-age=0, private',
  96. 'isValid' => false,
  97. ),
  98. ),
  99. array(
  100. 'lm' => $lmTime,
  101. 'desc' => 'client has invalid If-Modified-Since',
  102. 'inm' => null,
  103. 'ims' => gmdate('D, d M Y H:i:s \G\M\T', $lmTime - 300),
  104. 'exp' => array(
  105. 'Vary' => 'Accept-Encoding',
  106. 'Last-Modified' => $gmtTime,
  107. 'ETag' => "\"pri{$lmTime};gz\"",
  108. 'Cache-Control' => 'max-age=0, private',
  109. 'isValid' => false,
  110. ),
  111. ),
  112. );
  113. return $tests;
  114. }
  115. /**
  116. * @dataProvider TestData
  117. */
  118. public function test_HTTP_ConditionalGet($lmTime, $desc, $inm, $ims, $exp)
  119. {
  120. // setup env
  121. if (null === $inm) {
  122. unset($_SERVER['HTTP_IF_NONE_MATCH']);
  123. } else {
  124. $_SERVER['HTTP_IF_NONE_MATCH'] = PHP_VERSION_ID < 50400 && get_magic_quotes_gpc()
  125. ? addslashes($inm) :
  126. $inm;
  127. }
  128. if (null === $ims) {
  129. unset($_SERVER['HTTP_IF_MODIFIED_SINCE']);
  130. } else {
  131. $_SERVER['HTTP_IF_MODIFIED_SINCE'] = $ims;
  132. }
  133. $cg = new HTTP_ConditionalGet(array(
  134. 'lastModifiedTime' => $lmTime,
  135. 'encoding' => 'x-gzip',
  136. ));
  137. $ret = $cg->getHeaders();
  138. $ret['isValid'] = $cg->cacheIsValid;
  139. $this->assertEquals($exp, $ret, $desc);
  140. }
  141. }