Skip to content

Commit

Permalink
Merge 48ae64d into 5e041de
Browse files Browse the repository at this point in the history
  • Loading branch information
hartmantis committed Nov 19, 2014
2 parents 5e041de + 48ae64d commit 736cc7d
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 47 deletions.
17 changes: 17 additions & 0 deletions .kitchen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,20 @@ suites:
attributes:
chef_dk:
global_shell_init: true
- name: install_from_specific_url
run_list:
- recipe[chef-dk]
attributes:
chef_dk:
package_url: https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.3.4-1_amd64.deb
excludes:
- ubuntu-12.04
- debian-7.6
- debian-6.0.10
- centos-6.5
- macosx-10.8
- macosx-10.9
- ubuntu-12-04-x64
- debian-7-0-x64
- debian-6-0-x64
- centos-6-5-x64
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Chef-DK Cookbook CHANGELOG
==========================

v?.?.? (????-??-??)
-------------------
* Drop support for Chef-DK < 0.2.2
* Fix bug with `package_url` option not being respected

v2.0.3 (2014-10-24)
-------------------
* Switch release tool from Stove to Emeril
Expand Down
23 changes: 20 additions & 3 deletions libraries/provider_chef_dk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,12 @@ def global_shell_init(action = nil)
#
def remote_file
@remote_file ||= Resource::RemoteFile.new(download_path, run_context)
@remote_file.source(metadata.url)
@remote_file.checksum(metadata.sha256)
if new_resource.package_url
@remote_file.source(new_resource.package_url)
else
@remote_file.source(metadata.url)
@remote_file.checksum(metadata.sha256)
end
@remote_file
end

Expand All @@ -152,7 +156,20 @@ def remote_file
# @return [String]
#
def download_path
::File.join(Chef::Config[:file_cache_path], metadata.filename)
::File.join(Chef::Config[:file_cache_path], filename)
end

#
# The base name of the package file
#
# @return [String]
#
def filename
if new_resource.package_url
::File.basename(new_resource.package_url)
else
metadata.filename
end
end

#
Expand Down
8 changes: 2 additions & 6 deletions libraries/provider_chef_dk_mac_os_x.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,8 @@ class MacOsX < ChefDk
# (An `app`, `source`, and `type` for .dmg packages)
#
def tailor_package_resource_to_platform
# TODO: This can be simplified as soon as we're ready to drop support
# for installing Chef-DK < 0.2.2
new = Gem::Version.new(metadata.version) >= Gem::Version.new('0.2.2')
@package.app(new ? metadata.filename.gsub(/\.dmg$/, '') : \
PACKAGE_NAME)
@package.volumes_dir(new ? 'Chef Development Kit' : PACKAGE_NAME)
@package.app(filename.gsub(/\.dmg$/, ''))
@package.volumes_dir('Chef Development Kit')
@package.source("file://#{download_path}")
@package.type('pkg')
@package.package_id("com.getchef.pkg.#{PACKAGE_NAME}")
Expand Down
43 changes: 11 additions & 32 deletions spec/libraries/provider_chef_dk_mac_os_x_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,14 @@
version: chefdk_version,
package_url: package_url)
end
let(:metadata_version) { '0.2.2' }
let(:metadata_filename) { 'chefdk-0.2.2-1.dmg' }
let(:metadata) do
double(version: metadata_version, filename: metadata_filename)
end
let(:filename) { 'chefdk-0.2.2-1.dmg' }
let(:provider) { described_class.new(new_resource, nil) }

before(:each) do
allow_any_instance_of(described_class).to receive(:node)
.and_return(Fauxhai.mock(platform).data)
allow_any_instance_of(described_class).to receive(:metadata)
.and_return(metadata)
allow_any_instance_of(described_class).to receive(:filename)
.and_return(filename)
end

describe '#tailor_package_resource_to_platform' do
Expand All @@ -51,6 +47,7 @@
type: true,
package_id: true)
end

let(:provider) do
p = described_class.new(new_resource, nil)
p.instance_variable_set(:@package, package)
Expand All @@ -63,33 +60,15 @@
.and_return('/tmp/blah.pkg')
end

context 'a newer version of Chef-DK' do
let(:metadata_version) { '0.2.2' }

it 'calls `app` with the new naming style' do
expect(package).to receive(:app).with('chefdk-0.2.2-1')
res
end

it 'calls `volumes_dir` with the new naming style' do
expected = 'Chef Development Kit'
expect(package).to receive(:volumes_dir).with(expected)
res
end
it 'calls `app` with the new naming style' do
expect(package).to receive(:app).with('chefdk-0.2.2-1')
res
end

context 'an older version of Chef-DK' do
let(:metadata_version) { '0.2.1' }

it 'calls `app` with the old naming style' do
expect(package).to receive(:app).with('chefdk')
res
end

it 'calls `volumes_dir` with the old naming style' do
expect(package).to receive(:volumes_dir).with('chefdk')
res
end
it 'calls `volumes_dir` with the new naming style' do
expected = 'Chef Development Kit'
expect(package).to receive(:volumes_dir).with(expected)
res
end

it 'calls `source` with the local file path' do
Expand Down
69 changes: 63 additions & 6 deletions spec/libraries/provider_chef_dk_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -347,23 +347,80 @@
.and_return('/tmp/pack.pkg')
end

it 'returns an instance of Chef::Resource::RemoteFile' do
expected = Chef::Resource::RemoteFile
expect(provider.send(:remote_file)).to be_an_instance_of(expected)
shared_examples_for 'any node' do
it 'returns an instance of Chef::Resource::RemoteFile' do
expected = Chef::Resource::RemoteFile
expect(provider.send(:remote_file)).to be_an_instance_of(expected)
end
end

context 'no package_url (default)' do
it_behaves_like 'any node'

it 'sets the file source' do
expect_any_instance_of(Chef::Resource::RemoteFile).to receive(:source)
.with('http://x.com/pack.pkg')
provider.send(:remote_file)
end

it 'sets the file checksum' do
expect_any_instance_of(Chef::Resource::RemoteFile).to receive(:checksum)
.with('lolnope')
provider.send(:remote_file)
end
end

context 'a package_url provided' do
let(:package_url) { 'file:///tmp/path/thing.deb' }

it_behaves_like 'any node'

it 'sets the file source' do
expect_any_instance_of(Chef::Resource::RemoteFile).to receive(:source)
.with('file:///tmp/path/thing.deb')
provider.send(:remote_file)
end

it 'sets no file checksum' do
expect_any_instance_of(Chef::Resource::RemoteFile)
.not_to receive(:checksum)
provider.send(:remote_file)
end
end
end

describe '#download_path' do
before(:each) do
allow_any_instance_of(described_class).to receive(:filename)
.and_return('test.deb')
end

it 'returns a path in the Chef file_cache_path' do
expected = File.join(Chef::Config[:file_cache_path], 'test.deb')
expect(provider.send(:download_path)).to eq(expected)
end
end

describe '#filename' do
let(:metadata) { double(filename: 'test.deb') }

before(:each) do
allow_any_instance_of(described_class).to receive(:metadata)
.and_return(metadata)
end

it 'returns a path in the Chef file_cache_path' do
expected = File.join(Chef::Config[:file_cache_path], 'test.deb')
expect(provider.send(:download_path)).to eq(expected)
context 'no package_url (default)' do
it 'returns a filename from the metadata' do
expect(provider.send(:filename)).to eq('test.deb')
end
end

context 'a package_url provided' do
let(:package_url) { 'file:///tmp/somewhere/package.pkg' }

it 'returns the base name of the package_url file' do
expect(provider.send(:filename)).to eq('package.pkg')
end
end
end

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Encoding: UTF-8
#
# Cookbook Name:: chef-dk
# Spec:: serverspec/install_from_specific_url/package
#
# Copyright (C) 2014, Jonathan Hartman
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'spec_helper'

describe 'Chef-DK package' do
it 'is installed' do
expect(package('chefdk')).to be_installed.with_version('0.3.4-1')
end
end

0 comments on commit 736cc7d

Please sign in to comment.