From 2d360d97dd8cb89f42a18860fb3ffa2d945d96ac Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Wed, 12 Mar 2014 23:16:27 +0000 Subject: [PATCH] Extract @sshd cucumber hooks as cucumber-sshd gem --- features/support/{env_aruba.rb => env.rb} | 2 + features/support/ssh.rb | 107 ---------------------- producer-core.gemspec | 9 +- 3 files changed, 7 insertions(+), 111 deletions(-) rename features/support/{env_aruba.rb => env.rb} (91%) delete mode 100644 features/support/ssh.rb diff --git a/features/support/env_aruba.rb b/features/support/env.rb similarity index 91% rename from features/support/env_aruba.rb rename to features/support/env.rb index 06d38ec..d6f0e68 100644 --- a/features/support/env_aruba.rb +++ b/features/support/env.rb @@ -14,3 +14,5 @@ module Cucumber end require 'aruba/cucumber' + +require 'cucumber/sshd/cucumber' diff --git a/features/support/ssh.rb b/features/support/ssh.rb deleted file mode 100644 index 188cf08..0000000 --- a/features/support/ssh.rb +++ /dev/null @@ -1,107 +0,0 @@ -# FIXME: should be extracted as a separate gem `cucumber-sshd?'. -class SSHServer - include Aruba::Api - - DEFAULT_LISTEN_PORT = 2222 - KEY_PATH = 'etc/ssh_host_rsa_key' - KEY_PUB_PATH = KEY_PATH.dup << '.pub' - SSHD_CONFIG_PATH = 'etc/sshd_config' - SSH_CONFIG_PATH = '.ssh/config' - - attr_accessor :listen_port - - def initialize(base_path) - @base_path = base_path - @listen_port = ENV['PRODUCER_TEST_SSHD_PORT'] ? - ENV['PRODUCER_TEST_SSHD_PORT'] : - DEFAULT_LISTEN_PORT - end - - def start - in_current_dir do - @pid = fork do - $stderr.reopen '/dev/null' - exec "/usr/sbin/sshd -f etc/sshd_config -Deq" - end - end - end - - def stop - Process.kill('TERM', @pid) - Process.wait(@pid) - end - - def make_env - %w[etc .ssh].map { |e| create_dir e } - - write_file KEY_PATH, <<-eoh ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA7EVDKeM7NYCGGVJw0wWLGCoptMFSR7DobhbEx2bAQbWDLFBF -7S9bXpW/ddebFA4GBkHVriNPwu/IGjIgO3tivVcy6iguNKdYRABlSfpeAs+OdCzK -hyEWhmKnFMZs2MhPiJg/KUep2gFZLoEcs9vkk37+cLcuUVkXVOSPXlYCuHjgkwaN -9ij/KvCcLP4tw83H3Pyh1Wn/Y4k1+3nWN2S3RgRHF9RjEx7nm2FmXcZq1wygPe5G -2bQNvZKykL+wlKIHwKiM4AWpVClczOiljNv9KROhGWanIZNNBIDTnikxFvY0FyoP -1qvRrE8BlqxNeyG/vYNmXsv8xpO0MOF65z3d2QIDAQABAoIBAHL8dmZxX0R3i0vR -knUwsnQNOQTuPPQFBelmDViaCiEwjGlJm+6F6KrMqERarO+Cr63l5m98YfoWJkWR -dZxdPT22rWHGMk6PzuYxZxoszgoCJ2skzWAcW1EFvBjhROHwAr0Qk1Ssut4NX/DB -B04FS2X5HS2QCOuwNymqnpejtmk+A2hv9bGVzj0X614gX3h5+0dImGrYE0Lu+Abf -5fvWhN5nxgK5CVlU7WM09WxyHj9lBXI+W2dgTl6w3QJfBBQTkarLmDpwIeErq9xc -al2qHj60nYC+RdFopuLfJWKiObdKRFpuPFYKbTA9nJz9T61zAF+LaDZ1mvdTuQmz -jJEJ0nECgYEA+o2uJcDOCD2LBp2LqeQcGk1PrFLpSQ5921B10SxDWhygs2+UlBCW -7t/qurqjEUZ91l3TAlUM7ViB/EkXk/xWJRJCzlmWRXfht9LPQTWlnDox/w8uSV2g -3VwPx1xpju2PHO7Vsk6dsQsyoro14qNhYa9m1lBHA1TtJ/RLWauvnmUCgYEA8WgZ -MthPXi/clDg2DlROGOEWd7WgaErEz578HWnegcMrHb8RV/XW21CO2UegHykzUlxz -vJxAqhQeKJbP7T8uzuCZnkZqBqPh5PJT1XqxZibTeQvqYLzbIiKqmDrZWuRJvbLL -kPxwYEG8R8nl9Dk1tLHuTQWWa5Q49he1cDss4GUCgYEA7WMBRZnIW3xb1Xe9VMjg -a3cmbqHbj7FgQ0OXbQigA6euBnRIdITHTCnxDtw4Fe0Q2uLoQoRsjA/YkDx8T2S8 -BcGodDPjMYxk2rKsVR9L+poUtpEejLpd6H0KIhwHkzi26HXNGHRt6ckvP4hn94RO -hqwWJiXHMnvrenh2T85fxRUCgYEA7m06NhWejhAHc/zwpsZtO/VUE3e3rknqiIUl -zIc71D3G3+JOZunQA1xVOhSb+SrgHYBibu6Ej3a/MqeBRXkZ6gm6r7AsF9LU0SLl -2fsMKzA9vVgfbNwaMmS6yQ+WjUbb7hghJlmtQ+So6N5n2AaJHKaADmJuZmJGwAg6 -k1ZexGECgYAFc+GjjFOPxC+Qg6z8261PnDffBK0o+0/EIq3cGA7Cp5pEo/hhMjDl -W7CLjAGkok9W+rr9XwwXWCBuJmPh2jYeNaQljrHt9hIAOAxoYdbweb9oSo5SkcHv -iDjcFK8S1e5vnlZAh9xH1WMCEsaz1WNqWm7CZOayN2LFn6Ed9seYYg== ------END RSA PRIVATE KEY----- - eoh - - write_file KEY_PUB_PATH, <<-eoh -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsRUMp4zs1gIYZUnDTBYsYKim0wVJHsOhuFsTHZsBBtYMsUEXtL1telb9115sUDgYGQdWuI0/C78gaMiA7e2K9VzLqKC40p1hEAGVJ+l4Cz450LMqHIRaGYqcUxmzYyE+ImD8pR6naAVkugRyz2+STfv5wty5RWRdU5I9eVgK4eOCTBo32KP8q8Jws/i3Dzcfc/KHVaf9jiTX7edY3ZLdGBEcX1GMTHuebYWZdxmrXDKA97kbZtA29krKQv7CUogfAqIzgBalUKVzM6KWM2/0pE6EZZqchk00EgNOeKTEW9jQXKg/Wq9GsTwGWrE17Ib+9g2Zey/zGk7Qw4XrnPd3Z - eoh - - write_file SSHD_CONFIG_PATH, <<-eoh -Port #{listen_port} -ListenAddress ::1 - -Protocol 2 -HostKey #{File.expand_path @base_path}/#{KEY_PATH} -PidFile /dev/null -UsePrivilegeSeparation no -Subsystem sftp /usr/lib/openssh/sftp-server -ForceCommand HOME=#{File.expand_path @base_path} sh -c "cd ~; $SSH_ORIGINAL_COMMAND" - eoh - - write_file SSH_CONFIG_PATH, <<-eoh -Host some_host.test - HostName localhost - Port #{listen_port} - eoh - end -end - - -Before('@sshd') do - @_sshd = SSHServer.new(current_dir) - @_sshd.make_env - @_sshd.start - - ENV['HOME'] = File.expand_path current_dir - - # FIXME: we might need to wait until sshd accepts connections, polling isn't - # really acceptable, another workaround might be to execute sshd with - # LD_PRELOAD and a hook, so we could block here until the hook release the - # blocking call. -end - -After('@sshd') do - @_sshd.stop -end diff --git a/producer-core.gemspec b/producer-core.gemspec index 1bc0079..989666e 100644 --- a/producer-core.gemspec +++ b/producer-core.gemspec @@ -20,8 +20,9 @@ Gem::Specification.new do |s| s.add_dependency 'net-ssh', '~> 2.7' s.add_dependency 'net-sftp', '~> 2.1' - s.add_development_dependency 'rspec', '~> 2.14' - s.add_development_dependency 'cucumber', '~> 1.3' - s.add_development_dependency 'aruba', '~> 0.5' - s.add_development_dependency 'rake', '~> 10.1' + s.add_development_dependency 'rspec', '~> 2.14' + s.add_development_dependency 'cucumber', '~> 1.3' + s.add_development_dependency 'aruba', '~> 0.5' + s.add_development_dependency 'cucumber-sshd', '~> 0.1' + s.add_development_dependency 'rake', '~> 10.1' end