diff options
author | John McCrae <jmccrae@chf.io> | 2022-05-26 13:13:02 +0600 |
---|---|---|
committer | John McCrae <jmccrae@chf.io> | 2022-05-26 13:40:30 +0600 |
commit | 59168b16a85df0921852795bd61b28fd10185dad (patch) | |
tree | 0376b11042499da0de34f8a06ebc84d0d89fb69c | |
parent | a13b6526c8de1e3fef40d1d100f7edc5a7e49faa (diff) | |
download | chef-59168b16a85df0921852795bd61b28fd10185dad.tar.gz |
refactored authenticator.rb to remove a redundant block that was causing tests to fail
Signed-off-by: John McCrae <jmccrae@chf.io>
-rw-r--r-- | spec/unit/http/authenticator_spec.rb | 218 |
1 files changed, 109 insertions, 109 deletions
diff --git a/spec/unit/http/authenticator_spec.rb b/spec/unit/http/authenticator_spec.rb index b9d768be56..bbd952b436 100644 --- a/spec/unit/http/authenticator_spec.rb +++ b/spec/unit/http/authenticator_spec.rb @@ -83,112 +83,112 @@ describe Chef::HTTP::Authenticator, :windows_only do end end -# describe Chef::HTTP::Authenticator do -# let(:class_instance) { Chef::HTTP::Authenticator.new(client_name: "test") } -# let(:method) { "GET" } -# let(:url) { URI("https://chef.example.com/organizations/test") } -# let(:headers) { {} } -# let(:data) { "" } - -# before do -# ::Chef::Config[:node_name] = "foo" -# end - -# context "when handle_request is called" do -# shared_examples_for "merging the server API version into the headers" do -# before do -# allow(class_instance).to receive(:authentication_headers).and_return({}) -# end - -# it "merges the default version of X-Ops-Server-API-Version into the headers" do -# # headers returned -# expect(class_instance.handle_request(method, url, headers, data)[2]) -# .to include({ "X-Ops-Server-API-Version" => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION }) -# end - -# context "when version_class is provided" do -# class V0Class; extend Chef::Mixin::VersionedAPI; minimum_api_version 0; end -# class V2Class; extend Chef::Mixin::VersionedAPI; minimum_api_version 2; end - -# class AuthFactoryClass -# extend Chef::Mixin::VersionedAPIFactory -# add_versioned_api_class V0Class -# add_versioned_api_class V2Class -# end - -# let(:class_instance) { Chef::HTTP::Authenticator.new({ version_class: AuthFactoryClass }) } - -# it "uses it to select the correct http version" do -# Chef::ServerAPIVersions.instance.reset! -# expect(AuthFactoryClass).to receive(:best_request_version).and_call_original -# expect(class_instance.handle_request(method, url, headers, data)[2]) -# .to include({ "X-Ops-Server-API-Version" => "2" }) -# end -# end - -# context "when api_version is set to something other than the default" do -# let(:class_instance) { Chef::HTTP::Authenticator.new({ api_version: "-10" }) } - -# it "merges the requested version of X-Ops-Server-API-Version into the headers" do -# expect(class_instance.handle_request(method, url, headers, data)[2]) -# .to include({ "X-Ops-Server-API-Version" => "-10" }) -# end -# end -# end - -# context "when !sign_requests?" do -# before do -# allow(class_instance).to receive(:sign_requests?).and_return(false) -# end - -# it_behaves_like "merging the server API version into the headers" - -# it "authentication_headers is not called" do -# expect(class_instance).to_not receive(:authentication_headers) -# class_instance.handle_request(method, url, headers, data) -# end - -# end - -# context "when sign_requests?" do -# before do -# allow(class_instance).to receive(:sign_requests?).and_return(true) -# end - -# it_behaves_like "merging the server API version into the headers" - -# it "calls authentication_headers with the proper input" do -# expect(class_instance).to receive(:authentication_headers).with( -# method, url, data, -# { "X-Ops-Server-API-Version" => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION } -# ).and_return({}) -# class_instance.handle_request(method, url, headers, data) -# end -# end - -# context "when ssh_agent_signing" do -# let(:public_key) { <<~EOH } -# -----BEGIN PUBLIC KEY----- -# MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA49TA0y81ps0zxkOpmf5V -# 4/c4IeR5yVyQFpX3JpxO4TquwnRh8VSUhrw8kkTLmB3cS39Db+3HadvhoqCEbqPE -# 6915kXSuk/cWIcNozujLK7tkuPEyYVsyTioQAddSdfe+8EhQVf3oHxaKmUd6waXr -# WqYCnhxgOjxocenREYNhZ/OETIeiPbOku47vB4nJK/0GhKBytL2XnsRgfKgDxf42 -# BqAi1jglIdeq8lAWZNF9TbNBU21AO1iuT7Pm6LyQujhggPznR5FJhXKRUARXBJZa -# wxpGV4dGtdcahwXNE4601aXPra+xPcRd2puCNoEDBzgVuTSsLYeKBDMSfs173W1Q -# YwIDAQAB -# -----END PUBLIC KEY----- -# EOH - -# let(:class_instance) { Chef::HTTP::Authenticator.new(client_name: "test", raw_key: public_key, ssh_agent_signing: true) } - -# it "sets use_ssh_agent if needed" do -# expect(Mixlib::Authentication::SignedHeaderAuth).to receive(:signing_object).and_wrap_original { |m, *args| -# m.call(*args).tap do |signing_obj| -# expect(signing_obj).to receive(:sign).with(instance_of(OpenSSL::PKey::RSA), use_ssh_agent: true).and_return({}) -# end -# } -# class_instance.handle_request(method, url, headers, data) -# end -# end -# end -# end +describe Chef::HTTP::Authenticator do + let(:class_instance) { Chef::HTTP::Authenticator.new(client_name: "test") } + let(:method) { "GET" } + let(:url) { URI("https://chef.example.com/organizations/test") } + let(:headers) { {} } + let(:data) { "" } + + before do + ::Chef::Config[:node_name] = "foo" + end + + context "when handle_request is called" do + shared_examples_for "merging the server API version into the headers" do + before do + allow(class_instance).to receive(:authentication_headers).and_return({}) + end + + it "merges the default version of X-Ops-Server-API-Version into the headers" do + # headers returned + expect(class_instance.handle_request(method, url, headers, data)[2]) + .to include({ "X-Ops-Server-API-Version" => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION }) + end + + context "when version_class is provided" do + class V0Class; extend Chef::Mixin::VersionedAPI; minimum_api_version 0; end + class V2Class; extend Chef::Mixin::VersionedAPI; minimum_api_version 2; end + + class AuthFactoryClass + extend Chef::Mixin::VersionedAPIFactory + add_versioned_api_class V0Class + add_versioned_api_class V2Class + end + + let(:class_instance) { Chef::HTTP::Authenticator.new({ version_class: AuthFactoryClass }) } + + it "uses it to select the correct http version" do + Chef::ServerAPIVersions.instance.reset! + expect(AuthFactoryClass).to receive(:best_request_version).and_call_original + expect(class_instance.handle_request(method, url, headers, data)[2]) + .to include({ "X-Ops-Server-API-Version" => "2" }) + end + end + + context "when api_version is set to something other than the default" do + let(:class_instance) { Chef::HTTP::Authenticator.new({ api_version: "-10" }) } + + it "merges the requested version of X-Ops-Server-API-Version into the headers" do + expect(class_instance.handle_request(method, url, headers, data)[2]) + .to include({ "X-Ops-Server-API-Version" => "-10" }) + end + end + end + + context "when !sign_requests?" do + before do + allow(class_instance).to receive(:sign_requests?).and_return(false) + end + + it_behaves_like "merging the server API version into the headers" + + it "authentication_headers is not called" do + expect(class_instance).to_not receive(:authentication_headers) + class_instance.handle_request(method, url, headers, data) + end + + end + + context "when sign_requests?" do + before do + allow(class_instance).to receive(:sign_requests?).and_return(true) + end + + it_behaves_like "merging the server API version into the headers" + + it "calls authentication_headers with the proper input" do + expect(class_instance).to receive(:authentication_headers).with( + method, url, data, + { "X-Ops-Server-API-Version" => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION } + ).and_return({}) + class_instance.handle_request(method, url, headers, data) + end + end + + context "when ssh_agent_signing" do + let(:public_key) { <<~EOH } + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA49TA0y81ps0zxkOpmf5V + 4/c4IeR5yVyQFpX3JpxO4TquwnRh8VSUhrw8kkTLmB3cS39Db+3HadvhoqCEbqPE + 6915kXSuk/cWIcNozujLK7tkuPEyYVsyTioQAddSdfe+8EhQVf3oHxaKmUd6waXr + WqYCnhxgOjxocenREYNhZ/OETIeiPbOku47vB4nJK/0GhKBytL2XnsRgfKgDxf42 + BqAi1jglIdeq8lAWZNF9TbNBU21AO1iuT7Pm6LyQujhggPznR5FJhXKRUARXBJZa + wxpGV4dGtdcahwXNE4601aXPra+xPcRd2puCNoEDBzgVuTSsLYeKBDMSfs173W1Q + YwIDAQAB + -----END PUBLIC KEY----- + EOH + + let(:class_instance) { Chef::HTTP::Authenticator.new(client_name: "test", raw_key: public_key, ssh_agent_signing: true) } + + it "sets use_ssh_agent if needed" do + expect(Mixlib::Authentication::SignedHeaderAuth).to receive(:signing_object).and_wrap_original { |m, *args| + m.call(*args).tap do |signing_obj| + expect(signing_obj).to receive(:sign).with(instance_of(OpenSSL::PKey::RSA), use_ssh_agent: true).and_return({}) + end + } + class_instance.handle_request(method, url, headers, data) + end + end + end +end |