@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")); }
@Override /* ConfigStore */ public synchronized String write(String name, String expectedContents, String newContents) { // This is a no-op. if (isEquals(expectedContents, newContents)) return null; String currentContents = read(name); if (expectedContents != null && ! isEquals(currentContents, expectedContents)) return currentContents; update(name, newContents); return null; }
@Override /* ContextBuilder */ public ConfigMemoryStore build() { return new ConfigMemoryStore(getPropertyStore()); } }
@Test public void testExists() { ConfigMemoryStore.DEFAULT.write("foo", null, "foo"); assertTrue(ConfigMemoryStore.DEFAULT.exists("foo")); assertFalse(ConfigMemoryStore.DEFAULT.exists("foo2")); ConfigMemoryStore.DEFAULT.write("foo", "foo", null); assertFalse(ConfigMemoryStore.DEFAULT.exists("foo")); assertFalse(ConfigMemoryStore.DEFAULT.exists("foo2")); } }
@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 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."); }
private Config init(String...lines) { ConfigMemoryStore.DEFAULT.update("Test.cfg", lines); return cb.build().rollback(); }
@Override /* Context */ public ConfigMemoryStoreBuilder builder() { return new ConfigMemoryStoreBuilder(getPropertyStore()); }
@Test public void testEncodeEntries() throws Exception { Config cf = init( "[s1]", "", "foo* = mypassword" ); cf.encodeEntries(); cf.commit(); String expected = "[s1]||foo* = {AwwJVhwUQFZEMg==}|"; assertTextEquals(expected, ConfigMemoryStore.DEFAULT.read("Test.cfg")); }
@Test public void testNonExistentConfig() throws Exception { ConfigStore s = ConfigMemoryStore.create().build(); ConfigMap cm = s.getMap("Foo.cfg"); assertEquals("", cm.toString()); }
@Override /* Context */ public ConfigMemoryStoreBuilder builder() { return new ConfigMemoryStoreBuilder(getPropertyStore()); }
@Override /* ConfigStore */ public synchronized String write(String name, String expectedContents, String newContents) { // This is a no-op. if (isEquals(expectedContents, newContents)) return null; String currentContents = read(name); if (expectedContents != null && ! isEquals(currentContents, expectedContents)) return currentContents; update(name, newContents); return null; }
@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")); }