package com.sixsq.slipstream.user;
/*
* +=================================================================+
* SlipStream Server (WAR)
* =====
* Copyright (C) 2013 SixSq Sarl (sixsq.com)
* =====
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* -=================================================================-
*/
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.restlet.data.Form;
import org.restlet.data.Parameter;
import com.sixsq.slipstream.exceptions.BadlyFormedElementException;
import com.sixsq.slipstream.exceptions.SlipStreamClientException;
import com.sixsq.slipstream.exceptions.ValidationException;
import com.sixsq.slipstream.persistence.ParameterCategory;
import com.sixsq.slipstream.persistence.ParameterType;
import com.sixsq.slipstream.persistence.User;
import com.sixsq.slipstream.persistence.UserParameter;
public class UserFormProcessorTest {
private static String prefix = "parameter--";
private static int count = 0;
private User user;
@Before
public void setup() throws ValidationException {
user = new User("test");
}
@After
public void tearDown() {
}
@Test
public void processParameters() throws BadlyFormedElementException,
SlipStreamClientException {
user = new User("test");
Form form = createForm();
UserParameter parameter = new UserParameter("p", "v", "d");
parameter.setCategory(ParameterCategory.General);
parameter.setMandatory(true);
parameter.setType(ParameterType.String);
fillForm(parameter, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
UserParameter processed = processor.getParametrized().getParameter("p");
assertThat(processed.getName(), is(parameter.getName()));
assertThat(processed.getValue(), is(parameter.getValue()));
assertThat(processed.getDescription(), is(parameter.getDescription()));
assertThat(processed.getCategory(), is(parameter.getCategory()));
assertThat(processed.isMandatory(), is(parameter.isMandatory()));
assertThat(processed.getType(), is(parameter.getType()));
}
private Form createForm() {
Form form = new Form();
form.set("name", "test", false);
return form;
}
@Test
public void multiplyDefinedParametersAreIgnored()
throws BadlyFormedElementException, SlipStreamClientException {
user = new User("test");
Form form = createForm();
UserParameter parameter = new UserParameter("p", "v", "d");
parameter.setCategory(ParameterCategory.General);
parameter.setMandatory(true);
parameter.setType(ParameterType.String);
fillForm(parameter, form);
fillForm(parameter, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
assertThat(processor.getParametrized().getParameters().size(), is(1));
}
@Test(expected = SlipStreamClientException.class)
public void missingName() throws BadlyFormedElementException,
SlipStreamClientException {
user = new User("test");
Form form = createForm();
UserParameter parameter = new UserParameter("p", "v", "d");
fillForm(parameter, form);
form.removeAll(prefix + count + "--name");
form.add(prefix + count + "--name", null);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
}
@Ignore
@Test(expected = SlipStreamClientException.class)
public void missingValueForInput() throws BadlyFormedElementException,
SlipStreamClientException {
ParameterCategory category = ParameterCategory.Input;
missingValue(category);
}
@Ignore
@Test(expected = SlipStreamClientException.class)
public void missingValueForOutput() throws BadlyFormedElementException,
SlipStreamClientException {
ParameterCategory category = ParameterCategory.Output;
missingValue(category);
}
private void missingValue(ParameterCategory category)
throws BadlyFormedElementException, SlipStreamClientException {
user = new User("test");
Form form = createForm();
UserParameter parameter = new UserParameter("p", null, "d");
parameter.setCategory(category);
fillForm(parameter, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
}
@Test(expected = IllegalArgumentException.class)
public void invalidType() throws BadlyFormedElementException,
SlipStreamClientException {
user = new User("test");
Form form = createForm();
UserParameter parameter = new UserParameter("p", "v", "d");
parameter.setCategory(ParameterCategory.General);
parameter.setMandatory(true);
fillForm(parameter, form);
count --;
Parameter invalid = createParameterType("invalid");
count ++;
form.removeAll(invalid.getName());
form.add(invalid);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
}
@Test
public void passwordSetFirstTimeWhenNull()
throws BadlyFormedElementException, SlipStreamClientException {
Form form = createForm();
UserParameter emptyPassword = createPasswordParameter();
emptyPassword.setValue(null);
fillForm(emptyPassword, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
assertNull(processor.getParametrized().getParameter("password")
.getValue());
}
@Test
public void passwordSetFirstTimeWhenEmpty()
throws BadlyFormedElementException, SlipStreamClientException {
Form form = createForm();
UserParameter emptyPassword = createPasswordParameter();
emptyPassword.setValue("");
fillForm(emptyPassword, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
assertThat(processor.getParametrized().getParameter("password")
.getValue(), is(""));
}
@Test
public void passwordNotOverwrittenWhenEmpty()
throws BadlyFormedElementException, SlipStreamClientException {
user = new User("test");
UserParameter password = createPasswordParameter();
user.setParameter(password);
Form form = createForm();
UserParameter emptyPassword = createPasswordParameter();
emptyPassword.setValue("");
fillForm(emptyPassword, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
assertThat(user.getParameter("password").getValue(),
is(password.getValue()));
}
@Test
public void passwordSetWhenNormalString()
throws BadlyFormedElementException, SlipStreamClientException {
user = new User("test");
UserParameter password = createPasswordParameter();
user.setParameter(password);
Form form = createForm();
UserParameter validPassword = createPasswordParameter();
password.setValue("1234");
validPassword.setValue(null);
fillForm(validPassword, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
assertThat(user.getParameter("password").getValue(), is("1234"));
}
private UserParameter createPasswordParameter() throws ValidationException {
UserParameter password = new UserParameter("password",
"default_password", "description");
password.setCategory(ParameterCategory.General);
password.setMandatory(true);
password.setType(ParameterType.Password);
return password;
}
@Test
public void normalPassword() throws BadlyFormedElementException,
SlipStreamClientException {
user = new User("test");
UserParameter password = createPasswordParameter();
user.setParameter(password);
Form form = createForm();
UserParameter emptyPassword = createPasswordParameter();
emptyPassword.setValue(null);
fillForm(emptyPassword, form);
UserFormProcessor processor = new UserFormProcessor(user);
processor.processForm(form);
assertThat(user.getParameter("password").getValue(),
is("default_password"));
}
public static void fillForm(UserParameter parameter, Form form) {
form.add(createParameterName(parameter.getName()));
form.add(createParameterValue(parameter.getValue()));
form.add(createParameterDescription(parameter.getDescription()));
form.add(createParameterCategory(parameter.getCategory()));
form.add(createParameterMandatory(parameter.isMandatory()));
form.add(createParameterType(parameter.getType()));
count ++;
}
@Test
public void randomPassword() throws ValidationException {
user = new User("randomPasswordUser");
user.randomizePassword();
assertThat(user.getHashedPassword(), is(not("0")));
}
private static Parameter createParameterName(String name) {
return createParameter(prefix + count + "--name", name);
}
private static Parameter createParameterValue(String value) {
return createParameter(prefix + count + "--value", value);
}
private static Parameter createParameterDescription(String description) {
return createParameter(prefix + count + "--description", description);
}
private static Parameter createParameterCategory(String category) {
return createParameter(prefix + count + "--category",
category.toString());
}
private static Parameter createParameterMandatory(boolean isMandatory) {
return createParameter(prefix + count + "--mandatory",
String.valueOf(isMandatory));
}
private static Parameter createParameterType(ParameterType type) {
return createParameterType(type.toString());
}
private static Parameter createParameterType(String type) {
return createParameter(prefix + count + "--type", type);
}
private static Parameter createParameter(String name, String value) {
return new Parameter(name, value);
}
}