package net.contextfw.web.commons.cloud.session; import static org.easymock.EasyMock.anyObject; import java.net.UnknownHostException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.contextfw.web.application.PageContext; import net.contextfw.web.application.configuration.Configuration; import net.contextfw.web.commons.AbstractGuiceTest; import net.contextfw.web.commons.GuiceJUnitRunner.GuiceModules; import net.contextfw.web.commons.cloud.internal.serializer.Serializer; import net.contextfw.web.commons.cloud.internal.session.CloudSessionHolder; import org.junit.Before; import com.google.inject.Inject; import com.google.inject.Provider; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DB; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoException; @GuiceModules({SessionTestModule.class }) public abstract class AbstractSessionTest extends AbstractGuiceTest { protected static final String COOKIE_NAME = "cloudSession"; protected enum ResponseExpect { ADD_COOKIE, ADD_COOKIE_TWICE, ADD_COOKIE_THRICE } @Inject protected Configuration conf; @Inject protected Serializer serializer; @Before public void setup() throws UnknownHostException, MongoException { super.setup(); Mongo mongo = new Mongo(); mongo.dropDatabase(SessionTestModule.TEST_DB); db = mongo.getDB(SessionTestModule.TEST_DB); } protected DB db; protected HttpServletResponse mockResponse(ResponseExpect expect) { return mockResponse(expect, null); } protected HttpServletResponse mockResponse(ResponseExpect expect, Cookie cookie) { HttpServletResponse response = createStrictMock(HttpServletResponse.class); if (expect == ResponseExpect.ADD_COOKIE || expect == ResponseExpect.ADD_COOKIE_TWICE || expect == ResponseExpect.ADD_COOKIE_THRICE) { response.addCookie(cookie != null ? cookie : anyObject(Cookie.class)); } if (expect == ResponseExpect.ADD_COOKIE_TWICE || expect == ResponseExpect.ADD_COOKIE_THRICE) { response.addCookie(cookie != null ? cookie : anyObject(Cookie.class)); } if (expect == ResponseExpect.ADD_COOKIE_THRICE) { response.addCookie(cookie != null ? cookie : anyObject(Cookie.class)); } return regMock(response); } protected Provider<PageContext> mockPageContext( HttpServletRequest request, HttpServletResponse response) { final PageContext context = new PageContext(null, request, response); Provider<PageContext> provider = new Provider<PageContext>() { @Override public PageContext get() { return context; } }; return provider; } protected Provider<CloudSessionHolder> mockSessionHolder(String handle) { final CloudSessionHolder holder = new CloudSessionHolder(); holder.setHandle(handle); Provider<CloudSessionHolder> provider = new Provider<CloudSessionHolder>() { @Override public CloudSessionHolder get() { return holder; } }; return provider; } protected CloudSession getBasicSession( Provider<PageContext> httpContext, Provider<CloudSessionHolder> sessionHolder) { MongoCloudSession session = new MongoCloudSession(db, conf, httpContext, sessionHolder, serializer); return session; } protected void mockSession() { DBObject obj = BasicDBObjectBuilder .start() .add("handle", FOOBAR) .add("validThrough", System.currentTimeMillis() + 1000) .add("locked", false) .get(); db.getCollection(SessionTestModule.TEST_COLLECTION).insert(obj); } }