/*
 * Created on 17-Feb-2005
 *
 *
 *
 */
package org.jboss.cache.optimistic;

import org.jboss.cache.TreeCache;
import org.jboss.cache.interceptors.Interceptor;
import org.jboss.cache.interceptors.OptimisticCreateIfNotExistsInterceptor;
import org.jboss.cache.interceptors.OptimisticNodeInterceptor;

/**
 * @author xenephon
 */
public class NodeInterceptorTransactionTest extends AbstractOptimisticTestCase
{

    /**
     * @param name
     */
    public NodeInterceptorTransactionTest(String name)
    {
        super(name);

    }

    public void testNoTransactionCRUDMethod() throws Exception
    {

        TestListener listener = new TestListener();
        final TreeCache cache = createCacheWithListener(listener);

        Interceptor interceptor = new OptimisticCreateIfNotExistsInterceptor();
        interceptor.setCache(cache);
        Interceptor nodeInterceptor = new OptimisticNodeInterceptor();
        nodeInterceptor.setCache(cache);
        MockInterceptor dummy = new MockInterceptor();
        dummy.setCache(cache);

        interceptor.setNext(nodeInterceptor);
        nodeInterceptor.setNext(dummy);

        cache.setInterceptorChain(interceptor);

        try
        {
            cache.put("/one/two", "key1", new Object());
            fail();
        }
        catch (Throwable t)
        {

            assertTrue(true);
        }
        assertEquals(null, dummy.getCalled());
        cache.stopService();
    }

    public void testNoTransactionGetMethod() throws Exception
    {

        TestListener listener = new TestListener();
        final TreeCache cache = createCacheWithListener(listener);

        Interceptor interceptor = new OptimisticCreateIfNotExistsInterceptor();
        interceptor.setCache(cache);
        Interceptor nodeInterceptor = new OptimisticNodeInterceptor();
        nodeInterceptor.setCache(cache);
        MockInterceptor dummy = new MockInterceptor();
        dummy.setCache(cache);

        interceptor.setNext(nodeInterceptor);
        nodeInterceptor.setNext(dummy);

        cache.setInterceptorChain(interceptor);

        boolean fail = false;
        try
        {
            assertEquals(null, cache.get("/one/two", "key1"));
        }
        catch (Exception e)
        {
            fail = true;
        }
        assertTrue(fail);
        assertEquals(null, dummy.getCalled());
        cache.stopService();
    }


}
