@Override protected BasicContainerConfig getTemporaryConfig(boolean copyValues) { ExpressionContainerConfig tmp = new ExpressionContainerConfig(getExpressions()); if (copyValues) { tmp.rawConfig = deepCopyConfig(rawConfig); tmp.config = deepCopyConfig(config); } return tmp; }
@Override public Object getProperty(String container, String property) { if (property.startsWith("${")) { // An expression! try { ValueExpression expression = expressions.parse(property, Object.class); return expression.getValue(createExpressionContext(container)); } catch (ELException e) { return null; } } return super.getProperty(container, property); }
@Test public void testCommonEnvironmentAddedToAllContainers() throws Exception { // We use a JSON Object here to guarantee that we're well formed up front. JSONObject json = new JSONObject(); json.put(CONTAINER_KEY, new String[]{DEFAULT_CONTAINER, "testContainer"}); json.put("port", "${SERVER_PORT}"); json.put("host", "${SERVER_HOST}"); createConfigForTest(createTemporaryFile(json, ".json").getAbsolutePath()); assertEquals("8080", config.getString(DEFAULT_CONTAINER, "port")); assertEquals("8080", config.getString("testContainer", "port")); assertEquals("localhost", config.getString(DEFAULT_CONTAINER, "host")); assertEquals("localhost", config.getString("testContainer", "host")); }
@Test public void parseBasicConfig() throws Exception { createConfigForTest(createDefaultContainer().getAbsolutePath()); assertEquals(1, config.getContainers().size()); for (String container : config.getContainers()) { assertEquals(DEFAULT_CONTAINER, container); } String value = config.getString(DEFAULT_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nested = config.getMap(DEFAULT_CONTAINER, NESTED_KEY); String nestedValue = nested.get(NESTED_NAME).toString(); assertEquals(NESTED_VALUE, nestedValue); }
@Test public void parseWithDefaultInheritance() throws Exception { JSONObject json = new JSONObject(); json.put(CONTAINER_KEY, new String[]{CHILD_CONTAINER}); json.put(PARENT_KEY, DEFAULT_CONTAINER); json.put(ARRAY_NAME, ARRAY_ALT_VALUE); // small nested data. JSONObject nested = new JSONObject(); nested.put(NESTED_NAME, NESTED_ALT_VALUE); json.put(NESTED_KEY, nested); File childFile = createTemporaryFile(json, ".json"); File parentFile = createDefaultContainer(); createConfigForTest(childFile.getAbsolutePath() + JsonContainerConfigLoader.FILE_SEPARATOR + parentFile.getAbsolutePath()); String value = config.getString(CHILD_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nestedObj = config.getMap(CHILD_CONTAINER, NESTED_KEY); String nestedValue = nestedObj.get(NESTED_NAME).toString(); assertEquals(NESTED_ALT_VALUE, nestedValue); String arrayValue = config.getString(CHILD_CONTAINER, ARRAY_NAME); assertEquals(ARRAY_ALT_VALUE, arrayValue); // Verify that the parent value wasn't overwritten as well. List<String> actual = new ArrayList<String>(); for (Object val : config.getList(DEFAULT_CONTAINER, ARRAY_NAME)) { actual.add(val.toString()); } List<String> expected = Arrays.asList(ARRAY_VALUE); assertEquals(expected, actual); }
@Before public void setUp() { config = new ExpressionContainerConfig(Expressions.forTesting()); }
@Test public void testNullEntriesOverrideEntriesInParent() throws Exception { // We use JSON Objects here to guarantee that we're well formed up front. JSONObject parent = new JSONObject("{ 'gadgets.container' : ['default'], features : { osapi : 'foo' }}"); JSONObject child = new JSONObject("{ 'gadgets.container' : ['child'], features : null}"); JSONObject grand = new JSONObject("{ 'gadgets.container' : ['grand'], parent : 'child'}"); createConfigForTest(createTemporaryFile(parent, ".json").getAbsolutePath()); createConfigForTest(createTemporaryFile(child, ".json").getAbsolutePath()); createConfigForTest(createTemporaryFile(grand, ".json").getAbsolutePath()); assertEquals("foo", config.getMap("default", "features").get("osapi")); assertNull(config.getProperty("child", "features")); assertNull(config.getProperty("grand", "features")); }
@Test public void nullEntryEvaluation() throws Exception { // We use a JSON Object here to guarantee that we're well formed up front. JSONObject json = new JSONObject("{ 'gadgets.container' : ['default'], features : { osapi : null }}"); createConfigForTest(createTemporaryFile(json, ".json").getAbsolutePath()); assertNull(config.getMap("default", "features").get("osapi")); }
protected ELContext createExpressionContext(String container) { return getExpressions().newELContext(new ContainerConfigELResolver(this, container)); }
@Test public void testCommonEnvironmentAddedToAllContainers() throws Exception { // We use a JSON Object here to guarantee that we're well formed up front. JSONObject json = new JSONObject(); json.put(CONTAINER_KEY, new String[]{DEFAULT_CONTAINER, "testContainer"}); json.put("port", "${SERVER_PORT}"); json.put("host", "${SERVER_HOST}"); createConfigForTest(createTemporaryFile(json, ".json").getAbsolutePath()); assertEquals("8080", config.getString(DEFAULT_CONTAINER, "port")); assertEquals("8080", config.getString("testContainer", "port")); assertEquals("localhost", config.getString(DEFAULT_CONTAINER, "host")); assertEquals("localhost", config.getString("testContainer", "host")); }
@Test public void parseBasicConfig() throws Exception { createConfigForTest(createDefaultContainer().getAbsolutePath()); assertEquals(1, config.getContainers().size()); for (String container : config.getContainers()) { assertEquals(DEFAULT_CONTAINER, container); } String value = config.getString(DEFAULT_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nested = config.getMap(DEFAULT_CONTAINER, NESTED_KEY); String nestedValue = nested.get(NESTED_NAME).toString(); assertEquals(NESTED_VALUE, nestedValue); }
@Test public void parseWithDefaultInheritance() throws Exception { JSONObject json = new JSONObject(); json.put(CONTAINER_KEY, new String[]{CHILD_CONTAINER}); json.put(PARENT_KEY, DEFAULT_CONTAINER); json.put(ARRAY_NAME, ARRAY_ALT_VALUE); // small nested data. JSONObject nested = new JSONObject(); nested.put(NESTED_NAME, NESTED_ALT_VALUE); json.put(NESTED_KEY, nested); File childFile = createTemporaryFile(json, ".json"); File parentFile = createDefaultContainer(); createConfigForTest(childFile.getAbsolutePath() + JsonContainerConfigLoader.FILE_SEPARATOR + parentFile.getAbsolutePath()); String value = config.getString(CHILD_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nestedObj = config.getMap(CHILD_CONTAINER, NESTED_KEY); String nestedValue = nestedObj.get(NESTED_NAME).toString(); assertEquals(NESTED_ALT_VALUE, nestedValue); String arrayValue = config.getString(CHILD_CONTAINER, ARRAY_NAME); assertEquals(ARRAY_ALT_VALUE, arrayValue); // Verify that the parent value wasn't overwritten as well. List<String> actual = new ArrayList<String>(); for (Object val : config.getList(DEFAULT_CONTAINER, ARRAY_NAME)) { actual.add(val.toString()); } List<String> expected = Arrays.asList(ARRAY_VALUE); assertEquals(expected, actual); }
@Before public void setUp() { config = new ExpressionContainerConfig(Expressions.forTesting()); }
@Test public void testNullEntriesOverrideEntriesInParent() throws Exception { // We use JSON Objects here to guarantee that we're well formed up front. JSONObject parent = new JSONObject("{ 'gadgets.container' : ['default'], features : { osapi : 'foo' }}"); JSONObject child = new JSONObject("{ 'gadgets.container' : ['child'], features : null}"); JSONObject grand = new JSONObject("{ 'gadgets.container' : ['grand'], parent : 'child'}"); createConfigForTest(createTemporaryFile(parent, ".json").getAbsolutePath()); createConfigForTest(createTemporaryFile(child, ".json").getAbsolutePath()); createConfigForTest(createTemporaryFile(grand, ".json").getAbsolutePath()); assertEquals("foo", config.getMap("default", "features").get("osapi")); assertNull(config.getProperty("child", "features")); assertNull(config.getProperty("grand", "features")); }
@Test public void nullEntryEvaluation() throws Exception { // We use a JSON Object here to guarantee that we're well formed up front. JSONObject json = new JSONObject("{ 'gadgets.container' : ['default'], features : { osapi : null }}"); createConfigForTest(createTemporaryFile(json, ".json").getAbsolutePath()); assertNull(config.getMap("default", "features").get("osapi")); }
protected ELContext createExpressionContext(String container) { return getExpressions().newELContext(new ContainerConfigELResolver(this, container)); }
@Test public void testCommonEnvironmentAddedToAllContainers() throws Exception { // We use a JSON Object here to guarantee that we're well formed up front. JSONObject json = new JSONObject(); json.put(CONTAINER_KEY, new String[]{DEFAULT_CONTAINER, "testContainer"}); json.put("port", "${SERVER_PORT}"); json.put("host", "${SERVER_HOST}"); createConfigForTest(createTemporaryFile(json, ".json").getAbsolutePath()); assertEquals("8080", config.getString(DEFAULT_CONTAINER, "port")); assertEquals("8080", config.getString("testContainer", "port")); assertEquals("localhost", config.getString(DEFAULT_CONTAINER, "host")); assertEquals("localhost", config.getString("testContainer", "host")); }
@Override protected BasicContainerConfig getTemporaryConfig(boolean copyValues) { ExpressionContainerConfig tmp = new ExpressionContainerConfig(getExpressions()); if (copyValues) { tmp.rawConfig = deepCopyConfig(rawConfig); tmp.config = deepCopyConfig(config); } return tmp; }
@Test public void parseBasicConfig() throws Exception { createConfigForTest(createDefaultContainer().getAbsolutePath()); assertEquals(1, config.getContainers().size()); for (String container : config.getContainers()) { assertEquals(DEFAULT_CONTAINER, container); } String value = config.getString(DEFAULT_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nested = config.getMap(DEFAULT_CONTAINER, NESTED_KEY); String nestedValue = nested.get(NESTED_NAME).toString(); assertEquals(NESTED_VALUE, nestedValue); }
@Test public void parseWithDefaultInheritance() throws Exception { JSONObject json = new JSONObject(); json.put(CONTAINER_KEY, new String[]{CHILD_CONTAINER}); json.put(PARENT_KEY, DEFAULT_CONTAINER); json.put(ARRAY_NAME, ARRAY_ALT_VALUE); // small nested data. JSONObject nested = new JSONObject(); nested.put(NESTED_NAME, NESTED_ALT_VALUE); json.put(NESTED_KEY, nested); File childFile = createTemporaryFile(json, ".json"); File parentFile = createDefaultContainer(); createConfigForTest(childFile.getAbsolutePath() + JsonContainerConfigLoader.FILE_SEPARATOR + parentFile.getAbsolutePath()); String value = config.getString(CHILD_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nestedObj = config.getMap(CHILD_CONTAINER, NESTED_KEY); String nestedValue = nestedObj.get(NESTED_NAME).toString(); assertEquals(NESTED_ALT_VALUE, nestedValue); String arrayValue = config.getString(CHILD_CONTAINER, ARRAY_NAME); assertEquals(ARRAY_ALT_VALUE, arrayValue); // Verify that the parent value wasn't overwritten as well. List<String> actual = new ArrayList<String>(); for (Object val : config.getList(DEFAULT_CONTAINER, ARRAY_NAME)) { actual.add(val.toString()); } List<String> expected = Arrays.asList(ARRAY_VALUE); assertEquals(expected, actual); }