private static ConfigStore initStore(String name, String...contents) { return ConfigMemoryStore.create().build().update(name, contents); } }
private static ConfigStore initStore(String name, String...contents) { return ConfigMemoryStore.create().build().update(name, contents); }
@Test public void testNoFile() throws Exception { ConfigMemoryStore fs = ConfigMemoryStore.create().build(); assertEquals("", fs.read("X")); }
@Test public void testUpdate() throws Exception { ConfigMemoryStore fs = ConfigMemoryStore.create().build(); final CountDownLatch latch = new CountDownLatch(2); fs.register("X", new ConfigStoreListener() { @Override public void onChange(String contents) { if ("xxx".equals(contents)) latch.countDown(); } }); fs.register("Y", new ConfigStoreListener() { @Override public void onChange(String contents) { if ("yyy".equals(contents)) latch.countDown(); } }); fs.update("X", "xxx"); fs.update("Y", "yyy"); if (! latch.await(10, TimeUnit.SECONDS)) throw new Exception("CountDownLatch never reached zero."); }
@Test public void testNonExistentConfig() throws Exception { ConfigStore s = ConfigMemoryStore.create().build(); ConfigMap cm = s.getMap("Foo.cfg"); assertEquals("", cm.toString()); }
@Test public void testSimpleCreate() throws Exception { ConfigMemoryStore fs = ConfigMemoryStore.create().build(); assertNull(fs.write("X", null, "foo")); assertEquals("foo", fs.read("X")); }
@Test public void importNotFound() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("B", "", "<A>\nx=1"); Config c = Config.create("B").store(ms).build(); assertEquals("1", c.getString("x")); }
@Test public void overlappingSectionsAndValues() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "<A>\n[A]\na1=2"); Config c = Config.create("B").store(ms).build(); assertEquals("2", c.getString("A/a1")); }
@Test public void nestedImportsLoop() throws Exception { // This shouldn't blow up. ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A1", "", "<A2>\nx=1"); ms.write("A2", "", "<A1>\ny=2"); ms.write("B", "", "<A2>"); try { Config.create("B").store(ms).build(); fail("Exception expected."); } catch (Exception e) { // OK } }
@Test public void overlappingSectionsImportAtEnd() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "[A]\na2=2\n<A>"); Config c = Config.create("B").store(ms).build(); assertEquals("1", c.getString("A/a1")); assertEquals("2", c.getString("A/a2")); }
@Test public void overlappingSections() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "<A>\n[A]\na2=2"); Config c = Config.create("B").store(ms).build(); assertEquals("1", c.getString("A/a1")); assertEquals("2", c.getString("A/a2")); }
@Test public void testUpdateOnParentSameSectionSameKey() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "<A>\n[A]\na1=2"); Config ca = Config.create("A").store(ms).build(); Config cb = Config.create("B").store(ms).build(); assertEquals(2, ca.getConfigMap().getListeners().size()); assertEquals(1, cb.getConfigMap().getListeners().size()); TestListener l = new TestListener(); cb.addListener(l); ms.write("A", "x=1\n[A]\na1=1", "x=1\n[A]\na1=3"); assertFalse(l.isTriggered()); assertEquals("2", cb.get("A/a1")); }
@Test public void testUpdateOnGrandParentSameSection() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "<A>\n[A]\na1=2"); ms.write("C", "", "<B>\n[A]\na1=3"); Config ca = Config.create("A").store(ms).build(); Config cb = Config.create("B").store(ms).build(); Config cc = Config.create("C").store(ms).build(); assertEquals(3, ca.getConfigMap().getListeners().size()); assertEquals(2, cb.getConfigMap().getListeners().size()); assertEquals(1, cc.getConfigMap().getListeners().size()); TestListener l = new TestListener(); cc.addListener(l); ms.write("A", "x=1\n[A]\na1=1", "x=1\n[A]\na1=4"); assertFalse(l.isTriggered()); assertEquals("3", cc.get("A/a1")); }
@Test public void oneSimpleImport() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1"); ms.write("B", "", "<A>"); Config c = Config .create("B") .store(ms) .build(); assertEquals("1", c.getString("x")); c.set("x", "2"); c.commit(); assertEquals("x=1", ms.read("A")); assertEquals("x = 2\n", ms.read("B")); }
@Test public void noOverwriteOnImports() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1"); ms.write("B", "", "<A>"); Config c = Config.create("B").store(ms).build(); assertEquals("1", c.getString("x")); c.set("x", "2"); assertEquals("2", c.getString("x")); assertEquals("1", Config.create("A").store(ms).build().getString("x")); }
@Test public void testFailOnMismatch() throws Exception { ConfigMemoryStore fs = ConfigMemoryStore.create().build(); assertNotNull(fs.write("X", "xxx", "foo")); assertEquals("", fs.read("X")); assertNull(fs.write("X", null, "foo")); assertEquals("foo", fs.read("X")); assertNotNull(fs.write("X", "xxx", "foo")); assertEquals("foo", fs.read("X")); assertNull(fs.write("X", "foo", "bar")); assertEquals("bar", fs.read("X")); }
@Test public void testUpdateOnParent() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "<A>\n[B]\nb1=2"); Config ca = Config.create("A").store(ms).build(); Config cb = Config.create("B").store(ms).build(); assertEquals(2, ca.getConfigMap().getListeners().size()); assertEquals(1, cb.getConfigMap().getListeners().size()); TestListener l = new TestListener(); cb.addListener(l); assertEquals(0, ca.getListeners().size()); assertEquals(1, cb.getListeners().size()); ms.write("A", "x=1\n[A]\na1=1", "x=1\n[A]\na1=2"); assertTrue(l.isTriggered()); assertEquals(1, l.getEvents().size()); assertEquals("2", l.getNewValue("A", "a1")); assertEquals("2", cb.get("A/a1")); assertEquals("2", cb.get("B/b1")); l.reset(); cb.removeListener(l); assertEquals(0, ca.getListeners().size()); assertEquals(0, cb.getListeners().size()); ms.write("A", "x=1\n[A]\na1=2", "x=1\n[A]\na1=3"); assertFalse(l.isTriggered()); assertEquals("3", cb.get("A/a1")); assertEquals("2", cb.get("B/b1")); }
@Test public void testUpdateOnParentSameSection() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A", "", "x=1\n[A]\na1=1"); ms.write("B", "", "<A>\n[A]\nb1=2"); Config ca = Config.create("A").store(ms).build(); Config cb = Config.create("B").store(ms).build(); assertEquals(2, ca.getConfigMap().getListeners().size()); assertEquals(1, cb.getConfigMap().getListeners().size()); TestListener l = new TestListener(); cb.addListener(l); ms.write("A", "x=1\n[A]\na1=1", "x=1\n[A]\na1=2"); assertTrue(l.isTriggered()); assertEquals(1, l.getEvents().size()); assertEquals("2", l.getNewValue("A", "a1")); assertEquals("2", cb.get("A/a1")); assertEquals("2", cb.get("A/b1")); l.reset(); cb.removeListener(l); assertEquals(0, ca.getListeners().size()); assertEquals(0, cb.getListeners().size()); ms.write("A", "x=1\n[A]\na1=2", "x=1\n[A]\na1=3"); assertFalse(l.isTriggered()); assertEquals("3", cb.get("A/a1")); assertEquals("2", cb.get("A/b1")); }
@Test public void nestedImports() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A1", "", "x=1"); ms.write("A2", "", "<A1>\ny=2"); ms.write("B", "", "<A2>"); Config c = Config.create("B").store(ms).build(); assertEquals("1", c.getString("x")); assertEquals("2", c.getString("y")); c.set("x", "3"); c.set("y", "4"); c.commit(); assertEquals("x=1", ms.read("A1")); assertEquals("<A1>\ny=2", ms.read("A2")); assertEquals("x = 3\ny = 4\n", ms.read("B")); }
@Test public void twoSimpleImports() throws Exception { ConfigMemoryStore ms = ConfigMemoryStore.create().build(); ms.write("A1", "", "x=1"); ms.write("A2", "", "y=2"); ms.write("B", "", "<A1>\n<A2>"); Config c = Config.create("B").store(ms).build(); assertEquals("1", c.getString("x")); assertEquals("2", c.getString("y")); c.set("x", "3"); c.set("y", "4"); c.commit(); assertEquals("x=1", ms.read("A1")); assertEquals("y=2", ms.read("A2")); assertEquals("x = 3\ny = 4\n", ms.read("B")); }