FileDocCategorySizeDatePackage
CacheTest.javaAPI DocHibernate 3.2.53511Tue Dec 12 16:22:26 GMT 2006org.hibernate.test.legacy

CacheTest

public class CacheTest extends org.hibernate.junit.UnitTestCase

Fields Summary
Constructors Summary
public CacheTest(String name)

		super( name );
	
Methods Summary
public voiddoTestCache(org.hibernate.cache.CacheProvider cacheProvider)


		Cache cache = cacheProvider.buildCache( String.class.getName(), System.getProperties() );

		long longBefore = cache.nextTimestamp();

		Thread.sleep(15);

		long before = cache.nextTimestamp();

		Thread.sleep(15);

		//cache.setTimeout(1000);
		CacheConcurrencyStrategy ccs = new ReadWriteCache();
		ccs.setCache(cache);

		// cache something

		assertTrue( ccs.put("foo", "foo", before, null, null, false) );

		Thread.sleep(15);

		long after = cache.nextTimestamp();

		assertTrue( ccs.get("foo", longBefore)==null );
		assertTrue( ccs.get("foo", after).equals("foo") );

		assertTrue( !ccs.put("foo", "foo", before, null, null, false) );

		// update it:

		SoftLock lock = ccs.lock("foo", null);

		assertTrue( ccs.get("foo", after)==null );
		assertTrue( ccs.get("foo", longBefore)==null );

		assertTrue( !ccs.put("foo", "foo", before, null, null, false) );

		Thread.sleep(15);

		long whileLocked = cache.nextTimestamp();

		assertTrue( !ccs.put("foo", "foo", whileLocked, null, null, false) );

		Thread.sleep(15);

		ccs.release("foo", lock);

		assertTrue( ccs.get("foo", after)==null );
		assertTrue( ccs.get("foo", longBefore)==null );

		assertTrue( !ccs.put("foo", "bar", whileLocked, null, null, false) );
		assertTrue( !ccs.put("foo", "bar", after, null, null, false) );

		Thread.sleep(15);

		long longAfter = cache.nextTimestamp();

		assertTrue( ccs.put("foo", "baz", longAfter, null, null, false) );

		assertTrue( ccs.get("foo", after)==null );
		assertTrue( ccs.get("foo", whileLocked)==null );

		Thread.sleep(15);

		long longLongAfter = cache.nextTimestamp();

		assertTrue( ccs.get("foo", longLongAfter).equals("baz") );

		// update it again, with multiple locks:

		SoftLock lock1 = ccs.lock("foo", null);
		SoftLock lock2 = ccs.lock("foo", null);

		assertTrue( ccs.get("foo", longLongAfter)==null );

		Thread.sleep(15);

		whileLocked = cache.nextTimestamp();

		assertTrue( !ccs.put("foo", "foo", whileLocked, null, null, false) );

		Thread.sleep(15);

		ccs.release("foo", lock2);

		Thread.sleep(15);

		long betweenReleases = cache.nextTimestamp();

		assertTrue( !ccs.put("foo", "bar", betweenReleases, null, null, false) );
		assertTrue( ccs.get("foo", betweenReleases)==null );

		Thread.sleep(15);

		ccs.release("foo", lock1);

		assertTrue( !ccs.put("foo", "bar", whileLocked, null, null, false) );

		Thread.sleep(15);

		longAfter = cache.nextTimestamp();

		assertTrue( ccs.put("foo", "baz", longAfter, null, null, false) );
		assertTrue( ccs.get("foo", whileLocked)==null );

		Thread.sleep(15);

		longLongAfter = cache.nextTimestamp();

		assertTrue( ccs.get("foo", longLongAfter).equals("baz") );

	
public static junit.framework.Testsuite()

		return new TestSuite( CacheTest.class );
	
public voidtestCaches()

		doTestCache( new HashtableCacheProvider() );