Add test for git clone using file path
[puppet_vcsrepo.git] / spec / acceptance / git_clone_protocols_spec.rb
1 require 'spec_helper_acceptance'
2
3 hosts.each do |host|
4
5   describe 'clones a repo with git' do
6     tmpdir =  host.tmpdir('vcsrepo')
7
8     before(:all) do
9       # {{{ setup
10       on(host,apply_manifest("user{'testuser': ensure => present, }"))
11       on(host,apply_manifest("user{'vagrant': ensure => present, }"))
12       # install git
13       install_package(host, 'git')
14       install_package(host, 'git-daemon')
15       # create ssh keys
16       host.execute('mkdir -p /home/testuser/.ssh')
17       host.execute('ssh-keygen -q -t rsa -f /home/testuser/.ssh/id_rsa -N ""')
18
19       # copy public key to authorized_keys
20       host.execute('cat /home/testuser/.ssh/id_rsa.pub > /home/testuser/.ssh/authorized_keys')
21       host.execute('echo -e "Host localhost\n\tStrictHostKeyChecking no\n" > /home/testuser/.ssh/config')
22       host.execute('chown -R testuser:testuser /home/testuser/.ssh')
23
24       # create git repo
25       my_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
26       scp_to(host, "#{my_root}/acceptance/files/create_git_repo.sh", tmpdir)
27       host.execute("cd #{tmpdir} && ./create_git_repo.sh")
28
29       # copy ssl keys
30       scp_to(host, "#{my_root}/acceptance/files/server.crt", tmpdir)
31       scp_to(host, "#{my_root}/acceptance/files/server.key", tmpdir)
32
33       host.execute("nohup git daemon  --detach --base-path=/#{tmpdir}")
34       # }}}
35     end
36
37     after(:all) do
38       # {{{ teardown
39       on(host,apply_manifest("user{'testuser': ensure => absent,}"))
40       # }}}
41     end
42
43
44     #---------------  TESTS ----------------------#
45
46     context 'using local protocol (file URL)' do
47       before(:all) do
48         on(host,apply_manifest("file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }"))
49       end
50
51       it 'should have HEAD pointing to master' do
52         pp = <<-EOS
53         vcsrepo { "#{tmpdir}/testrepo":
54           ensure => present,
55           provider => git,
56           source => "file://#{tmpdir}/testrepo.git",
57         }
58         EOS
59
60         # Run it twice and test for idempotency
61         on(host,apply_manifest(pp, :catch_failures => true))
62         on(host,apply_manifest(pp, :catch_changes => true))
63       end
64
65       describe file("#{tmpdir}/testrepo/.git/HEAD") do
66         it { should contain 'ref: refs/heads/master' }
67       end
68
69     end
70
71     context 'using local protocol (file path)' do
72       before(:all) do
73         on(host,apply_manifest("file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }"))
74       end
75
76       it 'should have HEAD pointing to master' do
77         pp = <<-EOS
78         vcsrepo { "#{tmpdir}/testrepo":
79           ensure => present,
80           provider => git,
81           source => "#{tmpdir}/testrepo.git",
82         }
83         EOS
84
85         # Run it twice and test for idempotency
86         on(host,apply_manifest(pp, :catch_failures => true))
87         on(host,apply_manifest(pp, :catch_changes => true))
88       end
89
90       describe file("#{tmpdir}/testrepo/.git/HEAD") do
91         it { should contain 'ref: refs/heads/master' }
92       end
93
94     end
95
96     context 'using git protocol' do
97       before(:all) do
98         on(host,apply_manifest("file {'#{tmpdir}/testrepo': ensure => directory, purge => true, recurse => true, recurselimit => 1, force => true; }"))
99       end
100
101       it 'should have HEAD pointing to master' do
102         pp = <<-EOS
103         vcsrepo { "#{tmpdir}/testrepo":
104           ensure => present,
105           provider => git,
106           source => "git://#{host}/testrepo.git",
107         }
108         EOS
109
110         # Run it twice and test for idempotency
111         apply_manifest(pp, :catch_failures => true)
112         apply_manifest(pp, :catch_changes => true)
113       end
114       describe file("#{tmpdir}/testrepo/.git/HEAD") do
115         it { should contain 'ref: refs/heads/master' }
116       end
117
118     end
119
120   end
121 end