package org.apereo.cas; import de.flapdoodle.embed.memcached.Command; import de.flapdoodle.embed.memcached.MemcachedExecutable; import de.flapdoodle.embed.memcached.MemcachedProcess; import de.flapdoodle.embed.memcached.MemcachedStarter; import de.flapdoodle.embed.memcached.config.ArtifactStoreBuilder; import de.flapdoodle.embed.memcached.config.DownloadConfigBuilder; import de.flapdoodle.embed.memcached.config.MemcachedConfig; import de.flapdoodle.embed.memcached.config.RuntimeConfigBuilder; import de.flapdoodle.embed.memcached.distribution.Version; import de.flapdoodle.embed.process.config.store.IDownloadConfig; import de.flapdoodle.embed.process.io.progress.StandardConsoleProgressListener; import java.net.Socket; import static org.slf4j.LoggerFactory.getLogger; /** * This is {@link AbstractMemcachedTests}. * * @author Misagh Moayyed * @since 4.2.0 */ public abstract class AbstractMemcachedTests { private static final int PORT = 14938; private static MemcachedExecutable MEMCACHED_EXECUTABLE; private static MemcachedProcess MEMCACHED; public static void bootstrap() { try { final MemcachedStarter runtime = MemcachedStarter.getInstance( new CasRuntimeConfigBuilder().defaults(Command.MemcacheD).build()); MEMCACHED_EXECUTABLE = runtime.prepare(new MemcachedConfig(Version.V1_4_22, PORT)); MEMCACHED = MEMCACHED_EXECUTABLE.start(); } catch (final Exception e) { getLogger(AbstractMemcachedTests.class).warn("Aborting since no memcached server could be started.", e); } } public static void shutdown() { if (MEMCACHED != null && MEMCACHED.isProcessRunning()) { MEMCACHED.stop(); } if (MEMCACHED_EXECUTABLE != null) { MEMCACHED_EXECUTABLE.stop(); } } public boolean isMemcachedListening() { try (Socket socket = new Socket("memcached-14938.c10.us-east-1-3.ec2.cloud.redislabs.com", PORT)) { return true; } catch (final Exception e) { return false; } } private static class CasRuntimeConfigBuilder extends RuntimeConfigBuilder { @Override public RuntimeConfigBuilder defaults(final Command command) { final RuntimeConfigBuilder builder = super.defaults(command); final IDownloadConfig downloadConfig = new CasDownloadConfigBuilder() .defaultsForCommand(command) .progressListener(new StandardConsoleProgressListener()) .build(); this.artifactStore().overwriteDefault(new ArtifactStoreBuilder() .defaults(command).download(downloadConfig).build()); return builder; } } /** * Download an embedded memcached instance based on environment. */ private static class CasDownloadConfigBuilder extends DownloadConfigBuilder { @Override public DownloadConfigBuilder defaults() { final DownloadConfigBuilder bldr = super.defaults(); bldr.downloadPath("http://heli0s.darktech.org/memcached/"); return bldr; } } }