PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/spec/unit/type/host_spec.rb

https://github.com/yoyo2k/puppet
Ruby | 129 lines | 100 code | 27 blank | 2 comment | 13 complexity | 71c08fca9e4e2b7e5716a19ea7f967dd MD5 | raw file
Possible License(s): Apache-2.0
  1. #!/usr/bin/env rspec
  2. require 'spec_helper'
  3. host = Puppet::Type.type(:host)
  4. describe host do
  5. before do
  6. @class = host
  7. @catalog = Puppet::Resource::Catalog.new
  8. @provider = stub 'provider'
  9. @resource = stub 'resource', :resource => nil, :provider => @provider
  10. end
  11. it "should have :name be its namevar" do
  12. @class.key_attributes.should == [:name]
  13. end
  14. describe "when validating attributes" do
  15. [:name, :provider ].each do |param|
  16. it "should have a #{param} parameter" do
  17. @class.attrtype(param).should == :param
  18. end
  19. end
  20. [:ip, :target, :host_aliases, :comment, :ensure].each do |property|
  21. it "should have a #{property} property" do
  22. @class.attrtype(property).should == :property
  23. end
  24. end
  25. it "should have a list host_aliases" do
  26. @class.attrclass(:host_aliases).ancestors.should be_include(Puppet::Property::OrderedList)
  27. end
  28. end
  29. describe "when validating values" do
  30. it "should support present as a value for ensure" do
  31. proc { @class.new(:name => "foo", :ensure => :present) }.should_not raise_error
  32. end
  33. it "should support absent as a value for ensure" do
  34. proc { @class.new(:name => "foo", :ensure => :absent) }.should_not raise_error
  35. end
  36. it "should accept IPv4 addresses" do
  37. proc { @class.new(:name => "foo", :ip => '10.96.0.1') }.should_not raise_error
  38. end
  39. it "should accept long IPv6 addresses" do
  40. # Taken from wikipedia article about ipv6
  41. proc { @class.new(:name => "foo", :ip => '2001:0db8:85a3:08d3:1319:8a2e:0370:7344') }.should_not raise_error
  42. end
  43. it "should accept one host_alias" do
  44. proc { @class.new(:name => "foo", :host_aliases => 'alias1') }.should_not raise_error
  45. end
  46. it "should accept multiple host_aliases" do
  47. proc { @class.new(:name => "foo", :host_aliases => [ 'alias1', 'alias2' ]) }.should_not raise_error
  48. end
  49. it "should accept shortened IPv6 addresses" do
  50. proc { @class.new(:name => "foo", :ip => '2001:db8:0:8d3:0:8a2e:70:7344') }.should_not raise_error
  51. proc { @class.new(:name => "foo", :ip => '::ffff:192.0.2.128') }.should_not raise_error
  52. proc { @class.new(:name => "foo", :ip => '::1') }.should_not raise_error
  53. end
  54. it "should not accept malformed IPv4 addresses like 192.168.0.300" do
  55. proc { @class.new(:name => "foo", :ip => '192.168.0.300') }.should raise_error
  56. end
  57. it "should not accept malformed IP addresses like 2001:0dg8:85a3:08d3:1319:8a2e:0370:7344" do
  58. proc { @class.new(:name => "foo", :ip => '2001:0dg8:85a3:08d3:1319:8a2e:0370:7344') }.should raise_error
  59. end
  60. it "should not accept spaces in resourcename" do
  61. proc { @class.new(:name => "foo bar") }.should raise_error
  62. end
  63. it "should not accept host_aliases with spaces" do
  64. proc { @class.new(:name => "foo", :host_aliases => [ 'well_formed', 'not wellformed' ]) }.should raise_error
  65. end
  66. it "should not accept empty host_aliases" do
  67. proc { @class.new(:name => "foo", :host_aliases => ['alias1','']) }.should raise_error
  68. end
  69. end
  70. describe "when syncing" do
  71. it "should send the first value to the provider for ip property" do
  72. @ip = @class.attrclass(:ip).new(:resource => @resource, :should => %w{192.168.0.1 192.168.0.2})
  73. @provider.expects(:ip=).with '192.168.0.1'
  74. @ip.sync
  75. end
  76. it "should send the first value to the provider for comment property" do
  77. @comment = @class.attrclass(:comment).new(:resource => @resource, :should => %w{Bazinga Notme})
  78. @provider.expects(:comment=).with 'Bazinga'
  79. @comment.sync
  80. end
  81. it "should send the joined array to the provider for host_alias" do
  82. @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
  83. @provider.expects(:host_aliases=).with 'foo bar'
  84. @host_aliases.sync
  85. end
  86. it "should also use the specified delimiter for joining" do
  87. @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
  88. @host_aliases.stubs(:delimiter).returns "\t"
  89. @provider.expects(:host_aliases=).with "foo\tbar"
  90. @host_aliases.sync
  91. end
  92. it "should care about the order of host_aliases" do
  93. @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
  94. @host_aliases.insync?(%w{foo bar}).should == true
  95. @host_aliases.insync?(%w{bar foo}).should == false
  96. end
  97. it "should not consider aliases to be in sync if should is a subset of current" do
  98. @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
  99. @host_aliases.insync?(%w{foo bar anotherone}).should == false
  100. end
  101. end
  102. end