1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.userdetails.jdbc;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.PopulatedDatabase;
21 import org.acegisecurity.userdetails.UserDetails;
22 import org.acegisecurity.userdetails.UsernameNotFoundException;
23 import org.acegisecurity.userdetails.jdbc.JdbcDaoImpl;
24
25 import org.springframework.jdbc.object.MappingSqlQuery;
26
27 import java.sql.ResultSet;
28 import java.sql.SQLException;
29
30
31 /***
32 * Tests {@link JdbcDaoImpl}.
33 *
34 * @author Ben Alex
35 * @version $Id: JdbcDaoTests.java,v 1.1 2005/11/29 13:10:11 benalex Exp $
36 */
37 public class JdbcDaoTests extends TestCase {
38
39
40 public JdbcDaoTests() {
41 super();
42 }
43
44 public JdbcDaoTests(String arg0) {
45 super(arg0);
46 }
47
48
49
50 public final void setUp() throws Exception {
51 super.setUp();
52 }
53
54 public static void main(String[] args) {
55 junit.textui.TestRunner.run(JdbcDaoTests.class);
56 }
57
58 public void testCheckDaoAccessUserSuccess() throws Exception {
59 JdbcDaoImpl dao = makePopulatedJdbcDao();
60 UserDetails user = dao.loadUserByUsername("marissa");
61 assertEquals("marissa", user.getUsername());
62 assertEquals("koala", user.getPassword());
63 assertTrue(user.isEnabled());
64 assertEquals("ROLE_TELLER", user.getAuthorities()[1].getAuthority());
65 assertEquals("ROLE_SUPERVISOR", user.getAuthorities()[0].getAuthority());
66 assertEquals(2, user.getAuthorities().length);
67 }
68
69 public void testCheckDaoOnlyReturnsGrantedAuthoritiesGrantedToUser()
70 throws Exception {
71 JdbcDaoImpl dao = makePopulatedJdbcDao();
72 UserDetails user = dao.loadUserByUsername("scott");
73 assertEquals("ROLE_TELLER", user.getAuthorities()[0].getAuthority());
74 assertEquals(1, user.getAuthorities().length);
75 }
76
77 public void testCheckDaoReturnsCorrectDisabledProperty()
78 throws Exception {
79 JdbcDaoImpl dao = makePopulatedJdbcDao();
80 UserDetails user = dao.loadUserByUsername("peter");
81 assertTrue(!user.isEnabled());
82 }
83
84 public void testGettersSetters() {
85 JdbcDaoImpl dao = new JdbcDaoImpl();
86 dao.setAuthoritiesByUsernameQuery("SELECT * FROM FOO");
87 assertEquals("SELECT * FROM FOO", dao.getAuthoritiesByUsernameQuery());
88
89 dao.setUsersByUsernameQuery("SELECT USERS FROM FOO");
90 assertEquals("SELECT USERS FROM FOO", dao.getUsersByUsernameQuery());
91 }
92
93 public void testLookupFailsIfUserHasNoGrantedAuthorities()
94 throws Exception {
95 JdbcDaoImpl dao = makePopulatedJdbcDao();
96
97 try {
98 dao.loadUserByUsername("cooper");
99 fail("Should have thrown UsernameNotFoundException");
100 } catch (UsernameNotFoundException expected) {
101 assertEquals("User has no GrantedAuthority", expected.getMessage());
102 }
103 }
104
105 public void testLookupFailsWithWrongUsername() throws Exception {
106 JdbcDaoImpl dao = makePopulatedJdbcDao();
107
108 try {
109 dao.loadUserByUsername("UNKNOWN_USER");
110 fail("Should have thrown UsernameNotFoundException");
111 } catch (UsernameNotFoundException expected) {
112 assertTrue(true);
113 }
114 }
115
116 public void testLookupSuccessWithMixedCase() throws Exception {
117 JdbcDaoImpl dao = makePopulatedJdbcDao();
118 assertEquals("koala", dao.loadUserByUsername("MaRiSSA").getPassword());
119 assertEquals("wombat", dao.loadUserByUsername("ScOTt").getPassword());
120 }
121
122 public void testRolePrefixWorks() throws Exception {
123 JdbcDaoImpl dao = makePopulatedJdbcDaoWithRolePrefix();
124 assertEquals("ARBITRARY_PREFIX_", dao.getRolePrefix());
125
126 UserDetails user = dao.loadUserByUsername("marissa");
127 assertEquals("marissa", user.getUsername());
128 assertEquals("ARBITRARY_PREFIX_ROLE_TELLER",
129 user.getAuthorities()[1].getAuthority());
130 assertEquals("ARBITRARY_PREFIX_ROLE_SUPERVISOR",
131 user.getAuthorities()[0].getAuthority());
132 assertEquals(2, user.getAuthorities().length);
133 }
134
135 public void testStartupFailsIfDataSourceNotSet() throws Exception {
136 JdbcDaoImpl dao = new JdbcDaoImpl();
137
138 try {
139 dao.afterPropertiesSet();
140 fail("Should have thrown IllegalArgumentException");
141 } catch (IllegalArgumentException expected) {
142 assertTrue(true);
143 }
144 }
145
146 public void testStartupFailsIfUserMapSetToNull() throws Exception {
147 JdbcDaoImpl dao = new JdbcDaoImpl();
148
149 try {
150 dao.setDataSource(null);
151 dao.afterPropertiesSet();
152 fail("Should have thrown IllegalArgumentException");
153 } catch (IllegalArgumentException expected) {
154 assertTrue(true);
155 }
156 }
157
158 private JdbcDaoImpl makePopulatedJdbcDao() throws Exception {
159 JdbcDaoImpl dao = new JdbcDaoImpl();
160 dao.setDataSource(PopulatedDatabase.getDataSource());
161 dao.afterPropertiesSet();
162
163 return dao;
164 }
165
166 private JdbcDaoImpl makePopulatedJdbcDaoWithRolePrefix()
167 throws Exception {
168 JdbcDaoImpl dao = new JdbcDaoImpl();
169 dao.setDataSource(PopulatedDatabase.getDataSource());
170 dao.setRolePrefix("ARBITRARY_PREFIX_");
171 dao.afterPropertiesSet();
172
173 return dao;
174 }
175
176
177
178 private class MockMappingSqlQuery extends MappingSqlQuery {
179 protected Object mapRow(ResultSet arg0, int arg1)
180 throws SQLException {
181 return null;
182 }
183 }
184 }