Skip to content

Commit

Permalink
[ issue #7 ] Unit tests for configuration package (still missing
Browse files Browse the repository at this point in the history
negative and classpath strategies)
  • Loading branch information
agazzarini committed Aug 17, 2014
1 parent d71b723 commit b0b2bba
Show file tree
Hide file tree
Showing 2 changed files with 151 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package org.gazzax.labs.jena.nosql.fwk;

import static org.mockito.Mockito.mock;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

Expand All @@ -14,8 +20,6 @@
import com.hp.hpl.jena.graph.NodeFactory;
import com.hp.hpl.jena.rdf.model.AnonId;

import static org.mockito.Mockito.*;

/**
* A bunch of test utilities.
*
Expand Down Expand Up @@ -125,4 +129,25 @@ public static Node buildLiteral(final String label) {
public static Node buildBNode(final String id) {
return NodeFactory.createAnon(AnonId.create(id));
}

public static Map<String, Object> createSampleConfiguration(final File file) throws Exception {
final Map<String, Object> configuration = new HashMap<String, Object>();

BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(file));
for (int i = 0; i < RANDOMIZER.nextInt(10) + 2; i++) {
final String key = String.valueOf(i);
final String value = randomString();

configuration.put(key, value);
writer.write(key + ": \"" + value + "\"");
writer.newLine();
}
} finally {
writer.flush();
writer.close();
}
return configuration;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package org.gazzax.labs.jena.nosql.fwk.configuration;

import static org.gazzax.labs.jena.nosql.fwk.TestUtility.createSampleConfiguration;
import static org.gazzax.labs.jena.nosql.fwk.TestUtility.randomString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.anyString;

import java.io.File;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;

/**
* Test case for {@link DefaultConfigurator}.
*
* @author Andrea Gazzarini
* @since 1.0
*/
public class TestDefaultConfigurator {

private DefaultConfigurator cut;
private Configurable dummyTarget;

/**
* Setup fixture for this test case.
*/
@Before
public void setUp() {
cut = new DefaultConfigurator();
dummyTarget = new Configurable() {
@Override
public void accept(
final Configuration<Map<String, Object>> configuration) {
// Nothing, this is a stupid stub.
}
};
}

/**
* Just after creating the instance, the active state must correspond to
* strategy one.
*/
@Test
public void initialStateMustBeStrategyOne() {
assertSame(cut.tryWithConfigurationFile, cut.currentState);
}

/**
* A call to getParameter cannot be issued before intialisation.
*/
@Test
public void callInInvalidState() {
try {
cut.getParameter(anyString(), anyString());
fail();
} catch (final IllegalStateException expected) {
// Nothing, this is the expected behaviour.
}
}

/**
* Strategy #1 (configuration file in a system property).
*/
@Test
public void strategyOneSucceeds() throws Exception {
final File configurationFile = File.createTempFile(randomString(), ".yaml");
final Map<String, Object> configuration = createSampleConfiguration(configurationFile);

System.setProperty(
DefaultConfigurator.CONFIGURATION_FILE_SYSTEM_PROPERTY,
configurationFile.getAbsolutePath());

cut.configure(dummyTarget);

assertSame(cut.configurationHasBeenLoaded, cut.currentState);
checkConfiguration(configuration, cut.parameters);
}

/**
* Strategy #2 (configuration directory in a system property with a fixed filename).
*/
@Test
public void strategyTwoSucceeds() throws Exception {
final File tmpConfigurationFile = File.createTempFile(randomString(), ".yaml");
final File configurationFile = new File(tmpConfigurationFile.getParent(), DefaultConfigurator.CONFIGURATION_FILENAME);
configurationFile.renameTo(configurationFile);
final Map<String, Object> configuration = createSampleConfiguration(configurationFile);


System.clearProperty(DefaultConfigurator.CONFIGURATION_FILE_SYSTEM_PROPERTY);
System.setProperty(
DefaultConfigurator.ETC_DIR_SYSTEM_PROPERTY,
configurationFile.getParentFile().getAbsolutePath());

cut.configure(dummyTarget);

assertSame(cut.configurationHasBeenLoaded, cut.currentState);
checkConfiguration(configuration, cut.parameters);
}

/**
* Internal method used for comparing two configurations.
*
* @param src the first configuration.
* @param trgt the second configuration.
*/
private void checkConfiguration(final Map<String, Object> src, final Map<String, Object> trgt) {
assertTrue(src.size() > 1);
assertEquals(src.size(), trgt.size());

for (String key : src.keySet()) {
final Integer k = Integer.parseInt(key);
assertTrue("Key " + key + " found in src but not in target", trgt.containsKey(k));
trgt.remove(k);
}

assertTrue(trgt.isEmpty());
}

}

0 comments on commit b0b2bba

Please sign in to comment.