PageRenderTime 54ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/spec/integration/knife/cookbook_api_ipv6_spec.rb

https://github.com/jcoleman/chef
Ruby | 111 lines | 77 code | 15 blank | 19 comment | 0 complexity | b887d12c243501af218fb9aa4d985d7b 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" do
  20. extend 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_config_flag) { "-c '#{path_to("config/knife.rb")}'" }
  60. # Some Solaris test platforms are too old for IPv6. These tests should not
  61. # otherwise be platform dependent, so exclude solaris
  62. context "and the chef_server_url contains an IPv6 literal", :not_supported_on_solaris do
  63. # This provides helper functions we need such as #path_to()
  64. when_the_repository "has the cookbook to be uploaded" do
  65. let(:knife_rb_content) do
  66. <<-END_CLIENT_RB
  67. chef_server_url "http://[::1]:8900"
  68. syntax_check_cache_path '#{cache_path}'
  69. client_key '#{path_to('config/knifeuser.pem')}'
  70. node_name 'whoisthisis'
  71. cookbook_path '#{CHEF_SPEC_DATA}/cookbooks'
  72. END_CLIENT_RB
  73. end
  74. before do
  75. file 'config/knife.rb', knife_rb_content
  76. file 'config/knifeuser.pem', client_key
  77. end
  78. it "successfully uploads a cookbook" do
  79. shell_out!("knife cookbook upload apache2 #{knife_config_flag}", :cwd => chef_dir)
  80. versions_list_json = Chef::HTTP::Simple.new("http://[::1]:8900").get("/cookbooks/apache2", "accept" => "application/json")
  81. versions_list = Chef::JSONCompat.from_json(versions_list_json)
  82. versions_list["apache2"]["versions"].should_not be_empty
  83. end
  84. context "and the cookbook has been uploaded to the server" do
  85. before do
  86. shell_out!("knife cookbook upload apache2 #{knife_config_flag}", :cwd => chef_dir)
  87. end
  88. it "downloads the cookbook" do
  89. s = shell_out!("knife cookbook download apache2 #{knife_config_flag} -d #{cache_path}", :cwd => chef_dir)
  90. Dir["#{cache_path}/*"].map {|entry| File.basename(entry)}.should include("apache2-0.0.0")
  91. end
  92. end
  93. end
  94. end
  95. end
  96. end