1 22 package org.jboss.test.security.test; 23 24 import java.net.HttpURLConnection ; 25 import java.net.URL ; 26 import java.util.Set ; 27 28 import javax.management.ObjectName ; 29 30 import junit.framework.Test; 31 import junit.framework.TestSuite; 32 33 import org.jboss.security.NestableGroup; 34 import org.jboss.security.NestablePrincipal; 35 import org.jboss.security.RunAsIdentity; 36 import org.jboss.security.SimpleGroup; 37 import org.jboss.security.SimplePrincipal; 38 import org.jboss.test.JBossTestCase; 39 import org.jboss.test.JBossTestSetup; 40 import org.jboss.test.util.web.HttpUtils; 41 42 44 55 public class DeepCopySubjectUnitTestCase extends JBossTestCase 56 { 57 public static String REALM = "JBossTest Servlets"; 58 59 public DeepCopySubjectUnitTestCase(String name) 60 { 61 super(name); 62 } 63 64 69 public void testCloneNestablePrincipal() throws Exception 70 { 71 SimplePrincipal sp1 = new SimplePrincipal("sp1"); 72 SimplePrincipal sp2 = new SimplePrincipal("sp2"); 73 NestablePrincipal np = new NestablePrincipal("TestStack"); 74 np.addMember(sp1); 76 np.addMember(sp2); 77 assertTrue("np.isMember(sp2)", np.isMember(sp2)); 78 79 NestablePrincipal clonedNP = (NestablePrincipal)np.clone(); 81 82 np.removeMember(sp2); 84 assertFalse("np.isMember(sp2) == false", np.isMember(sp2)); 86 assertTrue("np.isMember(sp1)", np.isMember(sp1)); 87 assertTrue("clonedNP.isMember(sp2)", clonedNP.isMember(sp2)); 89 } 90 91 96 public void testCloneNestableGroup() throws Exception 97 { 98 SimplePrincipal sp1 = new SimplePrincipal("sp1"); 99 SimplePrincipal sp2 = new SimplePrincipal("sp2"); 100 101 SimpleGroup sg1 = new SimpleGroup("sg1"); 102 SimpleGroup sg2 = new SimpleGroup("sg1"); 103 sg1.addMember(sp1); 104 sg2.addMember(sp2); 105 NestableGroup ng = new NestableGroup("TestGroup"); 106 ng.addMember(sg1); 108 ng.addMember(sg2); 109 assertTrue("ng.isMember(sp2)", ng.isMember(sp2)); 110 111 NestableGroup clonedNP = (NestableGroup)ng.clone(); 113 114 ng.removeMember(sg2); 116 assertFalse("ng.isMember(sp2) == false", ng.isMember(sp2)); 118 assertTrue("ng.isMember(sp1)", ng.isMember(sp1)); 119 assertTrue("clonedNP.isMember(sp2)", clonedNP.isMember(sp2)); 121 } 122 123 128 public void testCloneSimpleGroup() throws Exception 129 { 130 SimplePrincipal sp1 = new SimplePrincipal("sp1"); 131 SimplePrincipal sp2 = new SimplePrincipal("sp2"); 132 133 SimpleGroup sg = new SimpleGroup("sg1"); 134 sg.addMember(sp1); 135 sg.addMember(sp2); 136 assertTrue("sg.isMember(sp1)", sg.isMember(sp1)); 137 assertTrue("sg.isMember(sp2)", sg.isMember(sp2)); 138 139 SimpleGroup clonedSP = (SimpleGroup)sg.clone(); 141 sg.removeMember(sp2); 142 143 assertFalse("sg.isMember(sp2) == false", sg.isMember(sp2)); 145 assertTrue("sg.isMember(sp1)", sg.isMember(sp1)); 146 assertTrue("clonedSP.isMember(sp2)", clonedSP.isMember(sp2)); 148 } 149 150 155 public void testCloneRunAsIdentity() throws Exception 156 { 157 SimplePrincipal sp1 = new SimplePrincipal("sp1"); 158 SimplePrincipal sp2 = new SimplePrincipal("sp2"); 159 RunAsIdentity ras = new RunAsIdentity("testRole", "testUser"); 160 Set principalSet = ras.getPrincipalsSet(); 163 principalSet.add(sp1); 164 principalSet.add(sp2); 165 RunAsIdentity rasClone = (RunAsIdentity)ras.clone(); 167 principalSet.remove(sp1); 168 assertFalse("principalSet.contains(sp1)==false", 169 principalSet.contains(sp1)); 170 171 Set clonedPrincipalSet = rasClone.getPrincipalsSet(); 172 assertTrue("clonedPrincipalSet.contains(sp1)", 173 clonedPrincipalSet.contains(sp1)); 174 assertTrue("clonedPrincipalSet.contains(sp2)", 175 clonedPrincipalSet.contains(sp2)); 176 } 177 178 184 public void testSubjectCloning() throws Exception 185 { 186 flagDeepCopy(Boolean.FALSE); 187 accessWeb(true); 188 flagDeepCopy(Boolean.TRUE); 189 this.redeploy("deepcopy.ear"); 190 accessWeb(false); 191 flagDeepCopy(Boolean.FALSE); 192 this.redeploy("deepcopy.ear"); 193 accessWeb(true); 194 } 195 196 203 private void flagDeepCopy(Boolean flag) throws Exception 204 { 205 this.getServer().invoke(new ObjectName ("jboss.security:service=JaasSecurityManager"), 206 "setDeepCopySubjectMode",new Object []{flag}, new String []{Boolean.TYPE.getName()}); 207 } 208 209 214 private void accessWeb(boolean shouldMatch) throws Exception 215 { 216 String baseURL = HttpUtils.getBaseURL("scott", "echoman"); 218 URL url = new URL (baseURL+"deepcopy/DeepCopyServlet?shouldMatch="+shouldMatch); 220 HttpUtils.accessURL(url, REALM, HttpURLConnection.HTTP_OK); 221 } 222 223 public static Test suite() throws Exception 224 { 225 TestSuite suite = new TestSuite(); 226 suite.addTest(new TestSuite(DeepCopySubjectUnitTestCase.class)); 227 228 Test wrapper = new JBossTestSetup(suite) 230 { 231 protected void setUp() throws Exception 232 { 233 super.setUp(); 234 deploy("deepcopy.ear"); 235 flushAuthCache(); 237 } 238 protected void tearDown() throws Exception 239 { 240 undeploy("deepcopy.ear"); 241 super.tearDown(); 242 } 243 }; 244 return wrapper; 245 } 246 } 247 | Popular Tags |