1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.aggregator;
18
19 import java.io.File;
20 import java.net.URL;
21 import java.net.URLClassLoader;
22 import java.security.PrivilegedAction;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25
26 import javax.security.auth.Subject;
27 import javax.servlet.ServletConfig;
28 import javax.servlet.ServletContext;
29
30 import junit.framework.Test;
31 import junit.framework.TestCase;
32 import junit.framework.TestSuite;
33
34 import org.apache.jetspeed.PortalReservedParameters;
35 import org.apache.jetspeed.capabilities.Capabilities;
36 import org.apache.jetspeed.components.portletregistry.PortletRegistry;
37 import org.apache.jetspeed.container.state.NavigationalStateComponent;
38 import org.apache.jetspeed.engine.Engine;
39 import org.apache.jetspeed.factory.PortletFactory;
40 import org.apache.jetspeed.mocks.ResourceLocatingServletContext;
41 import org.apache.jetspeed.om.common.portlet.PortletApplication;
42 import org.apache.jetspeed.om.page.ContentPageImpl;
43 import org.apache.jetspeed.om.page.Page;
44 import org.apache.jetspeed.page.PageManager;
45 import org.apache.jetspeed.profiler.ProfileLocator;
46 import org.apache.jetspeed.profiler.Profiler;
47 import org.apache.jetspeed.request.RequestContext;
48 import org.apache.jetspeed.request.RequestContextComponent;
49 import org.apache.jetspeed.security.JSSubject;
50 import org.apache.jetspeed.security.SecurityHelper;
51 import org.apache.jetspeed.testhelpers.SpringEngineHelper;
52
53 import com.mockrunner.mock.web.MockHttpServletRequest;
54 import com.mockrunner.mock.web.MockHttpServletResponse;
55 import com.mockrunner.mock.web.MockHttpSession;
56 import com.mockrunner.mock.web.MockServletConfig;
57
58 /***
59 * <P>Test the aggregation service</P>
60 *
61 * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
62 * @version $Id: TestAggregator.java 517719 2007-03-13 15:05:48Z ate $
63 *
64 */
65 public class TestAggregator extends TestCase
66 {
67 private SpringEngineHelper engineHelper;
68 private Engine engine;
69 private PortletAggregator portletAggregator;
70 private PageAggregator pageAggregator;
71 private PageAggregator asyncPageAggregator;
72 private Profiler profiler;
73 private Capabilities capabilities;
74 private NavigationalStateComponent navComponent;
75 private PortletFactory portletFactory;
76 private ServletConfig servletConfig;
77 private ServletContext servletContext;
78 private PortletRegistry portletRegistry;
79 private RequestContextComponent rcc;
80 private String testPage = "/default-page.psml";
81
82 /***
83 * Start the tests.
84 *
85 * @param args the arguments. Not used
86 */
87 public static void main(String args[])
88 {
89 junit.awtui.TestRunner.main(new String[] { TestAggregator.class.getName()});
90 }
91
92 protected void setUp() throws Exception
93 {
94 try
95 {
96 super.setUp();
97 }
98 catch (Exception e)
99 {
100 e.printStackTrace();
101 return;
102 }
103
104 HashMap context = new HashMap();
105 engineHelper = new SpringEngineHelper(context);
106 engineHelper.setUp();
107 engine = (Engine) context.get(SpringEngineHelper.ENGINE_ATTR);
108
109 pageAggregator = (PageAggregator) engine.getComponentManager().getComponent(PageAggregator.class);
110 asyncPageAggregator =
111 (PageAggregator) engine.getComponentManager().getComponent("org.apache.jetspeed.aggregator.AsyncPageAggregator");
112 portletAggregator = (PortletAggregator) engine.getComponentManager().getComponent(PortletAggregator.class);
113
114 profiler = (Profiler) engine.getComponentManager().getComponent(Profiler.class);
115 capabilities = (Capabilities) engine.getComponentManager().getComponent(Capabilities.class);
116 navComponent =
117 (NavigationalStateComponent) engine.getComponentManager().getComponent(NavigationalStateComponent.class);
118
119 servletConfig = engine.getServletConfig();
120 servletContext = servletConfig.getServletContext();
121
122 portletRegistry = (PortletRegistry) engine.getComponentManager().getComponent("portletRegistry");
123 portletFactory = (PortletFactory) engine.getComponentManager().getComponent("portletFactory");
124 rcc = (RequestContextComponent) engine.getComponentManager().getComponent("org.apache.jetspeed.request.RequestContextComponent");
125
126 File paRootDir = null;
127 paRootDir = new File("../../layout-portlets/target/jetspeed-layout-portlets");
128 initPA("jetspeed-layouts", "/jetspeed-layouts", paRootDir);
129
130 paRootDir = new File("../../applications/demo/target/demo");
131 initPA("demo", "/demo", paRootDir);
132
133 paRootDir = new File("../../applications/j2-admin/target/j2-admin");
134 initPA("j2-admin", "/j2-admin", paRootDir);
135
136
137
138
139
140 }
141
142 public static Test suite()
143 {
144
145 return new TestSuite(TestAggregator.class);
146 }
147
148
149
150
151
152
153 public void testParallelMode() throws Exception
154 {
155 doAggregation(true);
156 }
157
158 protected void tearDown() throws Exception
159 {
160 engineHelper.tearDown();
161 super.tearDown();
162 }
163
164 private void doAggregation(final boolean isParallelMode) throws Exception
165 {
166 assertNotNull("portlet aggregator is null", portletAggregator);
167 assertNotNull("page aggregator is null", pageAggregator);
168 assertNotNull("async page aggregator is null", asyncPageAggregator);
169 assertNotNull("profiler is null", profiler);
170 assertNotNull("capabilities is null", capabilities);
171 assertNotNull("navigational state component is null", navComponent);
172 assertNotNull("portal servlet config is null", servletConfig);
173 assertNotNull("portal servlet context is null", servletContext);
174 assertNotNull("portlet registry is null", portletRegistry);
175 assertNotNull("request context component is null", rcc);
176
177 final RequestContext requestContext = initRequestContext();
178 final Subject subject = SecurityHelper.createSubject("user");
179 requestContext.getRequest().getSession().setAttribute(PortalReservedParameters.SESSION_KEY_SUBJECT, subject);
180 requestContext.setSubject(subject);
181
182 ProfileLocator locator = profiler.createLocator(requestContext);
183 HashMap locators = new HashMap();
184 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
185 requestContext.setProfileLocators(locators);
186
187 requestContext.setCapabilityMap(capabilities.getCapabilityMap("Mozilla/5"));
188 requestContext.setPortalURL(navComponent.createURL(requestContext.getRequest(), requestContext.getCharacterEncoding()));
189
190 Exception ex = (Exception) JSSubject.doAsPrivileged(subject, new PrivilegedAction()
191 {
192 public Object run()
193 {
194 try {
195 PageManager pageManager =
196 (PageManager) engine.getComponentManager().getComponent(PageManager.class);
197 Page page = pageManager.getPage(testPage);
198 assertNotNull(page);
199 requestContext.setPage(new ContentPageImpl(page));
200
201 if (!isParallelMode) {
202 pageAggregator.build(requestContext);
203 } else {
204 asyncPageAggregator.build(requestContext);
205 }
206
207 MockHttpServletResponse rsp = (MockHttpServletResponse) requestContext.getResponse();
208 System.out.println(">>>> " + rsp.getOutputStreamContent());
209 } catch (Exception e) {
210 return e;
211 }
212 return null;
213 }
214 }, null);
215
216 if (ex != null)
217 throw ex;
218 }
219
220 private RequestContext initRequestContext()
221 {
222 MockHttpSession session = new MockHttpSession();
223 session.setupServletContext(servletContext);
224 assertEquals(servletContext, session.getServletContext());
225
226 MockHttpServletRequest request = new MockHttpServletRequest();
227 MockHttpServletResponse response = new MockHttpServletResponse();
228
229 request.setSession(session);
230
231
232
233
234 request.setScheme("http");
235 request.setContextPath("/jetspeed");
236 request.setServletPath("/portal" + testPage);
237 request.setMethod("GET");
238
239
240
241 RequestContext rc = rcc.create(request, response, servletConfig);
242 return rc;
243 }
244
245 private ResourceLocatingServletContext initPA(String paName, String paContextPath, File paRootDir)
246 {
247 ResourceLocatingServletContext paContext = new ResourceLocatingServletContext(paRootDir, true);
248 MockServletConfig paConfig = new MockServletConfig();
249 paConfig.setServletContext(paContext);
250 ((ResourceLocatingServletContext) servletContext).setContext(paContextPath, paContext);
251
252 try
253 {
254 ClassLoader paCl = createPAClassLoader(new File(paRootDir, "WEB-INF"));
255 PortletApplication pa = portletRegistry.getPortletApplication(paName);
256 portletFactory.registerPortletApplication(pa, paCl);
257 }
258 catch (Exception e)
259 {
260 System.out.println("Failed to register portlet application, " + paName + ": " + e);
261 }
262
263 return paContext;
264 }
265
266 protected ClassLoader createPAClassLoader(File webInfDir)
267 {
268 ClassLoader localPAClassLoader = null;
269
270 ArrayList urls = new ArrayList();
271 File webInfClassesDir = null;
272
273 try
274 {
275 webInfClassesDir = new File(webInfDir, "classes");
276 if (webInfClassesDir.isDirectory())
277 {
278 urls.add(webInfClassesDir.toURL());
279 }
280
281 File webInfLibDir = new File(webInfDir, "lib");
282 if (webInfLibDir.isDirectory())
283 {
284 File [] jars = webInfLibDir.listFiles();
285 for (int i = 0; i < jars.length; i++)
286 {
287 File jar = jars[i];
288 urls.add(jar.toURL());
289 }
290 }
291
292 localPAClassLoader =
293 new URLClassLoader((URL[]) urls.toArray(new URL[urls.size()]), getClass().getClassLoader());
294 } catch (Exception e)
295 {
296 throw new RuntimeException("Failed to create classloader for PA.", e);
297 }
298
299 return localPAClassLoader;
300 }
301
302 }