/* * RapidBeans Framework: DialogLoginTest.java * * Copyright Martin Bluemel, 2008 * * 13.11.2007 */ package org.rapidbeans.presentation; import java.io.File; import java.util.ArrayList; import java.util.List; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.rapidbeans.core.basic.RapidBean; import org.rapidbeans.core.common.RapidBeansLocale; import org.rapidbeans.core.util.FileHelper; import org.rapidbeans.datasource.Document; import org.rapidbeans.presentation.config.ConfigApplication; import org.rapidbeans.presentation.config.ConfigAuthorization; import org.rapidbeans.security.User; import org.rapidbeans.security.UserAuthnData; /** * @author Martin Bl�mel */ public class DialogLoginTest { @After public void tearDown() { ApplicationManager.resetApplication(); // reset testsettings.xml FileHelper.copyFile(new File("testdata/testsettings_backup.xml"), new File("testdata/testsettings.xml"), true); } /** * Test login successfully. */ @Test public void testLoginSuccessfully() { final ApplicationMock client = new ApplicationMock(null); ApplicationManager.start(client); String[][] loginData = { { "herbert", "s2sh!4all" }, }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); RapidBean user = DialogLogin.login(1, dialogMock); Assert.assertEquals("herbert", user.getPropValue("accountname")); Assert.assertEquals(0, client.errorMessages.size()); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } /** * Test login successfully. */ @Test public void testLoginSuccessfullyPwdHash() { final ApplicationMock client = new ApplicationMock("SHA-1"); ApplicationManager.start(client); String[][] loginData = { { "herbert", "s2sh!4all" }, }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); RapidBean user = DialogLogin.login(1, dialogMock); Assert.assertEquals("herbert", user.getPropValue("accountname")); Assert.assertEquals(0, client.errorMessages.size()); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } /** * Test login successfully. */ @Test public void testLoginSuccessfullyPwdHash512() { final ApplicationMock client = new ApplicationMock("SHA-512"); ApplicationManager.start(client); String[][] loginData = { { "herbert", "s2sh!4all" }, }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); RapidBean user = DialogLogin.login(1, dialogMock); Assert.assertEquals("herbert", user.getPropValue("accountname")); Assert.assertEquals(0, client.errorMessages.size()); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } /** * Test login successfully without password. */ @Test public void testLoginSuccessfullyWithoutPwd() { final ApplicationMock client = new ApplicationMock(null); ApplicationManager.start(client); String[][] loginData = { { "herbert", "" }, }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); User herbert = (User) client.getAuthnDoc().findBean("org.rapidbeans.security.User", "herbert"); herbert.setPwdSec(null, null); RapidBean user = DialogLogin.login(1, dialogMock); Assert.assertEquals("herbert", user.getPropValue("accountname")); Assert.assertEquals(null, user.getPropValue("pwd")); Assert.assertEquals(0, client.errorMessages.size()); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } /** * Test login failed first time. */ @Test public void testLoginFailed1() { final ApplicationMock client = new ApplicationMock(null); ApplicationManager.start(client); String[][] loginData = { { "herbert", "xxx" }, }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); RapidBean user = DialogLogin.login(1, dialogMock); Assert.assertNull(user); Assert.assertEquals(1, client.errorMessages.size()); Assert.assertEquals("login.failed.shut", client.errorMessages.get(0)); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } /** * Test login failed after 5 times. */ @Test public void testLoginFailed5() { ApplicationMock client = new ApplicationMock(null); ApplicationManager.start(client); String[][] loginData = { { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "s2sh!4all" } }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); RapidBean user = DialogLogin.login(5, dialogMock); Assert.assertNull(user); Assert.assertEquals(5, client.errorMessages.size()); Assert.assertEquals("login.failed", client.errorMessages.get(0)); Assert.assertEquals("login.failed", client.errorMessages.get(1)); Assert.assertEquals("login.failed", client.errorMessages.get(2)); Assert.assertEquals("login.failed.uno", client.errorMessages.get(3)); Assert.assertEquals("login.failed.shut", client.errorMessages.get(4)); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } /** * Test login success after 5 times. */ @Test public void testLoginSuccessWithLastOf5Tries() { ApplicationMock client = new ApplicationMock(null); ApplicationManager.start(client); String[][] loginData = { { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "xxx" }, { "herbert", "s2sh!4all" }, }; LoginDialogMock dialogMock = new LoginDialogMock(loginData, true); RapidBean user = DialogLogin.login(5, dialogMock); Assert.assertEquals("herbert", user.getPropValue("accountname")); Assert.assertEquals(4, client.errorMessages.size()); Assert.assertEquals("login.failed", client.errorMessages.get(0)); Assert.assertEquals("login.failed", client.errorMessages.get(1)); Assert.assertEquals("login.failed", client.errorMessages.get(2)); Assert.assertEquals("login.failed.uno", client.errorMessages.get(3)); Assert.assertEquals(0, client.infoMessages.size()); Assert.assertEquals(0, client.yesNoMessages.size()); } private class ApplicationMock extends Application { private String pwdHashAlg = null; public ApplicationMock(final String pwdHalg) { this.pwdHashAlg = pwdHalg; this.setSettingsDoc(new Document(new File("testdata/testsettings.xml"))); } @Override public boolean getTestMode() { return true; } @Override public void init() { ConfigAuthorization configAuthn = new ConfigAuthorization(); configAuthn.setPwdhashalgorithm(this.pwdHashAlg); this.configuration.setAuthorization(configAuthn); this.setCurrentLocale(new LocaleMock()); } private ConfigApplication configuration = new ConfigApplication(); @Override public ConfigApplication getConfiguration() { return this.configuration; } private Document authnDoc = null; @Override public Document getAuthnDoc() { if (this.authnDoc == null) { User user = new User("herbert"); user.setPwdSec("s2sh!4all", pwdHashAlg); UserAuthnData authn = new UserAuthnData(); authn.addUser(user); this.authnDoc = new Document("authn", authn); } return this.authnDoc; } public List<String> infoMessages = new ArrayList<String>(); @Override public void messageInfo(final String message, final String title) { this.infoMessages.add(message); } public List<String> errorMessages = new ArrayList<String>(); @Override public void messageError(final String message, final String title) { this.errorMessages.add(message); } public List<String> yesNoMessages = new ArrayList<String>(); @Override public boolean messageYesNo(final String message, final String title) { this.yesNoMessages.add(message); return true; } } private class LoginDialogMock extends DialogLogin { private String[][] loginData = null; private int loginDataIndex = 0; private boolean ok; public LoginDialogMock(final String[][] ld, final boolean o) { this.loginData = ld; this.ok = o; } public boolean showLogin() { return this.ok; } public void dispose() { } // protected void setOk(boolean ok) { // this.ok = ok; // } protected String getLoginname() { return this.loginData[loginDataIndex][0]; } protected void setLoginname(final String l) { } protected String getPwd() { return this.loginData[loginDataIndex++][1]; } protected void setPwd(final String p) { } protected boolean getSavecred() { return false; } protected boolean getEncryptcred() { return false; } } private class LocaleMock extends RapidBeansLocale { @Override public String getStringGui(final String key) { return key; } @Override public String getStringMessage(final String key) { return key; } @Override public String getStringMessage(final String key, final String title) { return key; } } }