MNT Test with all cache factories in CI

This commit is contained in:
Guy Sartorelli 2024-07-09 13:57:33 +12:00
parent 232173753a
commit ed321f8ce7
No known key found for this signature in database
GPG Key ID: F313E3B9504D496A
4 changed files with 17 additions and 6 deletions

View File

@ -12,3 +12,9 @@ jobs:
with:
# Turn phpcoverage off because it causes a segfault
phpcoverage_force_off: true
phpunit_skip_suites: framework-cache-only
# Ensure we test all in-memory cache factories provided in core
extra_jobs: |
- phpunit: true
phpunit_suite: framework-cache-only
install_in_memory_cache_exts: true

View File

@ -21,6 +21,10 @@ Requires PHPUnit ^9
<testsuite name="cms">
<directory>vendor/silverstripe/cms/tests</directory>
</testsuite>
<!-- Cache suite is separate so it only runs what it needs to run. Intentionally also included in core above. -->
<testsuite name="framework-cache-only">
<directory>tests/php/Core/Cache</directory>
</testsuite>
</testsuites>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">

View File

@ -46,17 +46,18 @@ class DefaultCacheFactory extends AbstractCacheFactory
// In-memory caches are typically more resource constrained (number of items and storage space).
// Give cache consumers an opt-out if they are expecting to create large caches with long lifetimes.
$useInMemoryCache = isset($args['useInMemoryCache']) ? $args['useInMemoryCache'] : true;
$inMemoryCacheFactory = Environment::getEnv('SS_MEMORY_CACHEFACTORY');
$inMemoryCacheFactory = Environment::getEnv('SS_IN_MEMORY_CACHE_FACTORY');
$filesystemCache = $this->instantiateFilesystemCache($namespace, $defaultLifetime, $directory, $useInjector);
if (!$useInMemoryCache || !$inMemoryCacheFactory) {
return $this->prepareCacheForUse($filesystemCache, $useInjector);
}
// Check if SS_MEMORY_CACHEFACTORY is a factory
// Check if SS_IN_MEMORY_CACHE_FACTORY is a factory
if (!is_a($inMemoryCacheFactory, InMemoryCacheFactory::class, true)) {
throw new LogicException(
'SS_MEMORY_CACHEFACTORY is not a valid InMemoryCacheFactory class name'
'The value in your SS_IN_MEMORY_CACHE_FACTORY environment variable'
. ' is not a valid InMemoryCacheFactory class name'
);
}

View File

@ -78,10 +78,10 @@ class DefaultCacheFactoryTest extends SapphireTest
*/
public function testCreate(array $args, ?string $inMemoryCacheFactory): void
{
$oldFactoryValue = Environment::getEnv('SS_MEMORY_CACHEFACTORY');
$oldFactoryValue = Environment::getEnv('SS_IN_MEMORY_CACHE_FACTORY');
$oldMemcachedDSNValue = Environment::getEnv('SS_MEMCACHED_DSN');
$oldRedisDSNValue = Environment::getEnv('SS_REDIS_DSN');
Environment::setEnv('SS_MEMORY_CACHEFACTORY', $inMemoryCacheFactory);
Environment::setEnv('SS_IN_MEMORY_CACHE_FACTORY', $inMemoryCacheFactory);
// These are obviously not real connections, but it seems a real connection is not required
// to just instantiate the cache adapter, which allows us to validate the correct adapter
// is instantiated.
@ -148,7 +148,7 @@ class DefaultCacheFactoryTest extends SapphireTest
$reflectionLoggerProperty->setAccessible(true);
$this->assertTrue($logger === $reflectionLoggerProperty->getValue($filesystemCache));
} finally {
Environment::setEnv('SS_MEMORY_CACHEFACTORY', $oldFactoryValue);
Environment::setEnv('SS_IN_MEMORY_CACHE_FACTORY', $oldFactoryValue);
Environment::setEnv('SS_MEMCACHED_DSN', $oldMemcachedDSNValue);
Environment::setEnv('SS_REDIS_DSN', $oldRedisDSNValue);
}