/**
* Copyright (c) 2009--2013 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.manager.user.test;
import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.conf.UserDefaults;
import com.redhat.rhn.common.validator.ValidatorError;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.domain.user.UserFactory;
import com.redhat.rhn.frontend.taglibs.list.decorators.PageSizeDecorator;
import com.redhat.rhn.manager.user.CreateUserCommand;
import com.redhat.rhn.testing.RhnBaseTestCase;
import com.redhat.rhn.testing.TestUtils;
import com.redhat.rhn.testing.UserTestUtils;
public class CreateUserCommandTest extends RhnBaseTestCase {
private CreateUserCommand command;
public void setUp() throws Exception {
super.setUp();
command = new CreateUserCommand();
assertNotNull(command.getUser());
}
public void testLongNames() {
int maxLogin = UserDefaults.get().getMaxUserLength();
int maxPassword = UserDefaults.get().getMaxPasswordLength();
int emailLength = UserDefaults.get().getMaxEmailLength();
Config.get().setString(UserDefaults.MAX_USER_LENGTH, String.valueOf(5));
Config.get().setString(UserDefaults.MAX_PASSWORD_LENGTH, String.valueOf(5));
Config.get().setString(UserDefaults.MAX_EMAIL_LENGTH, String.valueOf(5));
String invalidLogin = TestUtils.randomString();
String invalidPassword = "password";
String invalidEmail = "foobar@foobar.com";
String validPrefix = "Sr.";
//Test invalid values
command.setLogin(invalidLogin);
command.setEmail(invalidEmail);
command.setPassword(invalidPassword);
command.setPrefix(validPrefix);
command.setFirstNames("testuser");
command.setLastName("testuser");
//We should get 4 errors (login, email, password, prefix)
Object[] errors = command.validate();
Config.get().setString(UserDefaults.MAX_USER_LENGTH,
String.valueOf(maxLogin));
Config.get().setString(UserDefaults.MAX_PASSWORD_LENGTH,
String.valueOf(maxPassword));
Config.get().setString(UserDefaults.MAX_EMAIL_LENGTH,
String.valueOf(emailLength));
assertEquals(3, errors.length);
}
public void testValidate() {
String invalidLogin = "";
String validLogin = TestUtils.randomString();
String invalidPassword = "p";
String validPassword = "password";
String invalidEmail = "foobar";
String validEmail = "foobar@foobar.com";
String invalidPrefix = "Foo.";
String validPrefix = "Sr.";
//Test invalid values
command.setLogin(invalidLogin);
command.setEmail(invalidEmail);
command.setPassword(invalidPassword);
command.setPrefix(invalidPrefix);
command.setFirstNames("testuser");
command.setLastName("testuser");
//We should get 4 errors (login, email, password, prefix)
Object[] errors = command.validate();
assertEquals(4, errors.length);
//Test valid values
command.setLogin(validLogin);
command.setEmail(validEmail);
command.setPassword(validPassword);
command.setPrefix(validPrefix);
errors = command.validate();
assertEquals(0, errors.length);
}
public void testStore() {
Org org = UserTestUtils.findNewOrg("testorg");
String login = TestUtils.randomString();
command.setLogin(login);
command.setPassword("password");
command.setEmail("rhn-java-unit-tests@redhat.com");
command.setPrefix("Dr.");
command.setFirstNames("Chuck Norris");
command.setLastName("Texas Ranger");
command.setOrg(org);
command.setCompany("Test company");
Object[] errors = command.validate();
assertEquals(0, errors.length);
command.storeNewUser();
Long uid = command.getUser().getId();
assertNotNull(uid);
User result = UserFactory.lookupById(uid);
assertEquals(login, result.getLogin());
assertEquals(PageSizeDecorator.getDefaultPageSize(), result.getPageSize());
}
public void testUsernameValidation() {
// setup stuff required for command
command.setEmail("validemail@mycompany.com");
command.setFirstNames("testuser");
command.setLastName("testuser");
command.setPassword("validPassword");
command.setPrefix("Ms.");
invalidUsername("foo&user", command);
invalidUsername("joe+page", command);
invalidUsername("joe user", command);
invalidUsername("10%users", command);
invalidUsername("joe'suser", command);
invalidUsername("`eval`", command);
invalidUsername("joe=page", command);
invalidUsername("foo#user", command);
invalidUsername("joe\"user", command);
invalidUsername("機能拡張を", command);
invalidUsername("shughes login", command);
invalidUsername("shughes%login", command);
invalidUsername(" shughes", command);
invalidUsername("a p&i+u%s'e r1150586011843", command); // bug195807
validUsername("john.cusack@foobar.com", command);
validUsername("a$user", command);
validUsername("!@$^*()-_{}[]|\\:;?", command);
validUsername("/usr/bin/ls", command);
validUsername("shughes_login", command);
validUsername("shughes@redhat.com", command);
validUsername("/shughes_login", command);
validUsername("/\\/\\ark", command);
}
private void invalidUsername(String username, CreateUserCommand cmd) {
// ok now validate
cmd.setLogin(username);
Object[] errors = cmd.validate();
assertNotNull(errors);
assertEquals(username + " caused failure", 1, errors.length);
}
private void validUsername(String username, CreateUserCommand cmd) {
// ok now validate
cmd.setLogin(username);
Object[] errors = cmd.validate();
assertNotNull(errors);
assertEquals(username + " caused failure", 0, errors.length);
}
public void testValidatePasswordHasTabCharacter() throws Exception {
command.setLogin("bilbo");
command.setEmail("bilbo@baggins.com");
command.setPassword("aaaaa\tb");
command.setPrefix("Hr.");
ValidatorError [] errors = command.validate();
assertEquals(1, errors.length);
}
public void testValidatePasswordHasNewlineCharacter() throws Exception {
command.setLogin("bilbo");
command.setEmail("bilbo@baggins.com");
command.setPassword("aaaaa\nb");
command.setPrefix("Hr.");
ValidatorError [] errors = command.validate();
assertEquals(1, errors.length);
}
}