Skip to content

Commit 70fa487

Browse files
committed
fix DI for tag.enabled=auto and add configuration tests
1 parent f9947c4 commit 70fa487

File tree

6 files changed

+139
-12
lines changed

6 files changed

+139
-12
lines changed

DependencyInjection/FOSHttpCacheExtension.php

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,19 +84,13 @@ public function load(array $configs, ContainerBuilder $container)
8484
$loader->load('cache_manager.xml');
8585
}
8686

87-
$container->setParameter($this->getAlias().'.compiler_pass.tag_annotations', $config['tags']['enabled']);
8887
if ($config['tags']['enabled']) {
89-
// true or auto
90-
$container->setParameter($this->getAlias().'.tag_handler.header', $config['tags']['header']);
91-
$loader->load('tag_listener.xml');
92-
if (!empty($config['tags']['rules'])) {
93-
$this->loadTagRules($container, $config['tags']['rules']);
94-
}
95-
96-
$tagsHeader = $config['tags']['header'];
97-
$container->getDefinition($this->getAlias().'.cache_manager')
98-
->addMethodCall('setTagsHeader', array($tagsHeader))
99-
;
88+
$this->loadCacheTagging(
89+
$container,
90+
$loader,
91+
$config['tags'],
92+
$this->getDefaultProxyClient($config['proxy_client'])
93+
);
10094
}
10195

10296
if ($config['invalidation']['enabled']) {
@@ -302,6 +296,30 @@ private function loadSymfony(ContainerBuilder $container, XmlFileLoader $loader,
302296
}
303297
}
304298

299+
private function loadCacheTagging(ContainerBuilder $container, XmlFileLoader $loader, array $config, $client)
300+
{
301+
if ('auto' === $config['enabled'] && 'varnish' !== $client) {
302+
$container->setParameter($this->getAlias().'.compiler_pass.tag_annotations', false);
303+
304+
return;
305+
}
306+
if ('varnish' !== $client) {
307+
throw new InvalidConfigurationException(sprintf('You can not enable cache tagging with %s', $client));
308+
}
309+
310+
$container->setParameter($this->getAlias().'.compiler_pass.tag_annotations', true);
311+
$container->setParameter($this->getAlias().'.tag_handler.header', $config['header']);
312+
$loader->load('tag_listener.xml');
313+
if (!empty($config['rules'])) {
314+
$this->loadTagRules($container, $config['rules']);
315+
}
316+
317+
$tagsHeader = $config['header'];
318+
$container->getDefinition($this->getAlias().'.cache_manager')
319+
->addMethodCall('setTagsHeader', array($tagsHeader))
320+
;
321+
}
322+
305323
private function loadTest(ContainerBuilder $container, XmlFileLoader $loader, array $config)
306324
{
307325
$container->setParameter($this->getAlias().'.test.cache_header', $config['cache_header']);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
$container->loadFromExtension('fos_http_cache', array(
4+
'proxy_client' => array(
5+
'symfony' => array(
6+
'servers' => array('22.22.22.22'),
7+
'base_url' => '/test',
8+
'guzzle_client' => 'acme.guzzle.symfony',
9+
),
10+
),
11+
));
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services">
3+
4+
<config xmlns="http://example.org/schema/dic/fos_http_cache">
5+
<proxy-client>
6+
<symfony base-url="/test" guzzle-client="acme.guzzle.symfony">
7+
<server>22.22.22.22</server>
8+
</symfony>
9+
</proxy-client>
10+
11+
</config>
12+
</container>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
fos_http_cache:
2+
3+
proxy_client:
4+
symfony:
5+
servers: 22.22.22.22
6+
base_url: /test
7+
guzzle_client: acme.guzzle.symfony

Tests/Unit/DependencyInjection/ConfigurationTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,35 @@ public function testSupportsNginx()
214214
}
215215
}
216216

217+
public function testSupportsSymfony()
218+
{
219+
$expectedConfiguration = $this->getEmptyConfig();
220+
$expectedConfiguration['proxy_client'] = array(
221+
'symfony' => array(
222+
'servers' => array('22.22.22.22'),
223+
'base_url' => '/test',
224+
'guzzle_client' => 'acme.guzzle.symfony',
225+
),
226+
);
227+
$expectedConfiguration['cache_manager']['enabled'] = 'auto';
228+
$expectedConfiguration['cache_manager']['generate_url_type'] = 'auto';
229+
$expectedConfiguration['tags']['enabled'] = 'auto';
230+
$expectedConfiguration['invalidation']['enabled'] = 'auto';
231+
$expectedConfiguration['user_context']['logout_handler']['enabled'] = 'auto';
232+
233+
$formats = array_map(function ($path) {
234+
return __DIR__.'/../../Resources/Fixtures/'.$path;
235+
}, array(
236+
'config/symfony.yml',
237+
'config/symfony.xml',
238+
'config/symfony.php',
239+
));
240+
241+
foreach ($formats as $format) {
242+
$this->assertProcessedConfigurationEquals($expectedConfiguration, array($format));
243+
}
244+
}
245+
217246
public function testSplitOptions()
218247
{
219248
$expectedConfiguration = $this->getEmptyConfig();

Tests/Unit/DependencyInjection/FOSHttpCacheExtensionTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public function testConfigLoadVarnish()
3838
$this->assertFalse($container->hasDefinition('fos_http_cache.proxy_client.nginx'));
3939
$this->assertTrue($container->hasAlias('fos_http_cache.default_proxy_client'));
4040
$this->assertTrue($container->hasDefinition('fos_http_cache.event_listener.invalidation'));
41+
$this->assertTrue($container->hasDefinition('fos_http_cache.handler.tag_handler'));
4142

4243
$this->assertFalse($container->hasParameter('fos_http_cache.proxy_client.varnish.guzzle_client'));
4344
}
@@ -91,6 +92,31 @@ public function testConfigLoadNginx()
9192
$this->assertTrue($container->hasDefinition('fos_http_cache.proxy_client.nginx'));
9293
$this->assertTrue($container->hasAlias('fos_http_cache.default_proxy_client'));
9394
$this->assertTrue($container->hasDefinition('fos_http_cache.event_listener.invalidation'));
95+
$this->assertFalse($container->hasDefinition('fos_http_cache.handler.tag_handler'));
96+
}
97+
98+
public function testConfigLoadSymfony()
99+
{
100+
$container = $this->createContainer();
101+
$this->extension->load(array(
102+
array(
103+
'proxy_client' => array(
104+
'symfony' => array(
105+
'base_url' => 'my_hostname',
106+
'servers' => array(
107+
'127.0.0.1',
108+
),
109+
),
110+
),
111+
),
112+
), $container);
113+
114+
$this->assertFalse($container->hasDefinition('fos_http_cache.proxy_client.varnish'));
115+
$this->assertFalse($container->hasDefinition('fos_http_cache.proxy_client.nginx'));
116+
$this->assertTrue($container->hasDefinition('fos_http_cache.proxy_client.symfony'));
117+
$this->assertTrue($container->hasAlias('fos_http_cache.default_proxy_client'));
118+
$this->assertTrue($container->hasDefinition('fos_http_cache.event_listener.invalidation'));
119+
$this->assertFalse($container->hasDefinition('fos_http_cache.handler.tag_handler'));
94120
}
95121

96122
public function testEmptyConfig()
@@ -103,6 +129,30 @@ public function testEmptyConfig()
103129
$this->assertFalse($container->has('fos_http_cache.user_context.logout_handler'));
104130
}
105131

132+
/**
133+
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
134+
* @expectedExceptionMessage You can not enable cache tagging with nginx
135+
*/
136+
public function testConfigTagNotSupported()
137+
{
138+
$config = array(
139+
'proxy_client' => array(
140+
'nginx' => array(
141+
'base_url' => 'my_hostname',
142+
'servers' => array(
143+
'127.0.0.1',
144+
),
145+
),
146+
),
147+
'tags' => array(
148+
'enabled' => true,
149+
),
150+
);
151+
152+
$container = $this->createContainer();
153+
$this->extension->load(array($config), $container);
154+
}
155+
106156
public function testConfigLoadTagRules()
107157
{
108158
$config = $this->getBaseConfig() + array(

0 commit comments

Comments
 (0)