1 22 package org.jboss.test.security.test; 23 24 import java.io.File ; 25 import java.io.FileWriter ; 26 import java.io.IOException ; 27 import java.lang.reflect.Method ; 28 import java.security.Principal ; 29 import java.util.HashMap ; 30 import java.util.Iterator ; 31 32 import javax.security.auth.Subject ; 33 import javax.security.auth.callback.Callback ; 34 import javax.security.auth.callback.CallbackHandler ; 35 import javax.security.auth.callback.UnsupportedCallbackException ; 36 import javax.security.auth.login.AppConfigurationEntry ; 37 import javax.security.auth.login.Configuration ; 38 import javax.security.auth.login.LoginContext ; 39 import javax.security.auth.login.LoginException ; 40 41 import junit.framework.TestCase; 42 43 import org.jboss.logging.Logger; 44 import org.jboss.logging.XLevel; 45 import org.jboss.security.SimpleGroup; 46 import org.jboss.security.SimplePrincipal; 47 48 50 57 public class RoleMappingModuleUnitTestCase extends TestCase 58 { 59 private static String tmpDir = System.getProperty("java.io.tmpdir"); 60 private static String rolesFile = "file:" + tmpDir + "/rolesmapping-roles.properties"; 61 62 static class TestConfig extends Configuration 63 { 64 public void refresh() 65 { 66 } 67 68 public AppConfigurationEntry [] getAppConfigurationEntry(String name) 69 { 70 AppConfigurationEntry [] entry = null; 71 try 72 { 73 Class [] parameterTypes = {}; 74 Method m = getClass().getDeclaredMethod(name, parameterTypes); 75 Object [] args = {}; 76 entry = (AppConfigurationEntry []) m.invoke(this, args); 77 } 78 catch(Exception e) 79 { 80 } 81 return entry; 82 } 83 84 AppConfigurationEntry [] testRoleMapping() 85 { 86 AppConfigurationEntry ace = getIdentityLoginModuleEntry(); 87 88 String name2 = "org.jboss.security.auth.spi.RoleMappingLoginModule"; 89 HashMap options2 = new HashMap (); 90 options2.put("rolesProperties", rolesFile); 91 AppConfigurationEntry ace2 = new AppConfigurationEntry (name2, 92 AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL, options2); 93 94 AppConfigurationEntry [] entry = {ace,ace2}; 95 return entry; 96 } 97 98 AppConfigurationEntry [] testRoleMappingWithReplace() 99 { 100 AppConfigurationEntry ace = getIdentityLoginModuleEntry(); 101 102 String name2 = "org.jboss.security.auth.spi.RoleMappingLoginModule"; 103 HashMap options2 = new HashMap (); 104 options2.put("rolesProperties", rolesFile); 105 options2.put("replaceRole", "true"); 106 AppConfigurationEntry ace2 = new AppConfigurationEntry (name2, 107 AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL, options2); 108 109 AppConfigurationEntry [] entry = {ace,ace2}; 110 return entry; 111 } 112 113 private AppConfigurationEntry getIdentityLoginModuleEntry() 114 { 115 String name = "org.jboss.security.auth.spi.IdentityLoginModule"; 116 HashMap options = new HashMap (); 117 options.put("principal", "stark"); 118 options.put("roles", "Role3,Role4"); 119 AppConfigurationEntry ace = new AppConfigurationEntry (name, 120 AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, options); 121 return ace; 122 } 123 } 124 125 public RoleMappingModuleUnitTestCase(String name) 126 { 127 super(name); 128 } 129 130 protected void setUp() throws Exception 131 { 132 Configuration.setConfiguration(new TestConfig()); 134 } 135 136 140 public void testRoleMappingModule() throws Exception 141 { 142 File file = createRolesFile(); 143 assertTrue("File exists",file.exists()); 144 processLogin("testRoleMapping", false); 145 clearRolesFile(file); 146 } 147 148 152 public void testRoleMappingModuleWithReplace() throws Exception 153 { 154 File file = createRolesFile(); 155 assertTrue("File exists",file.exists()); 156 processLogin("testRoleMappingWithReplace",true); 157 clearRolesFile(file); 158 } 159 160 166 private void processLogin(String config, boolean replaceRole) throws LoginException 167 { 168 Subject subject = new Subject (); 169 LoginContext lc = new LoginContext (config,subject, new TestCallbackHandler()); 170 lc.login(); 171 subject = lc.getSubject(); 172 Iterator iter = subject.getPrincipals().iterator(); 173 boolean ranAsserts = false; 174 while(iter.hasNext()) 175 { 176 Principal p = (Principal )iter.next(); 177 if(p instanceof SimpleGroup) 178 { 179 SimpleGroup sg = (SimpleGroup)p; 180 ranAsserts = true; 181 assertTrue("testRole exists?", sg.isMember(new SimplePrincipal("testRole"))); 182 assertTrue("testRole2 exists?", sg.isMember(new SimplePrincipal("testRole2"))); 183 assertTrue("Role4 exists?", sg.isMember(new SimplePrincipal("Role4"))); 184 if(replaceRole) 185 assertFalse("Role3 does not exist?", sg.isMember(new SimplePrincipal("Role3"))); 186 else 187 assertTrue("Role3 exists?", sg.isMember(new SimplePrincipal("Role3"))); 188 } 189 } 190 assertTrue("Ran Asserts?",ranAsserts); 191 } 192 193 197 private void clearRolesFile(File file) 198 { 199 if(file.exists()) 200 file.delete(); 201 assertFalse("File does not exist",file.exists()); 202 } 203 204 209 private File createRolesFile() throws IOException 210 { 211 File file = new File (tmpDir + "/rolesmapping-roles.properties"); 212 clearRolesFile(file); FileWriter fw = new FileWriter (file); 214 fw.write("Role3=testRole,testRole2"); 215 fw.close(); 216 return file; 217 } 218 219 226 private class TestCallbackHandler implements CallbackHandler 227 { 228 public void handle(Callback [] arg0) throws IOException , 229 UnsupportedCallbackException 230 { 231 } 232 } 233 } 234 | Popular Tags |