beaker 4.36.1 → 4.37.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
  SHA256:
3
- metadata.gz: a512100e3bdfe558337d1571372ef7131aa8466b05995f36dba8ecf7b6091996
4
- data.tar.gz: 60a43e396d5b1b2354bd26174e4281045ea828e7ca3d0a464bd685ba17b58dbe
3
+ metadata.gz: 147352406c9fe42bb99fad85f3c583a2be345385191eafe9e685dce331025c21
4
+ data.tar.gz: 4fe85be2e9ef2e81d59be68d7c83f573648f3d36bc25e3c67fbf8c53e3786de0
5
5
  SHA512:
6
- metadata.gz: 84e4bd854ef9aa7fc63ca24f61d2062b6dcac4a3cb462cadc8da430bcb92936854b30c9c3aa1ece761f17ca28a5138f4891224c1882b9f8d19b291ba56ecaa8d
7
- data.tar.gz: 5572e704bd0fb2d44632c8a1c196d11886e7966545d6f7e8b9adcea130b152b5bf0da4091b31efd04d687b9720baccc1ce2466a9313543cb9c612f0420c7a686
6
+ metadata.gz: b2d94a7dccbc611478c859ca640c317e7624a3f6c9ac5d2857c91f24b15c36e52537ab99a412676c7bf7978b6fcf85bfc67a7c1931183e64b080fb86b38b4bd0
7
+ data.tar.gz: 3af90b7213b32d74a5f5340132ae428eab9a991fc93bbafb69a4a2a6db4d3f9f5e255d3da0bb965401fb05ba552f8d9deafef2c7c5d3899e404e04975e504149
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.37.0](https://github.com/voxpupuli/beaker/tree/4.37.0) (2022-06-27)
4
+
5
+ ## Added
6
+
7
+ - Add support for Win32-OpenSSH ([#1744](https://github.com/voxpupuli/beaker/pull/1744))
8
+
9
+ ## Fixed
10
+
11
+ - Create ~/.ssh on Windows if it doesn't exist ([#1745](https://github.com/voxpupuli/beaker/pull/1745))
12
+
3
13
  ## [4.36.1](https://github.com/voxpupuli/beaker/tree/4.36.1) (2022-06-16)
4
14
 
5
15
  ## Fixed
@@ -120,10 +120,16 @@ module Windows::Exec
120
120
  end
121
121
 
122
122
  # Create the provided directory structure on the host
123
- # @param [String] dir The directory structure to create on the host
123
+ # @param [String,Pathname] dir The directory structure to create on the host
124
124
  # @return [Boolean] True, if directory construction succeeded, otherwise False
125
- def mkdir_p dir
126
- cmd = "mkdir -p \"#{dir}\""
125
+ def mkdir_p(dir)
126
+ # single or double quotes will disable ~ expansion, so only quote if we have to
127
+ str = dir.to_s
128
+ cmd = if str.start_with?('~') && !str.include?(' ')
129
+ "mkdir -p #{str}"
130
+ else
131
+ "mkdir -p \"#{str}\""
132
+ end
127
133
  result = exec(Beaker::Command.new(cmd), :acceptable_exit_codes => [0, 1])
128
134
  result.exit_code == 0
129
135
  end
@@ -59,11 +59,13 @@ module Windows::File
59
59
  case determine_ssh_server
60
60
  when :bitvise
61
61
  # swap out separators
62
- network_path = path.gsub('\\', scp_separator)
62
+ path.gsub('\\', scp_separator)
63
63
  when :openssh
64
64
  path
65
+ when :win32_openssh
66
+ path.gsub('\\', '/')
65
67
  else
66
- raise ArgumentError("windows/file.rb:scp_path: ssh server not recognized: '#{determine_ssh_server}'")
68
+ raise ArgumentError, "windows/file.rb:scp_path: ssh server not recognized: '#{determine_ssh_server}'"
67
69
  end
68
70
  end
69
71
 
@@ -38,8 +38,14 @@ module Windows
38
38
  return @ssh_server if @ssh_server
39
39
  @ssh_server = :openssh
40
40
  status = execute('cmd.exe /c sc query BvSshServer', :accept_all_exit_codes => true)
41
- @ssh_server = :bitvise if status =~ /4 RUNNING/
42
- logger.debug("windows.rb:determine_ssh_server: determined ssh server: '#{@ssh_server}'")
41
+ if status =~ /4 RUNNING/
42
+ @ssh_server = :bitvise
43
+ else
44
+ status = execute('cmd.exe /c sc qc sshd', :accept_all_exit_codes => true)
45
+ if status =~ /C:\\Windows\\System32\\OpenSSH\\sshd\.exe/
46
+ @ssh_server = :win32_openssh
47
+ end
48
+ end
43
49
  @ssh_server
44
50
  end
45
51
 
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '4.36.1'
3
+ STRING = '4.37.0'
4
4
  end
5
5
  end
@@ -96,5 +96,35 @@ module Beaker
96
96
  expect( instance.mv(origin, destination, false) ).to be === 0
97
97
  end
98
98
  end
99
+
100
+ context 'mkdir_p' do
101
+ let(:path) { '~/.ssh' }
102
+ let(:result) do
103
+ result = Beaker::Result.new(nil, '')
104
+ result.exit_code = 0
105
+ result
106
+ end
107
+
108
+ it 'accepts Pathname arguments' do
109
+ expect( instance ).to receive(:exec).with(having_attributes(command: "mkdir -p #{path}"), anything).and_return(result)
110
+ expect(instance.mkdir_p(Pathname.new(path))).to eq(true)
111
+ end
112
+
113
+ it 'omits quotes if the path starts with ~ and does not contain spaces' do
114
+ expect( instance ).to receive(:exec).with(having_attributes(command: "mkdir -p #{path}"), anything).and_return(result)
115
+ expect(instance.mkdir_p(path)).to eq(true)
116
+ end
117
+
118
+ it 'double quotes paths containing spaces' do
119
+ expect( instance ).to receive(:exec).with(having_attributes(command: "mkdir -p \"~/.foo bar\""), anything).and_return(result)
120
+ expect(instance.mkdir_p("~/.foo bar")).to eq(true)
121
+ end
122
+
123
+ it 'returns false if the command failed' do
124
+ result.exit_code = 1
125
+ expect( instance ).to receive(:exec).with(having_attributes(command: "mkdir -p #{path}"), anything).and_return(result)
126
+ expect(instance.mkdir_p(path)).to eq(false)
127
+ end
128
+ end
99
129
  end
100
130
  end
@@ -51,5 +51,37 @@ module Beaker
51
51
  host.ls_ld( path )
52
52
  end
53
53
  end
54
+
55
+ describe "#scp_to" do
56
+ let(:path) { 'C:\Windows' }
57
+
58
+ it 'replaces backslashes with ??? when using BitVise and cmd' do
59
+ allow(host).to receive(:determine_ssh_server).and_return(:bitvise)
60
+ expect(host.scp_path(path)).to eq('C:\Windows')
61
+ end
62
+
63
+ it 'replaces backslashes with forward slashes when using BitVise and powershell' do
64
+ host = make_host('name', platform: 'windows', is_cygwin: false)
65
+ allow(host).to receive(:determine_ssh_server).and_return(:bitvise)
66
+ expect(host.scp_path(path)).to eq('C:/Windows')
67
+ end
68
+
69
+ it 'leaves backslashes as is when using cygwin' do
70
+ allow(host).to receive(:determine_ssh_server).and_return(:openssh)
71
+ expect(host.scp_path(path)).to eq('C:\Windows')
72
+ end
73
+
74
+ it 'replace backslashes with forward slashes when using Win32-OpenSSH' do
75
+ allow(host).to receive(:determine_ssh_server).and_return(:win32_openssh)
76
+ expect(host.scp_path(path)).to eq('C:/Windows')
77
+ end
78
+
79
+ it 'raises if the server can not be recognized' do
80
+ allow(host).to receive(:determine_ssh_server).and_return(:unknown)
81
+ expect {
82
+ host.scp_path(path)
83
+ }.to raise_error(ArgumentError, "windows/file.rb:scp_path: ssh server not recognized: 'unknown'")
84
+ end
85
+ end
54
86
  end
55
87
  end
@@ -37,7 +37,7 @@ module Windows
37
37
 
38
38
  describe '#determine_ssh_server' do
39
39
  it 'does not care about return codes from the execute call' do
40
- expect( host ).to receive( :execute ).with( anything, :accept_all_exit_codes => true )
40
+ expect( host ).to receive( :execute ).with( anything, :accept_all_exit_codes => true ).twice
41
41
  host.determine_ssh_server
42
42
  end
43
43
 
@@ -53,6 +53,28 @@ module Windows
53
53
  expect( host.determine_ssh_server ).to be === :bitvise
54
54
  end
55
55
 
56
+ it 'reads Windows OpenSSH status correctly' do
57
+ allow(host).to receive(:execute)
58
+ .with('cmd.exe /c sc query BvSshServer', anything).and_return(bitvise_check_output(:failure))
59
+ allow(host).to receive(:execute)
60
+ .with('cmd.exe /c sc qc sshd', anything).and_return(<<~END)
61
+ [SC] QueryServiceConfig SUCCESS
62
+
63
+ SERVICE_NAME: sshd
64
+ TYPE : 10 WIN32_OWN_PROCESS
65
+ START_TYPE : 2 AUTO_START
66
+ ERROR_CONTROL : 1 NORMAL
67
+ BINARY_PATH_NAME : C:\\Windows\\System32\\OpenSSH\\sshd.exe
68
+ LOAD_ORDER_GROUP :
69
+ TAG : 0
70
+ DISPLAY_NAME : OpenSSH SSH Server
71
+ DEPENDENCIES :
72
+ SERVICE_START_NAME : LocalSystem
73
+ END
74
+
75
+ expect(host.determine_ssh_server).to eq :win32_openssh
76
+ end
77
+
56
78
  it 'returns old value if it has already determined before' do
57
79
  ssh_server_before = host.instance_variable_get( :@ssh_server )
58
80
  test_value = :test916
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.36.1
4
+ version: 4.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-16 00:00:00.000000000 Z
11
+ date: 2022-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec