diff options
author | John Duarte <john.duarte@puppetlabs.com> | 2014-05-19 11:53:54 -0700 |
---|---|---|
committer | John Duarte <john.duarte@puppetlabs.com> | 2014-05-19 11:53:54 -0700 |
commit | d6b22213f2cea9b58d5e2fa48f4fea2227c184ef (patch) | |
tree | 95bf2b79f6f3c15189726f256028d88deff04bc5 /spec | |
parent | 97e8b02b1d803d59f02a8fea1b86750694b5d538 (diff) | |
download | puppet-vcsrepo-d6b22213f2cea9b58d5e2fa48f4fea2227c184ef.tar.gz puppet-vcsrepo-d6b22213f2cea9b58d5e2fa48f4fea2227c184ef.tar.bz2 |
Move protocol tests to beaker suite
The protocol tests are more closely aligned with the rest of the beaker test
suite. The beaker tests have received more vetting, so the setup and teardown
process should be less prone to failure on repeated execution.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_file.rb | 42 | ||||
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_file_path.rb | 42 | ||||
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_git.rb | 47 | ||||
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_http.rb | 55 | ||||
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_https.rb | 62 | ||||
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_scp.rb | 52 | ||||
-rw-r--r-- | spec/acceptance/beaker/git/clone/clone_ssh.rb | 52 | ||||
-rw-r--r-- | spec/acceptance/git_clone_protocols_spec.rb | 230 |
8 files changed, 352 insertions, 230 deletions
diff --git a/spec/acceptance/beaker/git/clone/clone_file.rb b/spec/acceptance/beaker/git/clone/clone_file.rb new file mode 100644 index 0000000..dc3a503 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_file.rb @@ -0,0 +1,42 @@ +test_name 'C3427 - clone (file protocol)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + + teardown do + on(host, "rm -fr #{tmpdir}") + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "file://#{tmpdir}/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/beaker/git/clone/clone_file_path.rb b/spec/acceptance/beaker/git/clone/clone_file_path.rb new file mode 100644 index 0000000..b76e9b9 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_file_path.rb @@ -0,0 +1,42 @@ +test_name 'C3426 - clone (file path)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + + teardown do + on(host, "rm -fr #{tmpdir}") + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "#{tmpdir}/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/beaker/git/clone/clone_git.rb b/spec/acceptance/beaker/git/clone/clone_git.rb new file mode 100644 index 0000000..01d2ce9 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_git.rb @@ -0,0 +1,47 @@ +test_name 'C3425 - clone (git protocol)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + step 'setup - start git daemon' do + install_package(host, 'git-daemon') + on(host, "git daemon --base-path=#{tmpdir} --export-all --reuseaddr --verbose --detach") + end + + teardown do + on(host, "rm -fr #{tmpdir}") + on(host, 'pkill -9 git-daemon') + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "git://#{host}/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/beaker/git/clone/clone_http.rb b/spec/acceptance/beaker/git/clone/clone_http.rb new file mode 100644 index 0000000..664ab10 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_http.rb @@ -0,0 +1,55 @@ +test_name 'C3430 - clone (http protocol)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + ruby = (host.is_pe? && '/opt/puppet/bin/ruby') || 'ruby' + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + + step 'setup - start http server' do + http_daemon =<<-EOF + require 'webrick' + server = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => "#{tmpdir}") + WEBrick::Daemon.start + server.start + EOF + create_remote_file(host, '/tmp/http_daemon.rb', http_daemon) + on(host, "#{ruby} /tmp/http_daemon.rb") + end + + teardown do + on(host, "rm -fr #{tmpdir}") + on(host, "ps ax | grep '#{ruby} /tmp/http_daemon.rb' | grep -v grep | awk '{print \"kill -9 \" $1}' | sh") + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "http://#{host}:8000/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/beaker/git/clone/clone_https.rb b/spec/acceptance/beaker/git/clone/clone_https.rb new file mode 100644 index 0000000..4e41c99 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_https.rb @@ -0,0 +1,62 @@ +test_name 'C3431 - clone (https protocol)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + ruby = (host.is_pe? && '/opt/puppet/bin/ruby') || 'ruby' + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + step 'setup - start https server' do + https_daemon =<<-EOF + require 'webrick' + require 'webrick/https' + server = WEBrick::HTTPServer.new( + :Port => 8443, + :DocumentRoot => "#{tmpdir}", + :SSLEnable => true, + :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, + :SSLCertificate => OpenSSL::X509::Certificate.new( File.open("#{tmpdir}/server.crt").read), + :SSLPrivateKey => OpenSSL::PKey::RSA.new( File.open("#{tmpdir}/server.key").read), + :SSLCertName => [ [ "CN",WEBrick::Utils::getservername ] ]) + WEBrick::Daemon.start + server.start + EOF + create_remote_file(host, '/tmp/https_daemon.rb', https_daemon) + #on(host, "#{ruby} /tmp/https_daemon.rb") + end + + teardown do + on(host, "rm -fr #{tmpdir}") + on(host, "ps ax | grep '#{ruby} /tmp/https_daemon.rb' | grep -v grep | awk '{print \"kill -9 \" $1}' | sh") + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "https://github.com/johnduarte/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/beaker/git/clone/clone_scp.rb b/spec/acceptance/beaker/git/clone/clone_scp.rb new file mode 100644 index 0000000..ba8d519 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_scp.rb @@ -0,0 +1,52 @@ +test_name 'C3428 - clone (ssh protocol, scp syntax)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + step 'setup - establish ssh keys' do + # create ssh keys + on(host, 'ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ""') + + # copy public key to authorized_keys + on(host, 'echo -e "Host *\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config') + on(host, 'chown -R root:root /root/.ssh') + end + + teardown do + on(host, "rm -fr #{tmpdir}") + apply_manifest_on(host, "file{'/root/.ssh/id_rsa': ensure => absent, force => true }") + apply_manifest_on(host, "file{'/root/.ssh/id_rsa.pub': ensure => absent, force => true }") + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "root@#{host}:#{tmpdir}/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/beaker/git/clone/clone_ssh.rb b/spec/acceptance/beaker/git/clone/clone_ssh.rb new file mode 100644 index 0000000..fcc85e3 --- /dev/null +++ b/spec/acceptance/beaker/git/clone/clone_ssh.rb @@ -0,0 +1,52 @@ +test_name 'C3429 - clone (ssh protocol)' + +# Globals +repo_name = 'testrepo_clone' + +hosts.each do |host| + tmpdir = host.tmpdir('vcsrepo') + step 'setup - create repo' do + install_package(host, 'git') + my_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..')) + scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) + on(host, "cd #{tmpdir} && ./create_git_repo.sh") + end + step 'setup - establish ssh keys' do + # create ssh keys + on(host, 'ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ""') + + # copy public key to authorized_keys + on(host, 'echo -e "Host *\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config') + on(host, 'chown -R root:root /root/.ssh') + end + + teardown do + on(host, "rm -fr #{tmpdir}") + apply_manifest_on(host, "file{'/root/.ssh/id_rsa': ensure => absent, force => true }") + apply_manifest_on(host, "file{'/root/.ssh/id_rsa.pub': ensure => absent, force => true }") + end + + step 'clone with puppet' do + pp = <<-EOS + vcsrepo { "#{tmpdir}/#{repo_name}": + ensure => present, + source => "ssh://root@#{host}#{tmpdir}/testrepo.git", + provider => git, + } + EOS + + apply_manifest_on(host, pp) + apply_manifest_on(host, pp) + end + + step "verify checkout is on the master branch" do + on(host, "ls #{tmpdir}/#{repo_name}/.git/") do |res| + fail_test('checkout not found') unless res.stdout.include? "HEAD" + end + + on(host, "cat #{tmpdir}/#{repo_name}/.git/HEAD") do |res| + fail_test('master not found') unless res.stdout.include? "ref: refs/heads/master" + end + end + +end diff --git a/spec/acceptance/git_clone_protocols_spec.rb b/spec/acceptance/git_clone_protocols_spec.rb deleted file mode 100644 index 4d9129e..0000000 --- a/spec/acceptance/git_clone_protocols_spec.rb +++ /dev/null @@ -1,230 +0,0 @@ -require 'spec_helper_acceptance' - -hosts.each do |host| - - describe 'clones a repo with git' do - tmpdir = host.tmpdir('vcsrepo') - - before(:all) do - # {{{ setup - apply_manifest_on(host, "user{'testuser': ensure => present, managehome => true }") - apply_manifest_on(host, "user{'vagrant': ensure => present, }") - # install git - install_package(host, 'git') - install_package(host, 'git-daemon') - # create ssh keys - on(host, 'mkdir -p /home/testuser/.ssh') - on(host, 'ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ""') - - # copy public key to authorized_keys - on(host, 'cat /root/.ssh/id_rsa.pub >> /home/testuser/.ssh/authorized_keys') - on(host, 'echo -e "Host *\n\tStrictHostKeyChecking no\n" >> /home/testuser/.ssh/config') - on(host, 'echo -e "Host *\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config') - on(host, 'chown -R testuser:testuser /home/testuser/.ssh') - on(host, 'chown -R root:root /root/.ssh') - - # create git repo - my_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir) - on(host, "cd #{tmpdir} && ./create_git_repo.sh") - - # copy ssl keys - scp_to(host, "#{my_root}/acceptance/files/server.crt", tmpdir) - scp_to(host, "#{my_root}/acceptance/files/server.key", tmpdir) - # }}} - end - - after(:all) do - # {{{ teardown - apply_manifest_on(host, "user{'testuser': ensure => absent, managehome => true }") - apply_manifest_on(host, "file{'/root/.ssh/id_rsa': ensure => absent, force => true }") - apply_manifest_on(host, "file{'/root/.ssh/id_rsa.pub': ensure => absent, force => true }") - # }}} - end - - - #--------------- TESTS ----------------------# - - context 'using local protocol (file URL)' do - before(:all) do - apply_manifest_on(host, "file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }") - end - - it 'should have HEAD pointing to master' do - pp = <<-EOS - vcsrepo { "#{tmpdir}/testrepo": - ensure => present, - provider => git, - source => "file://#{tmpdir}/testrepo.git", - } - EOS - - # Run it twice and test for idempotency - apply_manifest_on(host, pp, :catch_failures => true) - apply_manifest_on(host, pp, :catch_changes => true) - end - - describe file("#{tmpdir}/testrepo/.git/HEAD") do - it { should contain 'ref: refs/heads/master' } - end - - end - - context 'using local protocol (file path)' do - before(:all) do - apply_manifest_on(host, "file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }") - end - - it 'should have HEAD pointing to master' do - pp = <<-EOS - vcsrepo { "#{tmpdir}/testrepo": - ensure => present, - provider => git, - source => "#{tmpdir}/testrepo.git", - } - EOS - - # Run it twice and test for idempotency - apply_manifest_on(host, pp, :catch_failures => true) - apply_manifest_on(host, pp, :catch_changes => true) - end - - describe file("#{tmpdir}/testrepo/.git/HEAD") do - it { should contain 'ref: refs/heads/master' } - end - - end - - context 'using git protocol' do - before(:all) do - apply_manifest_on(host, "file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }") - on(host, "nohup git daemon --detach --base-path=/#{tmpdir}") - end - - it 'should have HEAD pointing to master' do - pp = <<-EOS - vcsrepo { "#{tmpdir}/testrepo": - ensure => present, - provider => git, - source => "git://#{host}/testrepo.git", - } - EOS - - # Run it twice and test for idempotency - apply_manifest_on(host, pp, :catch_failures => true) - apply_manifest_on(host, pp, :catch_changes => true) - end - describe file("#{tmpdir}/testrepo/.git/HEAD") do - it { should contain 'ref: refs/heads/master' } - end - - after(:all) do - on(host, 'pkill -9 git') - end - end - - context 'using http protocol' do - before(:all) do - apply_manifest_on(host, "file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }") - daemon =<<-EOF - require 'webrick' - server = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => "#{tmpdir}") - WEBrick::Daemon.start - server.start - EOF - create_remote_file(host, '/tmp/daemon.rb', daemon) - on(host, "ruby /tmp/daemon.rb") - end - - it 'should have HEAD pointing to master' do - pp = <<-EOS - vcsrepo { "#{tmpdir}/testrepo": - ensure => present, - provider => git, - source => "http://#{host}:8000/testrepo.git", - } - EOS - - # Run it twice and test for idempotency - apply_manifest_on(host, pp, :catch_failures => true) - apply_manifest_on(host, pp, :catch_changes => true) - end - describe file("#{tmpdir}/testrepo/.git/HEAD") do - it { should contain 'ref: refs/heads/master' } - end - - after(:all) do - on(host, 'pkill -9 ruby') - end - end - - context 'using https protocol' do - before(:all) do - apply_manifest_on(host, "file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }") - daemon =<<-EOF - require 'webrick' - require 'webrick/https' - server = WEBrick::HTTPServer.new( - :Port => 8443, - :DocumentRoot => "#{tmpdir}", - :SSLEnable => true, - :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, - :SSLCertificate => OpenSSL::X509::Certificate.new( File.open("#{tmpdir}/server.crt").read), - :SSLPrivateKey => OpenSSL::PKey::RSA.new( File.open("#{tmpdir}/server.key").read), - :SSLCertName => [ [ "CN",WEBrick::Utils::getservername ] ]) - WEBrick::Daemon.start - server.start - EOF - create_remote_file(host, '/tmp/daemon.rb', daemon) - on(host, "ruby /tmp/daemon.rb") - end - - it 'should have HEAD pointing to master' do - # howto whitelist ssl cert - pp = <<-EOS - vcsrepo { "#{tmpdir}/testrepo": - ensure => present, - provider => git, - source => "https://#{host}:8443/testrepo.git", - } - EOS - - # Run it twice and test for idempotency - apply_manifest_on(host, pp, :catch_failures => true) - apply_manifest_on(host, pp, :catch_changes => true) - end - - describe file("#{tmpdir}/testrepo/.git/HEAD") do - it { should contain 'ref: refs/heads/master' } - end - - after(:all) do - on(host, 'pkill -9 ruby') - end - end - - context 'using ssh protocol' do - before(:all) do - apply_manifest_on(host, "file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }") - end - it 'should have HEAD pointing to master' do - pp = <<-EOS - vcsrepo { "#{tmpdir}/testrepo": - ensure => present, - provider => git, - source => "ssh://root@#{host}#{tmpdir}/testrepo.git", - } - EOS - - # Run it twice and test for idempotency - apply_manifest_on(host, pp, :catch_failures => true) - apply_manifest_on(host, pp, :catch_changes => true) - end - - describe file("#{tmpdir}/testrepo/.git/HEAD") do - it { should contain 'ref: refs/heads/master' } - end - end - - end -end |