summaryrefslogtreecommitdiffstats
path: root/test/parser
diff options
context:
space:
mode:
authorlutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-04 19:57:54 +0000
committerlutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-04 19:57:54 +0000
commitc0a9e5f2e9df8e6e1aed74653ae675029af8a9bb (patch)
tree8c4008e3cf2a8b10332534edaecf42feeba49cf3 /test/parser
parent5d42cd51a3502518a5d0a22928a133768dcaeb1a (diff)
downloadpuppet-c0a9e5f2e9df8e6e1aed74653ae675029af8a9bb.tar.gz
puppet-c0a9e5f2e9df8e6e1aed74653ae675029af8a9bb.tar.xz
puppet-c0a9e5f2e9df8e6e1aed74653ae675029af8a9bb.zip
Change how names for nodes are specified: the 'node' keyword can be followed by a NAME or by single quoted text, i.e. fully qualified names for nodes must be enclosed in single quotes
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1064 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test/parser')
-rw-r--r--test/parser/node.rb84
1 files changed, 84 insertions, 0 deletions
diff --git a/test/parser/node.rb b/test/parser/node.rb
new file mode 100644
index 000000000..5013b190d
--- /dev/null
+++ b/test/parser/node.rb
@@ -0,0 +1,84 @@
+if __FILE__ == $0
+ $:.unshift '../../lib'
+ $:.unshift '..'
+ $puppetbase = "../.."
+end
+
+require 'puppet'
+require 'puppet/parser/parser'
+require 'test/unit'
+require 'puppettest'
+
+class TestParser < Test::Unit::TestCase
+ include ParserTesting
+
+ def setup
+ super
+ Puppet[:parseonly] = true
+ @parser = Puppet::Parser::Parser.new()
+ end
+
+ def test_simple_hostname
+ check_parseable "host1"
+ check_parseable "'host2'"
+ check_parseable [ "'host1'", "host2" ]
+ check_parseable [ "'host1'", "'host2'" ]
+ end
+
+ def test_qualified_hostname
+ check_parseable "'host.example.com'"
+ check_parseable [ "'host.example.com'", "host1" ]
+ check_parseable "'host-1.37examples.example.com'"
+ check_parseable "'svn.23.nu'"
+ check_parseable "'HOST'"
+ end
+
+ def test_reject_hostname
+ check_nonparseable "host.example.com"
+ check_nonparseable "host@example.com"
+ check_nonparseable "\"host\""
+ check_nonparseable "'$foo.example.com'"
+ check_nonparseable "'host1 host2'"
+ check_nonparseable "HOST"
+ end
+
+ AST = Puppet::Parser::AST
+
+ def check_parseable(hostnames)
+ unless hostnames.is_a?(Array)
+ hostnames = [ hostnames ]
+ end
+ assert_nothing_raised {
+ @parser.string = "node #{hostnames.join(" ")} { }"
+ }
+ # Strip quotes
+ hostnames.map! { |s| s.sub(/^'(.*)'$/, "\\1") }
+ ast = nil
+ assert_nothing_raised {
+ ast = @parser.parse
+ }
+ # Verify that the AST has the expected structure
+ # and that the leaves have the right hostnames in them
+ assert_kind_of(AST::ASTArray, ast)
+ assert_equal(1, ast.children.size)
+ nodedef = ast.children[0]
+ assert_kind_of(AST::NodeDef, nodedef)
+ assert_kind_of(AST::ASTArray, nodedef.names)
+ assert_equal(hostnames.size, nodedef.names.children.size)
+ hostnames.size.times do |i|
+ hostnode = nodedef.names.children[i]
+ assert_kind_of(AST::HostName, hostnode)
+ assert_equal(hostnames[i], hostnode.value)
+ end
+ end
+
+ def check_nonparseable(hostname)
+ assert_nothing_raised {
+ @parser.string = "node #{hostname} { }"
+ }
+
+ assert_raise(Puppet::DevError, Puppet::ParseError) {
+ @parser.parse
+ }
+ end
+end