RemoteSynchronizedCacheTest.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Cache\Test\Unit\Backend;
  7. class RemoteSynchronizedCacheTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
  11. */
  12. protected $objectManager;
  13. protected function setUp()
  14. {
  15. $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  16. }
  17. /**
  18. * @param array $options
  19. *
  20. * @expectedException \Zend_Cache_Exception
  21. * @dataProvider initializeWithExceptionDataProvider
  22. */
  23. public function testInitializeWithException($options)
  24. {
  25. $this->objectManager->getObject(
  26. \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
  27. [
  28. 'options' => $options,
  29. ]
  30. );
  31. }
  32. /**
  33. * @return array
  34. */
  35. public function initializeWithExceptionDataProvider()
  36. {
  37. return [
  38. 'empty_backend_option' => [
  39. 'options' => [
  40. 'remote_backend' => null,
  41. 'local_backend' => null,
  42. ],
  43. ],
  44. 'empty_remote_backend_option' => [
  45. 'options' => [
  46. 'remote_backend' => \Magento\Framework\Cache\Backend\Database::class,
  47. 'local_backend' => null,
  48. ],
  49. ],
  50. 'empty_local_backend_option' => [
  51. 'options' => [
  52. 'remote_backend' => null,
  53. 'local_backend' => \Cm_Cache_Backend_File::class,
  54. ],
  55. ],
  56. ];
  57. }
  58. /**
  59. * @param array $options
  60. *
  61. * @dataProvider initializeWithOutExceptionDataProvider
  62. */
  63. public function testInitializeWithOutException($options)
  64. {
  65. $result = $this->objectManager->getObject(
  66. \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
  67. [
  68. 'options' => $options,
  69. ]
  70. );
  71. $this->assertInstanceOf(\Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class, $result);
  72. }
  73. /**
  74. * @return array
  75. */
  76. public function initializeWithOutExceptionDataProvider()
  77. {
  78. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  79. ->disableOriginalConstructor()
  80. ->getMock();
  81. return [
  82. 'not_empty_backend_option' => [
  83. 'options' => [
  84. 'remote_backend' => \Magento\Framework\Cache\Backend\Database::class,
  85. 'remote_backend_options' => [
  86. 'adapter_callback' => '',
  87. 'data_table' => 'data_table',
  88. 'data_table_callback' => 'data_table_callback',
  89. 'tags_table' => 'tags_table',
  90. 'tags_table_callback' => 'tags_table_callback',
  91. 'store_data' => '',
  92. 'adapter' => $connectionMock,
  93. ],
  94. 'local_backend' => \Cm_Cache_Backend_File::class,
  95. 'local_backend_options' => [
  96. 'cache_dir' => '/tmp',
  97. ],
  98. ],
  99. ],
  100. ];
  101. }
  102. /**
  103. * @param array $options
  104. * @param bool|string $expected
  105. *
  106. * @dataProvider loadDataProvider
  107. */
  108. public function testLoad($options, $expected)
  109. {
  110. /** @var \Magento\Framework\Cache\Backend\Database $database */
  111. $database = $this->objectManager->getObject(
  112. \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
  113. [
  114. 'options' => $options,
  115. ]
  116. );
  117. $this->assertEquals($expected, $database->load(5));
  118. }
  119. /**
  120. * @return array
  121. */
  122. public function loadDataProvider()
  123. {
  124. return [
  125. 'cacheInvalidationTime_is_less_than_that_dataModificationTime' => [
  126. 'options' => [
  127. 'remote_backend' => $this->getDatabaseMock(444),
  128. 'local_backend' => $this->getFileMock(555, 'loaded_value'),
  129. ],
  130. 'expected' => 'loaded_value',
  131. ],
  132. 'cacheInvalidationTime_is_greater_than_that_dataModificationTime' => [
  133. 'options' => [
  134. 'remote_backend' => $this->getDatabaseMock(444),
  135. 'local_backend' => $this->getFileMock(333, 'loaded_value'),
  136. ],
  137. 'expected' => false,
  138. ],
  139. 'cacheInvalidationTime_is_equal_to_the_dataModificationTime' => [
  140. 'options' => [
  141. 'remote_backend' => $this->getDatabaseMock(444),
  142. 'local_backend' => $this->getFileMock(444, 'loaded_value'),
  143. ],
  144. 'expected' => 'loaded_value',
  145. ],
  146. ];
  147. }
  148. /**
  149. * @param integer $cacheInvalidationTime
  150. * @return \Magento\Framework\Cache\Backend\Database|\PHPUnit_Framework_MockObject_MockObject
  151. */
  152. public function getDatabaseMock($cacheInvalidationTime)
  153. {
  154. $databaseMock = $this->getMockBuilder(\Magento\Framework\Cache\Backend\Database::class)
  155. ->setMethods(['load'])
  156. ->disableOriginalConstructor()
  157. ->getMock();
  158. $databaseMock->expects($this->once())
  159. ->method('load')
  160. ->will($this->returnValue($cacheInvalidationTime));
  161. return $databaseMock;
  162. }
  163. /**
  164. * @param integer $dataModificationTime
  165. * @return \Cm_Cache_Backend_File|\PHPUnit_Framework_MockObject_MockObject
  166. */
  167. public function getFileMock($dataModificationTime, $cacheResult)
  168. {
  169. $fileMock = $this->getMockBuilder(\Cm_Cache_Backend_File::class)
  170. ->setMethods(['test', 'load'])
  171. ->disableOriginalConstructor()
  172. ->getMock();
  173. $fileMock->expects($this->once())
  174. ->method('test')
  175. ->will($this->returnValue($dataModificationTime));
  176. $fileMock->expects($this->any())
  177. ->method('load')
  178. ->will($this->returnValue($cacheResult));
  179. return $fileMock;
  180. }
  181. public function testRemove()
  182. {
  183. $databaseMock = $this->getMockBuilder(\Magento\Framework\Cache\Backend\Database::class)
  184. ->setMethods(['save'])
  185. ->disableOriginalConstructor()
  186. ->getMock();
  187. $databaseMock->expects($this->once())
  188. ->method('save')
  189. ->will($this->returnValue(true));
  190. $fileMock = $this->getMockBuilder(\Cm_Cache_Backend_File::class)
  191. ->setMethods(['remove'])
  192. ->disableOriginalConstructor()
  193. ->getMock();
  194. $fileMock->expects($this->once())
  195. ->method('remove')
  196. ->will($this->returnValue(true));
  197. /** @var \Magento\Framework\Cache\Backend\Database $database */
  198. $database = $this->objectManager->getObject(
  199. \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
  200. [
  201. 'options' => [
  202. 'remote_backend' => $databaseMock,
  203. 'local_backend' => $fileMock,
  204. ]
  205. ]
  206. );
  207. $this->assertEquals(true, $database->remove(5));
  208. }
  209. public function testClean()
  210. {
  211. $databaseMock = $this->getMockBuilder(\Magento\Framework\Cache\Backend\Database::class)
  212. ->setMethods(['save'])
  213. ->disableOriginalConstructor()
  214. ->getMock();
  215. $databaseMock->expects($this->once())
  216. ->method('save')
  217. ->will($this->returnValue(true));
  218. $fileMock = $this->getMockBuilder(\Cm_Cache_Backend_File::class)
  219. ->setMethods(['clean'])
  220. ->disableOriginalConstructor()
  221. ->getMock();
  222. $fileMock->expects($this->once())
  223. ->method('clean')
  224. ->will($this->returnValue(true));
  225. /** @var \Magento\Framework\Cache\Backend\Database $database */
  226. $database = $this->objectManager->getObject(
  227. \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
  228. [
  229. 'options' => [
  230. 'remote_backend' => $databaseMock,
  231. 'local_backend' => $fileMock,
  232. ]
  233. ]
  234. );
  235. $this->assertEquals(true, $database->clean());
  236. }
  237. }