Module: Windows::Exec

Includes:
Beaker::CommandFactory
Included in:
Host
Defined in:
lib/beaker/host/windows/exec.rb

Constant Summary collapse

ABS_CMD =
'c:\\\\windows\\\\system32\\\\cmd.exe'
CMD =
'cmd.exe'

Instance Attribute Summary

Attributes included from Beaker::CommandFactory

#assertions

Instance Method Summary collapse

Methods included from Beaker::CommandFactory

#execute, #fail_test

Instance Method Details

#echo(msg, abs = true) ⇒ Object



14
15
16
# File 'lib/beaker/host/windows/exec.rb', line 14

def echo(msg, abs=true)
  (abs ? ABS_CMD : CMD) + " /c echo #{msg}"
end

#get_ipObject



26
27
28
29
30
31
32
33
34
35
# File 'lib/beaker/host/windows/exec.rb', line 26

def get_ip
  ip = execute("ipconfig | grep -i 'IP Address' | cut -d: -f2 | head -1").strip
  if ip == ''
    ip = execute("ipconfig | grep -i 'IPv4 Address' | cut -d: -f2 | head -1").strip
  end
  if ip == ''
    ip = execute("ipconfig | grep -i 'IPv6 Address' | cut -d: -f2 | head -1").strip
  end
  ip
end

#pathObject



22
23
24
# File 'lib/beaker/host/windows/exec.rb', line 22

def path
  'c:/windows/system32;c:/windows'
end

#ping(target, attempts = 5) ⇒ Boolean

Attempt to ping the provided target hostname

Parameters:

  • target (String)

    The hostname to ping

  • attempts (Integer) (defaults to: 5)

    Amount of times to attempt ping before giving up

Returns:

  • (Boolean)

    true of ping successful, overwise false



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/beaker/host/windows/exec.rb', line 41

def ping target, attempts=5
  try = 0
  while try < attempts do
    result = exec(Beaker::Command.new("ping -n 1 #{target}"), :accept_all_exit_codes => true)
    if result.exit_code == 0
      return true
    end
    try+=1
  end
  result.exit_code == 0
end

#rebootObject



4
5
6
7
8
9
# File 'lib/beaker/host/windows/exec.rb', line 4

def reboot
  exec(Beaker::Command.new('shutdown /f /r /t 0 /d p:4:1 /c "Beaker::Host reboot command issued"'), :expect_connection_failure => true)
  # rebooting on windows is sloooooow
  # give it some breathing room before attempting a reconnect
  sleep(40)
end

#ssh_permit_user_environmentResult

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Sets the PermitUserEnvironment setting & restarts the SSH service

Returns:



74
75
76
77
# File 'lib/beaker/host/windows/exec.rb', line 74

def ssh_permit_user_environment
  exec(Beaker::Command.new("echo '\nPermitUserEnvironment yes' >> /etc/sshd_config"))
  ssh_service_restart()
end

#ssh_service_restartResult

Restarts the SSH service.

Returns:

  • (Result)

    result of starting SSH service



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/beaker/host/windows/exec.rb', line 56

def ssh_service_restart
  command_result = nil
  # we get periodic failures to restart the service, so looping these with re-attempts
  repeat_fibonacci_style_for(5) do
    0 == exec(Beaker::Command.new("cygrunsrv -E sshd"), :acceptable_exit_codes => [0, 1] ).exit_code
  end
  repeat_fibonacci_style_for(5) do
    command_result = exec(Beaker::Command.new("cygrunsrv -S sshd"), :acceptable_exit_codes => [0, 1] )
    0 == command_result.exit_code
  end
  command_result
end

#touch(file, abs = true) ⇒ Object



18
19
20
# File 'lib/beaker/host/windows/exec.rb', line 18

def touch(file, abs=true)
  (abs ? ABS_CMD : CMD) + " /c echo. 2> #{file}"
end