PageRenderTime 25ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/spec/integration/knife/cookbook_api_ipv6_spec.rb

http://github.com/opscode/chef
Ruby | 113 lines | 79 code | 15 blank | 19 comment | 0 complexity | e17617c7948c5a793ba653e6c1b60663 MD5 | raw file
Possible License(s): Apache-2.0, CC0-1.0
  1. #
  2. # Author:: Daniel DeLeo (<dan@chef.io>)
  3. # Copyright:: Copyright (c) Chef Software Inc.
  4. # License:: Apache License, Version 2.0
  5. #
  6. # Licensed under the Apache License, Version 2.0 (the "License");
  7. # you may not use this file except in compliance with the License.
  8. # You may obtain a copy of the License at
  9. #
  10. # http://www.apache.org/licenses/LICENSE-2.0
  11. #
  12. # Unless required by applicable law or agreed to in writing, software
  13. # distributed under the License is distributed on an "AS IS" BASIS,
  14. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. # See the License for the specific language governing permissions and
  16. # limitations under the License.
  17. require "spec_helper"
  18. require "support/shared/integration/integration_helper"
  19. require "chef/mixin/shell_out"
  20. describe "Knife cookbook API integration with IPv6", :workstation, :not_supported_on_gce do
  21. include IntegrationSupport
  22. include Chef::Mixin::ShellOut
  23. when_the_chef_server "is bound to IPv6" do
  24. let(:chef_zero_opts) { { host: "::1" } }
  25. let(:client_key) do
  26. <<~END_VALIDATION_PEM
  27. -----BEGIN RSA PRIVATE KEY-----
  28. MIIEogIBAAKCAQEApubutqtYYQ5UiA9QhWP7UvSmsfHsAoPKEVVPdVW/e8Svwpyf
  29. 0Xef6OFWVmBE+W442ZjLOe2y6p2nSnaq4y7dg99NFz6X+16mcKiCbj0RCiGqCvCk
  30. NftHhTgO9/RFvCbmKZ1RKNob1YzLrFpxBHaSh9po+DGWhApcd+I+op+ZzvDgXhNn
  31. 0nauZu3rZmApI/r7EEAOjFedAXs7VPNXhhtZAiLSAVIrwU3ZajtSzgXOxbNzgj5O
  32. AAAMmThK+71qPdffAdO4J198H6/MY04qgtFo7vumzCq0UCaGZfmeI1UNE4+xQWwP
  33. HJ3pDAP61C6Ebx2snI2kAd9QMx9Y78nIedRHPwIDAQABAoIBAHssRtPM1GacWsom
  34. 8zfeN6ZbI4KDlbetZz0vhnqDk9NVrpijWlcOP5dwZXVNitnB/HaqCqFvyPDY9JNB
  35. zI/pEFW4QH59FVDP42mVEt0keCTP/1wfiDDGh1vLqVBYl/ZphscDcNgDTzNkuxMx
  36. k+LFVxKnn3w7rGc59lALSkpeGvbbIDjp3LUMlUeCF8CIFyYZh9ZvXe4OCxYdyjxb
  37. i8tnMLKvJ4Psbh5jMapsu3rHQkfPdqzztQUz8vs0NYwP5vWge46FUyk+WNm/IhbJ
  38. G3YM22nwUS8Eu2bmTtADSJolATbCSkOwQ1D+Fybz/4obfYeGaCdOqB05ttubhenV
  39. ShsAb7ECgYEA20ecRVxw2S7qA7sqJ4NuYOg9TpfGooptYNA1IP971eB6SaGAelEL
  40. awYkGNuu2URmm5ElZpwJFFTDLGA7t2zB2xI1FeySPPIVPvJGSiZoFQOVlIg9WQzK
  41. 7jTtFQ/tOMrF+bigEUJh5bP1/7HzqSpuOsPjEUb2aoCTp+tpiRGL7TUCgYEAwtns
  42. g3ysrSEcTzpSv7fQRJRk1lkBhatgNd0oc+ikzf74DaVLhBg1jvSThDhiDCdB59mr
  43. Jh41cnR1XqE8jmdQbCDRiFrI1Pq6TPaDZFcovDVE1gue9x86v3FOH2ukPG4d2/Xy
  44. HevXjThtpMMsWFi0JYXuzXuV5HOvLZiP8sN3lSMCgYANpdxdGM7RRbE9ADY0dWK2
  45. V14ReTLcxP7fyrWz0xLzEeCqmomzkz3BsIUoouu0DCTSw+rvAwExqcDoDylIVlWO
  46. fAifz7SeZHbcDxo+3TsXK7zwnLYsx7YNs2+aIv6hzUUbMNmNmXMcZ+IEwx+mRMTN
  47. lYmZdrA5mr0V83oDFPt/jQKBgC74RVE03pMlZiObFZNtheDiPKSG9Bz6wMh7NWMr
  48. c37MtZLkg52mEFMTlfPLe6ceV37CM8WOhqe+dwSGrYhOU06dYqUR7VOZ1Qr0aZvo
  49. fsNPu/Y0+u7rMkgv0fs1AXQnvz7kvKaF0YITVirfeXMafuKEtJoH7owRbur42cpV
  50. YCAtAoGAP1rHOc+w0RUcBK3sY7aErrih0OPh9U5bvJsrw1C0FIZhCEoDVA+fNIQL
  51. syHLXYFNy0OxMtH/bBAXBGNHd9gf5uOnqh0pYcbe/uRAxumC7Rl0cL509eURiA2T
  52. +vFmf54y9YdnLXaqv+FhJT6B6V7WX7IpU9BMqJY1cJYXHuHG2KA=
  53. -----END RSA PRIVATE KEY-----
  54. END_VALIDATION_PEM
  55. end
  56. let(:cache_path) do
  57. Dir.mktmpdir
  58. end
  59. let(:chef_dir) { File.join(File.dirname(__FILE__), "..", "..", "..", "bin") }
  60. let(:knife) { "ruby '#{chef_dir}/knife'" }
  61. let(:knife_config_flag) { "-c '#{path_to("config/knife.rb")}'" }
  62. # Some Solaris test platforms are too old for IPv6. These tests should not
  63. # otherwise be platform dependent, so exclude solaris
  64. context "and the chef_server_url contains an IPv6 literal", :not_supported_on_solaris do
  65. # This provides helper functions we need such as #path_to()
  66. when_the_repository "has the cookbook to be uploaded" do
  67. let(:knife_rb_content) do
  68. <<~END_CLIENT_RB
  69. chef_server_url "http://[::1]:8900"
  70. syntax_check_cache_path '#{cache_path}'
  71. client_key '#{path_to("config/knifeuser.pem")}'
  72. node_name 'whoisthisis'
  73. cookbook_path '#{CHEF_SPEC_DATA}/cookbooks'
  74. END_CLIENT_RB
  75. end
  76. before do
  77. file "config/knife.rb", knife_rb_content
  78. file "config/knifeuser.pem", client_key
  79. end
  80. it "successfully uploads a cookbook" do
  81. shell_out!("#{knife} cookbook upload apache2 #{knife_config_flag}", cwd: chef_dir)
  82. versions_list_json = Chef::HTTP::Simple.new("http://[::1]:8900").get("/cookbooks/apache2", "accept" => "application/json")
  83. versions_list = Chef::JSONCompat.from_json(versions_list_json)
  84. expect(versions_list["apache2"]["versions"]).not_to be_empty
  85. end
  86. context "and the cookbook has been uploaded to the server" do
  87. before do
  88. shell_out!("#{knife} cookbook upload apache2 #{knife_config_flag}", cwd: chef_dir)
  89. end
  90. it "downloads the cookbook" do
  91. shell_out!("knife cookbook download apache2 #{knife_config_flag} -d #{cache_path}", cwd: chef_dir)
  92. expect(Dir["#{cache_path}/*"].map { |entry| File.basename(entry) }).to include("apache2-0.0.1")
  93. end
  94. end
  95. end
  96. end
  97. end
  98. end