mixlib-install 2.1.5 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4893a11fa816d4a5f41a23ba5fc240581814e01c
4
- data.tar.gz: b63a27ed56a22506d8d239e94fdaa5996a86d316
3
+ metadata.gz: 2f03663421a576ba891fc10027bb6c121ac2b145
4
+ data.tar.gz: d79251c618528630ffcfe1e7423d0ef8e9b5b8dc
5
5
  SHA512:
6
- metadata.gz: 4e4fa265d321456e0eb32c805680965ba28b1022794863bdf4a8d2e82cb2bb86e2ebd567b1a909925255ad94b070623db658c49bb498b63d4d6c4ec2049b4eab
7
- data.tar.gz: aff7a8bdfa4fd774209e0cca484304eddcae3e3af35ca55e41f50b1826a64781470486b73cdf2c312148f49a0246f4ccbc51e0a99e34d735e490caad11fc3fa7
6
+ metadata.gz: b4a64cceb274f80740dd2a6200e7fff526ec070dc9cb4c5763ad8d623d364890b128e7be7bb68ae2acd19ee63415aee5e6fe5d5c2da88adc6809fc7247e12f82
7
+ data.tar.gz: 173618c2e2edf623300c6d7020c7eb365cb0bde55659f7cd5120c89bfd162f55b4c599d3cd38f9d36df0c9d83b05cdc881e75271130a2c0fffdd60cd08bb6aff
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  sudo: false
3
+
3
4
  addons:
4
5
  apt:
5
6
  sources:
@@ -10,18 +11,21 @@ addons:
10
11
  - unzip
11
12
  - ssh
12
13
 
13
- install:
14
- - echo "skip bundle install"
14
+ matrix:
15
+ include:
16
+ - rvm: 2.2.5
17
+ env: CHEF_ACCEPTANCE=false
18
+ - rvm: 2.3.0
19
+ env: CHEF_ACCEPTANCE=true
15
20
 
16
21
  before_script:
17
22
  - ci/before-script.sh
18
- # set chefdk as default environment
19
- - eval "$(/opt/chefdk/bin/chef shell-init bash)"
20
23
  # put terraform on PATH
21
24
  - export PATH="$PWD/bin:$PATH"
22
25
 
23
26
  script:
24
- - ci/script.sh
27
+ - bundle exec rake travis:ci
28
+ - ci/run-acceptance-tests.sh
25
29
 
26
30
  env:
27
31
  global:
@@ -1,5 +1,10 @@
1
1
  # Change Log
2
2
 
3
+ ## [2.1.6]
4
+ - Add `User-Agent` headers to all download requests
5
+ - CLI UX improvements
6
+ - Add basic architecture validation
7
+
3
8
  ## [2.1.5]
4
9
  - Add `install_path` properties to the products inside PRODUCT_MATRIX.
5
10
 
data/Rakefile CHANGED
@@ -1,32 +1,25 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- task default: :test
5
-
6
- desc "Run specs"
7
- RSpec::Core::RakeTask.new(:spec) do |spec|
8
- spec.pattern = "spec/**/*_spec.rb"
9
- end
10
-
11
- begin
12
- require "chefstyle"
13
- require "rubocop/rake_task"
14
- RuboCop::RakeTask.new(:style) do |task|
15
- task.options += ["--display-cop-names", "--no-color"]
4
+ [:unit, :functional].each do |type|
5
+ RSpec::Core::RakeTask.new(type) do |t|
6
+ t.pattern = "spec/#{type}/**/*_spec.rb"
7
+ t.rspec_opts = [].tap do |a|
8
+ a.push("--color")
9
+ a.push("--format progress")
10
+ end.join(" ")
16
11
  end
17
- rescue LoadError
18
- puts "chefstyle/rubocop is not available. gem install chefstyle to do style checking."
19
12
  end
20
13
 
21
- desc "Run all tests"
22
- task test: [:style, :spec]
23
-
24
- desc "Run tests for Travis CI"
25
- task ci: [:style, :spec, :functional]
14
+ require "chefstyle"
15
+ require "rubocop/rake_task"
16
+ RuboCop::RakeTask.new(:chefstyle) do |task|
17
+ task.options << "--display-cop-names"
18
+ end
26
19
 
27
- desc "Run functional"
28
- task "functional" do
29
- system("bundle exec rspec functional")
20
+ namespace :travis do
21
+ desc "Run tests on Travis CI"
22
+ task ci: %w{chefstyle unit functional}
30
23
  end
31
24
 
32
25
  desc "Render product matrix documentation"
@@ -55,3 +48,5 @@ task :console do
55
48
  ARGV.clear
56
49
  IRB.start
57
50
  end
51
+
52
+ task default: %w{travis:ci}
@@ -1,4 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gem "mixlib-install", path: "../"
4
+ gem "chef"
4
5
  gem "chef-acceptance", github: "chef/chef-acceptance"
6
+ gem "inspec"
@@ -1,3 +1,3 @@
1
- describe package("chef") do
1
+ describe package("Chef Client v12*") do
2
2
  it { should be_installed }
3
3
  end
@@ -2,23 +2,6 @@
2
2
 
3
3
  set -evx
4
4
 
5
- # undo travis gem and bundler config
6
- for ruby_env_var in _ORIGINAL_GEM_PATH \
7
- BUNDLE_BIN_PATH \
8
- BUNDLE_GEMFILE \
9
- GEM_HOME \
10
- GEM_PATH \
11
- GEM_ROOT \
12
- RUBYLIB \
13
- RUBYOPT \
14
- RUBY_ENGINE \
15
- RUBY_ROOT \
16
- RUBY_VERSION
17
-
18
- do
19
- unset $ruby_env_var
20
- done
21
-
22
5
  # Don't run acceptance tests on forks. The decryption keys are not available.
23
6
  if [ "${TRAVIS_REPO_SLUG}" = "chef/mixlib-install" ]; then
24
7
 
@@ -0,0 +1,13 @@
1
+ #!/bin/bash
2
+
3
+ set -evx
4
+
5
+ # Don't run acceptance tests on forks. The decryption keys are not available.
6
+ if [ "${CHEF_ACCEPTANCE}" = "true" ] && [ "${TRAVIS_REPO_SLUG}" = "chef/mixlib-install" ]; then
7
+ # setup acceptance tests
8
+ cd acceptance
9
+ export BUNDLE_GEMFILE=$PWD/Gemfile
10
+ bundle install
11
+ # run acceptances tests and force cleanup
12
+ bundle exec chef-acceptance test --force-destroy
13
+ fi
@@ -20,6 +20,7 @@ require "json"
20
20
  require "mixlib/install/artifact_info"
21
21
  require "mixlib/install/backend/base"
22
22
  require "mixlib/install/product"
23
+ require "mixlib/install/util"
23
24
  require "net/http"
24
25
 
25
26
  module Mixlib
@@ -156,19 +157,9 @@ Can not find any builds for #{options.product_name} in #{endpoint}.
156
157
  end
157
158
 
158
159
  def create_http_request(full_path)
159
- require "mixlib/install/version"
160
-
161
160
  request = Net::HTTP::Get.new(full_path)
162
161
 
163
- user_agents = ["mixlib-install/#{Mixlib::Install::VERSION}"]
164
-
165
- if options.user_agent_headers
166
- options.user_agent_headers.each do |header|
167
- user_agents << header
168
- end
169
- end
170
-
171
- request.add_field("User-Agent", user_agents.join(" "))
162
+ request.add_field("User-Agent", Util.user_agent_string(options.user_agent_headers))
172
163
 
173
164
  request
174
165
  end
@@ -20,7 +20,8 @@ module Mixlib
20
20
  desc "download PRODUCT_NAME", "download an artifact"
21
21
  option :channel,
22
22
  default: :stable,
23
- aliases: ["-c"]
23
+ aliases: ["-c"],
24
+ enum: Mixlib::Install::Options::SUPPORTED_CHANNELS.map(&:to_s)
24
25
  option :version,
25
26
  default: :latest,
26
27
  aliases: ["-v"]
@@ -32,7 +33,9 @@ module Mixlib
32
33
  option :platform_version,
33
34
  aliases: ["-l"]
34
35
  option :architecture,
35
- aliases: ["-a"]
36
+ default: "x86_64",
37
+ aliases: ["-a"],
38
+ enum: Mixlib::Install::Options::SUPPORTED_ARCHITECTURES.map(&:to_s)
36
39
  option :url,
37
40
  desc: "Print download URL without downloading the file",
38
41
  type: :boolean
@@ -96,13 +99,11 @@ module Mixlib
96
99
  desc: "Write script to file",
97
100
  aliases: ["-o"]
98
101
  option :type,
99
- desc: "Install script type: #{Mixlib::Install::Options::SUPPORTED_SHELL_TYPES.join(", ")}",
102
+ desc: "Install script type",
100
103
  aliases: ["-t"],
101
- default: "sh"
104
+ default: "sh",
105
+ enum: Mixlib::Install::Options::SUPPORTED_SHELL_TYPES.map(&:to_s)
102
106
  def install_script
103
- if !Mixlib::Install::Options::SUPPORTED_SHELL_TYPES.include? options[:type].to_sym
104
- abort "type must be one of: #{Mixlib::Install::Options::SUPPORTED_SHELL_TYPES.join(", ")}"
105
- end
106
107
  context = {}
107
108
  context[:base_url] = options[:endpoint] if options[:endpoint]
108
109
  script = eval("Mixlib::Install.install_#{options[:type]}(context)")
@@ -17,6 +17,7 @@
17
17
 
18
18
  require "erb"
19
19
  require "ostruct"
20
+ require "mixlib/install/util"
20
21
 
21
22
  module Mixlib
22
23
  class Install
@@ -47,6 +48,7 @@ module Mixlib
47
48
  if File.exist? "#{script_path}.erb"
48
49
  # Default values to use incase they are not set in the context
49
50
  context[:base_url] ||= "https://omnitruck.chef.io"
51
+ context[:user_agent_string] = Util.user_agent_string(context[:user_agent_headers])
50
52
 
51
53
  context_object = OpenStruct.new(context).instance_eval { binding }
52
54
  ERB.new(File.read("#{script_path}.erb")).result(context_object)
@@ -23,7 +23,7 @@ module Mixlib
23
23
  class Bourne < Base
24
24
  def self.install_sh(context)
25
25
  install_command = []
26
- install_command << get_script("helpers.sh")
26
+ install_command << get_script("helpers.sh", context)
27
27
  install_command << get_script("script_cli_parameters.sh")
28
28
  install_command << get_script("platform_detection.sh")
29
29
  install_command << get_script("fetch_metadata.sh", context)
@@ -42,7 +42,7 @@ module Mixlib
42
42
 
43
43
  def install_command
44
44
  install_command = []
45
- install_command << get_script("helpers.sh")
45
+ install_command << get_script("helpers.sh", user_agent_headers: options.user_agent_headers)
46
46
  install_command << render_variables
47
47
  install_command << get_script("platform_detection.sh")
48
48
  install_command << get_script("fetch_metadata.sh")
@@ -115,7 +115,7 @@ capture_tmp_stderr() {
115
115
  # do_wget URL FILENAME
116
116
  do_wget() {
117
117
  echo "trying wget..."
118
- wget -O "$2" "$1" 2>$tmp_dir/stderr
118
+ wget --user-agent="User-Agent: <%= user_agent_string %>" -O "$2" "$1" 2>$tmp_dir/stderr
119
119
  rc=$?
120
120
  # check for 404
121
121
  grep "ERROR 404" $tmp_dir/stderr 2>&1 >/dev/null
@@ -136,7 +136,7 @@ do_wget() {
136
136
  # do_curl URL FILENAME
137
137
  do_curl() {
138
138
  echo "trying curl..."
139
- curl --retry 5 -sL -D $tmp_dir/stderr "$1" > "$2"
139
+ curl -A "User-Agent: <%= user_agent_string %>" --retry 5 -sL -D $tmp_dir/stderr "$1" > "$2"
140
140
  rc=$?
141
141
  # check for 404
142
142
  grep "404 Not Found" $tmp_dir/stderr 2>&1 >/dev/null
@@ -157,7 +157,7 @@ do_curl() {
157
157
  # do_fetch URL FILENAME
158
158
  do_fetch() {
159
159
  echo "trying fetch..."
160
- fetch -o "$2" "$1" 2>$tmp_dir/stderr
160
+ fetch --user-agent="User-Agent: <%= user_agent_string %>" -o "$2" "$1" 2>$tmp_dir/stderr
161
161
  # check for bad return status
162
162
  test $? -ne 0 && return 1
163
163
  return 0
@@ -187,7 +187,7 @@ do_perl() {
187
187
  # do_python URL FILENAME
188
188
  do_python() {
189
189
  echo "trying python..."
190
- python -c "import sys,urllib2 ; sys.stdout.write(urllib2.urlopen(sys.argv[1]).read())" "$1" > "$2" 2>$tmp_dir/stderr
190
+ python -c "import sys,urllib2; sys.stdout.write(urllib2.urlopen(urllib2.Request(sys.argv[1], headers={ 'User-Agent': '<%= user_agent_string %>' })).read())" "$1" > "$2" 2>$tmp_dir/stderr
191
191
  rc=$?
192
192
  # check for 404
193
193
  grep "HTTP Error 404" $tmp_dir/stderr 2>&1 >/dev/null
@@ -23,7 +23,7 @@ module Mixlib
23
23
  class PowerShell < Base
24
24
  def self.install_ps1(context)
25
25
  install_project_module = []
26
- install_project_module << get_script("helpers.ps1")
26
+ install_project_module << get_script("helpers.ps1", context)
27
27
  install_project_module << get_script("get_project_metadata.ps1", context)
28
28
  install_project_module << get_script("install_project.ps1")
29
29
 
@@ -45,7 +45,7 @@ module Mixlib
45
45
 
46
46
  def install_command
47
47
  install_project_module = []
48
- install_project_module << get_script("helpers.ps1")
48
+ install_project_module << get_script("helpers.ps1", user_agent_headers: options.user_agent_headers)
49
49
  install_project_module << get_script("get_project_metadata.ps1")
50
50
  install_project_module << get_script("install_project.ps1")
51
51
  install_command = []
@@ -64,6 +64,7 @@ function Get-WebContentOnFullNet {
64
64
 
65
65
  $proxy = New-Object -TypeName System.Net.WebProxy
66
66
  $wc = new-object System.Net.WebClient
67
+ $wc.Headers.Add("user-agent", "<%= user_agent_string %>")
67
68
  $proxy.Address = $env:http_proxy
68
69
  $wc.Proxy = $proxy
69
70
 
@@ -80,6 +81,7 @@ function Get-WebContentOnCore {
80
81
 
81
82
  $handler = New-Object System.Net.Http.HttpClientHandler
82
83
  $client = New-Object System.Net.Http.HttpClient($handler)
84
+ $client.DefaultRequestHeaders.UserAgent.ParseAdd("<%= user_agent_string %>")
83
85
  $client.Timeout = New-Object System.TimeSpan(0, 30, 0)
84
86
  $cancelTokenSource = [System.Threading.CancellationTokenSource]::new()
85
87
  $responseMsg = $client.GetAsync([System.Uri]::new($uri), $cancelTokenSource.Token)
@@ -26,9 +26,25 @@ module Mixlib
26
26
 
27
27
  attr_reader :options
28
28
 
29
- SUPPORTED_CHANNELS = [:stable, :current, :unstable]
29
+ SUPPORTED_ARCHITECTURES = %w{
30
+ i386
31
+ powerpc
32
+ ppc64
33
+ ppc64le
34
+ s390x
35
+ sparc
36
+ x86_64
37
+ }
38
+ SUPPORTED_CHANNELS = [
39
+ :stable,
40
+ :current,
41
+ :unstable,
42
+ ]
30
43
  SUPPORTED_PRODUCT_NAMES = PRODUCT_MATRIX.products
31
- SUPPORTED_SHELL_TYPES = [:ps1, :sh]
44
+ SUPPORTED_SHELL_TYPES = [
45
+ :ps1,
46
+ :sh,
47
+ ]
32
48
  SUPPORTED_OPTIONS = [
33
49
  :architecture,
34
50
  :channel,
@@ -55,6 +71,7 @@ module Mixlib
55
71
  def validate_options!
56
72
  errors = []
57
73
 
74
+ errors << validate_architecture
58
75
  errors << validate_product_names
59
76
  errors << validate_channels
60
77
  errors << validate_shell_type
@@ -107,6 +124,15 @@ module Mixlib
107
124
  }
108
125
  end
109
126
 
127
+ def validate_architecture
128
+ unless architecture.nil? || SUPPORTED_ARCHITECTURES.include?(architecture)
129
+ <<-EOS
130
+ Unknown architecture #{architecture}.
131
+ Must be one of: #{SUPPORTED_ARCHITECTURES.join(", ")}
132
+ EOS
133
+ end
134
+ end
135
+
110
136
  def validate_product_names
111
137
  unless SUPPORTED_PRODUCT_NAMES.include? product_name
112
138
  <<-EOS
@@ -118,6 +118,17 @@ module Mixlib
118
118
  "sh -c '\n#{cmd}\n'"
119
119
  end
120
120
 
121
+ # Build the user-agent string
122
+ #
123
+ # @param name [Array] headers
124
+ # @return [String] generated user-agent string
125
+ def user_agent_string(headers)
126
+ require "mixlib/install/version"
127
+ user_agents = %W{mixlib-install/#{Mixlib::Install::VERSION}}
128
+ user_agents << headers
129
+ # Ensure that if the default user agent is aleady set it doesn't get duplicated
130
+ user_agents.flatten.compact.uniq.join(" ")
131
+ end
121
132
  end
122
133
  end
123
134
  end
@@ -1,5 +1,5 @@
1
1
  module Mixlib
2
2
  class Install
3
- VERSION = "2.1.5"
3
+ VERSION = "2.1.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-install
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ version: 2.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thom May
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-10-26 00:00:00.000000000 Z
12
+ date: 2016-11-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: artifactory
@@ -260,9 +260,7 @@ files:
260
260
  - bin/mixlib-install
261
261
  - ci/before-script.sh
262
262
  - ci/es-infrastructure.pem.enc
263
- - ci/script.sh
264
- - functional/cli_spec.rb
265
- - functional/spec_helper.rb
263
+ - ci/run-acceptance-tests.sh
266
264
  - lib/mixlib/install.rb
267
265
  - lib/mixlib/install/artifact_info.rb
268
266
  - lib/mixlib/install/backend.rb
@@ -274,13 +272,13 @@ files:
274
272
  - lib/mixlib/install/generator/bourne.rb
275
273
  - lib/mixlib/install/generator/bourne/scripts/fetch_metadata.sh.erb
276
274
  - lib/mixlib/install/generator/bourne/scripts/fetch_package.sh
277
- - lib/mixlib/install/generator/bourne/scripts/helpers.sh
275
+ - lib/mixlib/install/generator/bourne/scripts/helpers.sh.erb
278
276
  - lib/mixlib/install/generator/bourne/scripts/install_package.sh
279
277
  - lib/mixlib/install/generator/bourne/scripts/platform_detection.sh
280
278
  - lib/mixlib/install/generator/bourne/scripts/script_cli_parameters.sh
281
279
  - lib/mixlib/install/generator/powershell.rb
282
280
  - lib/mixlib/install/generator/powershell/scripts/get_project_metadata.ps1.erb
283
- - lib/mixlib/install/generator/powershell/scripts/helpers.ps1
281
+ - lib/mixlib/install/generator/powershell/scripts/helpers.ps1.erb
284
282
  - lib/mixlib/install/generator/powershell/scripts/install_project.ps1
285
283
  - lib/mixlib/install/generator/powershell/scripts/platform_detection.ps1
286
284
  - lib/mixlib/install/options.rb
@@ -311,7 +309,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
311
309
  version: '0'
312
310
  requirements: []
313
311
  rubyforge_project:
314
- rubygems_version: 2.6.6
312
+ rubygems_version: 2.4.5.1
315
313
  signing_key:
316
314
  specification_version: 4
317
315
  summary: A mixin to help with omnitruck installs
@@ -1,14 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -evx
4
-
5
- # run unit tests
6
- /opt/chefdk/embedded/bin/bundle install && /opt/chefdk/bin/chef exec rake ci
7
-
8
- # Don't run acceptance tests on forks. The decryption keys are not available.
9
- if [ "${TRAVIS_REPO_SLUG}" = "chef/mixlib-install" ]; then
10
- # setup acceptance tests
11
- cd acceptance && export BUNDLE_GEMFILE=$PWD/Gemfile && /opt/chefdk/embedded/bin/bundle install && export APPBUNDLER_ALLOW_RVM=true
12
- # run acceptances tests and force cleanup
13
- /opt/chefdk/embedded/bin/bundle exec chef-acceptance test --force-destroy
14
- fi
@@ -1,192 +0,0 @@
1
- #
2
- # Copyright:: Copyright (c) 2016 Chef, Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require_relative "./spec_helper"
19
- require "mixlib/install/cli"
20
-
21
- describe "mixlib-install executable", :type => :aruba do
22
- let(:args) { nil }
23
-
24
- before(:all) do
25
- puts "
26
- ****************************************
27
- TESTS ARE SLOW - DOWNLOADS PACKAGES.
28
- ****************************************
29
-
30
- "
31
- end
32
-
33
- before(:each) { run("bin/mixlib-install #{command} #{args}") }
34
-
35
- describe "version command" do
36
- let(:command) { "version" }
37
-
38
- it "prints the mixlib-install version" do
39
- require "mixlib/install/version"
40
- expect(last_command_started).to have_output Mixlib::Install::VERSION
41
- end
42
- end
43
-
44
- describe "list-versions command" do
45
- let(:command) { "list-versions" }
46
-
47
- context "with valid args" do
48
- let(:args) { "chef stable" }
49
-
50
- it "prints the versions" do
51
- expect(last_command_started).to have_output /12.0.3/
52
- end
53
- end
54
-
55
- context "with invalid args" do
56
- let(:args) { "foo bar" }
57
-
58
- it "returns error message" do
59
- expect(last_command_started).to have_output /Unknown product name foo/
60
- expect(last_command_started).to have_output /Unknown channel bar/
61
- end
62
- end
63
- end
64
-
65
- describe "install-script command" do
66
- let(:command) { "install-script" }
67
-
68
- context "with no args" do
69
- it "returns shell script to stdout" do
70
- expect(last_command_started).to have_output /end of install_package.sh/
71
- end
72
- end
73
-
74
- context "with ps1 type" do
75
- let(:args) { "-t ps1" }
76
-
77
- it "returns powershell script to stdout" do
78
- expect(last_command_started).to have_output /export-modulemember -function 'Install-Project','Get-ProjectMetadata' -alias 'install'/
79
- end
80
- end
81
-
82
- context "with invalid type" do
83
- let(:args) { "-t foo" }
84
-
85
- it "errors an error" do
86
- expect(last_command_started).to have_output /type must be one of/
87
- end
88
- end
89
-
90
- context "with alternate endpoint" do
91
- let(:args) { "--endpoint https://omnitruck-custom.chef.io" }
92
-
93
- it "contains the new endpoint" do
94
- expect(last_command_started).to have_output /https:\/\/omnitruck-custom.chef.io/
95
- end
96
- end
97
-
98
- context "with output option" do
99
- let(:args) { "-o script.sh" }
100
-
101
- it "writes to a file" do
102
- expect("script.sh").to be_an_existing_file
103
- end
104
- end
105
- end
106
-
107
- describe "download command" do
108
- let(:command) { "download" }
109
-
110
- context "without args" do
111
- it "exits with required args error" do
112
- expect(last_command_started).to have_output /"mixlib-install #{command}" was called with no arguments/
113
- end
114
- end
115
-
116
- context "with chef product" do
117
- let(:args) { "chef" }
118
-
119
- it "downloads a chef artifact" do
120
- expect(last_command_started).to have_output /Download saved to/
121
- end
122
- end
123
-
124
- context "with url flag" do
125
- let(:args) { "chef --url" }
126
-
127
- it "outputs the url" do
128
- expect(last_command_started).to have_output /https:\/\/packages.chef.io\/files\/stable\/chef/
129
- end
130
- end
131
-
132
- context "with attributes arg" do
133
- let(:args) { "chef --url --attributes" }
134
-
135
- it "outputs the attributes" do
136
- expect(last_command_started).to have_output /"license": "Apache-2.0"/
137
- end
138
- end
139
-
140
- context "with platform arg" do
141
- let(:args) { "chef -p ubuntu" }
142
-
143
- it "fails with missing args error" do
144
- expect(last_command_started).to have_output /Must provide platform version and architecture when specifying a platform/
145
- end
146
- end
147
-
148
- context "with valid platform version and architecture" do
149
- let(:args) { "chef -p ubuntu -l 14.04 -a x86_64 --attributes" }
150
- let(:latest_version) { Mixlib::Install.available_versions("chef", "stable").last }
151
- let(:filename) { "chef_#{latest_version}-1_amd64.deb" }
152
-
153
- it "has the correct artifact" do
154
- require "digest"
155
- sha256 = Digest::SHA256.hexdigest("./tmp/aruba/#{filename}")
156
- expect(last_command_started).to have_output /sha256/
157
- end
158
- end
159
-
160
- context "with invalid platform version and architecture" do
161
- let(:args) { "chef -p ubuntu -l 99.99 -a x86_64" }
162
-
163
- it "returns no results" do
164
- expect(last_command_started).to have_output /No results found./
165
- end
166
- end
167
-
168
- context "with specified version" do
169
- let(:args) { "chef -v 12.0.3 " }
170
-
171
- it "returns the correct artifact" do
172
- expect(last_command_started).to have_output /chef[-_]12.0.3-1/
173
- end
174
- end
175
-
176
- context "with specified channel" do
177
- let(:args) { "chef -c current " }
178
-
179
- it "returns the correct artifact" do
180
- expect(last_command_started).to have_output /files\/current\/chef/
181
- end
182
- end
183
-
184
- context "with specified directory" do
185
- let(:args) { "chef -d mydir " }
186
-
187
- it "downloads to dir" do
188
- expect(last_command_started).to have_output /Download saved to .*mydir\/chef/
189
- end
190
- end
191
- end
192
- end
@@ -1,16 +0,0 @@
1
- require "aruba/rspec"
2
-
3
- Aruba.configure do |config|
4
- config.exit_timeout = 120
5
- config.io_wait_timeout = 2
6
- config.activate_announcer_on_command_failure = [:stderr, :stdout, :command]
7
- end
8
-
9
- RSpec.configure do |config|
10
- config.filter_run focus: true
11
- config.run_all_when_everything_filtered = true
12
-
13
- config.expect_with :rspec do |c|
14
- c.syntax = :expect
15
- end
16
- end