spec/rails/auth/x509/certificate_spec.rb in rails-auth-2.1.4 vs spec/rails/auth/x509/certificate_spec.rb in rails-auth-2.2.0

- old
+ new

@@ -1,38 +1,121 @@ +# frozen_string_literal: true + RSpec.describe Rails::Auth::X509::Certificate do let(:example_cert) { OpenSSL::X509::Certificate.new(cert_path("valid.crt").read) } + let(:example_cert_with_extension) { OpenSSL::X509::Certificate.new(cert_path("valid_with_ext.crt").read) } let(:example_certificate) { described_class.new(example_cert) } + let(:example_certificate_with_extension) { described_class.new(example_cert_with_extension) } let(:example_cn) { "127.0.0.1" } + let(:example_dns_names) { %w[example.com exemplar.com somethingelse.com] } + let(:example_ips) { %w[0.0.0.0 127.0.0.1 192.168.1.1] } let(:example_ou) { "ponycopter" } + let(:example_spiffe) { "spiffe://example.com/exemplar" } + let(:example_uris) { [example_spiffe, "https://www.example.com/page1", "https://www.example.com/page2"] } - describe "#[]" do - it "allows access to subject components via strings" do - expect(example_certificate["CN"]).to eq example_cn - expect(example_certificate["OU"]).to eq example_ou + describe "without extensions" do + describe "#[]" do + it "allows access to subject components via strings" do + expect(example_certificate["CN"]).to eq example_cn + expect(example_certificate["OU"]).to eq example_ou + end + + it "allows access to subject components via symbols" do + expect(example_certificate[:cn]).to eq example_cn + expect(example_certificate[:ou]).to eq example_ou + end end - it "allows access to subject components via symbols" do - expect(example_certificate[:cn]).to eq example_cn - expect(example_certificate[:ou]).to eq example_ou + it "knows its #cn" do + expect(example_certificate.cn).to eq example_cn end - end - it "knows its #cn" do - expect(example_certificate.cn).to eq example_cn - end + it "has no #dns_names" do + expect(example_certificate.dns_names).to be_empty + end - it "knows its #ou" do - expect(example_certificate.ou).to eq example_ou - end + it "has no #ips" do + expect(example_certificate.ips).to be_empty + end - it "knows its attributes" do - expect(example_certificate.attributes).to eq(cn: example_cn, ou: example_ou) + it "knows its #ou" do + expect(example_certificate.ou).to eq example_ou + end + + it "has no #uris" do + expect(example_certificate.uris).to be_empty + end + + it "has no #spiffe_id" do + expect(example_certificate.spiffe_id).to be_nil + end + + it "knows its attributes" do + expect(example_certificate.attributes).to eq(cn: example_cn, ou: example_ou) + end + + it "compares certificate objects by comparing their certificates" do + second_cert = OpenSSL::X509::Certificate.new(cert_path("valid.crt").read) + second_certificate = described_class.new(second_cert) + + expect(example_certificate).to be_eql second_certificate + end end - it "compares certificate objects by comparing their certificates" do - second_cert = OpenSSL::X509::Certificate.new(cert_path("valid.crt").read) - second_certificate = described_class.new(second_cert) + describe "with extensions" do + describe "#[]" do + it "allows access to subject components via strings" do + expect(example_certificate_with_extension["CN"]).to eq example_cn + expect(example_certificate_with_extension["OU"]).to eq example_ou + end - expect(example_certificate).to be_eql second_certificate + it "allows access to subject components via symbols" do + expect(example_certificate_with_extension[:cn]).to eq example_cn + expect(example_certificate_with_extension[:ou]).to eq example_ou + end + end + + it "knows its #cn" do + expect(example_certificate_with_extension.cn).to eq example_cn + end + + it "knows its #dns_names" do + expect(example_certificate_with_extension.dns_names).to eq example_dns_names + end + + it "knows its #ips" do + expect(example_certificate_with_extension.ips).to eq example_ips + end + + it "knows its #ou" do + expect(example_certificate_with_extension.ou).to eq example_ou + end + + it "knows its #spiffe_id" do + expect(example_certificate_with_extension.spiffe_id).to eq example_spiffe + end + + it "knows its #uris" do + expect(example_certificate_with_extension.uris).to eq example_uris + end + + it "knows its attributes" do + expected_attrs = { + cn: example_cn, + dns_names: example_dns_names, + ips: example_ips, + ou: example_ou, + spiffe_id: example_spiffe, + uris: example_uris + } + expect(example_certificate_with_extension.attributes).to eq(expected_attrs) + end + + it "compares certificate objects by comparing their certificates" do + second_cert = OpenSSL::X509::Certificate.new(cert_path("valid_with_ext.crt").read) + second_certificate = described_class.new(second_cert) + + expect(example_certificate_with_extension).to be_eql second_certificate + end end end