summaryrefslogtreecommitdiffstats
path: root/configgen/src/test/java/com/yahoo/config/codegen/DefParserNamespaceTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'configgen/src/test/java/com/yahoo/config/codegen/DefParserNamespaceTest.java')
-rw-r--r--configgen/src/test/java/com/yahoo/config/codegen/DefParserNamespaceTest.java141
1 files changed, 141 insertions, 0 deletions
diff --git a/configgen/src/test/java/com/yahoo/config/codegen/DefParserNamespaceTest.java b/configgen/src/test/java/com/yahoo/config/codegen/DefParserNamespaceTest.java
new file mode 100644
index 00000000000..a0dff8dcf91
--- /dev/null
+++ b/configgen/src/test/java/com/yahoo/config/codegen/DefParserNamespaceTest.java
@@ -0,0 +1,141 @@
+package com.yahoo.config.codegen;
+
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static com.yahoo.config.codegen.DefParserTest.assertExceptionAndMessage;
+import static com.yahoo.config.codegen.DefParserTest.createDefTemplate;
+import static com.yahoo.config.codegen.DefParserTest.createParser;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+/**
+ * @author gjoranv
+ * @author musum
+ */
+public class DefParserNamespaceTest {
+
+ @Test
+ public void namespace_is_set_on_root_node() {
+ DefParser parser = createParser("version=1\nnamespace=myproject.config\na string\n");
+ CNode root = parser.getTree();
+ assertThat(root.getNamespace(), is("myproject.config"));
+ }
+
+ @Test(expected = CodegenRuntimeException.class)
+ public void uppercase_chars_are_not_allowed() {
+ createParser("version=1\nnamespace=Foo\na string\n").getTree();
+ }
+
+ @Test(expected = CodegenRuntimeException.class)
+ public void explicit_com_yahoo_prefix_is_not_allowed() {
+ createParser("version=1\n" +
+ "namespace=com.yahoo.myproject.config\n" +
+ "a string\n").getTree();
+ }
+
+ @Test
+ public void spaces_are_allowed_around_equals_sign() {
+ DefParser parser = createParser("version=1\nnamespace = myproject.config\na string\n");
+ CNode root = parser.getTree();
+ assertThat(root.getNamespace(), is("myproject.config"));
+ }
+
+ @Test
+ public void empty_namespace_is_not_allowed() {
+ // invalid
+ DefParser parser = createParser("version=1\nnamespace \na string\n");
+ try {
+ parser.getTree();
+ fail();
+ } catch (Exception e) {
+ //e.printStackTrace();
+ assertExceptionAndMessage(e, CodegenRuntimeException.class,
+ "Error parsing or reading config definition.Error when parsing line 2: namespace \n" +
+ "namespace");
+ }
+ }
+
+ @Test
+ public void consecutive_dots_are_not_allowed() {
+ // invalid
+ DefParser parser = createParser("version=1\nnamespace=a..b\na string\n");
+ try {
+ parser.getTree();
+ fail();
+ } catch (Exception e) {
+ //e.printStackTrace();
+ assertExceptionAndMessage(e, CodegenRuntimeException.class,
+ "Error parsing or reading config definition.Error when parsing line 2: namespace=a..b\n" +
+ "namespace=a..b");
+ }
+ }
+
+ @Test
+ public void namespace_alters_def_md5() {
+ DefParser parser = createParser("version=1\na string\n");
+ CNode root = parser.getTree();
+
+ parser = createParser("version=1\nnamespace=myproject.config\na string\n");
+ CNode namespaceRoot = parser.getTree();
+
+ assertThat(root.defMd5, not(namespaceRoot.defMd5));
+ }
+
+
+ @Test
+ public void number_is_allowed_as_non_leading_char_in_namespace() throws IOException, DefParser.DefParserException {
+ StringBuilder sb = createDefTemplate();
+ String line = "namespace=a.b.c2\nfoo int\n";
+ sb.append(line);
+ createParser(sb.toString()).parse();
+ }
+
+ @Test
+ public void number_is_not_allowed_as_namespace_start_char() throws IOException, DefParser.DefParserException {
+ StringBuilder sb = createDefTemplate();
+ String line = "namespace=2.a.b";
+ sb.append(line).append("\n");
+ Class<?> exceptionClass = DefParser.DefParserException.class;
+ try {
+ createParser(sb.toString()).parse();
+ fail("Didn't find expected exception of type " + exceptionClass);
+ } catch (Exception e) {
+ assertExceptionAndMessage(e, exceptionClass,
+ "Error when parsing line 3: " + line + "\n" + line);
+ }
+ }
+
+ @Test
+ public void number_is_not_allowed_as_leading_char_in_namespace_token() throws IOException, DefParser.DefParserException {
+ StringBuilder sb = createDefTemplate();
+ String line = "namespace=a.b.2c";
+ sb.append(line).append("\n");
+ Class<?> exceptionClass = DefParser.DefParserException.class;
+ try {
+ createParser(sb.toString()).parse();
+ fail("Didn't find expected exception of type " + exceptionClass);
+ } catch (Exception e) {
+ assertExceptionAndMessage(e, exceptionClass,
+ "Error when parsing line 3: " + line + "\n" + line);
+ }
+
+ }
+
+ @Test
+ public void underscore_in_namespace_is_allowed() throws IOException, DefParser.DefParserException {
+ StringBuilder sb = createDefTemplate();
+ String line = "namespace=a_b.c\nfoo int\n";
+ sb.append(line);
+ createParser(sb.toString()).parse();
+
+ sb = createDefTemplate();
+ line = "namespace=a_b.c_d\nfoo int\n";
+ sb.append(line);
+ createParser(sb.toString()).parse();
+ }
+
+}