diff --git a/pom.xml b/pom.xml index c5a72f839734..00d2d540f6c9 100644 --- a/pom.xml +++ b/pom.xml @@ -116,6 +116,16 @@ commons-io 2.0.1 + + com.github.joschi + jadconfig + 0.2 + + + org.slf4j + slf4j-log4j12 + 1.6.1 + diff --git a/src/main/java/org/graylog2/Configuration.java b/src/main/java/org/graylog2/Configuration.java index 2e8f7204d9e8..393a02b83388 100644 --- a/src/main/java/org/graylog2/Configuration.java +++ b/src/main/java/org/graylog2/Configuration.java @@ -20,6 +20,13 @@ package org.graylog2; +import com.github.joschi.jadconfig.Parameter; +import com.github.joschi.jadconfig.ValidationException; +import com.github.joschi.jadconfig.ValidatorMethod; +import com.github.joschi.jadconfig.converters.StringListConverter; +import com.github.joschi.jadconfig.validators.InetPortValidator; +import com.github.joschi.jadconfig.validators.PositiveIntegerValidator; +import com.github.joschi.jadconfig.validators.PositiveLongValidator; import com.mongodb.ServerAddress; import org.apache.log4j.Logger; import org.graylog2.messagehandlers.amqp.AMQPSubscribedQueue; @@ -29,7 +36,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Properties; /** * Helper class to hold configuration of Graylog2 @@ -41,58 +47,169 @@ public class Configuration { private static final Logger LOG = Logger.getLogger(Configuration.class); - // Define required configuration fields. - private static final String[] requiredProperties = { - "syslog_listen_port", - "syslog_protocol", - "mongodb_useauth", - "mongodb_user", - "mongodb_password", - "mongodb_database", - "mongodb_port", - "messages_collection_size", - "use_gelf", - "gelf_listen_port", - }; - - private static final String[] allowedSyslogProtocols = { "tcp", "udp" }; - private static final String[] deprecatedProperties = { "rrd_storage_dir" }; - private static final String[] numericalPositiveProperties = { - "mongodb_port", - "mongodb_max_connections", - "mongodb_threads_allowed_to_block_multiplier", - "messages_collection_size", - "gelf_listen_port", - "syslog_listen_port", - "amqp_port", - "forwarder_loggly_timeout", - }; - - - private Properties properties; - - public Configuration(Properties properties) { - - if(properties == null) { - throw new IllegalArgumentException("Properties must not be null"); - } + @Parameter(value = "syslog_listen_port", required = true, validator = InetPortValidator.class) + private int syslogListenPort = 514; + + @Parameter(value = "syslog_protocol", required = true) + private String syslogProtocol = "udp"; + + @Parameter(value = "mongodb_useauth", required = true) + private boolean mongoUseAuth = false; + + @Parameter(value = "mongodb_user", required = true) + private String mongoUser; + + @Parameter(value = "mongodb_password", required = true) + private String mongoPassword; + + @Parameter(value = "mongodb_database", required = true) + private String mongoDatabase = "graylog2"; + + @Parameter(value = "mongodb_host", required = true) + private String mongoHost = "localhost"; + + @Parameter(value = "mongodb_port", required = true, validator = InetPortValidator.class) + private int mongoPort = 27017; + + @Parameter(value = "mongodb_max_connections", validator = PositiveIntegerValidator.class) + private int mongoMaxConnections = 1000; + + @Parameter(value = "mongodb_threads_allowed_to_block_multiplier", validator = PositiveIntegerValidator.class) + private int mongoThreadsAllowedToBlockMultiplier = 5; + + @Parameter(value = "mongodb_replica_set", converter = StringListConverter.class) + private List mongoReplicaSet; + + @Parameter(value = "messages_collection_size", required = true, validator = PositiveLongValidator.class) + private long messagesCollectionSize = 50*1000*1000; + + @Parameter(value = "use_gelf", required = true) + private boolean useGELF = false; + + @Parameter(value = "gelf_listen_port", required = true, validator = InetPortValidator.class) + private int gelfListenPort = 12201; + + @Parameter("amqp_enabled") + private boolean amqpEnabled = false; + + @Parameter("amqp_host") + private String amqpHost = "localhost"; + + @Parameter(value = "amqp_port", validator = InetPortValidator.class) + private int amqpPort = 5672; + + @Parameter(value = "amqp_subscribed_queues", converter = StringListConverter.class) + private List amqpSubscribedQueues; + + @Parameter("amqp_username") + private String amqpUsername = "guest"; + + @Parameter("amqp_password") + private String amqpPassword = "guest"; + + @Parameter("amqp_virtualhost") + private String amqpVirtualhost = "/"; + + @Parameter(value = "forwarder_loggly_timeout", validator = PositiveIntegerValidator.class) + private int forwarderLogglyTimeout = 3; + + @Parameter("rules_file") + private String droolsRulesFile; + + public int getSyslogListenPort() { + return syslogListenPort; + } + + public String getSyslogProtocol() { + return syslogProtocol; + } + + public boolean isMongoUseAuth() { + return mongoUseAuth; + } + + public String getMongoUser() { + return mongoUser; + } + + public String getMongoPassword() { + return mongoPassword; + } + + public String getMongoDatabase() { + return mongoDatabase; + } + + public int getMongoPort() { + return mongoPort; + } + + public String getMongoHost() { + return mongoHost; + } + + public int getMongoMaxConnections() { + return mongoMaxConnections; + } + + public int getMongoThreadsAllowedToBlockMultiplier() { + return mongoThreadsAllowedToBlockMultiplier; + } + + public long getMessagesCollectionSize() { + return messagesCollectionSize; + } + + public boolean isUseGELF() { + return useGELF; + } + + public int getGelfListenPort() { + return gelfListenPort; + } - this.properties = properties; + public boolean isAmqpEnabled() { + return amqpEnabled; } - public List getMongoDBReplicaSetServers() { + public String getAmqpHost() { + return amqpHost; + } + + public int getAmqpPort() { + return amqpPort; + } + + public String getAmqpUsername() { + return amqpUsername; + } + + public String getAmqpPassword() { + return amqpPassword; + } + + public String getAmqpVirtualhost() { + return amqpVirtualhost; + } + + public int getForwarderLogglyTimeout() { + return forwarderLogglyTimeout*1000; + } + + public String getDroolsRulesFile() { + return droolsRulesFile; + } + + public List getMongoReplicaSet() { List replicaServers = new ArrayList(); - String rawSet = get("mongodb_replica_set"); + List rawSet = mongoReplicaSet; if (rawSet == null || rawSet.isEmpty()) { return null; } - // Get every host:port pair - String[] hosts = rawSet.split(","); - - for (String host : hosts) { + for (String host : rawSet) { // Split host:port. String[] replicaTarget = host.split(":"); @@ -114,33 +231,17 @@ public List getMongoDBReplicaSetServers() { return replicaServers; } - public int getMaximumMongoDBConnections() { - return getInteger("mongodb_max_connections", 1000); - } - - - public int getThreadsAllowedToBlockMultiplier() { - return getInteger("mongodb_threads_allowed_to_block_multiplier", 5); - } - - public int getLogglyTimeout() { - int timeout = getInteger("forwarder_loggly_timeout", 3); - - return timeout*1000; - } - - public List getAMQPSubscribedQueues() { + public List getAmqpSubscribedQueues() { List queueList = new ArrayList(); - String rawQueues = get("amqp_subscribed_queues"); + List rawQueues = amqpSubscribedQueues; if (rawQueues == null || rawQueues.isEmpty()) { return null; } // Get every queue. - String[] queues = rawQueues.split(","); - for (String queue : queues) { + for (String queue : rawQueues) { String[] queueDefinition = queue.split(":"); // Check if valid. @@ -159,88 +260,12 @@ public List getAMQPSubscribedQueues() { return queueList; } - public void validate() throws ConfigurationException { - - for (String requiredProperty : requiredProperties) { - String value = get(requiredProperty); - - if (value == null || value.isEmpty()) { - throw new ConfigurationException("Mandatory configuration option " + requiredProperty + " not set."); - } - } - - // Check if numerical properties are positive - for (String property : numericalPositiveProperties) { - - int value = getInteger(property, 0); - - if (value < 0) { - throw new ConfigurationException("Configuration option " + property + " must be a positive integer."); - } - } - - // Check if a MongoDB replica set or host is defined. - if (!contains("mongodb_host") && !contains("mongodb_replica_set")) { - throw new ConfigurationException("Neither MongoDB host (mongodb_host) nor replica set (mongodb_replica_set) has been defined."); - } + @ValidatorMethod + public void validate() throws ValidationException { // Is the syslog_procotol valid? - if(!Arrays.asList(allowedSyslogProtocols).contains(get("syslog_protocol"))) { - throw new ConfigurationException("Invalid syslog_protocol: " + get("syslog_protocol")); + if(!Arrays.asList("tcp", "udp").contains(getSyslogProtocol())) { + throw new ValidationException("Invalid syslog_protocol: " + getSyslogProtocol()); } - - // Print out a deprecation warning if any deprecated configuration option is set. - for (String deprecatedProperty : deprecatedProperties) { - - if (get(deprecatedProperty) != null) { - LOG.warn("Configuration option " + deprecatedProperty + " has been deprecated."); - } - } - } - - public String get(String property) { - - return properties.getProperty(property); - } - - public int getInteger(String property, int defaultValue) { - - String value = get(property); - int result = defaultValue; - - if(value != null) { - try { - result = Integer.parseInt(value); - } catch (NumberFormatException ex) { - LOG.warn("Couldn't convert configuration property " + property + " to Integer", ex); - } - } - - return result; - } - - public long getLong(String property, long defaultValue) { - - String value = get(property); - long result = defaultValue; - - if(value != null) { - try { - result = Long.parseLong(value); - } catch (NumberFormatException ex) { - LOG.warn("Couldn't convert configuration property " + property + " to Long", ex); - } - } - - return result; - } - - public boolean contains(String property) { - return properties.containsKey(property); - } - - public boolean getBoolean(String property) { - - return Boolean.parseBoolean(get(property)); } } \ No newline at end of file diff --git a/src/main/java/org/graylog2/Main.java b/src/main/java/org/graylog2/Main.java index 50a9e9467e1f..e977201d01a6 100644 --- a/src/main/java/org/graylog2/Main.java +++ b/src/main/java/org/graylog2/Main.java @@ -21,11 +21,16 @@ package org.graylog2; import com.beust.jcommander.JCommander; +import com.github.joschi.jadconfig.JadConfig; +import com.github.joschi.jadconfig.RepositoryException; +import com.github.joschi.jadconfig.ValidationException; +import com.github.joschi.jadconfig.repositories.PropertiesRepository; import org.apache.commons.io.IOUtils; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.graylog2.database.MongoConnection; import org.graylog2.forwarders.forwarders.LogglyForwarder; +import org.graylog2.indexer.Indexer; import org.graylog2.messagehandlers.amqp.AMQPBroker; import org.graylog2.messagehandlers.amqp.AMQPSubscribedQueue; import org.graylog2.messagehandlers.amqp.AMQPSubscriberThread; @@ -33,16 +38,12 @@ import org.graylog2.messagehandlers.syslog.SyslogServerThread; import org.graylog2.periodical.ChunkedGELFClientManagerThread; import org.graylog2.periodical.HostCounterCacheWriterThread; +import org.graylog2.periodical.MessageCountWriterThread; -import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; -import java.io.Reader; import java.io.Writer; import java.util.List; -import java.util.Properties; -import org.graylog2.indexer.Indexer; -import org.graylog2.periodical.MessageCountWriterThread; /** * Main class of Graylog2. @@ -90,13 +91,17 @@ public static void main(String[] args) { String configFile = commandLineArguments.getConfigFile(); LOG.info("Using config file: " + configFile); - Configuration configuration = new Configuration(loadProperties(configFile)); + Configuration configuration = new Configuration(); + JadConfig jadConfig = new JadConfig(new PropertiesRepository(configFile), configuration); - LOG.info("Checking configuration"); + LOG.info("Loading configuration"); try { - configuration.validate(); - } catch (Exception e) { - LOG.fatal("Invalid configuration: " + e.getMessage(), e); + jadConfig.process(); + } catch (RepositoryException e) { + LOG.fatal("Couldn't load configuration file " + configFile, e); + System.exit(1); + } catch (ValidationException e) { + LOG.fatal("Invalid configuration", e); System.exit(1); } @@ -128,45 +133,29 @@ public static void main(String[] args) { // Statically set timeout for LogglyForwarder. // TODO: This is a code smell and needs to be fixed. - LogglyForwarder.setTimeout(configuration.getInteger("forwarder_loggly_timeout", 3)); + LogglyForwarder.setTimeout(configuration.getForwarderLogglyTimeout()); initializeMongoConnection(configuration); - initializeRulesEngine(configuration.get("rules_file")); - initializeSyslogServer(configuration.get("syslog_protocol"), configuration.getInteger("syslog_listen_port", 514)); + initializeRulesEngine(configuration.getDroolsRulesFile()); + initializeSyslogServer(configuration.getSyslogProtocol(), configuration.getSyslogListenPort()); initializeHostCounterCache(); // Start message counter thread. initializeMessageCounters(); // Start GELF threads - if (configuration.getBoolean("use_gelf")) { - initializeGELFThreads(configuration.getInteger("gelf_listen_port", 12201)); + if (configuration.isUseGELF()) { + initializeGELFThreads(configuration.getGelfListenPort()); } // Initialize AMQP Broker if enabled - if (configuration.getBoolean("amqp_enabled")) { + if (configuration.isAmqpEnabled()) { initializeAMQP(configuration); } LOG.info("Graylog2 up and running."); } - private static Properties loadProperties(String configFile) { - Reader configFileReader = null; - Properties properties = new Properties(); - - try { - configFileReader = new FileReader(configFile); - properties.load(configFileReader); - } catch(java.io.IOException e) { - LOG.error("Could not read configuration file: " + e.getMessage(), e); - } finally { - IOUtils.closeQuietly(configFileReader); - } - - return properties; - } - private static void initializeHostCounterCache() { HostCounterCacheWriterThread hostCounterCacheWriterThread = new HostCounterCacheWriterThread(); hostCounterCacheWriterThread.start(); @@ -223,16 +212,16 @@ private static void initializeRulesEngine(String rulesFilePath) { private static void initializeMongoConnection(Configuration configuration) { try { MongoConnection.getInstance().connect( - configuration.get("mongodb_user"), - configuration.get("mongodb_password"), - configuration.get("mongodb_host"), - configuration.get("mongodb_database"), - configuration.getInteger("mongodb_port", 0), - configuration.get("mongodb_useauth"), - configuration.getMaximumMongoDBConnections(), - configuration.getThreadsAllowedToBlockMultiplier(), - configuration.getMongoDBReplicaSetServers(), - configuration.getLong("messages_collection_size", 50000000) + configuration.getMongoUser(), + configuration.getMongoPassword(), + configuration.getMongoHost(), + configuration.getMongoDatabase(), + configuration.getMongoPort(), + configuration.isMongoUseAuth(), + configuration.getMongoMaxConnections(), + configuration.getMongoThreadsAllowedToBlockMultiplier(), + configuration.getMongoReplicaSet(), + configuration.getMessagesCollectionSize() ); } catch (Exception e) { LOG.fatal("Could not create MongoDB connection: " + e.getMessage(), e); @@ -244,14 +233,14 @@ private static void initializeAMQP(Configuration configuration) { // Connect to AMQP broker. AMQPBroker amqpBroker = new AMQPBroker( - configuration.get("amqp_host"), - configuration.getInteger("amqp_port", 0), - configuration.get("amqp_username"), - configuration.get("amqp_password"), - configuration.get("amqp_virtualhost") + configuration.getAmqpHost(), + configuration.getAmqpPort(), + configuration.getAmqpUsername(), + configuration.getAmqpPassword(), + configuration.getAmqpVirtualhost() ); - List amqpQueues = configuration.getAMQPSubscribedQueues(); + List amqpQueues = configuration.getAmqpSubscribedQueues(); if (amqpQueues != null) { // Start AMQP subscriber thread for each queue to listen on. diff --git a/src/main/java/org/graylog2/database/MongoConnection.java b/src/main/java/org/graylog2/database/MongoConnection.java index 09b9038b5acb..a26ba04290be 100644 --- a/src/main/java/org/graylog2/database/MongoConnection.java +++ b/src/main/java/org/graylog2/database/MongoConnection.java @@ -71,7 +71,7 @@ public synchronized static MongoConnection getInstance() { * * @throws Exception */ - public void connect(String username, String password, String hostname, String database, int port, String useAuth, + public void connect(String username, String password, String hostname, String database, int port, boolean useAuth, int maxConnections, int threadsAllowedToBlockForConnectionMultiplier, List replicaServers, long messagesCollSize) throws Exception { MongoOptions options = new MongoOptions(); @@ -93,7 +93,7 @@ public void connect(String username, String password, String hostname, String da db = m.getDB(database); // Try to authenticate if configured. - if (useAuth.equals("true")) { + if (useAuth) { if(!db.authenticate(username, password.toCharArray())) { throw new Exception("Could not authenticate to database '" + database + "' with user '" + username + "'."); } diff --git a/src/test/java/org/graylog2/ConfigurationTest.java b/src/test/java/org/graylog2/ConfigurationTest.java index 8741c4ddd76f..f3be1faf91d2 100644 --- a/src/test/java/org/graylog2/ConfigurationTest.java +++ b/src/test/java/org/graylog2/ConfigurationTest.java @@ -1,10 +1,16 @@ package org.graylog2; +import com.github.joschi.jadconfig.JadConfig; +import com.github.joschi.jadconfig.ParameterException; +import com.github.joschi.jadconfig.RepositoryException; +import com.github.joschi.jadconfig.ValidationException; +import com.github.joschi.jadconfig.repositories.InMemoryRepository; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; -import java.util.Properties; +import java.util.HashMap; +import java.util.Map; /** * Unit tests for {@link Configuration} class @@ -13,298 +19,179 @@ */ public class ConfigurationTest { - Properties validProperties; + Map validProperties; @Before public void setUp() { - validProperties = new Properties(); + validProperties = new HashMap(); // Required properties - validProperties.setProperty("syslog_listen_port", "514"); - validProperties.setProperty("syslog_protocol", "udp"); - validProperties.setProperty("mongodb_useauth", "true"); - validProperties.setProperty("mongodb_user", "user"); - validProperties.setProperty("mongodb_password", "pass"); - validProperties.setProperty("mongodb_database", "test"); - validProperties.setProperty("mongodb_host", "localhost"); - validProperties.setProperty("mongodb_port", "27017"); - validProperties.setProperty("messages_collection_size", "1000"); - validProperties.setProperty("use_gelf", "true"); - validProperties.setProperty("gelf_listen_port", "12201"); + validProperties.put("syslog_listen_port", "514"); + validProperties.put("syslog_protocol", "udp"); + validProperties.put("mongodb_useauth", "true"); + validProperties.put("mongodb_user", "user"); + validProperties.put("mongodb_password", "pass"); + validProperties.put("mongodb_database", "test"); + validProperties.put("mongodb_host", "localhost"); + validProperties.put("mongodb_port", "27017"); + validProperties.put("messages_collection_size", "1000"); + validProperties.put("use_gelf", "true"); + validProperties.put("gelf_listen_port", "12201"); // Additional numerical properties - validProperties.setProperty("mongodb_max_connections", "100"); - validProperties.setProperty("mongodb_threads_allowed_to_block_multiplier", "50"); - validProperties.setProperty("amqp_port", "5672"); - validProperties.setProperty("forwarder_loggly_timeout", "3"); + validProperties.put("mongodb_max_connections", "100"); + validProperties.put("mongodb_threads_allowed_to_block_multiplier", "50"); + validProperties.put("amqp_port", "5672"); + validProperties.put("forwarder_loggly_timeout", "3"); } - @Test(expected = IllegalArgumentException.class) - public void testPropertiesNull() { + @Test(expected = ParameterException.class) + public void testValidateRequiredPropertiesMissing() throws RepositoryException, ValidationException { - new Configuration(null); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(), configuration).process(); } - @Test - public void testContains() { - - Properties properties = new Properties(); - properties.setProperty("thisIsNotNull", "notNull"); - properties.setProperty("thisIsEmpty", ""); - - Configuration configuration = new Configuration(properties); - - Assert.assertTrue(configuration.contains("thisIsNotNull")); - Assert.assertTrue(configuration.contains("thisIsEmpty")); - Assert.assertFalse(configuration.contains("thisDoesNotExist")); - } - - @Test - public void testGet() { - - Properties properties = new Properties(); - properties.setProperty("thisIsNotNull", "notNull"); - properties.setProperty("thisIsEmpty", ""); - - Configuration configuration = new Configuration(properties); - - Assert.assertEquals("notNull", configuration.get("thisIsNotNull")); - Assert.assertEquals("", configuration.get("thisIsEmpty")); - Assert.assertNull(configuration.get("thisIsNull")); - } + @Test(expected = ValidationException.class) + public void testValidateSyslogProtocol() throws RepositoryException, ValidationException { - @Test - public void testGetInteger() { - - Properties properties = new Properties(); - properties.setProperty("thisIsEmpty", ""); - properties.setProperty("testString", "invalidInteger"); - properties.setProperty("testInteger", "12345"); - properties.setProperty("MIN_VALUE", String.valueOf(Integer.MIN_VALUE)); - properties.setProperty("MAX_VALUE", String.valueOf(Integer.MAX_VALUE)); - properties.setProperty("tooSmall", "-2147483649"); - properties.setProperty("tooBig", "2147483648"); - - Configuration configuration = new Configuration(properties); - - Assert.assertEquals(123, configuration.getInteger("thisIsNull", 123)); - Assert.assertEquals(123, configuration.getInteger("thisIsEmpty", 123)); - Assert.assertEquals(123, configuration.getInteger("testString", 123)); - Assert.assertEquals(12345, configuration.getInteger("testInteger", 123)); - Assert.assertEquals(Integer.MIN_VALUE, configuration.getInteger("MIN_VALUE", 123)); - Assert.assertEquals(Integer.MAX_VALUE, configuration.getInteger("MAX_VALUE", 123)); - Assert.assertEquals(123, configuration.getInteger("tooSmall", 123)); - Assert.assertEquals(123, configuration.getInteger("tooBig", 123)); - } + validProperties.put("syslog_protocol", "noValidProtocol"); - @Test - public void testGetLong() { - - Properties properties = new Properties(); - properties.setProperty("thisIsEmpty", ""); - properties.setProperty("testString", "invalidLong"); - properties.setProperty("testInteger", "12345"); - properties.setProperty("testLong", "12345"); - properties.setProperty("MIN_VALUE", String.valueOf(Long.MIN_VALUE)); - properties.setProperty("MAX_VALUE", String.valueOf(Long.MAX_VALUE)); - properties.setProperty("tooSmall", "-9223372036854775809"); - properties.setProperty("tooBig", "9223372036854775808"); - - Configuration configuration = new Configuration(properties); - - Assert.assertEquals(123L, configuration.getLong("thisIsNull", 123L)); - Assert.assertEquals(123L, configuration.getLong("thisIsEmpty", 123L)); - Assert.assertEquals(123L, configuration.getLong("testString", 123L)); - Assert.assertEquals(12345L, configuration.getLong("testInteger", 123L)); - Assert.assertEquals(12345L, configuration.getLong("testLong", 123L)); - Assert.assertEquals(Long.MIN_VALUE, configuration.getLong("MIN_VALUE", 123L)); - Assert.assertEquals(Long.MAX_VALUE, configuration.getLong("MAX_VALUE", 123L)); - Assert.assertEquals(123L, configuration.getLong("tooSmall", 123L)); - Assert.assertEquals(123L, configuration.getLong("tooBig", 123L)); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); } @Test - public void testGetBoolean() { - Properties properties = new Properties(); - properties.setProperty("thisIsEmpty", ""); - properties.setProperty("thisIsNotBoolean", "1"); - properties.setProperty("thisIsTrue1", "true"); - properties.setProperty("thisIsTrue2", "TRUE"); - properties.setProperty("thisIsTrue3", "tRuE"); - - Configuration configuration = new Configuration(properties); - - Assert.assertFalse(configuration.getBoolean("thisIsEmpty")); - Assert.assertFalse(configuration.getBoolean("thisIsNotBoolean")); - Assert.assertTrue(configuration.getBoolean("thisIsTrue1")); - Assert.assertTrue(configuration.getBoolean("thisIsTrue2")); - Assert.assertTrue(configuration.getBoolean("thisIsTrue3")); - } + public void testGetMaximumMongoDBConnections() throws RepositoryException, ValidationException { - @Test(expected = ConfigurationException.class) - public void testValidateRequiredPropertiesMissing() throws ConfigurationException { + validProperties.put("mongodb_max_connections", "12345"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Properties properties = new Properties(); - Configuration configuration = new Configuration(properties); - configuration.validate(); + Assert.assertEquals(12345, configuration.getMongoMaxConnections()); } @Test - public void testValidateNumericalProperties() throws ConfigurationException { - - validProperties.setProperty("mongodb_port", "NotANumber"); - Configuration configuration = new Configuration(validProperties); - configuration.validate(); - - Assert.assertTrue(configuration.contains("mongodb_port")); - } - - @Test(expected = ConfigurationException.class) - public void testValidateNeitherMongoDbHostNorReplicaSet() throws ConfigurationException { - - validProperties.remove("mongodb_host"); - Configuration configuration = new Configuration(validProperties); - configuration.validate(); - } - - @Test - public void testValidateNoMongoDbHost() throws ConfigurationException { - - validProperties.remove("mongodb_host"); - validProperties.setProperty("mongodb_replica_set", "localhost"); - - Configuration configuration = new Configuration(validProperties); - configuration.validate(); - - Assert.assertTrue(configuration.contains("mongodb_replica_set")); - Assert.assertFalse(configuration.contains("mongodb_host")); - } - - @Test(expected = ConfigurationException.class) - public void testValidateSyslogProtocol() throws ConfigurationException { - - validProperties.setProperty("syslog_protocol", "noValidProtocol"); - - Configuration configuration = new Configuration(validProperties); - configuration.validate(); - } - - @Test - public void testGetMaximumMongoDBConnections() { - - validProperties.setProperty("mongodb_max_connections", "12345"); - Configuration configuration = new Configuration(validProperties); - - Assert.assertEquals(12345, configuration.getMaximumMongoDBConnections()); - } - - @Test - public void testGetMaximumMongoDBConnectionsDefault() { + public void testGetMaximumMongoDBConnectionsDefault() throws RepositoryException, ValidationException { validProperties.remove("mongodb_max_connections"); - Configuration configuration = new Configuration(validProperties); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(1000, configuration.getMaximumMongoDBConnections()); + Assert.assertEquals(1000, configuration.getMongoMaxConnections()); } @Test - public void testGetThreadsAllowedToBlockMultiplier() { + public void testGetThreadsAllowedToBlockMultiplier() throws RepositoryException, ValidationException { - validProperties.setProperty("mongodb_threads_allowed_to_block_multiplier", "12345"); - Configuration configuration = new Configuration(validProperties); + validProperties.put("mongodb_threads_allowed_to_block_multiplier", "12345"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(12345, configuration.getThreadsAllowedToBlockMultiplier()); + Assert.assertEquals(12345, configuration.getMongoThreadsAllowedToBlockMultiplier()); } @Test - public void testGetThreadsAllowedToBlockMultiplierDefault() { + public void testGetThreadsAllowedToBlockMultiplierDefault() throws RepositoryException, ValidationException { validProperties.remove("mongodb_threads_allowed_to_block_multiplier"); - Configuration configuration = new Configuration(validProperties); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(5, configuration.getThreadsAllowedToBlockMultiplier()); + Assert.assertEquals(5, configuration.getMongoThreadsAllowedToBlockMultiplier()); } @Test - public void testGetLogglyTimeout() { + public void testGetLogglyTimeout() throws RepositoryException, ValidationException { - validProperties.setProperty("forwarder_loggly_timeout", "5"); - Configuration configuration = new Configuration(validProperties); + validProperties.put("forwarder_loggly_timeout", "5"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(5000, configuration.getLogglyTimeout()); + Assert.assertEquals(5000, configuration.getForwarderLogglyTimeout()); } @Test - public void testGetLogglyTimeoutDefault() { + public void testGetLogglyTimeoutDefault() throws RepositoryException, ValidationException { validProperties.remove("forwarder_loggly_timeout"); - Configuration configuration = new Configuration(validProperties); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(3000, configuration.getLogglyTimeout()); + Assert.assertEquals(3000, configuration.getForwarderLogglyTimeout()); } @Test - public void testGetAMQPSubscribedQueuesEmpty() { - validProperties.setProperty("amqp_subscribed_queues", ""); - Configuration configuration = new Configuration(validProperties); + public void testGetAMQPSubscribedQueuesEmpty() throws RepositoryException, ValidationException { + validProperties.put("amqp_subscribed_queues", ""); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertNull(configuration.getAMQPSubscribedQueues()); + Assert.assertNull(configuration.getAmqpSubscribedQueues()); } @Test - public void testGetAMQPSubscribedQueuesMalformed() { - validProperties.setProperty("amqp_subscribed_queues", "queue-invalid"); - Configuration configuration = new Configuration(validProperties); + public void testGetAMQPSubscribedQueuesMalformed() throws RepositoryException, ValidationException { + validProperties.put("amqp_subscribed_queues", "queue-invalid"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertNull(configuration.getAMQPSubscribedQueues()); + Assert.assertNull(configuration.getAmqpSubscribedQueues()); } @Test - public void testGetAMQPSubscribedQueuesInvalidQueueType() { - validProperties.setProperty("amqp_subscribed_queues", "queue1:gelf,queue2:invalid"); - Configuration configuration = new Configuration(validProperties); + public void testGetAMQPSubscribedQueuesInvalidQueueType() throws RepositoryException, ValidationException { + validProperties.put("amqp_subscribed_queues", "queue1:gelf,queue2:invalid"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertNull(configuration.getAMQPSubscribedQueues()); + Assert.assertNull(configuration.getAmqpSubscribedQueues()); } @Test - public void testGetAMQPSubscribedQueues() { - validProperties.setProperty("amqp_subscribed_queues", "queue1:gelf,queue2:syslog"); - Configuration configuration = new Configuration(validProperties); + public void testGetAMQPSubscribedQueues() throws RepositoryException, ValidationException { + validProperties.put("amqp_subscribed_queues", "queue1:gelf,queue2:syslog"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(2, configuration.getAMQPSubscribedQueues().size()); + Assert.assertEquals(2, configuration.getAmqpSubscribedQueues().size()); } @Test - public void testGetMongoDBReplicaSetServersEmpty() { - validProperties.setProperty("mongodb_replica_set", ""); - Configuration configuration = new Configuration(validProperties); + public void testGetMongoDBReplicaSetServersEmpty() throws RepositoryException, ValidationException { + validProperties.put("mongodb_replica_set", ""); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertNull(configuration.getMongoDBReplicaSetServers()); + Assert.assertNull(configuration.getMongoReplicaSet()); } @Test - public void testGetMongoDBReplicaSetServersMalformed() { - validProperties.setProperty("mongodb_replica_set", "malformed"); - Configuration configuration = new Configuration(validProperties); + public void testGetMongoDBReplicaSetServersMalformed() throws RepositoryException, ValidationException { + validProperties.put("mongodb_replica_set", "malformed"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertNull(configuration.getMongoDBReplicaSetServers()); + Assert.assertNull(configuration.getMongoReplicaSet()); } @Test - public void testGetMongoDBReplicaSetServersUnknownHost() { - validProperties.setProperty("mongodb_replica_set", "this-host-hopefully-does-not-exist:27017"); - Configuration configuration = new Configuration(validProperties); + public void testGetMongoDBReplicaSetServersUnknownHost() throws RepositoryException, ValidationException { + validProperties.put("mongodb_replica_set", "this-host-hopefully-does-not-exist:27017"); + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertNull(configuration.getMongoDBReplicaSetServers()); + Assert.assertNull(configuration.getMongoReplicaSet()); } @Test - public void testGetMongoDBReplicaSetServers() { - validProperties.setProperty("mongodb_replica_set", "localhost:27017,localhost:27018"); - Configuration configuration = new Configuration(validProperties); + public void testGetMongoDBReplicaSetServers() throws RepositoryException, ValidationException { + validProperties.put("mongodb_replica_set", "localhost:27017,localhost:27018"); + + Configuration configuration = new Configuration(); + new JadConfig(new InMemoryRepository(validProperties), configuration).process(); - Assert.assertEquals(2, configuration.getMongoDBReplicaSetServers().size()); + Assert.assertEquals(2, configuration.getMongoReplicaSet().size()); } }