import java.io.IOException;

import org.infinispan.Cache;
import org.infinispan.commons.dataconversion.MediaType;
import org.infinispan.commons.marshall.JavaSerializationMarshaller;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.configuration.parsing.ConfigurationBuilderHolder;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;
import org.junit.Assert;

public class Test {

    @org.junit.Test
    public void test() throws IOException {
        ConfigurationBuilderHolder holder = createGlobalConfigurationBuilderHolder();
        Configuration configuration = new ConfigurationBuilder()
                .clustering().cacheMode(CacheMode.INVALIDATION_SYNC)
                .encoding().mediaType(MediaType.APPLICATION_OBJECT_TYPE)
                .build();
        String cacheName = "test";
        String key = "key";
        try (EmbeddedCacheManager manager = new DefaultCacheManager(holder, false)) {
            manager.defineConfiguration(cacheName, configuration);
            Cache<String, String> cache = manager.getCache(cacheName);
            cache.start();

            cache.put(key, "1");
            Assert.assertEquals("1", cache.get(key));
            Assert.assertEquals(1, cache.size());
        }
    }

    private static ConfigurationBuilderHolder createGlobalConfigurationBuilderHolder() {
        GlobalConfigurationBuilder global = new GlobalConfigurationBuilder().clusteredDefault();
        global.serialization().marshaller(new JavaSerializationMarshaller());
        return new ConfigurationBuilderHolder(Thread.currentThread().getContextClassLoader(), global);
    }
}