001package org.apache.turbine.pipeline; 002 003 004/* 005 * Licensed to the Apache Software Foundation (ASF) under one 006 * or more contributor license agreements. See the NOTICE file 007 * distributed with this work for additional information 008 * regarding copyright ownership. The ASF licenses this file 009 * to you under the Apache License, Version 2.0 (the 010 * "License"); you may not use this file except in compliance 011 * with the License. You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, 016 * software distributed under the License is distributed on an 017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 018 * KIND, either express or implied. See the License for the 019 * specific language governing permissions and limitations 020 * under the License. 021 */ 022 023 024import static org.junit.Assert.assertEquals; 025import static org.junit.Assert.assertNotNull; 026import static org.junit.Assert.assertTrue; 027 028import java.util.Vector; 029 030import javax.servlet.http.HttpServletResponse; 031 032import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl; 033import org.apache.turbine.modules.actions.VelocityActionDoesNothing; 034import org.apache.turbine.modules.actions.VelocitySecureActionDoesNothing; 035import org.apache.turbine.om.security.DefaultUserImpl; 036import org.apache.turbine.om.security.User; 037import org.apache.turbine.test.BaseTestCase; 038import org.apache.turbine.test.EnhancedMockHttpServletRequest; 039import org.apache.turbine.test.EnhancedMockHttpServletResponse; 040import org.apache.turbine.test.EnhancedMockHttpSession; 041import org.apache.turbine.util.RunData; 042import org.apache.turbine.util.TurbineConfig; 043import org.apache.turbine.util.uri.URIConstants; 044import org.junit.AfterClass; 045import org.junit.Before; 046import org.junit.BeforeClass; 047import org.junit.Test; 048 049import com.mockobjects.servlet.MockServletConfig; 050 051/** 052 * Tests ExecutePageValve. 053 * 054 * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a> 055 * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a> 056 * @version $Id: ExecutePageValveTest.java 1706425 2015-10-02 14:47:51Z tv $ 057 */ 058public class ExecutePageValveTest extends BaseTestCase 059{ 060 private static TurbineConfig tc = null; 061 private MockServletConfig config = null; 062 private EnhancedMockHttpServletRequest request = null; 063 private EnhancedMockHttpSession session = null; 064 private HttpServletResponse response = null; 065 066 067 @BeforeClass 068 public static void init() { 069 tc = new TurbineConfig( 070 ".", 071 "/conf/test/CompleteTurbineResources.properties"); 072 tc.initialize(); 073 } 074 075 @Before 076 public void setUpBefore() throws Exception 077 { 078 config = new MockServletConfig(); 079 config.setupNoParameters(); 080 request = new EnhancedMockHttpServletRequest(); 081 request.setupServerName("bob"); 082 request.setupGetProtocol("http"); 083 request.setupScheme("scheme"); 084 request.setupPathInfo("damn"); 085 request.setupGetServletPath("damn2"); 086 request.setupGetContextPath("wow"); 087 request.setupGetContentType("html/text"); 088 request.setupAddHeader("Content-type", "html/text"); 089 request.setupAddHeader("Accept-Language", "en-US"); 090 091 session = new EnhancedMockHttpSession(); 092 response = new EnhancedMockHttpServletResponse(); 093 094 request.setSession(session); 095 096 } 097 098 @Test public void testValve() throws Exception 099 { 100 Vector<String> v = new Vector<String>(); 101 v.add(URIConstants.CGI_TEMPLATE_PARAM); 102 request.setupGetParameterNames(v.elements()); 103 String nulls[] = new String[1]; 104 nulls[0]="Index.vm"; 105 request.setupAddParameter(URIConstants.CGI_TEMPLATE_PARAM, nulls); 106 107 RunData runData = getRunData(request, response, config); 108 runData.setScreenTemplate("ExistPageWithLayout.vm"); 109 User tu = new DefaultUserImpl(new TurbineUserImpl()); 110 tu.setName("username"); 111 tu.setHasLoggedIn(Boolean.TRUE); 112 String actionName = VelocityActionDoesNothing.class.getName(); 113 actionName = actionName.substring(actionName.lastIndexOf(".")+1); 114 runData.setAction(actionName); 115 runData.setUser(tu); 116 117 Pipeline pipeline = new TurbinePipeline(); 118 119 PipelineData pipelineData = runData; 120 ExecutePageValve valve = new ExecutePageValve(); 121 pipeline.addValve(valve); 122 pipeline.initialize(); 123 124 int numberOfCalls = VelocityActionDoesNothing.numberOfCalls; 125 pipeline.invoke(pipelineData); 126 assertEquals("Assert action was called",numberOfCalls +1,VelocityActionDoesNothing.numberOfCalls); 127 User user = runData.getUser(); 128 assertNotNull(user); 129 assertEquals("username", user.getName()); 130 assertTrue(user.hasLoggedIn()); 131 } 132 133 @Test public void testValveWithSecureAction() throws Exception 134 { 135 Vector<String> v = new Vector<String>(); 136 v.add(URIConstants.CGI_TEMPLATE_PARAM); 137 request.setupGetParameterNames(v.elements()); 138 String nulls[] = new String[1]; 139 nulls[0]="Index.vm"; 140 request.setupAddParameter(URIConstants.CGI_TEMPLATE_PARAM, nulls); 141 142 RunData runData = getRunData(request, response, config); 143 runData.setScreenTemplate("ExistPageWithLayout.vm"); 144 User tu = new DefaultUserImpl(new TurbineUserImpl()); 145 tu.setName("username"); 146 tu.setHasLoggedIn(Boolean.TRUE); 147 String actionName = VelocitySecureActionDoesNothing.class.getName(); 148 actionName = actionName.substring(actionName.lastIndexOf(".")+1); 149 runData.setAction(actionName); 150 runData.setUser(tu); 151 152 Pipeline pipeline = new TurbinePipeline(); 153 154 PipelineData pipelineData = runData; 155 ExecutePageValve valve = new ExecutePageValve(); 156 pipeline.addValve(valve); 157 pipeline.initialize(); 158 159 int numberOfCalls = VelocitySecureActionDoesNothing.numberOfCalls; 160 int isAuthorizedCalls = VelocitySecureActionDoesNothing.isAuthorizedCalls; 161 pipeline.invoke(pipelineData); 162 assertEquals("Assert action was called",numberOfCalls +1,VelocitySecureActionDoesNothing.numberOfCalls); 163 assertEquals("Assert authorization was called",isAuthorizedCalls +1,VelocitySecureActionDoesNothing.isAuthorizedCalls); 164 User user = runData.getUser(); 165 assertNotNull(user); 166 assertEquals("username", user.getName()); 167 assertTrue(user.hasLoggedIn()); 168 } 169 170 @AfterClass 171 public static void destroy() 172 { 173 tc.dispose(); 174 } 175}