/** * This file is part of Graylog. * * Graylog is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Graylog is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Graylog. If not, see <http://www.gnu.org/licenses/>. */ package org.graylog2.utilities; import com.google.common.collect.ImmutableMap; import org.graylog2.plugin.configuration.ConfigurationRequest; import org.graylog2.plugin.configuration.fields.AbstractConfigurationField; import org.graylog2.plugin.configuration.fields.BooleanField; import org.graylog2.plugin.configuration.fields.ConfigurationField; import org.graylog2.plugin.configuration.fields.DropdownField; import org.graylog2.plugin.configuration.fields.NumberField; import org.graylog2.plugin.configuration.fields.TextField; import org.graylog2.plugin.database.ValidationException; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.util.HashMap; import java.util.Map; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.data.MapEntry.entry; public class ConfigurationMapConverterTest { @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void testConvertValues() throws Exception { final ImmutableMap<String, String> dropdownChoices = ImmutableMap.of( "a", "1", "b", "2"); final ConfigurationRequest cr = new ConfigurationRequest(); cr.addField(new TextField("string", "string", "default", "")); cr.addField(new TextField("empty-string", "empty", "", "")); cr.addField(new TextField("null-string", "null", null, "")); cr.addField(new TextField("non-string", "non-string", null, "")); cr.addField(new NumberField("number", "number", 42, "")); cr.addField(new BooleanField("boolean-true", "true", false, "")); cr.addField(new BooleanField("boolean-false", "false", false, "")); cr.addField(new DropdownField("dropdown", "dropdown", "a", dropdownChoices, "", ConfigurationField.Optional.NOT_OPTIONAL)); cr.addField(new DropdownField("dropdown-empty", "dropdown-empty", "", dropdownChoices, "", ConfigurationField.Optional.NOT_OPTIONAL)); cr.addField(new DropdownField("dropdown-null", "dropdown-null", "", dropdownChoices, "", ConfigurationField.Optional.NOT_OPTIONAL)); final UUID uuid = UUID.randomUUID(); final Map<String, Object> data = new HashMap<>(); data.put("string", "foo"); data.put("empty-string", ""); data.put("null-string", null); data.put("non-string", uuid); data.put("number", "5"); data.put("boolean-true", "true"); data.put("boolean-false", "false"); data.put("dropdown", "a"); data.put("dropdown-empty", ""); data.put("dropdown-null", null); final Map<String, Object> config = ConfigurationMapConverter.convertValues(data, cr); assertThat(config).contains( entry("string", "foo"), entry("empty-string", ""), entry("null-string", ""), entry("non-string", uuid.toString()), entry("number", 5), entry("boolean-true", true), entry("boolean-false", false), entry("dropdown", "a"), entry("dropdown-empty", ""), entry("dropdown-null", "") ); } @Test public void convertValuesThrowsIllegalArgumentExceptionOnEmptyFieldDescription() throws Exception { thrown.expect(ValidationException.class); thrown.expectMessage("Unknown configuration field description for field \"string\""); final ConfigurationRequest cr = new ConfigurationRequest(); final Map<String, Object> data = new HashMap<>(); data.put("string", "foo"); ConfigurationMapConverter.convertValues(data, cr); } @Test public void convertValuesThrowsIllegalArgumentExceptionOnUnknwonType() throws Exception { thrown.expect(ValidationException.class); thrown.expectMessage("Unknown configuration field type \"dummy\""); final ConfigurationRequest cr = new ConfigurationRequest(); cr.addField(new DummyField()); final Map<String, Object> data = new HashMap<>(); data.put("dummy", "foo"); ConfigurationMapConverter.convertValues(data, cr); } public static class DummyField extends AbstractConfigurationField { public DummyField() { super("dummy", "dummy", "humanName", "description", Optional.NOT_OPTIONAL); } @Override public Object getDefaultValue() { return ""; } @Override public void setDefaultValue(Object defaultValue) { } } }