/**
* Copyright (C) 2012-2017 the original author or authors.
*
* 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.
*/
package ninja.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import javax.inject.Named;
import org.junit.After;
import org.junit.Test;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
public class NinjaPropertiesImplTest {
@After
public void tearDown() {
// make sure the external conf property is removed after the test.
System.clearProperty(NinjaProperties.NINJA_EXTERNAL_CONF);
System.clearProperty(NinjaConstant.MODE_KEY_NAME);
}
@Test
public void testSkippingThroughModesWorks() {
// check that mode tests works:
NinjaPropertiesImpl ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.test);
assertEquals("test_testproperty",
ninjaPropertiesImpl.get("testproperty"));
// check that mode dev works:
ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.dev);
assertEquals("dev_testproperty",
ninjaPropertiesImpl.get("testproperty"));
assertEquals("secret",
ninjaPropertiesImpl.get(NinjaConstant.applicationSecret));
// and in a completely different mode with no "%"-prefixed key the
// default value use used
ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.prod);
assertEquals("testproperty_without_prefix",
ninjaPropertiesImpl.get("testproperty"));
assertEquals("secret",
ninjaPropertiesImpl.get(NinjaConstant.applicationSecret));
// tear down
System.clearProperty(NinjaConstant.MODE_KEY_NAME);
}
@Test(expected = RuntimeException.class)
public void testGetOrDie() {
NinjaPropertiesImpl ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.dev);
assertEquals("dev_testproperty",
ninjaPropertiesImpl.getOrDie("testproperty"));
ninjaPropertiesImpl.getOrDie("a_propert_that_is_not_in_the_file");
}
@Test
public void testGetBooleanParsing() {
NinjaPropertiesImpl ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.dev);
assertEquals(true, ninjaPropertiesImpl.getBoolean("booleanTestTrue"));
assertEquals(false, ninjaPropertiesImpl.getBoolean("booleanTestFalse"));
assertEquals(null, ninjaPropertiesImpl.getBoolean("booleanNotValid"));
}
@Test(expected = RuntimeException.class)
public void testGetBooleanOrDie() {
NinjaPropertiesImpl ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.dev);
assertEquals(true,
ninjaPropertiesImpl.getBooleanOrDie("booleanTestTrue"));
ninjaPropertiesImpl.getBooleanOrDie("booleanNotValid");
}
@Test
public void testGetIntegerParsing() {
NinjaPropertiesImpl ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.dev);
assertEquals(new Integer(123456789),
ninjaPropertiesImpl.getInteger("integerTest"));
assertEquals(null, ninjaPropertiesImpl.getInteger("integerNotValid"));
}
@Test(expected = RuntimeException.class)
public void testGetIntegerDie() {
NinjaPropertiesImpl ninjaPropertiesImpl = new NinjaPropertiesImpl(NinjaMode.dev);
assertEquals(new Integer(123456789),
ninjaPropertiesImpl.getIntegerOrDie("integerTest"));
ninjaPropertiesImpl.getIntegerOrDie("integerNotValid");
}
@Test
public void testPropertiesBoundInGuice() {
final NinjaPropertiesImpl props = new NinjaPropertiesImpl(NinjaMode.dev);
MockService service = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
props.bindProperties(binder());
}
}).getInstance(MockService.class);
assertNotNull("Application secret not set by Guice",
service.applicationSecret);
assertEquals("secret", service.applicationSecret);
}
public static class MockService {
@Inject
@Named(NinjaConstant.applicationSecret)
public String applicationSecret;
}
@Test
public void testReferenciningOfPropertiesWorks() {
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// this is testing if referencing of properties works with external
// configurations
// and application.conf: (fullServerName=${serverName}:${serverPort})
assertEquals("http://myserver.com:80",
ninjaProperties.get("fullServerName"));
}
@Test
public void testLoadingOfExternalConfFile() {
// we can set an external conf file by setting the following system
// property:
System.setProperty(NinjaProperties.NINJA_EXTERNAL_CONF,
"conf/heroku.conf");
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// we expect that the original application secret gets overwritten:
assertEquals("secretForHeroku",
ninjaProperties.get(NinjaConstant.applicationSecret));
// and make sure other properties of heroku.conf get loaded as well:
assertEquals("some special parameter",
ninjaProperties.get("heroku.special.property"));
// this is testing if referencing of properties works with external
// configurations
// and application.conf (fullServerName=${serverName}:${serverPort})
assertEquals("http://myapp.herokuapp.com:80",
ninjaProperties.get("fullServerName"));
}
@Test
public void testLoadingOfExternalConfFileOverridesSystemProperty() {
// we can set an external conf file by setting the following system property
System.setProperty(NinjaProperties.NINJA_EXTERNAL_CONF,
"conf/filedoesnotexist.conf");
// instantiate the properties, but provide a different one
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev, "conf/heroku.conf");
// we expect that the original application secret gets overwritten:
assertEquals("secretForHeroku",
ninjaProperties.get(NinjaConstant.applicationSecret));
// and make sure other properties of heroku.conf get loaded as well:
assertEquals("some special parameter",
ninjaProperties.get("heroku.special.property"));
// this is testing if referencing of properties works with external
// configurations
// and application.conf (fullServerName=${serverName}:${serverPort})
assertEquals("http://myapp.herokuapp.com:80",
ninjaProperties.get("fullServerName"));
}
@Test
public void testLoadingOfExternalConfigurationFileWorksAndPrefixedConfigurationsSetRead() {
// we can set an external conf file by setting the following system
// property:
System.setProperty(NinjaProperties.NINJA_EXTERNAL_CONF,
"conf/heroku.conf");
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.test);
// this is testing if referencing of properties works with external
// configurations
// and application.conf (fullServerName=${serverName}:${serverPort})
// It also will be different as we are in "test" mode:
// "myapp-test" is the important thing here.
assertEquals("http://myapp-test.herokuapp.com:80",
ninjaProperties.get("fullServerName"));
}
@Test
public void testUft8Works() {
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// We test this: utf8Test=this is utf8: öäü
assertEquals("this is utf8: öäü", ninjaProperties.get("utf8Test"));
}
@Test(expected = RuntimeException.class)
public void testExernalConfigLoadingBreaksWhenFileDoesNotExist() {
// we can set an external conf file by setting the following system
// property:
System.setProperty(NinjaProperties.NINJA_EXTERNAL_CONF,
"conf/non_existing.conf");
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// now a runtime exception must be thrown.
}
@Test
public void testGetWithDefault() {
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// test default works when property not there:
assertEquals("default", ninjaProperties.getWithDefault(
"non_existsing_property_to_check_defaults", "default"));
// test default works when property is there: => we are int dev mode...
assertEquals("dev_testproperty",
ninjaProperties.getWithDefault("testproperty", "default"));
}
@Test
public void testGetIntegerWithDefault() {
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// test default works when property not there:
assertEquals(Integer.valueOf(1), ninjaProperties.getIntegerWithDefault(
"non_existsing_property_to_check_defaults", 1));
// test default works when property is there:
assertEquals(Integer.valueOf(123456789),
ninjaProperties.getIntegerWithDefault("integerTest", 1));
}
@Test
public void testGetBooleanWithDefault() {
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// test default works when property not there:
assertEquals(Boolean.valueOf(true),
ninjaProperties.getBooleanWithDefault(
"non_existsing_property_to_check_defaults", true));
// test default works when property is there:
assertEquals(Boolean.valueOf(true),
ninjaProperties.getBooleanWithDefault("booleanTestTrue", false));
}
@Test
public void testGetStringArrayWorks() {
// instantiate the properties:
NinjaProperties ninjaProperties = new NinjaPropertiesImpl(NinjaMode.dev);
// test default works when property not there:
assertEquals("one", ninjaProperties.get("getOneElementStringArray"));
assertEquals("one",
ninjaProperties.getStringArray("getOneElementStringArray")[0]);
assertEquals("one , me",
ninjaProperties.get("getMultipleElementStringArrayWithSpaces"));
assertEquals(
"one",
ninjaProperties
.getStringArray("getMultipleElementStringArrayWithSpaces")[0]);
assertEquals(
"me",
ninjaProperties
.getStringArray("getMultipleElementStringArrayWithSpaces")[1]);
assertEquals("one,me",
ninjaProperties
.get("getMultipleElementStringArrayWithoutSpaces"));
assertEquals(
"one",
ninjaProperties
.getStringArray("getMultipleElementStringArrayWithoutSpaces")[0]);
assertEquals(
"me",
ninjaProperties
.getStringArray("getMultipleElementStringArrayWithoutSpaces")[1]);
}
}