spec/subject_spec.rb in r509-0.8.1 vs spec/subject_spec.rb in r509-0.9
- old
+ new
@@ -1,203 +1,271 @@
require 'spec_helper'
require 'r509/subject'
require 'openssl'
describe R509::Subject do
- before :all do
- @csr_unknown_oid = TestFixtures::CSR_UNKNOWN_OID
- end
+ before :all do
+ @csr_unknown_oid = TestFixtures::CSR_UNKNOWN_OID
+ end
- it "initializes an empty subject and gets the name" do
- subject = R509::Subject.new
- subject.name.to_s.should == ""
- end
- it "initializes an empty subject, adds a field, and gets the name" do
- subject = R509::Subject.new
- subject["CN"] = "domain.com"
- subject.name.to_s.should == "/CN=domain.com"
- end
- it "initializes with a subject array, and gets the name" do
- subject = R509::Subject.new([["CN", "domain.com"], ["O", "my org"]])
- subject.name.to_s.should == "/CN=domain.com/O=my org"
- end
- it "initializes with a name, gets the name" do
- name = OpenSSL::X509::Name.new([["CN", "domain.com"], ["O", "my org"], ["OU", "my unit"]])
- subject = R509::Subject.new(name)
- subject.name.to_s.should == "/CN=domain.com/O=my org/OU=my unit"
- end
- it "initializes with a subject" do
- s1 = R509::Subject.new
- s1["CN"] = "domain.com"
- s1["O"] = "my org"
+ it "initializes an empty subject and gets the name" do
+ subject = R509::Subject.new
+ subject.name.to_s.should == ""
+ end
+ it "initializes an empty subject, adds a field, and gets the name" do
+ subject = R509::Subject.new
+ subject["CN"] = "domain.com"
+ subject.name.to_s.should == "/CN=domain.com"
+ end
+ it "initializes with a subject array, and gets the name" do
+ subject = R509::Subject.new([["CN", "domain.com"], ["O", "my org"]])
+ subject.name.to_s.should == "/CN=domain.com/O=my org"
+ end
+ it "initializes with a name, gets the name" do
+ name = OpenSSL::X509::Name.new([["CN", "domain.com"], ["O", "my org"], ["OU", "my unit"]])
+ subject = R509::Subject.new(name)
+ subject.name.to_s.should == "/CN=domain.com/O=my org/OU=my unit"
+ end
+ it "initializes with a subject" do
+ s1 = R509::Subject.new
+ s1["CN"] = "domain.com"
+ s1["O"] = "my org"
- s2 = R509::Subject.new(s1)
- s2.name.to_s.should == s1.name.to_s
- end
- it "preserves order of a full subject line" do
- subject = R509::Subject.new([['CN','langui.sh'],['ST','Illinois'],['L','Chicago'],['C','US'],['emailAddress','ca@langui.sh']])
- subject.name.to_s.should == '/CN=langui.sh/ST=Illinois/L=Chicago/C=US/emailAddress=ca@langui.sh'
- end
- it "preserves order of a full subject line and uses to_s directly" do
- subject = R509::Subject.new([['CN','langui.sh'],['ST','Illinois'],['L','Chicago'],['C','US'],['emailAddress','ca@langui.sh']])
- subject.to_s.should == '/CN=langui.sh/ST=Illinois/L=Chicago/C=US/emailAddress=ca@langui.sh'
- end
- it "preserves order with raw OIDs, and potentially fills in known OID names" do
- subject = R509::Subject.new([['2.5.4.3','common name'],['2.5.4.15','business category'],['2.5.4.7','locality'],['1.3.6.1.4.1.311.60.2.1.3','jurisdiction oid openssl typically does not know']])
- subject.to_s.should == "/CN=common name/businessCategory=business category/L=locality/jurisdictionOfIncorporationCountryName=jurisdiction oid openssl typically does not know"
- end
+ s2 = R509::Subject.new(s1)
+ s2.name.to_s.should == s1.name.to_s
+ end
+ it "preserves order of a full subject line" do
+ subject = R509::Subject.new([['CN','langui.sh'],['ST','Illinois'],['L','Chicago'],['C','US'],['emailAddress','ca@langui.sh']])
+ subject.name.to_s.should == '/CN=langui.sh/ST=Illinois/L=Chicago/C=US/emailAddress=ca@langui.sh'
+ end
+ it "preserves order of a full subject line and uses to_s directly" do
+ subject = R509::Subject.new([['CN','langui.sh'],['ST','Illinois'],['L','Chicago'],['C','US'],['emailAddress','ca@langui.sh']])
+ subject.to_s.should == '/CN=langui.sh/ST=Illinois/L=Chicago/C=US/emailAddress=ca@langui.sh'
+ end
+ it "preserves order with raw OIDs, and potentially fills in known OID names" do
+ subject = R509::Subject.new([['2.5.4.3','common name'],['2.5.4.15','business category'],['2.5.4.7','locality'],['1.3.6.1.4.1.311.60.2.1.3','jurisdiction oid openssl typically does not know']])
+ subject.to_s.should == "/CN=common name/businessCategory=business category/L=locality/jurisdictionOfIncorporationCountryName=jurisdiction oid openssl typically does not know"
+ end
- it "edits an existing subject entry" do
- subject = R509::Subject.new([["CN", "domain1.com"], ["O", "my org"]])
- subject.to_s.should == "/CN=domain1.com/O=my org"
+ it "edits an existing subject entry" do
+ subject = R509::Subject.new([["CN", "domain1.com"], ["O", "my org"]])
+ subject.to_s.should == "/CN=domain1.com/O=my org"
- subject["CN"] = "domain2.com"
- subject.to_s.should == "/CN=domain2.com/O=my org"
- end
+ subject["CN"] = "domain2.com"
+ subject.to_s.should == "/CN=domain2.com/O=my org"
+ end
- it "deletes an existing subject entry" do
- subject = R509::Subject.new([["CN", "domain1.com"], ["O", "my org"]])
- subject.to_s.should == "/CN=domain1.com/O=my org"
+ it "deletes an existing subject entry" do
+ subject = R509::Subject.new([["CN", "domain1.com"], ["O", "my org"]])
+ subject.to_s.should == "/CN=domain1.com/O=my org"
- subject.delete("CN")
- subject.to_s.should == "/O=my org"
- end
+ subject.delete("CN")
+ subject.to_s.should == "/O=my org"
+ end
- it "is empty when initialized" do
- subject = R509::Subject.new
- subject.empty?.should == true
- subject["CN"] = "domain.com"
- subject.empty?.should == false
- end
+ it "is empty when initialized" do
+ subject = R509::Subject.new
+ subject.empty?.should == true
+ subject["CN"] = "domain.com"
+ subject.empty?.should == false
+ end
- it "is not empty" do
- subject = R509::Subject.new([["CN", "domain1.com"]])
- subject.empty?.should == false
+ it "is not empty" do
+ subject = R509::Subject.new([["CN", "domain1.com"]])
+ subject.empty?.should == false
+ end
+
+ it "can get a component out of the subject" do
+ subject = R509::Subject.new([["CN", "domain.com"]])
+ subject["CN"].should == "domain.com"
+ subject["O"].should == nil
+ end
+
+ it "adds an OID" do
+ subject = R509::Subject.new
+ subject['1.3.6.1.4.1.311.60.2.1.3'] = 'jurisdiction oid openssl typically does not know'
+ subject['1.3.6.1.4.1.311.60.2.1.3'].should == 'jurisdiction oid openssl typically does not know'
+ end
+
+ it "deletes an OID" do
+ subject = R509::Subject.new([["CN", "domain.com"], ['1.3.6.1.4.1.38383.60.2.1.0.0', 'random oid']])
+ subject.to_s.should == "/CN=domain.com/1.3.6.1.4.1.38383.60.2.1.0.0=random oid"
+ subject.delete("1.3.6.1.4.1.38383.60.2.1.0.0")
+ subject.to_s.should == "/CN=domain.com"
+ end
+
+ it "fails when you instantiate with an unknown shortname" do
+ expect { R509::Subject.new([["NOTRIGHT", "foo"]]) }.to raise_error(OpenSSL::X509::NameError)
+ end
+
+ it "fails when you add an unknown shortname" do
+ subject = R509::Subject.new
+ expect { subject["WRONG"] = "bar" }.to raise_error(OpenSSL::X509::NameError)
+ end
+
+ it "parses unknown OIDs out of a CSR" do
+ csr = R509::CSR.new(:csr => @csr_unknown_oid)
+ subject = R509::Subject.new(csr.subject)
+ subject["1.2.3.4.5.6.7.8.9.8.7.6.5.4.3.2.1.0.0"].should == "random oid!"
+ subject["1.3.3.543.567.32.43.335.1.1.1"].should == "another random oid!"
+ subject["CN"].should == 'normaldomain.com'
+ end
+
+ context "dynamic getter/setter behaviors" do
+ it "recognizes getters for a standard subject oid" do
+ subject = R509::Subject.new [['CN','testCN']]
+ subject.CN.should == 'testCN'
+ subject.common_name.should == 'testCN'
+ subject.commonName.should == 'testCN'
end
- it "can get a component out of the subject" do
- subject = R509::Subject.new([["CN", "domain.com"]])
- subject["CN"].should == "domain.com"
- subject["O"].should == nil
+ it "recognizes setters for a standard subject oid" do
+ subject = R509::Subject.new
+ subject.CN= 'testCN'
+ subject.CN.should == 'testCN'
+ subject.common_name= 'testCN2'
+ subject.common_name.should == 'testCN2'
+ subject.commonName= 'testCN3'
+ subject.commonName.should == 'testCN3'
+ subject.CN.should == 'testCN3'
+ subject.common_name.should == 'testCN3'
end
- it "adds an OID" do
- subject = R509::Subject.new
- subject['1.3.6.1.4.1.311.60.2.1.3'] = 'jurisdiction oid openssl typically does not know'
- subject['1.3.6.1.4.1.311.60.2.1.3'].should == 'jurisdiction oid openssl typically does not know'
+ it "returns properly for respond_to? with a standard subject oid" do
+ subject = R509::Subject.new
+ subject.respond_to?("CN").should == true
+ subject.respond_to?("CN=").should == true
+ subject.respond_to?("commonName").should == true
+ subject.respond_to?("commonName=").should == true
+ subject.respond_to?("common_name").should == true
+ subject.respond_to?("common_name=").should == true
end
- it "deletes an OID" do
- subject = R509::Subject.new([["CN", "domain.com"], ['1.3.6.1.4.1.38383.60.2.1.0.0', 'random oid']])
- subject.to_s.should == "/CN=domain.com/1.3.6.1.4.1.38383.60.2.1.0.0=random oid"
- subject.delete("1.3.6.1.4.1.38383.60.2.1.0.0")
- subject.to_s.should == "/CN=domain.com"
+ it "returns properly for respond_to? for an invalid method name" do
+ subject = R509::Subject.new
+ subject.respond_to?("not_a_real_method=").should == false
+ subject.respond_to?("not_a_real_method").should == false
end
- it "fails when you instantiate with an unknown shortname" do
- expect { R509::Subject.new([["NOTRIGHT", "foo"]]) }.to raise_error(OpenSSL::X509::NameError)
+ it "errors on invalid method names" do
+ subject = R509::Subject.new
+ expect { subject.random_value="assign" }.to raise_error(NoMethodError)
+ expect { subject.random_value }.to raise_error(NoMethodError)
end
- it "fails when you add an unknown shortname" do
- subject = R509::Subject.new
- expect { subject["WRONG"] = "bar" }.to raise_error(OpenSSL::X509::NameError)
+ it "works with an arbitrarily defined OID" do
+ R509::OIDMapper.register("1.4.3.2.1.2.3.6.6.6.6", "AOI", "arbitraryName")
+ subject = R509::Subject.new
+ subject.AOI= "test"
+ subject.AOI.should == "test"
+ subject.arbitrary_name = "test2"
+ subject.arbitrary_name.should == "test2"
+ subject.arbitraryName= "test3"
+ subject.arbitraryName.should == "test3"
+ subject.AOI.should == "test3"
+ subject.arbitrary_name.should == "test3"
end
- it "parses unknown OIDs out of a CSR" do
- csr = R509::Csr.new(:csr => @csr_unknown_oid)
- subject = R509::Subject.new(csr.subject)
- subject["1.2.3.4.5.6.7.8.9.8.7.6.5.4.3.2.1.0.0"].should == "random oid!"
- subject["1.3.3.543.567.32.43.335.1.1.1"].should == "another random oid!"
- subject["CN"].should == 'normaldomain.com'
+ it "returns properly for respond_to? with a custom subject oid" do
+ R509::OIDMapper.register("1.4.3.2.1.2.3.7.7.7.7", "IOS", "iOperatingSystem")
+ subject = R509::Subject.new
+ subject.respond_to?("IOS").should == true
+ subject.respond_to?("IOS=").should == true
+ subject.respond_to?("iOperatingSystem").should == true
+ subject.respond_to?("iOperatingSystem=").should == true
+ subject.respond_to?("i_operating_system").should == true
+ subject.respond_to?("i_operating_system=").should == true
end
+ end
+
end
describe R509::NameSanitizer do
- before :all do
- @sanitizer = R509::NameSanitizer.new
- end
+ before :all do
+ @sanitizer = R509::NameSanitizer.new
+ end
- it "when it has only known OIDs" do
- name = OpenSSL::X509::Name.new [["C", "US"], ["ST", "Illinois"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 2
- array[0][0].should == "C"
- array[0][1].should == "US"
- array[1][0].should == "ST"
- array[1][1].should == "Illinois"
- end
+ it "when it has only known OIDs" do
+ name = OpenSSL::X509::Name.new [["C", "US"], ["ST", "Illinois"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 2
+ array[0][0].should == "C"
+ array[0][1].should == "US"
+ array[1][0].should == "ST"
+ array[1][1].should == "Illinois"
+ end
- it "when it has only unknown OIDs" do
- name = OpenSSL::X509::Name.new [["1.2.3.4", "US"], ["1.2.3.5", "Illinois"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 2
- array[0][0].should == "1.2.3.4"
- array[0][1].should == "US"
- array[1][0].should == "1.2.3.5"
- array[1][1].should == "Illinois"
- end
+ it "when it has only unknown OIDs" do
+ name = OpenSSL::X509::Name.new [["1.2.3.4", "US"], ["1.2.3.5", "Illinois"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 2
+ array[0][0].should == "1.2.3.4"
+ array[0][1].should == "US"
+ array[1][0].should == "1.2.3.5"
+ array[1][1].should == "Illinois"
+ end
- it "when it has an unknown between two knowns" do
- name = OpenSSL::X509::Name.new [["CN", "domain.com"], ["1.2.3.4", "US"], ["ST", "Illinois"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 3
- array[0][0].should == "CN"
- array[0][1].should == "domain.com"
- array[1][0].should == "1.2.3.4"
- array[1][1].should == "US"
- array[2][0].should == "ST"
- array[2][1].should == "Illinois"
- end
+ it "when it has an unknown between two knowns" do
+ name = OpenSSL::X509::Name.new [["CN", "domain.com"], ["1.2.3.4", "US"], ["ST", "Illinois"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 3
+ array[0][0].should == "CN"
+ array[0][1].should == "domain.com"
+ array[1][0].should == "1.2.3.4"
+ array[1][1].should == "US"
+ array[2][0].should == "ST"
+ array[2][1].should == "Illinois"
+ end
- it "when it has a known between two unknowns" do
- name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["C", "US"], ["1.2.3.5", "Illinois"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 3
- array[0][0].should == "1.2.3.4"
- array[0][1].should == "domain.com"
- array[1][0].should == "C"
- array[1][1].should == "US"
- array[2][0].should == "1.2.3.5"
- array[2][1].should == "Illinois"
- end
+ it "when it has a known between two unknowns" do
+ name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["C", "US"], ["1.2.3.5", "Illinois"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 3
+ array[0][0].should == "1.2.3.4"
+ array[0][1].should == "domain.com"
+ array[1][0].should == "C"
+ array[1][1].should == "US"
+ array[2][0].should == "1.2.3.5"
+ array[2][1].should == "Illinois"
+ end
- it "when a known has the same value as an unknown defined before it" do
- name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["CN", "domain.com"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 2
- array[0][0].should == "1.2.3.4"
- array[0][1].should == "domain.com"
- array[1][0].should == "CN"
- array[1][1].should == "domain.com"
- end
+ it "when a known has the same value as an unknown defined before it" do
+ name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["CN", "domain.com"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 2
+ array[0][0].should == "1.2.3.4"
+ array[0][1].should == "domain.com"
+ array[1][0].should == "CN"
+ array[1][1].should == "domain.com"
+ end
- it "when two unknowns have the same value" do
- name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["1.2.3.5", "domain.com"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 2
- array[0][0].should == "1.2.3.4"
- array[0][1].should == "domain.com"
- array[1][0].should == "1.2.3.5"
- array[1][1].should == "domain.com"
- end
+ it "when two unknowns have the same value" do
+ name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["1.2.3.5", "domain.com"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 2
+ array[0][0].should == "1.2.3.4"
+ array[0][1].should == "domain.com"
+ array[1][0].should == "1.2.3.5"
+ array[1][1].should == "domain.com"
+ end
- it "when two unknowns have the same oid and different values" do
- name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["1.2.3.4", "other"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 2
- array[0][0].should == "1.2.3.4"
- array[0][1].should == "domain.com"
- array[1][0].should == "1.2.3.4"
- array[1][1].should == "other"
- end
+ it "when two unknowns have the same oid and different values" do
+ name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["1.2.3.4", "other"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 2
+ array[0][0].should == "1.2.3.4"
+ array[0][1].should == "domain.com"
+ array[1][0].should == "1.2.3.4"
+ array[1][1].should == "other"
+ end
- it "when two unknowns have the same oid and the same value" do
- name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["1.2.3.4", "domain.com"]]
- array = @sanitizer.sanitize(name)
- array.size.should == 2
- array[0][0].should == "1.2.3.4"
- array[0][1].should == "domain.com"
- array[1][0].should == "1.2.3.4"
- array[1][1].should == "domain.com"
- end
+ it "when two unknowns have the same oid and the same value" do
+ name = OpenSSL::X509::Name.new [["1.2.3.4", "domain.com"], ["1.2.3.4", "domain.com"]]
+ array = @sanitizer.sanitize(name)
+ array.size.should == 2
+ array[0][0].should == "1.2.3.4"
+ array[0][1].should == "domain.com"
+ array[1][0].should == "1.2.3.4"
+ array[1][1].should == "domain.com"
+ end
end