From f387dbbb9ebfff20b7c9fe1c060624c9f4ff6d06 Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Fri, 2 Oct 2015 10:31:46 +0200 Subject: [PATCH 1/5] improvement: skip oneget if it is not running on windows --- lib/resources/oneget.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/resources/oneget.rb b/lib/resources/oneget.rb index 4c76b47f0..b9682f005 100644 --- a/lib/resources/oneget.rb +++ b/lib/resources/oneget.rb @@ -12,6 +12,9 @@ class OneGetPackage < Vulcano.resource(1) def initialize(package_name) @package_name = package_name + + # verify that this resource is only supported on Windows + return skip_resource 'The `oneget` resource is not supported on your OS.' if vulcano.os[:family] != 'windows' end def info From e139070923e57405d8a2df04d8094fb6fb3e85fb Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Fri, 2 Oct 2015 11:09:47 +0200 Subject: [PATCH 2/5] increase test coverage for oneget --- test/helper.rb | 3 ++- .../cmd/{get-package => get-package-firefox} | 0 test/unit/mock/cmd/get-package-ruby | 18 +++++++++++++ test/unit/resource_oneget_test.rb | 26 ++++++++++++++++++- 4 files changed, 45 insertions(+), 2 deletions(-) rename test/unit/mock/cmd/{get-package => get-package-firefox} (100%) create mode 100644 test/unit/mock/cmd/get-package-ruby diff --git a/test/helper.rb b/test/helper.rb index aca2c1311..3f88e1ea8 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -94,7 +94,8 @@ class MockLoader 'gem list --local -a -q ^rubocop$' => cmd.call('gem-list-local-a-q-rubocop'), 'npm ls -g --json bower' => cmd.call('npm-ls-g--json-bower'), 'pip show jinja2' => cmd.call('pip-show-jinja2'), - "Get-Package -Name 'Mozilla Firefox' | ConvertTo-Json" => cmd.call('get-package'), + "Get-Package -Name 'Mozilla Firefox' | ConvertTo-Json" => cmd.call('get-package-firefox'), + "Get-Package -Name 'Ruby 2.1.6-p336-x64' | ConvertTo-Json" => cmd.call('get-package-ruby'), "New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name Service -Value (Get-Service -Name dhcp| Select-Object -Property Name, DisplayName, Status) -PassThru | Add-Member -MemberType NoteProperty -Name WMI -Value (Get-WmiObject -Class Win32_Service | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property StartMode) -PassThru | ConvertTo-Json" => cmd.call('get-service-dhcp'), "Get-WindowsFeature | Where-Object {$_.Name -eq 'dhcp' -or $_.DisplayName -eq 'dhcp'} | Select-Object -Property Name,DisplayName,Description,Installed,InstallState | ConvertTo-Json" => cmd.call('get-windows-feature'), 'lsmod' => cmd.call('lsmod'), diff --git a/test/unit/mock/cmd/get-package b/test/unit/mock/cmd/get-package-firefox similarity index 100% rename from test/unit/mock/cmd/get-package rename to test/unit/mock/cmd/get-package-firefox diff --git a/test/unit/mock/cmd/get-package-ruby b/test/unit/mock/cmd/get-package-ruby new file mode 100644 index 000000000..42b7114fd --- /dev/null +++ b/test/unit/mock/cmd/get-package-ruby @@ -0,0 +1,18 @@ +[ + { + "ProviderName": "Programs", + "Status": "Installed", + "SearchKey": "Ruby 2.1.6-p336-x64", + "CanonicalId": "programs:Ruby 2.1.6-p336-x64/2.1.6-p336", + "Name": "Ruby 2.1.6-p336-x64", + "Version": "2.1.6-p336" + }, + { + "ProviderName": "Programs", + "Status": "Installed", + "SearchKey": "Ruby 2.1.6-p336-x64", + "CanonicalId": "programs:Ruby 2.1.6-p336-x64/2.1.6-p336", + "Name": "Ruby 2.1.6-p336-x64", + "Version": "2.1.6-p336" + } +] diff --git a/test/unit/resource_oneget_test.rb b/test/unit/resource_oneget_test.rb index 77d968bc0..ef1be61a0 100644 --- a/test/unit/resource_oneget_test.rb +++ b/test/unit/resource_oneget_test.rb @@ -4,9 +4,9 @@ require 'helper' require 'vulcano/resource' describe 'Vulcano::Resources::Passwd' do - let(:resource) { load_resource('oneget', 'Mozilla Firefox') } it 'verify oneget package detail parsing' do + resource = MockLoader.new(:windows).load_resource('oneget', 'Mozilla Firefox') pkg = { name: 'Mozilla Firefox 40.0.3 (x86 en-US)', version: '40.0.3', @@ -14,6 +14,30 @@ describe 'Vulcano::Resources::Passwd' do installed: true, } _(resource.installed?).must_equal true + _(resource.version).must_equal '40.0.3' + _(resource.info).must_equal pkg + end + + # catch cases where we recieve multiple return values + # eg. happens if you do 'choco install ruby' + it 'filter dups of Get-Package' do + resource = MockLoader.new(:windows).load_resource('oneget', 'Ruby 2.1.6-p336-x64') + pkg = { + name: 'Ruby 2.1.6-p336-x64', + version: '2.1.6-p336', + type: 'oneget', + installed: true, + } + _(resource.installed?).must_equal true + _(resource.version).must_equal '2.1.6-p336' + _(resource.info).must_equal pkg + end + + it 'should skip on linux' do + resource = MockLoader.new(:centos7).load_resource('oneget', 'Not available') + pkg = { type: 'oneget', installed: false } + _(resource.installed?).must_equal false + _(resource.version).must_equal nil _(resource.info).must_equal pkg end end From 47e0b38a108c8f9158c7485322f1022972c33ade Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Fri, 2 Oct 2015 11:10:13 +0200 Subject: [PATCH 3/5] bugfix: catch case where we retrieve an arrray --- lib/resources/oneget.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/resources/oneget.rb b/lib/resources/oneget.rb index b9682f005..1ace2e51e 100644 --- a/lib/resources/oneget.rb +++ b/lib/resources/oneget.rb @@ -22,6 +22,7 @@ class OneGetPackage < Vulcano.resource(1) @info = {} @info[:type] = 'oneget' + @info[:installed] = false cmd = vulcano.run_command("Get-Package -Name '#{@package_name}' | ConvertTo-Json") # cannot rely on exit code for now, successful command returns exit code 1 @@ -30,13 +31,19 @@ class OneGetPackage < Vulcano.resource(1) begin pkgs = JSON.parse(cmd.stdout) + @info[:installed] = true + + # sometimes we get multiple values + if pkgs.kind_of?(Array) + # select the first entry + pkgs = pkgs.first + end rescue JSON::ParserError => _e return @info end - @info[:name] = pkgs['Name'] - @info[:version] = pkgs['Version'] - @info[:installed] = true + @info[:name] = pkgs['Name'] if pkgs.key?('Name') + @info[:version] = pkgs['Version'] if pkgs.key?('Version') @info end From 0a7dfce1e61b57c0b25f37b5e9ca59221c4a5be0 Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Fri, 2 Oct 2015 14:55:13 +0200 Subject: [PATCH 4/5] add author --- lib/resources/oneget.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/resources/oneget.rb b/lib/resources/oneget.rb index 1ace2e51e..148646976 100644 --- a/lib/resources/oneget.rb +++ b/lib/resources/oneget.rb @@ -1,4 +1,5 @@ # encoding: utf-8 +# author: Christoph Hartmann # This resource talks with OneGet (https://github.com/OneGet/oneget) # Its part of Windows Management Framework 5.0 and part of Windows 10 From b40ab55710dcd79563908c183f1a58bb9c6c7e87 Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Sat, 3 Oct 2015 14:02:34 +0200 Subject: [PATCH 5/5] fix: rubucop lint --- lib/resources/oneget.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/resources/oneget.rb b/lib/resources/oneget.rb index 148646976..54dc7e67e 100644 --- a/lib/resources/oneget.rb +++ b/lib/resources/oneget.rb @@ -35,7 +35,7 @@ class OneGetPackage < Vulcano.resource(1) @info[:installed] = true # sometimes we get multiple values - if pkgs.kind_of?(Array) + if pkgs.is_a?(Array) # select the first entry pkgs = pkgs.first end