From 7bfa480c990f711a8be331840d0a021c38f0e414 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 25 Jul 2011 12:15:33 +0000 Subject: [PATCH] restored OpenEntityManagerInViewTests git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4769 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../support/OpenEntityManagerInViewTests.java | 341 +++++++++--------- 1 file changed, 180 insertions(+), 161 deletions(-) diff --git a/org.springframework.orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java b/org.springframework.orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java index e81502cda6c..1bae5928949 100644 --- a/org.springframework.orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java +++ b/org.springframework.orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,172 +16,191 @@ package org.springframework.orm.jpa.support; -import org.junit.Ignore; -import org.junit.Test; +import java.io.IOException; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import junit.framework.TestCase; +import org.easymock.MockControl; + +import org.springframework.mock.web.MockFilterConfig; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockServletContext; +import org.springframework.mock.web.PassThroughFilterChain; +import org.springframework.orm.jpa.JpaTemplate; +import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.request.ServletWebRequest; +import org.springframework.web.context.support.StaticWebApplicationContext; /** * @author Costin Leau * @author Juergen Hoeller * @author Chris Beams */ -@Ignore // dependency issues after moving from .testsuite -> .test -public class OpenEntityManagerInViewTests { +public class OpenEntityManagerInViewTests extends TestCase { -// private MockControl factoryControl, managerControl; -// -// private EntityManager manager; -// -// private EntityManagerFactory factory; -// -// private JpaTemplate template; -// -// -// @Override -// protected void setUp() throws Exception { -// factoryControl = MockControl.createControl(EntityManagerFactory.class); -// factory = (EntityManagerFactory) factoryControl.getMock(); -// managerControl = MockControl.createControl(EntityManager.class); -// manager = (EntityManager) managerControl.getMock(); -// -// template = new JpaTemplate(factory); -// template.afterPropertiesSet(); -// -// factoryControl.expectAndReturn(factory.createEntityManager(), manager); -// } -// -// @Override -// protected void tearDown() throws Exception { -// assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); -// assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); -// assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); -// assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); -// } -// -// public void testOpenEntityManagerInterceptorInView() throws Exception { -// OpenEntityManagerInViewInterceptor rawInterceptor = new OpenEntityManagerInViewInterceptor(); -// rawInterceptor.setEntityManagerFactory(factory); -// HandlerInterceptor interceptor = new WebRequestHandlerInterceptorAdapter(rawInterceptor); -// -// MockServletContext sc = new MockServletContext(); -// MockHttpServletRequest request = new MockHttpServletRequest(sc); -// MockHttpServletResponse response = new MockHttpServletResponse(); -// -// managerControl.replay(); -// factoryControl.replay(); -// -// interceptor.preHandle(request, response, "handler"); -// assertTrue(TransactionSynchronizationManager.hasResource(factory)); -// -// // check that further invocations simply participate -// interceptor.preHandle(request, response, "handler"); -// -// interceptor.preHandle(request, response, "handler"); -// interceptor.postHandle(request, response, "handler", null); -// interceptor.afterCompletion(request, response, "handler", null); -// -// interceptor.postHandle(request, response, "handler", null); -// interceptor.afterCompletion(request, response, "handler", null); -// -// interceptor.preHandle(request, response, "handler"); -// interceptor.postHandle(request, response, "handler", null); -// interceptor.afterCompletion(request, response, "handler", null); -// -// factoryControl.verify(); -// managerControl.verify(); -// -// managerControl.reset(); -// factoryControl.reset(); -// managerControl.replay(); -// factoryControl.replay(); -// -// interceptor.postHandle(request, response, "handler", null); -// assertTrue(TransactionSynchronizationManager.hasResource(factory)); -// -// factoryControl.verify(); -// managerControl.verify(); -// -// managerControl.reset(); -// factoryControl.reset(); -// -// manager.close(); -// -// managerControl.replay(); -// factoryControl.replay(); -// -// interceptor.afterCompletion(request, response, "handler", null); -// assertFalse(TransactionSynchronizationManager.hasResource(factory)); -// -// factoryControl.verify(); -// managerControl.verify(); -// } -// -// public void testOpenEntityManagerInViewFilter() throws Exception { -// manager.close(); -// -// managerControl.replay(); -// factoryControl.replay(); -// -// MockControl factoryControl2 = MockControl.createControl(EntityManagerFactory.class); -// final EntityManagerFactory factory2 = (EntityManagerFactory) factoryControl2.getMock(); -// -// MockControl managerControl2 = MockControl.createControl(EntityManager.class); -// EntityManager manager2 = (EntityManager) managerControl2.getMock(); -// -// factoryControl2.expectAndReturn(factory2.createEntityManager(), manager2); -// manager2.close(); -// -// factoryControl2.replay(); -// managerControl2.replay(); -// -// MockServletContext sc = new MockServletContext(); -// StaticWebApplicationContext wac = new StaticWebApplicationContext(); -// wac.setServletContext(sc); -// wac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", factory); -// wac.getDefaultListableBeanFactory().registerSingleton("myEntityManagerFactory", factory2); -// wac.refresh(); -// sc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); -// MockHttpServletRequest request = new MockHttpServletRequest(sc); -// MockHttpServletResponse response = new MockHttpServletResponse(); -// -// MockFilterConfig filterConfig = new MockFilterConfig(wac.getServletContext(), "filter"); -// MockFilterConfig filterConfig2 = new MockFilterConfig(wac.getServletContext(), "filter2"); -// filterConfig2.addInitParameter("entityManagerFactoryBeanName", "myEntityManagerFactory"); -// -// final OpenEntityManagerInViewFilter filter = new OpenEntityManagerInViewFilter(); -// filter.init(filterConfig); -// final OpenEntityManagerInViewFilter filter2 = new OpenEntityManagerInViewFilter(); -// filter2.init(filterConfig2); -// -// final FilterChain filterChain = new FilterChain() { -// public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) { -// assertTrue(TransactionSynchronizationManager.hasResource(factory)); -// servletRequest.setAttribute("invoked", Boolean.TRUE); -// } -// }; -// -// final FilterChain filterChain2 = new FilterChain() { -// public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) -// throws IOException, ServletException { -// assertTrue(TransactionSynchronizationManager.hasResource(factory2)); -// filter.doFilter(servletRequest, servletResponse, filterChain); -// } -// }; -// -// FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2); -// -// assertFalse(TransactionSynchronizationManager.hasResource(factory)); -// assertFalse(TransactionSynchronizationManager.hasResource(factory2)); -// filter2.doFilter(request, response, filterChain3); -// assertFalse(TransactionSynchronizationManager.hasResource(factory)); -// assertFalse(TransactionSynchronizationManager.hasResource(factory2)); -// assertNotNull(request.getAttribute("invoked")); -// -// factoryControl.verify(); -// managerControl.verify(); -// factoryControl2.verify(); -// managerControl2.verify(); -// -// wac.close(); -// } + private MockControl factoryControl, managerControl; + + private EntityManager manager; + + private EntityManagerFactory factory; + + private JpaTemplate template; + + + @Override + protected void setUp() throws Exception { + factoryControl = MockControl.createControl(EntityManagerFactory.class); + factory = (EntityManagerFactory) factoryControl.getMock(); + managerControl = MockControl.createControl(EntityManager.class); + manager = (EntityManager) managerControl.getMock(); + + template = new JpaTemplate(factory); + template.afterPropertiesSet(); + + factoryControl.expectAndReturn(factory.createEntityManager(), manager); + } + + @Override + protected void tearDown() throws Exception { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); + assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); + } + + public void testOpenEntityManagerInViewInterceptor() throws Exception { + OpenEntityManagerInViewInterceptor interceptor = new OpenEntityManagerInViewInterceptor(); + interceptor.setEntityManagerFactory(factory); + + MockServletContext sc = new MockServletContext(); + MockHttpServletRequest request = new MockHttpServletRequest(sc); + + managerControl.replay(); + factoryControl.replay(); + + interceptor.preHandle(new ServletWebRequest(request)); + assertTrue(TransactionSynchronizationManager.hasResource(factory)); + + // check that further invocations simply participate + interceptor.preHandle(new ServletWebRequest(request)); + + interceptor.preHandle(new ServletWebRequest(request)); + interceptor.postHandle(new ServletWebRequest(request), null); + interceptor.afterCompletion(new ServletWebRequest(request), null); + + interceptor.postHandle(new ServletWebRequest(request), null); + interceptor.afterCompletion(new ServletWebRequest(request), null); + + interceptor.preHandle(new ServletWebRequest(request)); + interceptor.postHandle(new ServletWebRequest(request), null); + interceptor.afterCompletion(new ServletWebRequest(request), null); + + factoryControl.verify(); + managerControl.verify(); + + managerControl.reset(); + factoryControl.reset(); + managerControl.replay(); + factoryControl.replay(); + + interceptor.postHandle(new ServletWebRequest(request), null); + assertTrue(TransactionSynchronizationManager.hasResource(factory)); + + factoryControl.verify(); + managerControl.verify(); + + managerControl.reset(); + factoryControl.reset(); + + managerControl.expectAndReturn(manager.isOpen(), true); + manager.close(); + + managerControl.replay(); + factoryControl.replay(); + + interceptor.afterCompletion(new ServletWebRequest(request), null); + assertFalse(TransactionSynchronizationManager.hasResource(factory)); + + factoryControl.verify(); + managerControl.verify(); + } + + public void testOpenEntityManagerInViewFilter() throws Exception { + managerControl.expectAndReturn(manager.isOpen(), true); + manager.close(); + + managerControl.replay(); + factoryControl.replay(); + + MockControl factoryControl2 = MockControl.createControl(EntityManagerFactory.class); + final EntityManagerFactory factory2 = (EntityManagerFactory) factoryControl2.getMock(); + + MockControl managerControl2 = MockControl.createControl(EntityManager.class); + EntityManager manager2 = (EntityManager) managerControl2.getMock(); + + factoryControl2.expectAndReturn(factory2.createEntityManager(), manager2); + managerControl2.expectAndReturn(manager2.isOpen(), true); + manager2.close(); + + factoryControl2.replay(); + managerControl2.replay(); + + MockServletContext sc = new MockServletContext(); + StaticWebApplicationContext wac = new StaticWebApplicationContext(); + wac.setServletContext(sc); + wac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", factory); + wac.getDefaultListableBeanFactory().registerSingleton("myEntityManagerFactory", factory2); + wac.refresh(); + sc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); + MockHttpServletRequest request = new MockHttpServletRequest(sc); + MockHttpServletResponse response = new MockHttpServletResponse(); + + MockFilterConfig filterConfig = new MockFilterConfig(wac.getServletContext(), "filter"); + MockFilterConfig filterConfig2 = new MockFilterConfig(wac.getServletContext(), "filter2"); + filterConfig2.addInitParameter("entityManagerFactoryBeanName", "myEntityManagerFactory"); + + final OpenEntityManagerInViewFilter filter = new OpenEntityManagerInViewFilter(); + filter.init(filterConfig); + final OpenEntityManagerInViewFilter filter2 = new OpenEntityManagerInViewFilter(); + filter2.init(filterConfig2); + + final FilterChain filterChain = new FilterChain() { + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) { + assertTrue(TransactionSynchronizationManager.hasResource(factory)); + servletRequest.setAttribute("invoked", Boolean.TRUE); + } + }; + + final FilterChain filterChain2 = new FilterChain() { + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) + throws IOException, ServletException { + assertTrue(TransactionSynchronizationManager.hasResource(factory2)); + filter.doFilter(servletRequest, servletResponse, filterChain); + } + }; + + FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2); + + assertFalse(TransactionSynchronizationManager.hasResource(factory)); + assertFalse(TransactionSynchronizationManager.hasResource(factory2)); + filter2.doFilter(request, response, filterChain3); + assertFalse(TransactionSynchronizationManager.hasResource(factory)); + assertFalse(TransactionSynchronizationManager.hasResource(factory2)); + assertNotNull(request.getAttribute("invoked")); + + factoryControl.verify(); + managerControl.verify(); + factoryControl2.verify(); + managerControl2.verify(); + + wac.close(); + } }