📄 jdbcuserdatabasetest.java
字号:
package com.ecyrd.jspwiki.auth.user;import java.io.File;import java.io.Serializable;import java.security.Principal;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import java.sql.Timestamp;import java.util.Map;import java.util.Properties;import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;import junit.framework.TestCase;import com.ecyrd.jspwiki.TestJDBCDataSource;import com.ecyrd.jspwiki.TestJNDIContext;import com.ecyrd.jspwiki.auth.NoSuchPrincipalException;import com.ecyrd.jspwiki.auth.WikiSecurityException;import com.ecyrd.jspwiki.util.CryptoUtil;/** * @author Andrew Jaquith */public class JDBCUserDatabaseTest extends TestCase{ private JDBCUserDatabase m_db = null; private static final String TEST_ATTRIBUTES = "rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAACdAAKYXR0cmlidXRlMXQAEXNvbWUgcmFuZG9tIHZhbHVldAAKYXR0cmlidXRlMnQADWFub3RoZXIgdmFsdWV4"; private static final String INSERT_JANNE = "INSERT INTO users (" + JDBCUserDatabase.DEFAULT_DB_UID + "," + JDBCUserDatabase.DEFAULT_DB_EMAIL + "," + JDBCUserDatabase.DEFAULT_DB_FULL_NAME + "," + JDBCUserDatabase.DEFAULT_DB_LOGIN_NAME + "," + JDBCUserDatabase.DEFAULT_DB_PASSWORD + "," + JDBCUserDatabase.DEFAULT_DB_WIKI_NAME + "," + JDBCUserDatabase.DEFAULT_DB_CREATED + "," + JDBCUserDatabase.DEFAULT_DB_ATTRIBUTES + ") VALUES (" + "'-7739839977499061014'," + "'janne@ecyrd.com'," + "'Janne Jalkanen'," + "'janne'," + "'{SHA}457b08e825da547c3b77fbc1ff906a1d00a7daee'," + "'JanneJalkanen'," + "'" + new Timestamp( new Timestamp( System.currentTimeMillis() ).getTime() ).toString() + "'," + "'" + TEST_ATTRIBUTES +"'" + ");"; private static final String INSERT_USER = "INSERT INTO users (" + JDBCUserDatabase.DEFAULT_DB_UID + "," + JDBCUserDatabase.DEFAULT_DB_EMAIL + "," + JDBCUserDatabase.DEFAULT_DB_LOGIN_NAME + "," + JDBCUserDatabase.DEFAULT_DB_PASSWORD + "," + JDBCUserDatabase.DEFAULT_DB_CREATED + ") VALUES (" + "'-8629747547991531672'," + "'user@example.com'," + "'user'," + "'{SHA}5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'," + "'" + new Timestamp( new Timestamp( System.currentTimeMillis() ).getTime() ).toString() + "'" + ");"; /** * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); // Set up the mock JNDI initial context TestJNDIContext.initialize(); Context initCtx = new InitialContext(); initCtx.bind( "java:comp/env", new TestJNDIContext() ); Context ctx = (Context) initCtx.lookup( "java:comp/env" ); DataSource ds = new TestJDBCDataSource( new File( "build.properties" ) ); ctx.bind( JDBCUserDatabase.DEFAULT_DB_JNDI_NAME, ds ); // Get the JDBC connection and init tables try { Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); String sql; sql = "DELETE FROM " + JDBCUserDatabase.DEFAULT_DB_TABLE + ";"; stmt.executeUpdate( sql ); // Create a new test user 'janne' stmt.executeUpdate( INSERT_JANNE ); // Create a new test user 'user' stmt.executeUpdate( INSERT_USER ); stmt.close(); conn.close(); // Initialize the user database m_db = new JDBCUserDatabase(); m_db.initialize( null, new Properties() ); } catch( SQLException e ) { System.err.println("Looks like your database could not be connected to - "+ "please make sure that you have started your database "+ "(e.g. by running ant hsql-start)"); throw (SQLException) e.fillInStackTrace(); } } public void testDeleteByLoginName() throws WikiSecurityException { // First, count the number of users in the db now. int oldUserCount = m_db.getWikiNames().length; // Create a new user with random name String loginName = "TestUser" + String.valueOf( System.currentTimeMillis() ); UserProfile profile = m_db.newProfile(); profile.setEmail("testuser@testville.com"); profile.setLoginName( loginName ); profile.setFullname( "FullName"+loginName ); profile.setPassword("password"); m_db.save(profile); // Make sure the profile saved successfully profile = m_db.findByLoginName( loginName ); assertEquals( loginName, profile.getLoginName() ); assertEquals( oldUserCount+1, m_db.getWikiNames().length ); // Now delete the profile; should be back to old count m_db.deleteByLoginName( loginName ); assertEquals( oldUserCount, m_db.getWikiNames().length ); } public void testAttributes() throws Exception { UserProfile profile = m_db.findByEmail( "janne@ecyrd.com" ); Map<String,Serializable> attributes = profile.getAttributes(); assertEquals( 2, attributes.size() ); assertTrue( attributes.containsKey( "attribute1" ) ); assertTrue( attributes.containsKey( "attribute2" ) ); assertEquals( "some random value", attributes.get( "attribute1" ) ); assertEquals( "another value", attributes.get( "attribute2" ) ); // Change attribute 1, and add another one attributes.put( "attribute1", "replacement value" ); attributes.put( "attribute the third", "some value" ); m_db.save( profile ); // Retrieve the profile again and make sure our values got saved profile = m_db.findByEmail( "janne@ecyrd.com" ); attributes = profile.getAttributes(); assertEquals( 3, attributes.size() ); assertTrue( attributes.containsKey( "attribute1" ) ); assertTrue( attributes.containsKey( "attribute2" ) ); assertTrue( attributes.containsKey( "attribute the third" ) ); assertEquals( "replacement value", attributes.get( "attribute1" ) ); assertEquals( "another value", attributes.get( "attribute2" ) ); assertEquals( "some value", attributes.get( "attribute the third" ) ); // Restore the original attributes and re-save attributes.put( "attribute1", "some random value" ); attributes.remove( "attribute the third" ); m_db.save( profile ); } public void testFindByEmail() { try { UserProfile profile = m_db.findByEmail( "janne@ecyrd.com" ); assertEquals( "-7739839977499061014", profile.getUid() ); assertEquals( "janne", profile.getLoginName() ); assertEquals( "Janne Jalkanen", profile.getFullname() ); assertEquals( "JanneJalkanen", profile.getWikiName() ); assertEquals( "{SHA}457b08e825da547c3b77fbc1ff906a1d00a7daee", profile.getPassword() ); assertEquals( "janne@ecyrd.com", profile.getEmail() ); assertNotNull( profile.getCreated() ); assertNull( profile.getLastModified() ); } catch( NoSuchPrincipalException e ) { assertTrue( false ); } try { m_db.findByEmail( "foo@bar.org" ); // We should never get here assertTrue( false ); } catch( NoSuchPrincipalException e ) { assertTrue( true ); } } public void testFindByFullName() { try { UserProfile profile = m_db.findByFullName( "Janne Jalkanen" ); assertEquals( "-7739839977499061014", profile.getUid() ); assertEquals( "janne", profile.getLoginName() ); assertEquals( "Janne Jalkanen", profile.getFullname() ); assertEquals( "JanneJalkanen", profile.getWikiName() ); assertEquals( "{SHA}457b08e825da547c3b77fbc1ff906a1d00a7daee", profile.getPassword() ); assertEquals( "janne@ecyrd.com", profile.getEmail() ); assertNotNull( profile.getCreated() ); assertNull( profile.getLastModified() ); } catch( NoSuchPrincipalException e ) { assertTrue( false ); } try { m_db.findByEmail( "foo@bar.org" ); // We should never get here assertTrue( false ); } catch( NoSuchPrincipalException e ) { assertTrue( true );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -