CacheTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace Test\CpChart;
  3. use Codeception\Test\Unit;
  4. use CpChart\Cache;
  5. use CpChart\Data;
  6. use CpChart\Image;
  7. use UnitTester;
  8. class CacheTest extends Unit
  9. {
  10. const CACHE_DB = 'cache.db';
  11. const INDEX_DB = 'index.db';
  12. /**
  13. * @var UnitTester
  14. */
  15. protected $tester;
  16. public function testWritingAndRetrievingOperations()
  17. {
  18. list($data, $image) = $this->createImageData();
  19. // Write to cache
  20. $cache = new Cache();
  21. $chartHash = $cache->getHash($data);
  22. $cache->writeToCache($chartHash, $image);
  23. $this->tester->seeFileFound($this->getCacheFilePath(self::CACHE_DB));
  24. $this->tester->seeFileFound($this->getCacheFilePath(self::INDEX_DB));
  25. $this->tester->assertEquals(true, $cache->isInCache($chartHash));
  26. // Render and then remove the chart
  27. $filename = $this->tester->getOutputPathForChart('drawCachedSpline.png');
  28. $image->render($filename);
  29. $this->tester->seeFileFound($filename);
  30. $this->tester->deleteFile($filename);
  31. $this->tester->cantSeeFileFound($filename);
  32. // Test retrieving image from cache
  33. $cache->saveFromCache($chartHash, $filename);
  34. $this->tester->seeFileFound($filename);
  35. $this->tester->assertEquals(true, $cache->strokeFromCache($chartHash));
  36. }
  37. public function testRemovalOperations()
  38. {
  39. list($data, $image) = $this->createImageData();
  40. // Write to cache
  41. $cache = new Cache();
  42. $chartHash = $cache->getHash($data);
  43. $cache->writeToCache($chartHash, $image);
  44. $this->tester->assertEquals(true, $cache->isInCache($chartHash));
  45. // Remove by name
  46. $cache->remove($chartHash);
  47. $this->tester->assertEquals(false, $cache->isInCache($chartHash));
  48. // Remove older than x seconds
  49. $cache->writeToCache($chartHash, $image);
  50. $this->tester->assertEquals(true, $cache->isInCache($chartHash));
  51. $cache->removeOlderThan(4);
  52. $this->tester->assertEquals(true, $cache->isInCache($chartHash));
  53. sleep(5);
  54. $cache->removeOlderThan(4);
  55. $this->tester->assertEquals(false, $cache->isInCache($chartHash));
  56. // Flush the cache
  57. $cache->writeToCache($chartHash, $image);
  58. $this->tester->assertEquals(true, $cache->isInCache($chartHash));
  59. $cache->flush();
  60. $this->tester->assertEquals(false, $cache->isInCache($chartHash));
  61. }
  62. protected function _before()
  63. {
  64. $this->clearCache();
  65. }
  66. protected function _after()
  67. {
  68. $this->clearCache();
  69. }
  70. private function createImageData()
  71. {
  72. $data = new Data();
  73. $data->addPoints([1, 3, 4, 3, 5]);
  74. $image = new Image(700, 230, $data);
  75. $image->setFontProperties(["FontName" => "Forgotte.ttf", "FontSize" => 11]);
  76. $image->setGraphArea(60, 40, 670, 190);
  77. $image->drawScale();
  78. $image->drawSplineChart();
  79. $image->drawGradientArea(0, 0, 700, 20, DIRECTION_VERTICAL,
  80. ["StartR" => 0, "StartG" => 0, "StartB" => 0, "EndR" => 50, "EndG" => 50, "EndB" => 50, "Alpha" => 100]
  81. );
  82. $image->setFontProperties(["FontName" => "Silkscreen.ttf", "FontSize" => 6]);
  83. $image->drawText(10, 13, "Test of the pCache class", ["R" => 255, "G" => 255, "B" => 255]);
  84. return [$data, $image];
  85. }
  86. private function clearCache()
  87. {
  88. foreach ([self::CACHE_DB, self::INDEX_DB] as $cacheFile) {
  89. $filename = $this->getCacheFilePath($cacheFile);
  90. if (file_exists($filename)) {
  91. unlink($filename);
  92. }
  93. }
  94. }
  95. private function getCacheFilePath($filename)
  96. {
  97. return sprintf('%s/%s', $this->tester->getCacheDirectory(), $filename);
  98. }
  99. }