r-train 0.9.7 → 0.10.0

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: 4ecdabc0165badec2fd8ff58e1fa04bb12dcd0ca
4
- data.tar.gz: 7d3100e5f0f9ad7c35087010f34e7027c5d6ced2
3
+ metadata.gz: 0fd25048f1db2b7fe16bbdfc8cbbf0bc37378a07
4
+ data.tar.gz: 1aa813741c5d080c00e74790af38d1fee7b23a9a
5
5
  SHA512:
6
- metadata.gz: 9d5ca60694e074a0e75358b37f13481a9e1c548d097270e1457f92f14e32bae154360fffb08828527d15d4153c3ba21f9da91668de139962eb2e597cc8f5a91a
7
- data.tar.gz: d5690275ba08a1a50bfa1348746f92eb2d8d06e27b8e97569dc31479fd01dce3c06f2118a659358a4aff15a24ebf879318ba5393745a13f24864ba27019cfb0d
6
+ metadata.gz: 109add699ff0d357e8d930d792434f0787778d5447b34771a879e389e7ff42930251fa29fa0d54a0c04551226992e08a210b41a6d21266bd4b199cc5aaa13ec8
7
+ data.tar.gz: 4b564895054b589201d8021ca735c21174350516a97a1c799332ca7b0ee9038b84b7100dd2f2b5545be99331f0282ba57e0eaf46be8c9cf66e8d488f5bc84b3f
data/.rubocop.yml CHANGED
@@ -16,14 +16,18 @@ HashSyntax:
16
16
  Enabled: true
17
17
  LineLength:
18
18
  Enabled: false
19
+ EmptyLinesAroundBlockBody:
20
+ Enabled: false
19
21
  MethodLength:
20
22
  Max: 40
23
+ NumericLiterals:
24
+ MinDigits: 10
21
25
  Metrics/CyclomaticComplexity:
22
26
  Max: 10
23
27
  Metrics/PerceivedComplexity:
24
28
  Max: 10
25
29
  Metrics/AbcSize:
26
- Max: 29
30
+ Max: 33
27
31
  Style/PercentLiteralDelimiters:
28
32
  PreferredDelimiters:
29
33
  '%': '{}'
@@ -35,11 +39,33 @@ Style/PercentLiteralDelimiters:
35
39
  '%w': '{}'
36
40
  '%W': ()
37
41
  '%x': ()
42
+ Style/AlignHash:
43
+ Enabled: false
44
+ Style/PredicateName:
45
+ Enabled: false
38
46
  Style/ClassAndModuleChildren:
39
47
  Enabled: false
48
+ Style/ConditionalAssignment:
49
+ Enabled: false
50
+ Style/BracesAroundHashParameters:
51
+ Enabled: false
40
52
  Style/AndOr:
41
53
  Enabled: false
42
- Style/TrailingComma:
54
+ Style/Not:
55
+ Enabled: false
56
+ Style/FileName:
57
+ Enabled: false
58
+ Style/TrailingCommaInLiteral:
43
59
  EnforcedStyleForMultiline: comma
60
+ Style/TrailingCommaInArguments:
61
+ EnforcedStyleForMultiline: comma
62
+ Style/NegatedIf:
63
+ Enabled: false
64
+ Style/UnlessElse:
65
+ Enabled: false
66
+ BlockDelimiters:
67
+ Enabled: false
44
68
  Style/SpaceAroundOperators:
45
- MultiSpaceAllowedForOperators: [ "=", "=>", "||=" ]
69
+ Enabled: false
70
+ Style/IfUnlessModifier:
71
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,24 +1,43 @@
1
1
  # Change Log
2
2
 
3
- ## [0.9.7](https://github.com/chef/train/tree/0.9.7) (2016-02-05)
4
- [Full Changelog](https://github.com/chef/train/compare/v0.9.6...0.9.7)
3
+ ## [0.10.0](https://github.com/chef/train/tree/0.10.0) (2016-02-19)
4
+ [Full Changelog](https://github.com/chef/train/compare/v0.9.7...0.10.0)
5
5
 
6
6
  **Implemented enhancements:**
7
7
 
8
+ - show mock failures for commands [\#69](https://github.com/chef/train/pull/69) ([arlimus](https://github.com/arlimus))
9
+ - update gems and rubocop [\#68](https://github.com/chef/train/pull/68) ([arlimus](https://github.com/arlimus))
10
+
11
+ **Fixed bugs:**
12
+
13
+ - complete rewrite of windows version detection [\#70](https://github.com/chef/train/pull/70) ([chris-rock](https://github.com/chris-rock))
14
+
15
+ ## [v0.9.7](https://github.com/chef/train/tree/v0.9.7) (2016-02-05)
16
+ [Full Changelog](https://github.com/chef/train/compare/v0.9.6...v0.9.7)
17
+
18
+ **Implemented enhancements:**
19
+
20
+ - feature: add file.basename [\#64](https://github.com/chef/train/pull/64) ([arlimus](https://github.com/arlimus))
8
21
  - add `requiretty` workaround measures [\#63](https://github.com/chef/train/pull/63) ([srenatus](https://github.com/srenatus))
9
22
 
10
- **Merged pull requests:**
23
+ **Fixed bugs:**
11
24
 
12
25
  - ensure bundler is installed on travis [\#66](https://github.com/chef/train/pull/66) ([chris-rock](https://github.com/chris-rock))
13
- - feature: add file.basename [\#64](https://github.com/chef/train/pull/64) ([arlimus](https://github.com/arlimus))
26
+
27
+ **Merged pull requests:**
28
+
29
+ - 0.9.7 [\#67](https://github.com/chef/train/pull/67) ([chris-rock](https://github.com/chris-rock))
14
30
 
15
31
  ## [v0.9.6](https://github.com/chef/train/tree/v0.9.6) (2016-01-29)
16
32
  [Full Changelog](https://github.com/chef/train/compare/v0.9.5...v0.9.6)
17
33
 
34
+ **Implemented enhancements:**
35
+
36
+ - add solaris support [\#61](https://github.com/chef/train/pull/61) ([chris-rock](https://github.com/chris-rock))
37
+
18
38
  **Merged pull requests:**
19
39
 
20
40
  - 0.9.6 [\#62](https://github.com/chef/train/pull/62) ([chris-rock](https://github.com/chris-rock))
21
- - add solaris support [\#61](https://github.com/chef/train/pull/61) ([chris-rock](https://github.com/chris-rock))
22
41
 
23
42
  ## [v0.9.5](https://github.com/chef/train/tree/v0.9.5) (2016-01-25)
24
43
  [Full Changelog](https://github.com/chef/train/compare/v0.9.4...v0.9.5)
data/Gemfile CHANGED
@@ -4,9 +4,9 @@ gemspec
4
4
 
5
5
  group :test do
6
6
  gem 'bundler', '~> 1.5'
7
- gem 'minitest', '~> 5.5'
7
+ gem 'minitest', '~> 5.8'
8
8
  gem 'rake', '~> 10'
9
- gem 'rubocop', '~> 0.33.0'
9
+ gem 'rubocop', '~> 0.36.0'
10
10
  gem 'simplecov', '~> 0.10'
11
11
  gem 'concurrent-ruby', '~> 0.9'
12
12
  end
data/Rakefile CHANGED
@@ -82,7 +82,7 @@ def train_version(target = nil)
82
82
 
83
83
  unless target.nil?
84
84
  raw = File.read(path)
85
- nu = raw.sub(/VERSION.*/, "VERSION = '#{target}'")
85
+ nu = raw.sub(/VERSION.*/, "VERSION = '#{target}'.freeze")
86
86
  File.write(path, nu)
87
87
  load(path)
88
88
  end
data/lib/train.rb CHANGED
@@ -79,8 +79,6 @@ module Train
79
79
  conf
80
80
  end
81
81
 
82
- private
83
-
84
82
  def self.group_keys_and_keyfiles(conf)
85
83
  # in case the user specified a key-file, register it that way
86
84
  # we will clear the list of keys and put keys and key_files separately
@@ -3,6 +3,7 @@
3
3
  # author: Christoph Hartmann
4
4
 
5
5
  require 'base64'
6
+ require 'winrm'
6
7
  require 'train/errors'
7
8
 
8
9
  module Train::Extras
@@ -7,15 +7,14 @@ module Train::Extras
7
7
  class AixFile < UnixFile
8
8
  def link_path
9
9
  return nil unless symlink?
10
- @link_path ||= (
11
- @backend.run_command("perl -e 'print readlink shift' #{@spath}").stdout.chomp
12
- )
10
+ @link_path ||=
11
+ @backend.run_command("perl -e 'print readlink shift' #{@spath}")
12
+ .stdout.chomp
13
13
  end
14
14
 
15
15
  def mounted
16
- @mounted ||= (
16
+ @mounted ||=
17
17
  @backend.run_command("lsfs -c #{@spath}")
18
- )
19
18
  end
20
19
  end
21
20
  end
@@ -137,12 +137,12 @@ module Train::Extras
137
137
  owner: 00700,
138
138
  group: 00070,
139
139
  other: 00007,
140
- }
140
+ }.freeze
141
141
 
142
142
  UNIX_MODE_TYPES = {
143
143
  r: 00444,
144
144
  w: 00222,
145
145
  x: 00111,
146
- }
146
+ }.freeze
147
147
  end
148
148
  end
@@ -40,15 +40,13 @@ module Train::Extras
40
40
 
41
41
  def link_path
42
42
  return nil unless symlink?
43
- @link_path ||= (
43
+ @link_path ||=
44
44
  @backend.run_command("readlink #{@spath}").stdout.chomp
45
- )
46
45
  end
47
46
 
48
47
  def mounted
49
- @mounted ||= (
48
+ @mounted ||=
50
49
  @backend.run_command("mount | grep -- ' on #{@spath}'")
51
- )
52
50
  end
53
51
 
54
52
  %w{
@@ -34,7 +34,7 @@ module Train::Extras
34
34
  @platform
35
35
  end
36
36
 
37
- OS = {
37
+ OS = { # rubocop:disable Style/MutableConstant
38
38
  'redhat' => %w{
39
39
  redhat oracle centos fedora amazon scientific xenserver wrlinux
40
40
  },
@@ -58,8 +58,7 @@ module Train::Extras
58
58
  },
59
59
  }
60
60
 
61
- OS['linux'] = %w{linux alpine arch coreos exherbo gentoo slackware} +
62
- OS['redhat'] + OS['debian'] + OS['suse']
61
+ OS['linux'] = %w{linux alpine arch coreos exherbo gentoo slackware} + OS['redhat'] + OS['debian'] + OS['suse']
63
62
 
64
63
  OS['unix'] = %w{unix aix} + OS['linux'] + OS['solaris'] + OS['bsd']
65
64
 
@@ -80,7 +80,7 @@ module Train::Extras
80
80
  meta = lsb_config(raw)
81
81
  @platform[:release] = meta[:release]
82
82
  elsif !(os_info = fetch_os_release).nil?
83
- if os_info['ID_LIKE'].match('wrlinux')
83
+ if os_info['ID_LIKE'] =~ /wrlinux/
84
84
  @platform[:family] = 'wrlinux'
85
85
  @platform[:release] = os_info['VERSION']
86
86
  end
@@ -50,7 +50,7 @@ module Train::Extras
50
50
  # read specific os name
51
51
  # DEPRECATED: os[:family] is going to be deprecated, use os.solaris?
52
52
  rel = get_config('/etc/release')
53
- if /^.*(SmartOS).*$/.match(rel)
53
+ if /^.*(SmartOS).*$/ =~ rel
54
54
  @platform[:name] = 'smartos'
55
55
  @platform[:family] = 'smartos'
56
56
  elsif !(m = /^\s*(OmniOS).*r(\d+).*$/.match(rel)).nil?
@@ -61,7 +61,7 @@ module Train::Extras
61
61
  @platform[:name] = 'openindiana'
62
62
  @platform[:family] = 'openindiana'
63
63
  @platform[:release] = m[2]
64
- elsif /^\s*(OpenSolaris).*snv_(\d+).*$/.match(rel)
64
+ elsif /^\s*(OpenSolaris).*snv_(\d+).*$/ =~ rel
65
65
  @platform[:name] = 'opensolaris'
66
66
  @platform[:family] = 'opensolaris'
67
67
  @platform[:release] = m[2]
@@ -70,10 +70,10 @@ module Train::Extras
70
70
  @platform[:release] = m[1]
71
71
  @platform[:name] = 'solaris'
72
72
  @platform[:family] = 'solaris'
73
- elsif /^\s*(Solaris)\s.*$/.match(rel)
73
+ elsif /^\s*(Solaris)\s.*$/ =~ rel
74
74
  @platform[:name] = 'solaris'
75
75
  @platform[:family] = 'solaris'
76
- elsif /^\s*(NexentaCore)\s.*$/.match(rel)
76
+ elsif /^\s*(NexentaCore)\s.*$/ =~ rel
77
77
  @platform[:name] = 'nexentacore'
78
78
  @platform[:family] = 'nexentacore'
79
79
  else
@@ -7,78 +7,51 @@
7
7
  # OHAI https://github.com/chef/ohai
8
8
  # by Adam Jacob, Chef Software Inc
9
9
  #
10
-
11
- require 'json'
12
- require 'winrm'
13
-
14
10
  module Train::Extras
15
11
  module DetectWindows
16
- # See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx
17
- # Product Type:
18
- # Work Station (1)
19
- # Domain Controller (2)
20
- # Server (3)
21
- WINDOWS_VERSIONS = {
22
- '0' => '3.1',
23
- '140' => '95',
24
- '1410' => '98',
25
- '1490' => 'ME',
26
- '1351' => 'NT 3.51',
27
- '3351' => 'NT 3.51 Server',
28
- '1240' => 'NT 4.0',
29
- '3240' => 'NT 4.0 Server',
30
- '1250' => '2000',
31
- '1251' => 'XP',
32
- '3252' => 'Server 2003',
33
- '1252' => 'Vista',
34
- '3260' => 'Server 2008',
35
- '1261' => '7',
36
- '3261' => 'Server 2008 R2',
37
- '1262' => '8',
38
- '3262' => 'Server 2012',
39
- '1263' => '8.1',
40
- '3263' => 'Server 2012 R2',
41
- '12100' => '10',
42
- '32100' => 'Server 2016',
43
- }
44
-
45
- def windows_version(json)
46
- producttype = json['OS']['ProductType'].to_s
47
- # do not distigush between domain controller and server
48
- producttype = '3' if producttype == '2'
49
- platform = json['OSVersion']['Platform'].to_s
50
- major = json['OSVersion']['Version']['Major'].to_s
51
- minor = json['OSVersion']['Version']['Minor'].to_s
52
- # construct it
53
- producttype + platform + major + minor
54
- end
55
-
56
12
  def detect_windows
57
- cmd = 'New-Object -Type PSObject | Add-Member -MemberType NoteProperty '\
58
- '-Name OS -Value (Get-WmiObject -Class Win32_OperatingSystem) '\
59
- '-PassThru | Add-Member -MemberType NoteProperty -Name OSVersion '\
60
- '-Value ([Environment]::OSVersion) -PassThru | ConvertTo-Json'
61
-
62
- # wrap the script to ensure we always run it via powershell
63
- # especially in local mode, we cannot be sure that we get a Powershell
64
- # we may just get a `cmd`. os detection and powershell command wrapper is
65
- # not available when this code is executed
66
- script = WinRM::PowershellScript.new(cmd)
67
- cmd = "powershell -encodedCommand #{script.encoded}"
68
-
69
- res = @backend.run_command(cmd)
70
-
71
- # TODO: error as this shouldnt be happening at this point
13
+ res = @backend.run_command('cmd /c ver')
72
14
  return false if res.exit_status != 0 or res.stdout.empty?
73
15
 
74
- json = JSON.parse(res.stdout)
75
- return false if json.nil? or json.empty?
76
- version = windows_version(json)
77
-
16
+ # if the ver contains `Windows`, we know its a Windows system
17
+ version = res.stdout.strip
18
+ return false unless version.downcase =~ /windows/
78
19
  @platform[:family] = 'windows'
79
- @platform[:release] = WINDOWS_VERSIONS[version]
20
+
21
+ # try to extract release from eg. `Microsoft Windows [Version 6.3.9600]`
22
+ release = /\[(?<name>.*)\]/.match(version)
23
+ unless release[:name].nil?
24
+ # release is 6.3.9600 now
25
+ @platform[:release] = release[:name].downcase.gsub('version', '').strip
26
+ # fallback, if we are not able to extract the name from wmic later
27
+ @platform[:name] = "Windows #{@platform[:release]}"
28
+ end
29
+
30
+ # try to use wmic, but lets keep it optional
31
+ read_wmic
80
32
 
81
33
  true
82
34
  end
35
+
36
+ # reads os name and version from wmic
37
+ # @see https://msdn.microsoft.com/en-us/library/bb742610.aspx#EEAA
38
+ # Thanks to Matt Wrock (https://github.com/mwrock) for this hint
39
+ def read_wmic
40
+ res = @backend.run_command('wmic os get * /format:list')
41
+ if res.exit_status == 0
42
+ sys_info = {}
43
+ res.stdout.lines.each { |line|
44
+ m = /^\s*([^=]*?)\s*=\s*(.*?)\s*$/.match(line)
45
+ sys_info[m[1].to_sym] = m[2] unless m.nil? || m[1].nil?
46
+ }
47
+
48
+ @platform[:release] = sys_info[:Version]
49
+ # additional info on windows
50
+ @platform[:build] = sys_info[:BuildNumber]
51
+ @platform[:name] = sys_info[:Caption]
52
+ @platform[:name] = @platform[:name].gsub('Microsoft', '').strip unless @platform[:name].empty?
53
+ @platform[:arch] = sys_info[:OSArchitecture]
54
+ end
55
+ end
83
56
  end
84
57
  end
@@ -12,7 +12,7 @@ module Train::Extras
12
12
  directory: 00040000,
13
13
  character_device: 00020000,
14
14
  pipe: 00010000,
15
- }
15
+ }.freeze
16
16
 
17
17
  def self.find_type(mode)
18
18
  res = TYPES.find { |_, mask| mask & mode == mask }
@@ -80,9 +80,10 @@ class Train::Transports::Docker
80
80
 
81
81
  def run_command(cmd)
82
82
  cmd = @cmd_wrapper.run(cmd) unless @cmd_wrapper.nil?
83
- stdout, stderr, exit_status = @container.exec([
84
- '/bin/sh', '-c', cmd
85
- ])
83
+ stdout, stderr, exit_status = @container.exec(
84
+ [
85
+ '/bin/sh', '-c', cmd
86
+ ])
86
87
  CommandResult.new(stdout.join, stderr.join, exit_status)
87
88
  rescue ::Docker::Error::DockerError => _
88
89
  raise
@@ -12,11 +12,11 @@ module Train::Transports
12
12
 
13
13
  def initialize(conf = nil)
14
14
  @conf = conf || {}
15
- trace_calls if @conf[:verbose]
15
+ trace_calls if @conf[:trace]
16
16
  end
17
17
 
18
18
  def connection
19
- @connection ||= Connection.new
19
+ @connection ||= Connection.new(@conf)
20
20
  end
21
21
 
22
22
  def to_s
@@ -27,9 +27,14 @@ module Train::Transports
27
27
 
28
28
  def trace_calls
29
29
  interface_methods = {
30
- 'Train::Transports::Mock' => Train::Transports::Mock.instance_methods(false),
31
- 'Train::Transports::Mock::File' => FileCommon.instance_methods(false),
32
- 'Train::Transports::Mock::OS' => OSCommon.instance_methods(false),
30
+ 'Train::Transports::Mock' =>
31
+ Train::Transports::Mock.instance_methods(false),
32
+ 'Train::Transports::Mock::Connection' =>
33
+ Connection.instance_methods(false),
34
+ 'Train::Transports::Mock::Connection::File' =>
35
+ Connection::FileCommon.instance_methods(false),
36
+ 'Train::Transports::Mock::Connection::OS' =>
37
+ Connection::OSCommon.instance_methods(false),
33
38
  }
34
39
 
35
40
  # rubocop:disable Metrics/ParameterLists
@@ -63,7 +68,6 @@ class Train::Transports::Mock
63
68
  @files = {}
64
69
  @os = OS.new(self, family: 'unknown')
65
70
  @commands = {}
66
- trace_calls if @conf[:verbose]
67
71
  end
68
72
 
69
73
  def mock_os(value)
@@ -74,14 +78,28 @@ class Train::Transports::Mock
74
78
  @commands[cmd] = Command.new(stdout || '', stderr || '', exit_status)
75
79
  end
76
80
 
81
+ def command_not_found(cmd)
82
+ if @conf[:verbose]
83
+ STDERR.puts('Command not mocked:')
84
+ STDERR.puts(' '+cmd.split("\n").join("\n "))
85
+ STDERR.puts(' SHA: ' + Digest::SHA256.hexdigest(cmd))
86
+ end
87
+ mock_command(cmd)
88
+ end
89
+
77
90
  def run_command(cmd)
78
91
  @commands[cmd] ||
79
92
  @commands[Digest::SHA256.hexdigest cmd] ||
80
- mock_command(cmd)
93
+ command_not_found(cmd)
94
+ end
95
+
96
+ def file_not_found(path)
97
+ STDERR.puts('File not mocked: '+path.to_s) if @conf[:verbose]
98
+ File.new(self, path)
81
99
  end
82
100
 
83
101
  def file(path)
84
- @files[path] ||= File.new(self, path)
102
+ @files[path] ||= file_not_found(path)
85
103
  end
86
104
 
87
105
  def to_s
@@ -123,9 +141,8 @@ class Train::Transports::Mock::Connection
123
141
  end
124
142
 
125
143
  def mounted
126
- @mounted ||= (
144
+ @mounted ||=
127
145
  @runtime.run_command("mount | grep -- ' on #{@path}'")
128
- )
129
146
  end
130
147
  end
131
148
  end
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
  #
3
3
  # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
4
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
@@ -94,7 +94,7 @@ module Train::Transports
94
94
  options[:key_files] = key_files
95
95
  end
96
96
 
97
- unless options[:password].nil? # rubocop:disable Style/IfUnlessModifier
97
+ unless options[:password].nil?
98
98
  options[:auth_methods].push('password')
99
99
  end
100
100
 
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
  #
3
3
  # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
4
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
  #
3
3
  # Author:: Salim Afiune (<salim@afiunemaya.com.mx>)
4
4
  # Author:: Matt Wrock (<matt@mattwrock.com>)
@@ -174,7 +174,8 @@ module Train::Transports
174
174
  end
175
175
 
176
176
  def silence_warnings
177
- old_verbose, $VERBOSE = $VERBOSE, nil
177
+ old_verbose = $VERBOSE
178
+ $VERBOSE = nil
178
179
  yield
179
180
  ensure
180
181
  $VERBOSE = old_verbose
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
  #
3
3
  # Author:: Salim Afiune (<salim@afiunemaya.com.mx>)
4
4
  # Author:: Matt Wrock (<matt@mattwrock.com>)
data/lib/train/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
  # Author:: Dominik Richter (<dominik.richter@gmail.com>)
4
4
 
5
5
  module Train
6
- VERSION = '0.9.7'
6
+ VERSION = '0.10.0'.freeze
7
7
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'helper'
2
3
  require 'train/extras'
3
4
 
@@ -0,0 +1,99 @@
1
+ require 'train/extras'
2
+
3
+ class OsDetectWindowsTester
4
+ attr_reader :platform, :backend
5
+ include Train::Extras::DetectWindows
6
+
7
+ def initialize
8
+ @platform = {}
9
+ @backend = Train::Transports::Mock.new.connection
10
+ @backend.mock_os({ family: 'windows' })
11
+ end
12
+ end
13
+
14
+ describe 'os_detect_windows' do
15
+ describe 'windows 2012' do
16
+ let(:detector) {
17
+ detector = OsDetectWindowsTester.new
18
+ detector.backend.mock_command('cmd /c ver', "\r\nMicrosoft Windows [Version 6.3.9600]\r\n", '', 0)
19
+ detector.backend.mock_command('wmic os get * /format:list',"\r\r\nBuildNumber=9600\r\r\nCaption=Microsoft Windows Server 2012 R2 Standard\r\r\nOSArchitecture=64-bit\r\r\nVersion=6.3.9600\r\r\n" , '', 0)
20
+ detector
21
+ }
22
+
23
+ it 'sets the correct family/release for windows' do
24
+ detector.detect_windows
25
+ detector.platform[:family].must_equal('windows')
26
+ detector.platform[:name].must_equal('Windows Server 2012 R2 Standard')
27
+ detector.platform[:arch].must_equal('64-bit')
28
+ detector.platform[:release].must_equal('6.3.9600')
29
+ end
30
+ end
31
+
32
+ describe 'windows 2008' do
33
+ let(:detector) {
34
+ detector = OsDetectWindowsTester.new
35
+ detector.backend.mock_command('cmd /c ver', "\r\nMicrosoft Windows [Version 6.1.7601]\r\n", '', 0)
36
+ detector.backend.mock_command('wmic os get * /format:list',"\r\r\nBuildNumber=7601\r\r\nCaption=Microsoft Windows Server 2008 R2 Standard \r\r\nOSArchitecture=64-bit\r\r\nVersion=6.1.7601\r\r\n" , '', 0)
37
+ detector
38
+ }
39
+
40
+ it 'sets the correct family/release for windows' do
41
+ detector.detect_windows
42
+ detector.platform[:family].must_equal('windows')
43
+ detector.platform[:name].must_equal('Windows Server 2008 R2 Standard')
44
+ detector.platform[:arch].must_equal('64-bit')
45
+ detector.platform[:release].must_equal('6.1.7601')
46
+ end
47
+ end
48
+
49
+ describe 'windows 7' do
50
+ let(:detector) {
51
+ detector = OsDetectWindowsTester.new
52
+ detector.backend.mock_command('cmd /c ver', "\r\nMicrosoft Windows [Version 6.1.7601]\r\n", '', 0)
53
+ detector.backend.mock_command('wmic os get * /format:list',"\r\r\nBuildNumber=7601\r\r\nCaption=Microsoft Windows 7 Enterprise \r\r\nOSArchitecture=32-bit\r\r\nVersion=6.1.7601\r\r\n\r\r\n" , '', 0)
54
+ detector
55
+ }
56
+
57
+ it 'sets the correct family/release for windows' do
58
+ detector.detect_windows
59
+ detector.platform[:family].must_equal('windows')
60
+ detector.platform[:name].must_equal('Windows 7 Enterprise')
61
+ detector.platform[:arch].must_equal('32-bit')
62
+ detector.platform[:release].must_equal('6.1.7601')
63
+ end
64
+ end
65
+
66
+ describe 'windows 10' do
67
+ let(:detector) {
68
+ detector = OsDetectWindowsTester.new
69
+ detector.backend.mock_command('cmd /c ver', "\r\nMicrosoft Windows [Version 10.0.10240]\r\n", '', 0)
70
+ detector.backend.mock_command('wmic os get * /format:list',"\r\r\nBuildNumber=10240\r\r\nCaption=Microsoft Windows 10 Pro\r\r\nOSArchitecture=64-bit\r\r\nVersion=10.0.10240\r\r\n\r\r\n" , '', 0)
71
+ detector
72
+ }
73
+
74
+ it 'sets the correct family/release for windows' do
75
+ detector.detect_windows
76
+ detector.platform[:family].must_equal('windows')
77
+ detector.platform[:name].must_equal('Windows 10 Pro')
78
+ detector.platform[:arch].must_equal('64-bit')
79
+ detector.platform[:release].must_equal('10.0.10240')
80
+ end
81
+ end
82
+
83
+ describe 'windows 98' do
84
+ let(:detector) {
85
+ detector = OsDetectWindowsTester.new
86
+ detector.backend.mock_command('cmd /c ver', "\r\nMicrosoft Windows [Version 4.10.1998]\r\n", '', 0)
87
+ detector.backend.mock_command('wmic os get * /format:list', nil , '', 1)
88
+ detector
89
+ }
90
+
91
+ it 'fallback to version number if wmic is not available' do
92
+ detector.detect_windows
93
+ detector.platform[:family].must_equal('windows')
94
+ detector.platform[:name].must_equal('Windows 4.10.1998')
95
+ detector.platform[:arch].must_equal(nil)
96
+ detector.platform[:release].must_equal('4.10.1998')
97
+ end
98
+ end
99
+ end
@@ -21,10 +21,10 @@ describe 'windows local command' do
21
21
 
22
22
  it 'verify os' do
23
23
  os = conn.os
24
- os[:name].must_equal nil
24
+ os[:name].must_equal 'Windows Server 2012 R2 Datacenter'
25
25
  os[:family].must_equal "windows"
26
- os[:release].must_equal "Server 2012 R2"
27
- os[:arch].must_equal nil
26
+ os[:release].must_equal '6.3.9600'
27
+ os[:arch].must_equal '64-bit'
28
28
  end
29
29
 
30
30
  it 'run echo test' do
@@ -27,10 +27,10 @@ describe 'windows local command' do
27
27
 
28
28
  it 'verify os' do
29
29
  os = conn.os
30
- os[:name].must_equal nil
31
- os[:family].must_equal "windows"
32
- os[:release].must_equal "Server 2012 R2"
33
- os[:arch].must_equal nil
30
+ os[:name].must_equal 'Windows Server 2012 R2 Datacenter'
31
+ os[:family].must_equal 'windows'
32
+ os[:release].must_equal '6.3.9600'
33
+ os[:arch].must_equal '64-bit'
34
34
  end
35
35
 
36
36
  it 'run echo test' do
data/train.gemspec CHANGED
@@ -33,8 +33,5 @@ Gem::Specification.new do |spec|
33
33
  spec.add_dependency 'winrm-fs', '~> 0.3'
34
34
  spec.add_dependency 'docker-api', '~> 1.22'
35
35
 
36
- spec.add_development_dependency 'rake', '~> 10.4'
37
- spec.add_development_dependency 'minitest', '~> 5.8'
38
- spec.add_development_dependency 'mocha', '~> 1.1'
39
- spec.add_development_dependency 'rubocop', '~> 0.34'
36
+ spec.add_development_dependency 'mocha', '~> 1.1'
40
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r-train
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-05 00:00:00.000000000 Z
11
+ date: 2016-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -114,34 +114,6 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '1.22'
117
- - !ruby/object:Gem::Dependency
118
- name: rake
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '10.4'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '10.4'
131
- - !ruby/object:Gem::Dependency
132
- name: minitest
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '5.8'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '5.8'
145
117
  - !ruby/object:Gem::Dependency
146
118
  name: mocha
147
119
  requirement: !ruby/object:Gem::Requirement
@@ -156,20 +128,6 @@ dependencies:
156
128
  - - "~>"
157
129
  - !ruby/object:Gem::Version
158
130
  version: '1.1'
159
- - !ruby/object:Gem::Dependency
160
- name: rubocop
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '0.34'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '0.34'
173
131
  description: Transport interface to talk to different backends.
174
132
  email:
175
133
  - dominik.richter@gmail.com
@@ -295,6 +253,7 @@ files:
295
253
  - test/unit/extras/linux_file_test.rb
296
254
  - test/unit/extras/os_common_test.rb
297
255
  - test/unit/extras/os_detect_linux_test.rb
256
+ - test/unit/extras/os_detect_windows_test.rb
298
257
  - test/unit/extras/stat_test.rb
299
258
  - test/unit/extras/windows_file_test.rb
300
259
  - test/unit/helper.rb
@@ -417,6 +376,7 @@ test_files:
417
376
  - test/unit/extras/linux_file_test.rb
418
377
  - test/unit/extras/os_common_test.rb
419
378
  - test/unit/extras/os_detect_linux_test.rb
379
+ - test/unit/extras/os_detect_windows_test.rb
420
380
  - test/unit/extras/stat_test.rb
421
381
  - test/unit/extras/windows_file_test.rb
422
382
  - test/unit/helper.rb