From c0a9e5f2e9df8e6e1aed74653ae675029af8a9bb Mon Sep 17 00:00:00 2001 From: lutter Date: Tue, 4 Apr 2006 19:57:54 +0000 Subject: 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 --- test/parser/node.rb | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test/parser/node.rb (limited to 'test/parser/node.rb') 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 -- cgit