package org.infinispan.persistence.cluster;

import org.infinispan.commons.configuration.ConfiguredBy;
import org.infinispan.marshall.core.MarshalledEntry;
import org.infinispan.persistence.spi.ExternalStore;
import org.infinispan.persistence.spi.InitializationContext;
import org.infinispan.persistence.spi.PersistenceException;

import java.util.concurrent.TimeUnit;

import static org.junit.Assert.fail;

/**
 * Test cache store, which never store/loads anything (= returns null for all keys).
 *
 * @author Jakub Markos
 */
@ConfiguredBy(MyCustomCacheStoreConfiguration.class)
public class MyCustomCacheStore implements ExternalStore {

    private MyCustomCacheStoreConfiguration config;

    public MyCustomCacheStore() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            fail("This thread shouldn't get interrupted; " + e.getMessage());
        }
    }

    @Override
    public void init(InitializationContext ctx) {
        this.config = ctx.getConfiguration();
    }

    @Override
    public void write(MarshalledEntry marshalledEntry) {
    }

    @Override
    public boolean delete(Object o) {
        return false;
    }

    @Override
    public MarshalledEntry load(Object key) throws PersistenceException {
        assert config.customProperty() == 10;
        return null;
    }

    @Override
    public boolean contains(Object key) {
        return false;
    }

    @Override
    public void start() throws PersistenceException {
        //nothing to do here
    }

    @Override
    public void stop() throws PersistenceException {
        //nothing to do here
    }

}
