/**
*
*/
package org.jboss.test.cluster.defaultcfg.simpleweb.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.Test;
import junit.framework.TestCase;
import org.jboss.test.cluster.testutil.DBSetupDelegate;
import org.jboss.test.cluster.web.persistent.MockOutgoingSessionData;
import org.jboss.test.cluster.web.persistent.SimplePersistentStoreTestSetup;
import org.jboss.web.tomcat.service.session.distributedcache.spi.DistributableSessionMetadata;
import org.jboss.web.tomcat.service.session.distributedcache.spi.IncomingDistributableSessionData;
import org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData;
import org.jboss.web.tomcat.service.session.persistent.DriverManagerPersistentStore;
import org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase;
/**
* Unit tests for {@link DriverManagerPersistentStore}, although really more of
* a test of its abstract superclass RDBMSStoreBase where we use the
* DriverManager-based subclass as a simple way to get a concrete implementation.
*
* @author Brian Stansberry
*
* @version $Revision: $
*/
public class DriverManagerPersistentStoreUnitTestCase extends TestCase
{
private static final String DB_ADDRESS = System.getProperty(DBSetupDelegate.DBADDRESS_PROPERTY, DBSetupDelegate.DEFAULT_ADDRESS);
private static final String CONNECTION_URL = "jdbc:hsqldb:hsql://" + DB_ADDRESS + ":" + DBSetupDelegate.DEFAULT_PORT;
private static final String CONTEXT_PATH = "localhost/test";
private static AtomicInteger id = new AtomicInteger();
private DriverManagerPersistentStore testee;
/**
* @param name
*/
public DriverManagerPersistentStoreUnitTestCase(String name)
{
super(name);
}
public static Test suite() throws Exception
{
return SimplePersistentStoreTestSetup.getDeploySetup(DriverManagerPersistentStoreUnitTestCase.class, DB_ADDRESS, DBSetupDelegate.DEFAULT_PORT);
}
private static String nextId()
{
return "session" + id.incrementAndGet();
}
@Override
protected void setUp() throws Exception
{
super.setUp();
testee = new DriverManagerPersistentStore();
testee.setDriverName(org.hsqldb.jdbcDriver.class.getName());
testee.setConnectionURL(CONNECTION_URL);
testee.setConnectionName("sa");
testee.setName(CONTEXT_PATH);
}
@Override
protected void tearDown() throws Exception
{
try
{
if (testee != null && testee.isStarted())
{
testee.clear();
testee.stop();
}
}
finally
{
super.tearDown();
}
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.DriverManagerPersistentStore#getInfo()}.
*/
public void testGetInfo()
{
testee.start();
assertEquals(testee.getStoreName() + "/1.0", testee.getInfo());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.DriverManagerPersistentStore#getStoreName()}.
*/
public void testGetStoreName()
{
assertEquals(testee.getClass().getSimpleName(), testee.getStoreName());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.DriverManagerPersistentStore#setConnectionURL(java.lang.String)}.
*/
public void testConnectionURL()
{
assertEquals(CONNECTION_URL, testee.getConnectionURL());
testee.setConnectionURL("blah");
assertEquals("blah", testee.getConnectionURL());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.DriverManagerPersistentStore#setDriverName(java.lang.String)}.
*/
public void testDriverName()
{
assertEquals(org.hsqldb.jdbcDriver.class.getName(), testee.getDriverName());
testee.setDriverName("blah");
assertEquals("blah", testee.getDriverName());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#getName()}.
*/
public void testName()
{
assertEquals(CONTEXT_PATH, testee.getName());
testee.setName("blah");
assertEquals("blah", testee.getName());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setConnectionName(java.lang.String)}.
*/
public void testConnectionName()
{
assertEquals("sa", testee.getConnectionName());
testee.setConnectionName("blah");
assertEquals("blah", testee.getConnectionName());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setConnectionPassword(java.lang.String)}.
*/
public void testConnectionPassword()
{
assertNull(testee.getConnectionPassword());
testee.setConnectionPassword("blah");
assertEquals("blah", testee.getConnectionPassword());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionTable(java.lang.String)}.
*/
public void testSessionTable()
{
assertEquals(RDBMSStoreBase.DEFAULT_TABLE, testee.getSessionTable());
testee.setSessionTable("blah");
assertEquals("blah", testee.getSessionTable());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionAppCol(java.lang.String)}.
*/
public void testSessionAppCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_APP_COL, testee.getSessionAppCol());
testee.setSessionAppCol("blah");
assertEquals("blah", testee.getSessionAppCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionIdCol(java.lang.String)}.
*/
public void testSessionIdCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_ID_COL, testee.getSessionIdCol());
testee.setSessionIdCol("blah");
assertEquals("blah", testee.getSessionIdCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionFullIdCol(java.lang.String)}.
*/
public void testSessionFullIdCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_FULLID_COL, testee.getSessionFullIdCol());
testee.setSessionFullIdCol("blah");
assertEquals("blah", testee.getSessionFullIdCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionCreationTimeCol(java.lang.String)}.
*/
public void testSessionCreationTimeCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_CREATION_TIME_COL, testee.getSessionCreationTimeCol());
testee.setSessionCreationTimeCol("blah");
assertEquals("blah", testee.getSessionCreationTimeCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionMaxInactiveCol(java.lang.String)}.
*/
public void testSessionMaxInactiveCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_MAX_INACTIVE_COL, testee.getSessionMaxInactiveCol());
testee.setSessionMaxInactiveCol("blah");
assertEquals("blah", testee.getSessionMaxInactiveCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionNewCol(java.lang.String)}.
*/
public void testSessionNewCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_ISNEW_COL, testee.getSessionNewCol());
testee.setSessionNewCol("blah");
assertEquals("blah", testee.getSessionNewCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionVersionCol(java.lang.String)}.
*/
public void testSessionVersionCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_VERSION_COL, testee.getSessionVersionCol());
testee.setSessionVersionCol("blah");
assertEquals("blah", testee.getSessionVersionCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionLastAccessedCol(java.lang.String)}.
*/
public void testSessionLastAccessedCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_LAST_ACCESSED_COL, testee.getSessionLastAccessedCol());
testee.setSessionLastAccessedCol("blah");
assertEquals("blah", testee.getSessionLastAccessedCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionValidCol(java.lang.String)}.
*/
public void testSessionValidCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_ISVALID_COL, testee.getSessionValidCol());
testee.setSessionValidCol("blah");
assertEquals("blah", testee.getSessionValidCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setSessionMetadataCol(java.lang.String)}.
*/
public void testSessionMetadataCol()
{
assertEquals(RDBMSStoreBase.DEFAULT_METADATA_COL, testee.getSessionMetadataCol());
testee.setSessionMetadataCol("blah");
assertEquals("blah", testee.getSessionMetadataCol());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#setCleanupInterval(int)}.
*/
public void testSetCleanupInterval()
{
assertEquals(RDBMSStoreBase.DEFAULT_CLEANUP_INTERVAL, testee.getCleanupInterval());
testee.setCleanupInterval(22);
assertEquals(22, testee.getCleanupInterval());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#clear()}.
*/
public void testClear()
{
testee.start();
int existing = testee.getSize();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
assertEquals(Integer.valueOf(0), testee.getSessionVersion(id));
md = new DistributableSessionMetadata();
String id2 = nextId();
md.setId(id2 + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
ts = Long.valueOf(md.getCreationTime() + 1);
attrs = new HashMap<String, Object>();
attrs.put("key", "value");
sessionData = new MockOutgoingSessionData(id2, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
assertEquals(Integer.valueOf(0), testee.getSessionVersion(id2));
assertEquals(2 + existing, testee.getSize());
testee.clear();
assertNull(testee.getSessionVersion(id));
assertNull(testee.getSessionVersion(id2));
assertEquals(0, testee.getSize());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#getSessionIds()}.
*/
public void testGetSessionIds()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
md = new DistributableSessionMetadata();
String id2 = nextId();
md.setId(id2 + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
ts = Long.valueOf(md.getCreationTime() + 1);
attrs = new HashMap<String, Object>();
attrs.put("key", "value");
sessionData = new MockOutgoingSessionData(id2, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
Set<String> ids = testee.getSessionIds();
assertNotNull(ids);
assertTrue(ids.contains(id));
assertTrue(ids.contains(id2));
assertEquals(2, ids.size());
testee.remove(id);
ids = testee.getSessionIds();
assertNotNull(ids);
assertFalse(ids.contains(id));
assertTrue(ids.contains(id2));
assertEquals(1, ids.size());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#getSessionData(java.lang.String, boolean)}.
*/
public void testGetSessionData()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(0, incoming.getVersion());
assertEquals(md.getCreationTime() + 1, incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
incoming = testee.getSessionData(id, false);
assertEquals(0, incoming.getVersion());
assertEquals(md.getCreationTime() + 1, incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertFalse(incoming.providesSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#remove(java.lang.String)}.
*/
public void testRemove()
{
testee.start();
testee.clear();
int existing = testee.getSize();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
testee.remove(id);
assertNull(testee.getSessionData(id, false));
assertNull(testee.getSessionData(id, true));
assertNull(testee.getSessionVersion(id));
assertNull(testee.getSessionTimestamp(id));
Set<String> ids = testee.getSessionIds();
assertNotNull(ids);
assertFalse(ids.contains(id));
assertEquals(existing, ids.size());
assertEquals(existing, testee.getSize());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testInsertSessionData()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(0, incoming.getVersion());
assertEquals(md.getCreationTime() + 1, incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testInsertSessionDataNullAttributes()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = null;
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(0, incoming.getVersion());
assertEquals(md.getCreationTime() + 1, incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
Map<String, Object> map = incoming.getSessionAttributes();
assertNotNull(map);
assertEquals(0, map.size());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testInsertSessionDataExistingRecord()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(1);
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(2);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
// Don't call md.setNew(false); !! Treat it as a new session
DistributableSessionMetadata newmd = new DistributableSessionMetadata();
newmd.setId(id + ".full");
newmd.setCreationTime(3);
newmd.setNew(true);
newmd.setValid(true);
newmd.setMaxInactiveInterval(30000);
newmd.setMaxInactiveInterval(20000);
attrs.clear();
attrs.put("key", "newvalue");
Long newts = Long.valueOf(4);
sessionData = new MockOutgoingSessionData(id, 0, newts, newmd, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(0, incoming.getVersion());
assertEquals(newts.longValue(), incoming.getTimestamp());
assertEquals(newmd.getId(), incoming.getMetadata().getId());
assertEquals(newmd.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(newmd.isNew(), incoming.getMetadata().isNew());
assertEquals(newmd.isValid(), incoming.getMetadata().isValid());
assertEquals(newmd.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testFullUpdateSessionData()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
md.setNew(false);
md.setMaxInactiveInterval(20000);
attrs.put("key", "newvalue");
ts = Long.valueOf(System.currentTimeMillis());
sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(1, incoming.getVersion());
assertEquals(ts.longValue(), incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testAttributeUpdateSessionData()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
attrs.put("key", "newvalue");
ts = Long.valueOf(System.currentTimeMillis());
sessionData = new MockOutgoingSessionData(id, 1, ts, null, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(1, incoming.getVersion());
assertEquals(ts.longValue(), incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testMetadataUpdateSessionData()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
md.setNew(false);
md.setMaxInactiveInterval(20000);
ts = Long.valueOf(System.currentTimeMillis());
sessionData = new MockOutgoingSessionData(id, 1, ts, md, null);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(1, incoming.getVersion());
assertEquals(ts.longValue(), incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#storeSessionData(org.jboss.web.tomcat.service.session.distributedcache.spi.OutgoingSessionGranularitySessionData)}.
*/
public void testSimpleUpdateSessionData()
{
testee.start();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
ts = Long.valueOf(System.currentTimeMillis());
sessionData = new MockOutgoingSessionData(id, 1, ts, null, null);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(1, incoming.getVersion());
assertEquals(ts.longValue(), incoming.getTimestamp());
assertEquals(md.getId(), incoming.getMetadata().getId());
assertEquals(md.getCreationTime(), incoming.getMetadata().getCreationTime());
assertEquals(md.isNew(), incoming.getMetadata().isNew());
assertEquals(md.isValid(), incoming.getMetadata().isValid());
assertEquals(md.getMaxInactiveInterval(), incoming.getMetadata().getMaxInactiveInterval());
assertTrue(incoming.providesSessionAttributes());
assertEquals(attrs, incoming.getSessionAttributes());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#getSessionTimestamp(java.lang.String)}.
*/
public void testGetSessionTimestamp()
{
testee.start();
String id = nextId();
assertNull(testee.getSessionTimestamp(id));
DistributableSessionMetadata md = new DistributableSessionMetadata();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(1, incoming.getVersion());
assertEquals(ts.longValue(), incoming.getTimestamp());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#getSessionVersion(java.lang.String)}.
*/
public void testGetSessionVersion()
{
testee.start();
String id = nextId();
assertNull(testee.getSessionVersion(id));
DistributableSessionMetadata md = new DistributableSessionMetadata();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(30000);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 1, ts, md, attrs);
testee.storeSessionData(sessionData);
IncomingDistributableSessionData incoming = testee.getSessionData(id, true);
assertEquals(1, incoming.getVersion());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#processExpires()}.
*/
public void testProcessExpires()
{
testee.setCleanupInterval(2);
testee.setMaxUnreplicatedInterval(0);
testee.start();
testee.clear();
int existing = testee.getSize();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(1);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
sleep(500);
testee.processExpires();
assertEquals(Integer.valueOf(0), testee.getSessionVersion(id));
sleep(2010);
testee.processExpires();
assertNull(testee.getSessionVersion(id));
assertEquals(existing, testee.getSize());
}
/**
* Test method for {@link org.jboss.web.tomcat.service.session.persistent.RDBMSStoreBase#processExpires()}.
*/
public void testProcessExpiresWithMaxUnreplicatedInterval()
{
testee.setCleanupInterval(1);
testee.setMaxUnreplicatedInterval(1);
testee.start();
testee.clear();
int existing = testee.getSize();
DistributableSessionMetadata md = new DistributableSessionMetadata();
String id = nextId();
md.setId(id + ".full");
md.setCreationTime(System.currentTimeMillis());
md.setNew(true);
md.setValid(true);
md.setMaxInactiveInterval(2);
Long ts = Long.valueOf(md.getCreationTime() + 1);
Map<String, Object> attrs = new HashMap<String, Object>();
attrs.put("key", "value");
OutgoingSessionGranularitySessionData sessionData = new MockOutgoingSessionData(id, 0, ts, md, attrs);
testee.storeSessionData(sessionData);
sleep(500);
testee.processExpires();
assertEquals(Integer.valueOf(0), testee.getSessionVersion(id));
sleep(2010);
testee.processExpires();
assertEquals(Integer.valueOf(0), testee.getSessionVersion(id));
assertEquals(existing +1 , testee.getSize());
sleep(1010);
testee.processExpires();
assertNull(testee.getSessionVersion(id));
assertEquals(existing, testee.getSize());
}
private void sleep(int sleeptime)
{
try
{
Thread.sleep(sleeptime);
}
catch (InterruptedException ignored)
{
;
}
}
}