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 +4 -4
 - data/.rubocop.yml +29 -3
 - data/CHANGELOG.md +24 -5
 - data/Gemfile +2 -2
 - data/Rakefile +1 -1
 - data/lib/train.rb +0 -2
 - data/lib/train/extras/command_wrapper.rb +1 -0
 - data/lib/train/extras/file_aix.rb +4 -5
 - data/lib/train/extras/file_common.rb +2 -2
 - data/lib/train/extras/file_unix.rb +2 -4
 - data/lib/train/extras/os_common.rb +2 -3
 - data/lib/train/extras/os_detect_linux.rb +1 -1
 - data/lib/train/extras/os_detect_unix.rb +4 -4
 - data/lib/train/extras/os_detect_windows.rb +37 -64
 - data/lib/train/extras/stat.rb +1 -1
 - data/lib/train/transports/docker.rb +4 -3
 - data/lib/train/transports/mock.rb +27 -10
 - data/lib/train/transports/ssh.rb +2 -2
 - data/lib/train/transports/ssh_connection.rb +1 -1
 - data/lib/train/transports/winrm.rb +3 -2
 - data/lib/train/transports/winrm_connection.rb +1 -1
 - data/lib/train/version.rb +1 -1
 - data/test/unit/extras/os_detect_linux_test.rb +1 -0
 - data/test/unit/extras/os_detect_windows_test.rb +99 -0
 - data/test/windows/local_test.rb +3 -3
 - data/test/windows/winrm_test.rb +4 -4
 - data/train.gemspec +1 -4
 - metadata +4 -44
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0fd25048f1db2b7fe16bbdfc8cbbf0bc37378a07
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1aa813741c5d080c00e74790af38d1fee7b23a9a
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 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:  
     | 
| 
      
 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/ 
     | 
| 
      
 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 
     | 
    
         
            -
               
     | 
| 
      
 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. 
     | 
| 
       4 
     | 
    
         
            -
            [Full Changelog](https://github.com/chef/train/compare/v0.9. 
     | 
| 
      
 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 
     | 
    
         
            -
            ** 
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
      
 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
    
    
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/train.rb
    CHANGED
    
    
| 
         @@ -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}") 
     | 
| 
       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
         
     | 
| 
         @@ -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'] 
     | 
| 
      
 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) 
     | 
| 
      
 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+) 
     | 
| 
      
 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 
     | 
| 
      
 73 
     | 
    
         
            +
                  elsif /^\s*(Solaris)\s.*$/ =~ rel
         
     | 
| 
       74 
74 
     | 
    
         
             
                    @platform[:name] = 'solaris'
         
     | 
| 
       75 
75 
     | 
    
         
             
                    @platform[:family] = 'solaris'
         
     | 
| 
       76 
     | 
    
         
            -
                  elsif /^\s*(NexentaCore)\s 
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
       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 
     | 
    
         
            -
                   
     | 
| 
       75 
     | 
    
         
            -
                   
     | 
| 
       76 
     | 
    
         
            -
                  version  
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
      
 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
         
     | 
    
        data/lib/train/extras/stat.rb
    CHANGED
    
    
| 
         @@ -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 
     | 
    
         
            -
                     
     | 
| 
       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[: 
     | 
| 
      
 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' => 
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                    'Train::Transports::Mock:: 
     | 
| 
      
 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 
     | 
    
         
            -
                     
     | 
| 
      
 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] ||=  
     | 
| 
      
 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
         
     | 
    
        data/lib/train/transports/ssh.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 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? 
     | 
| 
      
 97 
     | 
    
         
            +
                  unless options[:password].nil?
         
     | 
| 
       98 
98 
     | 
    
         
             
                    options[:auth_methods].push('password')
         
     | 
| 
       99 
99 
     | 
    
         
             
                  end
         
     | 
| 
       100 
100 
     | 
    
         | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 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 
     | 
| 
      
 177 
     | 
    
         
            +
                  old_verbose = $VERBOSE
         
     | 
| 
      
 178 
     | 
    
         
            +
                  $VERBOSE = nil
         
     | 
| 
       178 
179 
     | 
    
         
             
                  yield
         
     | 
| 
       179 
180 
     | 
    
         
             
                ensure
         
     | 
| 
       180 
181 
     | 
    
         
             
                  $VERBOSE = old_verbose
         
     | 
    
        data/lib/train/version.rb
    CHANGED
    
    
| 
         @@ -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
         
     | 
    
        data/test/windows/local_test.rb
    CHANGED
    
    | 
         @@ -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  
     | 
| 
      
 24 
     | 
    
         
            +
                os[:name].must_equal 'Windows Server 2012 R2 Datacenter'
         
     | 
| 
       25 
25 
     | 
    
         
             
                os[:family].must_equal "windows"
         
     | 
| 
       26 
     | 
    
         
            -
                os[:release].must_equal  
     | 
| 
       27 
     | 
    
         
            -
                os[:arch].must_equal  
     | 
| 
      
 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
         
     | 
    
        data/test/windows/winrm_test.rb
    CHANGED
    
    | 
         @@ -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  
     | 
| 
       31 
     | 
    
         
            -
                os[:family].must_equal  
     | 
| 
       32 
     | 
    
         
            -
                os[:release].must_equal  
     | 
| 
       33 
     | 
    
         
            -
                os[:arch].must_equal  
     | 
| 
      
 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 ' 
     | 
| 
       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. 
     | 
| 
      
 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- 
     | 
| 
      
 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
         
     |