package com.tinkerpop.rexster.config; import com.tinkerpop.blueprints.util.wrappers.readonly.ReadOnlyGraph; import com.tinkerpop.blueprints.util.wrappers.readonly.ReadOnlyIndexableGraph; import com.tinkerpop.rexster.Tokens; import junit.framework.Assert; import org.apache.commons.configuration.HierarchicalConfiguration; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class GraphConfigurationContainerTest { private List<HierarchicalConfiguration> configList = new ArrayList<HierarchicalConfiguration>(); @Before public void setUp() { configList.clear(); } @Test(expected = GraphConfigurationException.class) public void getApplicationGraphsNullConfiguration() throws GraphConfigurationException { new GraphConfigurationContainer(null); } @Test public void getApplicationGraphsNoGraphName() { configList.add(constructTinkerGraphHierarchicalConfiguration("")); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(1, container.getFailedConfigurations().size()); Assert.assertEquals(0, container.getApplicationGraphs().size()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsNoGraphProperty() { HierarchicalConfiguration graphConfig = new HierarchicalConfiguration(); configList.add(graphConfig); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(1, container.getFailedConfigurations().size()); Assert.assertEquals(0, container.getApplicationGraphs().size()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsDuplicateGraphNames() { configList.add(constructDefaultTinkerGraphHierarchicalConfiguration("test")); configList.add(constructDefaultTinkerGraphHierarchicalConfiguration("test")); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(1, container.getFailedConfigurations().size()); Assert.assertEquals(1, container.getApplicationGraphs().size()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsBadGraphs() { configList.add(constructDefaultTinkerGraphHierarchicalConfiguration("test1")); configList.add(constructBadHierarchicalConfiguration()); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(1, container.getFailedConfigurations().size()); Assert.assertEquals(1, container.getApplicationGraphs().size()); Assert.assertTrue(container.getApplicationGraphs().containsKey("test1")); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsSupportedGraphs() { configList.add(constructDefaultTinkerGraphHierarchicalConfiguration("test-tinkergraph-shorthand")); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(0, container.getFailedConfigurations().size()); Assert.assertEquals(configList.size(), container.getApplicationGraphs().size()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsDynamicGraphs() { configList.add(constructHierarchicalConfiguration("test", "com.tinkerpop.rexster.config.MockGraphConfiguration", false)); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(0, container.getFailedConfigurations().size()); Assert.assertEquals(configList.size(), container.getApplicationGraphs().size()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsReadOnlyGraphs() { configList.add(constructHierarchicalConfiguration("test", "com.tinkerpop.rexster.config.MockGraphConfiguration", true)); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(0, container.getFailedConfigurations().size()); Assert.assertEquals(configList.size(), container.getApplicationGraphs().size()); Assert.assertTrue(container.getApplicationGraphs().get("test").getGraph() instanceof ReadOnlyGraph); Assert.assertFalse(container.getApplicationGraphs().get("test").getGraph() instanceof ReadOnlyIndexableGraph); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } @Test public void getApplicationGraphsReadOnlyIndexableGraphs() { configList.add(constructHierarchicalConfiguration("test", "com.tinkerpop.rexster.config.MockIndexableGraphConfiguration", true)); try { GraphConfigurationContainer container = new GraphConfigurationContainer(configList); Assert.assertEquals(0, container.getFailedConfigurations().size()); Assert.assertEquals(configList.size(), container.getApplicationGraphs().size()); Assert.assertTrue(container.getApplicationGraphs().get("test").getGraph() instanceof ReadOnlyIndexableGraph); } catch (Exception ex) { Assert.fail(ex.getMessage()); } } private HierarchicalConfiguration constructBadHierarchicalConfiguration() { HierarchicalConfiguration graphConfig = new HierarchicalConfiguration(); graphConfig.addProperty(Tokens.REXSTER_GRAPH_NAME, "junk"); graphConfig.addProperty(Tokens.REXSTER_GRAPH_TYPE, "com.tinkerpop.rexster.config.MockBadGraphConfiguration"); graphConfig.addProperty(Tokens.REXSTER_GRAPH_READ_ONLY, false); return graphConfig; } private HierarchicalConfiguration constructDefaultTinkerGraphHierarchicalConfiguration(String graphName) { return constructHierarchicalConfiguration(graphName, "tinkergraph", false); } private HierarchicalConfiguration constructTinkerGraphHierarchicalConfiguration(String graphName) { return constructHierarchicalConfiguration(graphName, "tinkergraph", false); } private HierarchicalConfiguration constructHierarchicalConfiguration(String graphName, String graphType, boolean readOnly) { HierarchicalConfiguration graphConfig = new HierarchicalConfiguration(); graphConfig.addProperty(Tokens.REXSTER_GRAPH_NAME, graphName); graphConfig.addProperty(Tokens.REXSTER_GRAPH_TYPE, graphType); graphConfig.addProperty(Tokens.REXSTER_GRAPH_READ_ONLY, readOnly); ArrayList<HierarchicalConfiguration.Node> listOfNodes = new ArrayList<HierarchicalConfiguration.Node>(); listOfNodes.add(new HierarchicalConfiguration.Node("username", "me")); listOfNodes.add(new HierarchicalConfiguration.Node("password", "pass")); graphConfig.addNodes(Tokens.REXSTER_GRAPH_PROPERTIES, listOfNodes); return graphConfig; } }