summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2008-08-20 12:57:26 -0500
committerLuke Kanies <luke@madstop.com>2008-08-20 12:57:26 -0500
commitc8190421a351ed327361a5daca82441be39ce834 (patch)
tree5eae8eafafacafa817c5e890e03d1a9bcf17358d
parent78bc32d0153dd98fadae99dcd71d26fc97210d3c (diff)
downloadpuppet-c8190421a351ed327361a5daca82441be39ce834.tar.gz
puppet-c8190421a351ed327361a5daca82441be39ce834.tar.xz
puppet-c8190421a351ed327361a5daca82441be39ce834.zip
Fixing the String format (fixes #1522).
The string format no longer provides any support methods, which means that I had to create to_multiple_s and from_multiple_s methods on the SSL classes. I created them in the base class and tested them just in the cert class. Signed-off-by: Luke Kanies <luke@madstop.com>
-rw-r--r--lib/puppet/network/format.rb4
-rw-r--r--lib/puppet/network/formats.rb18
-rw-r--r--lib/puppet/ssl/base.rb11
-rwxr-xr-xspec/integration/network/formats.rb19
-rwxr-xr-xspec/unit/network/formats.rb32
-rwxr-xr-xspec/unit/ssl/certificate.rb44
6 files changed, 69 insertions, 59 deletions
diff --git a/lib/puppet/network/format.rb b/lib/puppet/network/format.rb
index a4515e39f..5f259fa49 100644
--- a/lib/puppet/network/format.rb
+++ b/lib/puppet/network/format.rb
@@ -61,6 +61,10 @@ class Puppet::Network::Format
klass.instance_methods.include?(render_method)
end
+ def to_s
+ "Puppet::Network::Format[%s]" % name
+ end
+
private
attr_reader :intern_method, :render_method, :intern_multiple_method, :render_multiple_method
diff --git a/lib/puppet/network/formats.rb b/lib/puppet/network/formats.rb
index e11748ce6..8e4c59fb3 100644
--- a/lib/puppet/network/formats.rb
+++ b/lib/puppet/network/formats.rb
@@ -53,20 +53,4 @@ Puppet::Network::FormatHandler.create(:marshal, :mime => "text/marshal") do
end
end
-Puppet::Network::FormatHandler.create(:s, :mime => "text/plain") do
- # For now, use the YAML separator.
- SEPARATOR = "\n---\n"
-
- def intern_multiple(klass, text)
- text.split(SEPARATOR).collect { |inst| intern(klass, inst) }
- end
-
- def render_multiple(instances)
- instances.collect { |inst| render(inst) }.join(SEPARATOR)
- end
-
- # Everything's supported
- def supported?(klass)
- true
- end
-end
+Puppet::Network::FormatHandler.create(:s, :mime => "text/plain")
diff --git a/lib/puppet/ssl/base.rb b/lib/puppet/ssl/base.rb
index 08efb314b..a005bfaf0 100644
--- a/lib/puppet/ssl/base.rb
+++ b/lib/puppet/ssl/base.rb
@@ -2,6 +2,17 @@ require 'puppet/ssl'
# The base class for wrapping SSL instances.
class Puppet::SSL::Base
+ # For now, use the YAML separator.
+ SEPARATOR = "\n---\n"
+
+ def self.from_multiple_s(text)
+ text.split(SEPARATOR).collect { |inst| from_s(inst) }
+ end
+
+ def self.to_multiple_s(instances)
+ instances.collect { |inst| inst.to_s }.join(SEPARATOR)
+ end
+
def self.wraps(klass)
@wrapped_class = klass
end
diff --git a/spec/integration/network/formats.rb b/spec/integration/network/formats.rb
new file mode 100755
index 000000000..0cfbadd38
--- /dev/null
+++ b/spec/integration/network/formats.rb
@@ -0,0 +1,19 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+require 'puppet/network/formats'
+
+describe Puppet::Network::FormatHandler.format(:s) do
+ before do
+ @format = Puppet::Network::FormatHandler.format(:s)
+ end
+
+ it "should support certificates" do
+ @format.should be_supported(Puppet::SSL::Certificate)
+ end
+
+ it "should not support catalogs" do
+ @format.should_not be_supported(Puppet::Node::Catalog)
+ end
+end
diff --git a/spec/unit/network/formats.rb b/spec/unit/network/formats.rb
index d5967c6f2..f7493360d 100755
--- a/spec/unit/network/formats.rb
+++ b/spec/unit/network/formats.rb
@@ -98,37 +98,5 @@ describe "Puppet Network Format" do
it "should have its mimetype set to text/plain" do
@text.mime.should == "text/plain"
end
-
- it "should fail if the instance does not respond to 'to_s'" do
- instance = mock 'nope'
- instance.expects(:to_s).never
- lambda { @text.render(instance) }.should raise_error(NotImplementedError)
- end
-
- it "should render by calling 'to_s' on the instance" do
- # Use an instance that responds to 'to_s'
- instance = "foo"
- instance.expects(:to_s).returns "string"
- @text.render(instance).should == "string"
- end
-
- it "should render multiple instances by calling 'to_s' on each instance and joining the results with '\\n---\\n'" do
- instances = ["string1", 'string2']
-
- @text.render_multiple(instances).should == "string1\n---\nstring2"
- end
-
- it "should intern by calling 'from_s' on the class" do
- text = "foo"
- String.expects(:from_s).with(text).returns "bar"
- @text.intern(String, text).should == "bar"
- end
-
- it "should intern multiples by splitting on '\\n---\\n' and converting each string to an instance" do
- text = "foo\n---\nbar"
- String.expects(:from_s).with("foo").returns "FOO"
- String.expects(:from_s).with("bar").returns "BAR"
- @text.intern_multiple(String, text).should == ["FOO", "BAR"]
- end
end
end
diff --git a/spec/unit/ssl/certificate.rb b/spec/unit/ssl/certificate.rb
index 34868dcd2..92b7f2cd6 100755
--- a/spec/unit/ssl/certificate.rb
+++ b/spec/unit/ssl/certificate.rb
@@ -41,6 +41,40 @@ describe Puppet::SSL::Certificate do
@class.from_s("my certificate")
end
+
+ it "should create multiple certificate instances when asked" do
+ cert1 = stub 'cert1'
+ @class.expects(:from_s).with("cert1").returns cert1
+ cert2 = stub 'cert2'
+ @class.expects(:from_s).with("cert2").returns cert2
+
+ @class.from_multiple_s("cert1\n---\ncert2").should == [cert1, cert2]
+ end
+ end
+
+ describe "when converting to a string" do
+ before do
+ @certificate = @class.new("myname")
+ end
+
+ it "should return an empty string when it has no certificate" do
+ @certificate.to_s.should == ""
+ end
+
+ it "should convert the certificate to pem format" do
+ certificate = mock 'certificate', :to_pem => "pem"
+ @certificate.content = certificate
+ @certificate.to_s.should == "pem"
+ end
+
+ it "should be able to convert multiple instances to a string" do
+ cert2 = @class.new("foo")
+ @certificate.expects(:to_s).returns "cert1"
+ cert2.expects(:to_s).returns "cert2"
+
+ @class.to_multiple_s([@certificate, cert2]).should == "cert1\n---\ncert2"
+
+ end
end
describe "when managing instances" do
@@ -84,16 +118,6 @@ describe Puppet::SSL::Certificate do
@certificate.content.should equal(certificate)
end
- it "should return an empty string when converted to a string with no certificate" do
- @certificate.to_s.should == ""
- end
-
- it "should convert the certificate to pem format when converted to a string" do
- certificate = mock 'certificate', :to_pem => "pem"
- @certificate.content = certificate
- @certificate.to_s.should == "pem"
- end
-
it "should have a :to_text method that it delegates to the actual key" do
real_certificate = mock 'certificate'
real_certificate.expects(:to_text).returns "certificatetext"