diff options
| author | lutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-04 19:57:54 +0000 |
|---|---|---|
| committer | lutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-04 19:57:54 +0000 |
| commit | c0a9e5f2e9df8e6e1aed74653ae675029af8a9bb (patch) | |
| tree | 8c4008e3cf2a8b10332534edaecf42feeba49cf3 /test/parser | |
| parent | 5d42cd51a3502518a5d0a22928a133768dcaeb1a (diff) | |
| download | puppet-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.rb | 84 |
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 |
