summaryrefslogtreecommitdiffstats
path: root/spec/unit
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2007-09-12 15:32:25 -0500
committerLuke Kanies <luke@madstop.com>2007-09-12 15:32:25 -0500
commita6fe70054f4fb3efe4d558ffdd244917ca1c6f9c (patch)
tree6b8dbf7f3f2779254174b0829412a5365ad6ebed /spec/unit
parent1459c507ddccff2a2a6fbadd4c880c023b5e9893 (diff)
downloadpuppet-a6fe70054f4fb3efe4d558ffdd244917ca1c6f9c.tar.gz
puppet-a6fe70054f4fb3efe4d558ffdd244917ca1c6f9c.tar.xz
puppet-a6fe70054f4fb3efe4d558ffdd244917ca1c6f9c.zip
Another intermediate commit. The node and fact classes are now functional and are used instead of the network handlers, which have been removed. There are some failing tests as a result, but I want to get this code committed before I massage the rest of the system to make it work again.
Diffstat (limited to 'spec/unit')
-rwxr-xr-xspec/unit/indirector/facts/yaml.rb2
-rwxr-xr-xspec/unit/indirector/indirection.rb57
-rwxr-xr-xspec/unit/indirector/indirector.rb34
-rwxr-xr-xspec/unit/indirector/node/external.rb119
-rwxr-xr-xspec/unit/indirector/node/ldap.rb243
-rwxr-xr-xspec/unit/indirector/node/none.rb32
-rwxr-xr-xspec/unit/node/facts.rb25
-rwxr-xr-xspec/unit/node/node.rb20
-rwxr-xr-xspec/unit/other/node.rb101
-rwxr-xr-xspec/unit/util/config.rb56
10 files changed, 530 insertions, 159 deletions
diff --git a/spec/unit/indirector/facts/yaml.rb b/spec/unit/indirector/facts/yaml.rb
index 45c079a69..176a47f04 100755
--- a/spec/unit/indirector/facts/yaml.rb
+++ b/spec/unit/indirector/facts/yaml.rb
@@ -23,7 +23,7 @@ describe Puppet::Indirector.terminus(:facts, :yaml), " when managing facts" do
it "should store facts in YAML in the yamlfactdir" do
values = {"one" => "two", "three" => "four"}
facts = Puppet::Node::Facts.new("node", values)
- @store.put(facts)
+ @store.post(facts)
# Make sure the file exists
path = File.join(Puppet[:yamlfactdir], facts.name) + ".yaml"
diff --git a/spec/unit/indirector/indirection.rb b/spec/unit/indirector/indirection.rb
new file mode 100755
index 000000000..e9b10c8c7
--- /dev/null
+++ b/spec/unit/indirector/indirection.rb
@@ -0,0 +1,57 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+require 'puppet/indirector'
+
+describe Puppet::Indirector::Indirection, " when initializing" do
+ it "should set the name" do
+ @indirection = Puppet::Indirector::Indirection.new(:myind)
+ @indirection.name.should == :myind
+ end
+
+ it "should set any passed options" do
+ @indirection = Puppet::Indirector::Indirection.new(:myind, :to => :node_source)
+ @indirection.to.should == :node_source
+ end
+
+ it "should only allow valid configuration parameters to be specified as :to targets" do
+ proc { Puppet::Indirector::Indirection.new(:myind, :to => :no_such_variable) }.should raise_error(ArgumentError)
+ end
+
+ after do
+ if defined? @indirection
+ @indirection.delete
+ end
+ end
+end
+
+describe Puppet::Indirector, " when managing termini" do
+ before do
+ @indirection = Puppet::Indirector::Indirection.new(:node, :to => :node_source)
+ end
+
+ it "should allow the clearance of cached termini" do
+ terminus1 = mock 'terminus1'
+ terminus2 = mock 'terminus2'
+ Puppet::Indirector.terminus(:node, Puppet[:node_source]).stubs(:new).returns(terminus1, terminus2, ArgumentError)
+ @indirection.terminus.should equal(terminus1)
+ @indirection.class.clear_cache
+ @indirection.terminus.should equal(terminus2)
+ end
+
+ # Make sure it caches the terminus.
+ it "should return the same terminus each time" do
+ @indirection = Puppet::Indirector::Indirection.new(:node, :to => :node_source)
+ @terminus = mock 'new'
+ Puppet::Indirector.terminus(:node, Puppet[:node_source]).expects(:new).returns(@terminus)
+
+ @indirection.terminus.should equal(@terminus)
+ @indirection.terminus.should equal(@terminus)
+ end
+
+ after do
+ @indirection.delete
+ Puppet::Indirector::Indirection.clear_cache
+ end
+end
diff --git a/spec/unit/indirector/indirector.rb b/spec/unit/indirector/indirector.rb
index c4221febb..312c60951 100755
--- a/spec/unit/indirector/indirector.rb
+++ b/spec/unit/indirector/indirector.rb
@@ -11,15 +11,10 @@ describe Puppet::Indirector, " when managing indirections" do
@indirector.send(:extend, Puppet::Indirector)
end
- # LAK:FIXME This seems like multiple tests, but I don't really know how to test one at a time.
- it "should accept specification of an indirection terminus via a configuration parameter" do
- @indirector.indirects :test, :to => :node_source
- Puppet[:node_source] = "test_source"
- klass = mock 'terminus_class'
- terminus = mock 'terminus'
- klass.expects(:new).returns terminus
- Puppet::Indirector.expects(:terminus).with(:test, :test_source).returns(klass)
- @indirector.send(:terminus).should equal(terminus)
+ it "should create an indirection" do
+ indirection = @indirector.indirects :test, :to => :node_source
+ indirection.name.should == :test
+ indirection.to.should == :node_source
end
it "should not allow more than one indirection in the same object" do
@@ -33,18 +28,15 @@ describe Puppet::Indirector, " when managing indirections" do
other.send(:extend, Puppet::Indirector)
proc { other.indirects :test }.should_not raise_error
end
-end
-
-describe Puppet::Indirector, " when managing termini" do
- before do
- @indirector = Object.new
- @indirector.send(:extend, Puppet::Indirector)
- end
it "should should autoload termini from disk" do
Puppet::Indirector.expects(:instance_load).with(:test, "puppet/indirector/test")
@indirector.indirects :test
end
+
+ after do
+ Puppet.config.clear
+ end
end
describe Puppet::Indirector, " when performing indirections" do
@@ -66,14 +58,4 @@ describe Puppet::Indirector, " when performing indirections" do
@terminus_class.expects(:new).returns(terminus)
@indirector.put("myargument")
end
-
- # Make sure it caches the terminus.
- it "should use the same terminus for all indirections" do
- terminus = mock 'terminus'
- terminus.expects(:put).with("myargument")
- terminus.expects(:get).with("other_argument")
- @terminus_class.expects(:new).returns(terminus)
- @indirector.put("myargument")
- @indirector.get("other_argument")
- end
end
diff --git a/spec/unit/indirector/node/external.rb b/spec/unit/indirector/node/external.rb
new file mode 100755
index 000000000..30b2f74c2
--- /dev/null
+++ b/spec/unit/indirector/node/external.rb
@@ -0,0 +1,119 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+require 'yaml'
+require 'puppet/indirector'
+
+describe Puppet::Indirector.terminus(:node, :external), " when searching for nodes" do
+ require 'puppet/node'
+
+ before do
+ Puppet.config[:external_nodes] = "/yay/ness"
+ @searcher = Puppet::Indirector.terminus(:node, :external).new
+
+ # Set the searcher up so that we do not need to actually call the
+ # external script.
+ @searcher.meta_def(:execute) do |command|
+ name = command.last.chomp
+ result = {}
+
+ if name =~ /a/
+ result[:parameters] = {'one' => command.last + '1', 'two' => command.last + '2'}
+ end
+
+ if name =~ /p/
+ result['classes'] = [1,2,3].collect { |n| command.last + n.to_s }
+ end
+
+ return YAML.dump(result)
+ end
+ end
+
+ it "should throw an exception if the node_source is external but no external node command is set" do
+ Puppet[:external_nodes] = "none"
+ proc { @searcher.get("foo") }.should raise_error(ArgumentError)
+ end
+
+ it "should throw an exception if the external node source is not fully qualified" do
+ Puppet[:external_nodes] = "mycommand"
+ proc { @searcher.get("foo") }.should raise_error(ArgumentError)
+ end
+
+ it "should execute the command with the node name as the only argument" do
+ command = [Puppet[:external_nodes], "yay"]
+ @searcher.expects(:execute).with(command).returns("")
+ @searcher.get("yay")
+ end
+
+ it "should return a node object" do
+ @searcher.get("apple").should be_instance_of(Puppet::Node)
+ end
+
+ it "should set the node's name" do
+ @searcher.get("apple").name.should == "apple"
+ end
+
+ # If we use a name that has a 'p' but no 'a', then our test generator
+ # will return classes but no parameters.
+ it "should be able to configure a node's classes" do
+ node = @searcher.get("plum")
+ node.classes.should == %w{plum1 plum2 plum3}
+ node.parameters.should == {}
+ end
+
+ # If we use a name that has an 'a' but no 'p', then our test generator
+ # will return parameters but no classes.
+ it "should be able to configure a node's parameters" do
+ node = @searcher.get("guava")
+ node.classes.should == []
+ node.parameters.should == {"one" => "guava1", "two" => "guava2"}
+ end
+
+ it "should be able to configure a node's classes and parameters" do
+ node = @searcher.get("apple")
+ node.classes.should == %w{apple1 apple2 apple3}
+ node.parameters.should == {"one" => "apple1", "two" => "apple2"}
+ end
+
+ it "should merge node facts with returned parameters" do
+ facts = Puppet::Node::Facts.new("apple", "three" => "four")
+ Puppet::Node::Facts.expects(:get).with("apple").returns(facts)
+ node = @searcher.get("apple")
+ node.parameters["three"].should == "four"
+ end
+
+ it "should return nil when it cannot find the node" do
+ @searcher.get("honeydew").should be_nil
+ end
+
+ # Make sure a nodesearch with arguments works
+ def test_nodesearch_external_arguments
+ mapper = mk_node_mapper
+ Puppet[:external_nodes] = "#{mapper} -s something -p somethingelse"
+ searcher = mk_searcher(:external)
+ node = nil
+ assert_nothing_raised do
+ node = searcher.nodesearch("apple")
+ end
+ assert_instance_of(SimpleNode, node, "did not create node")
+ end
+
+ # A wrapper test, to make sure we're correctly calling the external search method.
+ def test_nodesearch_external_functional
+ mapper = mk_node_mapper
+ searcher = mk_searcher(:external)
+
+ Puppet[:external_nodes] = mapper
+
+ node = nil
+ assert_nothing_raised do
+ node = searcher.nodesearch("apple")
+ end
+ assert_instance_of(SimpleNode, node, "did not create node")
+ end
+
+ after do
+ Puppet.config.clear
+ end
+end
diff --git a/spec/unit/indirector/node/ldap.rb b/spec/unit/indirector/node/ldap.rb
new file mode 100755
index 000000000..c6eb45ffc
--- /dev/null
+++ b/spec/unit/indirector/node/ldap.rb
@@ -0,0 +1,243 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+require 'yaml'
+require 'puppet/indirector'
+
+describe Puppet::Indirector.terminus(:node, :ldap), " when searching for nodes" do
+ require 'puppet/node'
+
+ def setup
+ Puppet.config[:external_nodes] = "/yay/ness"
+ @searcher = Puppet::Indirector.terminus(:node, :ldap).new
+ nodetable = {}
+ @nodetable = nodetable
+ # Override the ldapsearch definition, so we don't have to actually set it up.
+ @searcher.meta_def(:ldapsearch) do |name|
+ nodetable[name]
+ end
+ end
+
+ it "should return nil for hosts that cannot be found" do
+ @searcher.get("foo").should be_nil
+ end
+
+ it "should return Puppet::Node instances" do
+ @nodetable["foo"] = [nil, %w{}, {}]
+ @searcher.get("foo").should be_instance_of(Puppet::Node)
+ end
+
+ it "should set the node name" do
+ @nodetable["foo"] = [nil, %w{}, {}]
+ @searcher.get("foo").name.should == "foo"
+ end
+
+ it "should set the classes" do
+ @nodetable["foo"] = [nil, %w{one two}, {}]
+ @searcher.get("foo").classes.should == %w{one two}
+ end
+
+ it "should set the parameters" do
+ @nodetable["foo"] = [nil, %w{}, {"one" => "two"}]
+ @searcher.get("foo").parameters.should == {"one" => "two"}
+ end
+
+ it "should set classes and parameters from the parent node" do
+ @nodetable["foo"] = ["middle", %w{one two}, {"one" => "two"}]
+ @nodetable["middle"] = [nil, %w{three four}, {"three" => "four"}]
+ node = @searcher.get("foo")
+ node.classes.sort.should == %w{one two three four}.sort
+ node.parameters.should == {"one" => "two", "three" => "four"}
+ end
+
+ it "should prefer child parameters to parent parameters" do
+ @nodetable["foo"] = ["middle", %w{}, {"one" => "two"}]
+ @nodetable["middle"] = [nil, %w{}, {"one" => "four"}]
+ @searcher.get("foo").parameters["one"].should == "two"
+ end
+
+ it "should recurse indefinitely through parent relationships" do
+ @nodetable["foo"] = ["middle", %w{one two}, {"one" => "two"}]
+ @nodetable["middle"] = ["top", %w{three four}, {"three" => "four"}]
+ @nodetable["top"] = [nil, %w{five six}, {"five" => "six"}]
+ node = @searcher.get("foo")
+ node.parameters.should == {"one" => "two", "three" => "four", "five" => "six"}
+ node.classes.sort.should == %w{one two three four five six}.sort
+ end
+
+ # This can stay in the main test suite because it doesn't actually use ldapsearch,
+ # it just overrides the method so it behaves as though it were hitting ldap.
+ def test_ldap_nodesearch
+
+ # Make sure we get nothing for nonexistent hosts
+ node = nil
+ assert_nothing_raised do
+ node = searcher.nodesearch("nosuchhost")
+ end
+
+ assert_nil(node, "Got a node for a non-existent host")
+
+ # Now add a base node with some classes and parameters
+ nodetable["base"] = [nil, %w{one two}, {"base" => "true"}]
+
+ assert_nothing_raised do
+ node = searcher.nodesearch("base")
+ end
+
+ assert_instance_of(SimpleNode, node, "Did not get node from ldap nodesearch")
+ assert_equal("base", node.name, "node name was not set")
+
+ assert_equal(%w{one two}, node.classes, "node classes were not set")
+ assert_equal({"base" => "true"}, node.parameters, "node parameters were not set")
+
+ # Now use a different with this as the base
+ nodetable["middle"] = ["base", %w{three}, {"center" => "boo"}]
+ assert_nothing_raised do
+ node = searcher.nodesearch("middle")
+ end
+
+ assert_instance_of(SimpleNode, node, "Did not get node from ldap nodesearch")
+ assert_equal("middle", node.name, "node name was not set")
+
+ assert_equal(%w{one two three}.sort, node.classes.sort, "node classes were not set correctly with a parent node")
+ assert_equal({"base" => "true", "center" => "boo"}, node.parameters, "node parameters were not set correctly with a parent node")
+
+ # And one further, to make sure we fully recurse
+ nodetable["top"] = ["middle", %w{four five}, {"master" => "far"}]
+ assert_nothing_raised do
+ node = searcher.nodesearch("top")
+ end
+
+ assert_instance_of(SimpleNode, node, "Did not get node from ldap nodesearch")
+ assert_equal("top", node.name, "node name was not set")
+
+ assert_equal(%w{one two three four five}.sort, node.classes.sort, "node classes were not set correctly with the top node")
+ assert_equal({"base" => "true", "center" => "boo", "master" => "far"}, node.parameters, "node parameters were not set correctly with the top node")
+ end
+end
+
+describe Puppet::Indirector.terminus(:node, :ldap), " when interacting with ldap" do
+ confine "LDAP is not available" => Puppet.features.ldap?
+ confine "No LDAP test data for networks other than Luke's" => Facter.value(:domain) == "madstop.com"
+
+ def ldapconnect
+
+ @ldap = LDAP::Conn.new("ldap", 389)
+ @ldap.set_option( LDAP::LDAP_OPT_PROTOCOL_VERSION, 3 )
+ @ldap.simple_bind("", "")
+
+ return @ldap
+ end
+
+ def ldaphost(name)
+ node = Puppet::Node.new(name)
+ parent = nil
+ found = false
+ @ldap.search( "ou=hosts, dc=madstop, dc=com", 2,
+ "(&(objectclass=puppetclient)(cn=%s))" % name
+ ) do |entry|
+ node.classes = entry.vals("puppetclass") || []
+ node.parameters = entry.to_hash.inject({}) do |hash, ary|
+ if ary[1].length == 1
+ hash[ary[0]] = ary[1].shift
+ else
+ hash[ary[0]] = ary[1]
+ end
+ hash
+ end
+ parent = node.parameters["parentnode"]
+ found = true
+ end
+ raise "Could not find node %s" % name unless found
+
+ return node, parent
+ end
+
+ it "should have tests" do
+ raise ArgumentError
+ end
+
+ def test_ldapsearch
+ Puppet[:ldapbase] = "ou=hosts, dc=madstop, dc=com"
+ Puppet[:ldapnodes] = true
+
+ searcher = Object.new
+ searcher.extend(Node.node_source(:ldap))
+
+ ldapconnect()
+
+ # Make sure we get nil and nil back when we search for something missing
+ parent, classes, parameters = nil
+ assert_nothing_raised do
+ parent, classes, parameters = searcher.ldapsearch("nosuchhost")
+ end
+
+ assert_nil(parent, "Got a parent for a non-existent host")
+ assert_nil(classes, "Got classes for a non-existent host")
+
+ # Make sure we can find 'culain' in ldap
+ assert_nothing_raised do
+ parent, classes, parameters = searcher.ldapsearch("culain")
+ end
+
+ node, realparent = ldaphost("culain")
+ assert_equal(realparent, parent, "did not get correct parent node from ldap")
+ assert_equal(node.classes, classes, "did not get correct ldap classes from ldap")
+ assert_equal(node.parameters, parameters, "did not get correct ldap parameters from ldap")
+
+ # Now compare when we specify the attributes to get.
+ Puppet[:ldapattrs] = "cn"
+ assert_nothing_raised do
+ parent, classes, parameters = searcher.ldapsearch("culain")
+ end
+ assert_equal(realparent, parent, "did not get correct parent node from ldap")
+ assert_equal(node.classes, classes, "did not get correct ldap classes from ldap")
+
+ list = %w{cn puppetclass parentnode dn}
+ should = node.parameters.inject({}) { |h, a| h[a[0]] = a[1] if list.include?(a[0]); h }
+ assert_equal(should, parameters, "did not get correct ldap parameters from ldap")
+ end
+end
+
+describe Puppet::Indirector.terminus(:node, :ldap), " when connecting to ldap" do
+ confine "Not running on culain as root" => (Puppet::Util::SUIDManager.uid == 0 and Facter.value("hostname") == "culain")
+
+ it "should have tests" do
+ raise ArgumentError
+ end
+
+ def test_ldapreconnect
+ Puppet[:ldapbase] = "ou=hosts, dc=madstop, dc=com"
+ Puppet[:ldapnodes] = true
+
+ searcher = Object.new
+ searcher.extend(Node.node_source(:ldap))
+ hostname = "culain.madstop.com"
+
+ # look for our host
+ assert_nothing_raised {
+ parent, classes = searcher.nodesearch(hostname)
+ }
+
+ # Now restart ldap
+ system("/etc/init.d/slapd restart 2>/dev/null >/dev/null")
+ sleep(1)
+
+ # and look again
+ assert_nothing_raised {
+ parent, classes = searcher.nodesearch(hostname)
+ }
+
+ # Now stop ldap
+ system("/etc/init.d/slapd stop 2>/dev/null >/dev/null")
+ cleanup do
+ system("/etc/init.d/slapd start 2>/dev/null >/dev/null")
+ end
+
+ # And make sure we actually fail here
+ assert_raise(Puppet::Error) {
+ parent, classes = searcher.nodesearch(hostname)
+ }
+ end
+end
diff --git a/spec/unit/indirector/node/none.rb b/spec/unit/indirector/node/none.rb
new file mode 100755
index 000000000..d52d7ca83
--- /dev/null
+++ b/spec/unit/indirector/node/none.rb
@@ -0,0 +1,32 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'puppet/indirector'
+require 'puppet/node/facts'
+
+describe Puppet::Indirector.terminus(:node, :none), " when searching for nodes" do
+ before do
+ Puppet.config[:node_source] = "none"
+ @searcher = Puppet::Indirector.terminus(:node, :none).new
+ end
+
+ it "should create a node instance" do
+ @searcher.get("yay").should be_instance_of(Puppet::Node)
+ end
+
+ it "should create a new node with the correct name" do
+ @searcher.get("yay").name.should == "yay"
+ end
+
+ it "should merge the node's facts" do
+ facts = Puppet::Node::Facts.new("yay", "one" => "two", "three" => "four")
+ Puppet::Node::Facts.expects(:get).with("yay").returns(facts)
+ node = @searcher.get("yay")
+ node.parameters["one"].should == "two"
+ node.parameters["three"].should == "four"
+ end
+
+ after do
+ Puppet.config.clear
+ end
+end
diff --git a/spec/unit/node/facts.rb b/spec/unit/node/facts.rb
index c7fc65f38..c677c1d2e 100755
--- a/spec/unit/node/facts.rb
+++ b/spec/unit/node/facts.rb
@@ -6,11 +6,12 @@ require 'puppet/node/facts'
describe Puppet::Node::Facts, " when indirecting" do
before do
- Puppet[:fact_store] = "test_store"
- @terminus_class = mock 'terminus_class'
@terminus = mock 'terminus'
- @terminus_class.expects(:new).returns(@terminus)
- Puppet::Indirector.expects(:terminus).with(:facts, :test_store).returns(@terminus_class)
+ Puppet::Indirector.terminus(:facts, Puppet[:fact_store].intern).stubs(:new).returns(@terminus)
+
+ # We have to clear the cache so that the facts ask for our terminus stub,
+ # instead of anything that might be cached.
+ Puppet::Indirector::Indirection.clear_cache
end
it "should redirect to the specified fact store for retrieval" do
@@ -19,7 +20,19 @@ describe Puppet::Node::Facts, " when indirecting" do
end
it "should redirect to the specified fact store for storage" do
- @terminus.expects(:put).with(:my_facts)
- Puppet::Node::Facts.put(:my_facts)
+ @terminus.expects(:post).with(:my_facts)
+ Puppet::Node::Facts.post(:my_facts)
+ end
+
+ after do
+ mocha_verify
+ Puppet::Indirector::Indirection.clear_cache
+ end
+end
+
+describe Puppet::Node::Facts, " when storing and retrieving" do
+ it "should add metadata to the facts" do
+ facts = Puppet::Node::Facts.new("me", "one" => "two", "three" => "four")
+ facts.values[:_timestamp].should be_instance_of(Time)
end
end
diff --git a/spec/unit/node/node.rb b/spec/unit/node/node.rb
index a6cc1e301..9342dc5ce 100755
--- a/spec/unit/node/node.rb
+++ b/spec/unit/node/node.rb
@@ -85,32 +85,40 @@ end
describe Puppet::Node, " when merging facts" do
before do
@node = Puppet::Node.new("testnode")
+ Puppet::Node::Facts.stubs(:get).with(@node.name).returns(Puppet::Node::Facts.new(@node.name, "one" => "c", "two" => "b"))
end
it "should prefer parameters already set on the node over facts from the node" do
@node.parameters = {"one" => "a"}
- @node.fact_merge("one" => "c")
+ @node.fact_merge
@node.parameters["one"].should == "a"
end
it "should add passed parameters to the parameter list" do
@node.parameters = {"one" => "a"}
- @node.fact_merge("two" => "b")
+ @node.fact_merge
@node.parameters["two"].should == "b"
end
+
+ it "should accept arbitrary parameters to merge into its parameters" do
+ @node.parameters = {"one" => "a"}
+ @node.merge "two" => "three"
+ @node.parameters["two"].should == "three"
+ end
end
describe Puppet::Node, " when indirecting" do
before do
- Puppet[:node_source] = :test_source
- @terminus_class = mock 'terminus_class'
@terminus = mock 'terminus'
- @terminus_class.expects(:new).returns(@terminus)
- Puppet::Indirector.expects(:terminus).with(:node, :test_source).returns(@terminus_class)
+ Puppet::Indirector.terminus(:node, Puppet[:node_source]).stubs(:new).returns(@terminus)
end
it "should redirect to the specified node source" do
@terminus.expects(:get).with(:my_node)
Puppet::Node.get(:my_node)
end
+
+ after do
+ Puppet::Indirector::Indirection.clear_cache
+ end
end
diff --git a/spec/unit/other/node.rb b/spec/unit/other/node.rb
deleted file mode 100755
index 66d5ba9d7..000000000
--- a/spec/unit/other/node.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe Puppet::Node, " when initializing" do
- before do
- @node = Puppet::Node.new("testnode")
- end
-
- it "should set the node name" do
- @node.name.should == "testnode"
- end
-
- it "should default to an empty parameter hash" do
- @node.parameters.should == {}
- end
-
- it "should default to an empty class array" do
- @node.classes.should == []
- end
-
- it "should note its creation time" do
- @node.time.should be_instance_of(Time)
- end
-
- it "should accept parameters passed in during initialization" do
- params = {"a" => "b"}
- @node = Puppet::Node.new("testing", :parameters => params)
- @node.parameters.should == params
- end
-
- it "should accept classes passed in during initialization" do
- classes = %w{one two}
- @node = Puppet::Node.new("testing", :classes => classes)
- @node.classes.should == classes
- end
-
- it "should always return classes as an array" do
- @node = Puppet::Node.new("testing", :classes => "myclass")
- @node.classes.should == ["myclass"]
- end
-
- it "should accept the environment during initialization" do
- @node = Puppet::Node.new("testing", :environment => "myenv")
- @node.environment.should == "myenv"
- end
-
- it "should accept names passed in" do
- @node = Puppet::Node.new("testing", :names => ["myenv"])
- @node.names.should == ["myenv"]
- end
-end
-
-describe Puppet::Node, " when returning the environment" do
- before do
- @node = Puppet::Node.new("testnode")
- end
-
- it "should return the 'environment' fact if present and there is no explicit environment" do
- @node.parameters = {"environment" => "myenv"}
- @node.environment.should == "myenv"
- end
-
- it "should return the central environment if there is no environment fact nor explicit environment" do
- Puppet.config.expects(:[]).with(:environment).returns(:centralenv)
- @node.environment.should == :centralenv
- end
-
- it "should not use an explicit environment that is an empty string" do
- @node.environment == ""
- @node.environment.should be_nil
- end
-
- it "should not use an environment fact that is an empty string" do
- @node.parameters = {"environment" => ""}
- @node.environment.should be_nil
- end
-
- it "should not use an explicit environment that is an empty string" do
- Puppet.config.expects(:[]).with(:environment).returns(nil)
- @node.environment.should be_nil
- end
-end
-
-describe Puppet::Node, " when merging facts" do
- before do
- @node = Puppet::Node.new("testnode")
- end
-
- it "should prefer parameters already set on the node over facts from the node" do
- @node.parameters = {"one" => "a"}
- @node.fact_merge("one" => "c")
- @node.parameters["one"].should == "a"
- end
-
- it "should add passed parameters to the parameter list" do
- @node.parameters = {"one" => "a"}
- @node.fact_merge("two" => "b")
- @node.parameters["two"].should == "b"
- end
-end
diff --git a/spec/unit/util/config.rb b/spec/unit/util/config.rb
index 348a54893..28ccb04d7 100755
--- a/spec/unit/util/config.rb
+++ b/spec/unit/util/config.rb
@@ -387,22 +387,40 @@ describe Puppet::Util::Config, " when reparsing its configuration" do
end
end
-#describe Puppet::Util::Config, " when being used to manage the host machine" do
-# it "should provide a method that writes files with the correct modes"
-#
-# it "should provide a method that creates directories with the correct modes"
-#
-# it "should provide a method to declare what directories should exist"
-#
-# it "should provide a method to trigger enforcing of file modes on existing files and directories"
-#
-# it "should provide a method to convert the file mode enforcement into a Puppet manifest"
-#
-# it "should provide an option to create needed users and groups"
-#
-# it "should provide a method to print out the current configuration"
-#
-# it "should be able to provide all of its parameters in a format compatible with GetOpt::Long"
-#
-# it "should not attempt to manage files within /dev"
-#end
+describe Puppet::Util::Config, " when being used to manage the host machine" do
+ it "should provide a method that writes files with the correct modes" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should provide a method that creates directories with the correct modes" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should provide a method to declare what directories should exist" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should provide a method to trigger enforcing of file modes on existing files and directories" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should provide a method to convert the file mode enforcement into a Puppet manifest" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should provide an option to create needed users and groups" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should provide a method to print out the current configuration" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should be able to provide all of its parameters in a format compatible with GetOpt::Long" do
+ pending "Not converted from test/unit yet"
+ end
+
+ it "should not attempt to manage files within /dev" do
+ pending "Not converted from test/unit yet"
+ end
+end