/** * {@inheritdoc} * @return Response * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function launch() { $output = []; $types = $this->getRequestedTypes(); $enabledTypes = []; if (isset($this->requestArgs[self::KEY_SET])) { $isEnabled = (bool) (int) $this->requestArgs[self::KEY_SET]; $changedTypes = $this->cacheManager->setEnabled($types, $isEnabled); if ($isEnabled) { $enabledTypes = $changedTypes; } if ($changedTypes) { $output[] = 'Changed cache status:'; foreach ($changedTypes as $type) { $output[] = sprintf('%30s: %d -> %d', $type, !$isEnabled, $isEnabled); } } else { $output[] = 'There is nothing to change in cache status'; } } if (isset($this->requestArgs[self::KEY_FLUSH])) { $this->cacheManager->flush($types); $output[] = 'Flushed cache types:'; $output[] = join("\n", $types); } elseif (isset($this->requestArgs[self::KEY_CLEAN])) { $this->cacheManager->clean($types); $output[] = 'Cleaned cache types:'; $output[] = join("\n", $types); } elseif (isset($this->requestArgs[self::KEY_STATUS])) { $output[] = 'Current status:'; foreach ($this->cacheManager->getStatus() as $cache => $status) { $output[] = sprintf('%30s: %d', $cache, $status); } } elseif (!empty($enabledTypes)) { $this->cacheManager->clean($enabledTypes); $output[] = 'Cleaned cache types:'; $output[] = join("\n", $enabledTypes); } $output[] = ''; $this->response->setBody(join("\n", $output)); return $this->response; }
/** * Test flushing all cache types * * Emulates situation when some cache frontends reuse the same backend * Asserts that the flush is invoked only once per affected storage */ public function testFlushAll() { $cacheTypes = ['foo', 'bar', 'baz']; $frontendFoo = $this->getMockForAbstractClass('Magento\\Framework\\Cache\\FrontendInterface'); $frontendBar = $this->getMockForAbstractClass('Magento\\Framework\\Cache\\FrontendInterface'); $frontendBaz = $this->getMockForAbstractClass('Magento\\Framework\\Cache\\FrontendInterface'); $this->frontendPool->expects($this->exactly(3))->method('get')->will($this->returnValueMap([['foo', $frontendFoo], ['bar', $frontendBar], ['baz', $frontendBaz]])); $backendOne = $this->getMockForAbstractClass('Zend_Cache_Backend_Interface'); $backendTwo = $this->getMockForAbstractClass('Zend_Cache_Backend_Interface'); $frontendFoo->expects($this->once())->method('getBackend')->willReturn($backendOne); $frontendBar->expects($this->once())->method('getBackend')->willReturn($backendOne); $frontendBaz->expects($this->once())->method('getBackend')->willReturn($backendTwo); $backendOne->expects($this->once())->method('clean'); $backendTwo->expects($this->once())->method('clean'); $this->model->flush($cacheTypes); }