PageRenderTime 65ms CodeModel.GetById 8ms RepoModel.GetById 0ms app.codeStats 0ms

/spec/integration/knife/cookbook_api_ipv6_spec.rb

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