package org.simplejavamail.util; import org.junit.Before; import org.junit.Test; import org.simplejavamail.mailer.config.TransportStrategy; import org.simplejavamail.util.ConfigLoader.Property; import testutil.ConfigLoaderTestHelper; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; import static org.simplejavamail.mailer.config.TransportStrategy.SMTP_SSL; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_BCC_ADDRESS; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_BCC_NAME; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_CC_ADDRESS; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_CC_NAME; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_FROM_ADDRESS; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_FROM_NAME; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_REPLYTO_ADDRESS; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_REPLYTO_NAME; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_SUBJECT; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_TO_ADDRESS; import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_TO_NAME; import static org.simplejavamail.util.ConfigLoader.Property.JAVAXMAIL_DEBUG; import static org.simplejavamail.util.ConfigLoader.Property.PROXY_HOST; import static org.simplejavamail.util.ConfigLoader.Property.PROXY_PASSWORD; import static org.simplejavamail.util.ConfigLoader.Property.PROXY_PORT; import static org.simplejavamail.util.ConfigLoader.Property.PROXY_SOCKS5BRIDGE_PORT; import static org.simplejavamail.util.ConfigLoader.Property.PROXY_USERNAME; import static org.simplejavamail.util.ConfigLoader.Property.SMTP_HOST; import static org.simplejavamail.util.ConfigLoader.Property.SMTP_PASSWORD; import static org.simplejavamail.util.ConfigLoader.Property.SMTP_PORT; import static org.simplejavamail.util.ConfigLoader.Property.SMTP_USERNAME; import static org.simplejavamail.util.ConfigLoader.Property.TRANSPORT_STRATEGY; public class ConfigLoaderTest { @Before public void restoreOriginalStaticProperties() { ConfigLoader.loadProperties("simplejavamail.properties", false); System.getProperties().clear(); } @Test public void valueOrProperty() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, "preconfiguredValue"); ConfigLoaderTestHelper.setResolvedProperties(properties); assertThat(ConfigLoader.valueOrProperty("value", TRANSPORT_STRATEGY)).isEqualTo("value"); assertThat(ConfigLoader.valueOrProperty(null, TRANSPORT_STRATEGY)).isEqualTo("preconfiguredValue"); assertThat(ConfigLoader.valueOrProperty(null, SMTP_HOST)).isNull(); } @Test public void valueOrPropertyDefaultValue() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, "preconfiguredValue"); ConfigLoaderTestHelper.setResolvedProperties(properties); assertThat(ConfigLoader.valueOrProperty("value", TRANSPORT_STRATEGY, "backup")).isEqualTo("value"); assertThat(ConfigLoader.valueOrProperty(null, TRANSPORT_STRATEGY, "backup")).isEqualTo("preconfiguredValue"); assertThat(ConfigLoader.valueOrProperty(null, SMTP_HOST, "backup")).isEqualTo("backup"); assertThat(ConfigLoader.valueOrProperty(null, SMTP_HOST, null)).isNull(); } @Test public void valueOrPropertyEmptyDefaultValue() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, "default"); ConfigLoaderTestHelper.setResolvedProperties(properties); assertThat(ConfigLoader.valueOrProperty("value", TRANSPORT_STRATEGY, "backup")).isEqualTo("value"); assertThat(ConfigLoader.valueOrProperty(null, TRANSPORT_STRATEGY, "backup")).isEqualTo("default"); assertThat(ConfigLoader.valueOrProperty("", TRANSPORT_STRATEGY, "backup")).isEqualTo("default"); assertThat(ConfigLoader.valueOrProperty(null, TRANSPORT_STRATEGY, null)).isEqualTo("default"); } @Test public void valueOrPropertyDefaultValueEmptyDefault() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, ""); ConfigLoaderTestHelper.setResolvedProperties(properties); assertThat(ConfigLoader.valueOrProperty("value", TRANSPORT_STRATEGY, "backup")).isEqualTo("value"); assertThat(ConfigLoader.valueOrProperty(null, TRANSPORT_STRATEGY, "backup")).isEqualTo("backup"); assertThat(ConfigLoader.valueOrProperty("", TRANSPORT_STRATEGY, "backup")).isEqualTo("backup"); assertThat(ConfigLoader.valueOrProperty(null, TRANSPORT_STRATEGY, null)).isNull(); } @Test public void overridefromSystemVariables() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, "preconfiguredValue"); assertThat(ConfigLoader.valueOrProperty("value", PROXY_USERNAME, "backup")).isEqualTo("value"); assertThat(ConfigLoader.valueOrProperty(null, PROXY_USERNAME, "backup")).isEqualTo("username proxy"); // from config file // cannot be tested: // System.getenv().put("simplejavamail.proxy.username", "override1"); // restoreOriginalStaticProperties(); // assertThat(ConfigLoader.valueOrProperty(null, PROXY_USERNAME, "backup")).isEqualTo("override1"); System.out.println("simplejavamail.proxy.username" + ": " + System.getProperty("simplejavamail.proxy.username")); System.setProperty("simplejavamail.proxy.username", "override2"); System.out.println("simplejavamail.proxy.username" + ": " + System.getProperty("simplejavamail.proxy.username")); restoreOriginalStaticProperties(); assertThat(ConfigLoader.valueOrProperty(null, PROXY_USERNAME, "backup")).isEqualTo("override2"); } @Test public void hasProperty() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, "preconfiguredValue1"); properties.put(DEFAULT_FROM_ADDRESS, "preconfiguredValue2"); properties.put(DEFAULT_BCC_NAME, null); ConfigLoaderTestHelper.setResolvedProperties(properties); assertThat(ConfigLoader.hasProperty(TRANSPORT_STRATEGY)).isTrue(); assertThat(ConfigLoader.hasProperty(DEFAULT_FROM_ADDRESS)).isTrue(); assertThat(ConfigLoader.hasProperty(DEFAULT_BCC_NAME)).isFalse(); assertThat(ConfigLoader.hasProperty(PROXY_HOST)).isFalse(); } @Test public void getProperty() throws Exception { Map<Property, Object> properties = new HashMap<>(); properties.put(TRANSPORT_STRATEGY, "preconfiguredValue1"); properties.put(DEFAULT_FROM_ADDRESS, "preconfiguredValue2"); properties.put(DEFAULT_BCC_NAME, null); ConfigLoaderTestHelper.setResolvedProperties(properties); assertThat(ConfigLoader.getProperty(TRANSPORT_STRATEGY)).isEqualTo("preconfiguredValue1"); assertThat(ConfigLoader.getProperty(DEFAULT_FROM_ADDRESS)).isEqualTo("preconfiguredValue2"); assertThat(ConfigLoader.getProperty(DEFAULT_BCC_NAME)).isNull(); assertThat(ConfigLoader.getProperty(PROXY_HOST)).isNull(); } @Test public void parsePropertyValue() { assertThat(ConfigLoader.parsePropertyValue("simple string value")).isEqualTo("simple string value"); assertThat(ConfigLoader.parsePropertyValue("12345")).isEqualTo(12345); assertThat(ConfigLoader.parsePropertyValue("123d45")).isEqualTo("123d45"); assertThat(ConfigLoader.parsePropertyValue("0")).isEqualTo(false); assertThat(ConfigLoader.parsePropertyValue("false")).isEqualTo(false); assertThat(ConfigLoader.parsePropertyValue("no")).isEqualTo(false); assertThat(ConfigLoader.parsePropertyValue("1")).isEqualTo(true); assertThat(ConfigLoader.parsePropertyValue("true")).isEqualTo(true); assertThat(ConfigLoader.parsePropertyValue("yes")).isEqualTo(true); assertThat(ConfigLoader.parsePropertyValue("yesno")).isEqualTo("yesno"); assertThat(ConfigLoader.parsePropertyValue("SMTP_PLAIN")).isEqualTo(TransportStrategy.SMTP_PLAIN); assertThat(ConfigLoader.parsePropertyValue("SMTP_TLS")).isEqualTo(TransportStrategy.SMTP_TLS); } @Test public void loadPropertiesFromFileClassPath() throws Exception { ConfigLoader.loadProperties("simplejavamail.properties", false); assertThat(ConfigLoader.getProperty(JAVAXMAIL_DEBUG)).isEqualTo(true); assertThat(ConfigLoader.getProperty(TRANSPORT_STRATEGY)).isSameAs(SMTP_SSL); assertThat(ConfigLoader.getProperty(SMTP_HOST)).isEqualTo("smtp.default.com"); assertThat(ConfigLoader.getProperty(SMTP_PORT)).isEqualTo(25); assertThat(ConfigLoader.getProperty(SMTP_USERNAME)).isEqualTo("username"); assertThat(ConfigLoader.getProperty(SMTP_PASSWORD)).isEqualTo("password"); assertThat(ConfigLoader.getProperty(PROXY_HOST)).isEqualTo("proxy.default.com"); assertThat(ConfigLoader.getProperty(PROXY_PORT)).isEqualTo(1080); assertThat(ConfigLoader.getProperty(PROXY_USERNAME)).isEqualTo("username proxy"); assertThat(ConfigLoader.getProperty(PROXY_PASSWORD)).isEqualTo("password proxy"); assertThat(ConfigLoader.getProperty(PROXY_SOCKS5BRIDGE_PORT)).isEqualTo(1081); assertThat(ConfigLoader.getProperty(DEFAULT_FROM_NAME)).isEqualTo("From Default"); assertThat(ConfigLoader.getProperty(DEFAULT_FROM_ADDRESS)).isEqualTo("from@default.com"); assertThat(ConfigLoader.getProperty(DEFAULT_REPLYTO_NAME)).isEqualTo("Reply-To Default"); assertThat(ConfigLoader.getProperty(DEFAULT_REPLYTO_ADDRESS)).isEqualTo("reply-to@default.com"); assertThat(ConfigLoader.getProperty(DEFAULT_TO_NAME)).isEqualTo("To Default"); assertThat(ConfigLoader.getProperty(DEFAULT_TO_ADDRESS)).isEqualTo("to@default.com"); assertThat(ConfigLoader.getProperty(DEFAULT_CC_NAME)).isEqualTo("CC Default"); assertThat(ConfigLoader.getProperty(DEFAULT_CC_ADDRESS)).isEqualTo("cc@default.com"); assertThat(ConfigLoader.getProperty(DEFAULT_BCC_NAME)).isEqualTo("BCC Default"); assertThat(ConfigLoader.getProperty(DEFAULT_BCC_ADDRESS)).isEqualTo("bcc@default.com"); assertThat(ConfigLoader.getProperty(DEFAULT_SUBJECT)).isEqualTo("Default Subject"); } @Test public void loadPropertiesAddingMode() throws Exception { String s1 = "simplejavamail.javaxmail.debug=true\n" + "simplejavamail.transportstrategy=SMTP_SSL"; String s2 = "simplejavamail.defaults.to.name=To Default\n" + "simplejavamail.defaults.to.address=to@default.com"; ConfigLoader.loadProperties(new ByteArrayInputStream(s1.getBytes()), false); ConfigLoader.loadProperties(new ByteArrayInputStream(s2.getBytes()), true); // some checks from the config file assertThat(ConfigLoader.getProperty(JAVAXMAIL_DEBUG)).isEqualTo(true); assertThat(ConfigLoader.getProperty(TRANSPORT_STRATEGY)).isEqualTo(TransportStrategy.SMTP_SSL); // now check if the extra properties were added assertThat(ConfigLoader.getProperty(DEFAULT_TO_NAME)).isEqualTo("To Default"); assertThat(ConfigLoader.getProperty(DEFAULT_TO_ADDRESS)).isEqualTo("to@default.com"); } @Test public void loadPropertiesFromInputStream() throws IOException { String s = "simplejavamail.javaxmail.debug=true\n" + "simplejavamail.transportstrategy=SMTP_SSL\n" + "simplejavamail.smtp.host=smtp.default.com\n" + "simplejavamail.smtp.port=25\n" + "simplejavamail.smtp.username=username\n" + "simplejavamail.smtp.password=password\n"; ConfigLoader.loadProperties(new ByteArrayInputStream(s.getBytes()), false); assertThat(ConfigLoader.getProperty(JAVAXMAIL_DEBUG)).isEqualTo(true); assertThat(ConfigLoader.getProperty(TRANSPORT_STRATEGY)).isSameAs(SMTP_SSL); assertThat(ConfigLoader.getProperty(SMTP_HOST)).isEqualTo("smtp.default.com"); assertThat(ConfigLoader.getProperty(SMTP_PORT)).isEqualTo(25); assertThat(ConfigLoader.getProperty(SMTP_USERNAME)).isEqualTo("username"); assertThat(ConfigLoader.getProperty(SMTP_PASSWORD)).isEqualTo("password"); } @Test public void loadPropertiesFromProperties() throws IOException { Properties source = new Properties(); source.put("simplejavamail.javaxmail.debug", "true"); source.put("simplejavamail.transportstrategy", "SMTP_SSL"); source.put("simplejavamail.smtp.host", "smtp.default.com"); source.put("simplejavamail.smtp.port", "25"); source.put("simplejavamail.smtp.username", "username"); source.put("simplejavamail.smtp.password", "password"); ConfigLoader.loadProperties(source, false); assertThat(ConfigLoader.getProperty(JAVAXMAIL_DEBUG)).isEqualTo(true); assertThat(ConfigLoader.getProperty(TRANSPORT_STRATEGY)).isSameAs(SMTP_SSL); assertThat(ConfigLoader.getProperty(SMTP_HOST)).isEqualTo("smtp.default.com"); assertThat(ConfigLoader.getProperty(SMTP_PORT)).isEqualTo(25); assertThat(ConfigLoader.getProperty(SMTP_USERNAME)).isEqualTo("username"); assertThat(ConfigLoader.getProperty(SMTP_PASSWORD)).isEqualTo("password"); } @Test public void loadPropertiesFromObjectProperties() throws IOException { Properties source = new Properties(); source.put("simplejavamail.javaxmail.debug", true); source.put("simplejavamail.transportstrategy", TransportStrategy.SMTP_SSL); source.put("simplejavamail.smtp.host", "smtp.default.com"); source.put("simplejavamail.smtp.port", 25); source.put("simplejavamail.smtp.username", "username"); source.put("simplejavamail.smtp.password", "password"); ConfigLoader.loadProperties(source, false); assertThat(ConfigLoader.getProperty(JAVAXMAIL_DEBUG)).isEqualTo(true); assertThat(ConfigLoader.getProperty(TRANSPORT_STRATEGY)).isSameAs(SMTP_SSL); assertThat(ConfigLoader.getProperty(SMTP_HOST)).isEqualTo("smtp.default.com"); assertThat(ConfigLoader.getProperty(SMTP_PORT)).isEqualTo(25); assertThat(ConfigLoader.getProperty(SMTP_USERNAME)).isEqualTo("username"); assertThat(ConfigLoader.getProperty(SMTP_PASSWORD)).isEqualTo("password"); } @Test public void loadPropertiesFileNotAvailable() { ConfigLoader.loadProperties("non-existent.properties", false); // success: no error occurred while config file was missing } @Test(expected = IllegalArgumentException.class) public void loadPropertiesFileMalformed() { ConfigLoader.loadProperties("malformed.properties", false); // error: unknown properties should cause an illegal argument exception } }