Imported puppetlabs-vcsrepo

This commit is contained in:
Ciaby 2014-07-16 13:58:34 -05:00
parent 0938a13fe6
commit 18d9aa4a23
152 changed files with 9191 additions and 0 deletions

View file

@ -0,0 +1,109 @@
require 'spec_helper'
describe Puppet::Type.type(:vcsrepo).provider(:bzr_provider) do
let(:resource) { Puppet::Type.type(:vcsrepo).new({
:name => 'test',
:ensure => :present,
:provider => :bzr,
:revision => '2634',
:source => 'lp:do',
:path => '/tmp/test',
})}
let(:provider) { resource.provider }
before :each do
Puppet::Util.stubs(:which).with('bzr').returns('/usr/bin/bzr')
end
describe 'creating' do
context 'with defaults' do
it "should execute 'bzr clone -r' with the revision" do
provider.expects(:bzr).with('branch', '-r', resource.value(:revision), resource.value(:source), resource.value(:path))
provider.create
end
end
context 'without revision' do
it "should just execute 'bzr clone' without a revision" do
resource.delete(:revision)
provider.expects(:bzr).with('branch', resource.value(:source), resource.value(:path))
provider.create
end
end
context 'without source' do
it "should execute 'bzr init'" do
resource.delete(:source)
provider.expects(:bzr).with('init', resource.value(:path))
provider.create
end
end
end
describe 'destroying' do
it "it should remove the directory" do
provider.destroy
end
end
describe "checking existence" do
it "should check for the directory" do
File.expects(:directory?).with(File.join(resource.value(:path), '.bzr')).returns(true)
provider.exists?
end
end
describe "checking the revision property" do
before do
expects_chdir
provider.expects(:bzr).with('version-info').returns(File.read(fixtures('bzr_version_info.txt')))
@current_revid = 'menesis@pov.lt-20100309191856-4wmfqzc803fj300x'
end
context "when given a non-revid as the resource revision" do
context "when its revid is not different than the current revid" do
it "should return the ref" do
resource[:revision] = '2634'
provider.expects(:bzr).with('revision-info', '2634').returns("2634 menesis@pov.lt-20100309191856-4wmfqzc803fj300x\n")
provider.revision.should == resource.value(:revision)
end
end
context "when its revid is different than the current revid" do
it "should return the current revid" do
resource[:revision] = '2636'
provider.expects(:bzr).with('revision-info', resource.value(:revision)).returns("2635 foo\n")
provider.revision.should == @current_revid
end
end
end
context "when given a revid as the resource revision" do
context "when it is the same as the current revid" do
it "should return it" do
resource[:revision] = 'menesis@pov.lt-20100309191856-4wmfqzc803fj300x'
provider.expects(:bzr).with('revision-info', resource.value(:revision)).returns("1234 #{resource.value(:revision)}\n")
provider.revision.should == resource.value(:revision)
end
end
context "when it is not the same as the current revid" do
it "should return the current revid" do
resource[:revision] = 'menesis@pov.lt-20100309191856-4wmfqzc803fj300y'
provider.expects(:bzr).with('revision-info', resource.value(:revision)).returns("2636 foo\n")
provider.revision.should == @current_revid
end
end
end
end
describe "setting the revision property" do
it "should use 'bzr update -r' with the revision" do
Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
provider.expects(:bzr).with('update', '-r', 'somerev')
provider.revision = 'somerev'
end
end
end

View file

@ -0,0 +1,115 @@
require 'spec_helper'
describe Puppet::Type.type(:vcsrepo).provider(:cvs_provider) do
let(:resource) { Puppet::Type.type(:vcsrepo).new({
:name => 'test',
:ensure => :present,
:provider => :cvs,
:revision => '2634',
:source => 'lp:do',
:path => '/tmp/test',
})}
let(:provider) { resource.provider }
before :each do
Puppet::Util.stubs(:which).with('cvs').returns('/usr/bin/cvs')
end
describe 'creating' do
context "with a source" do
it "should execute 'cvs checkout'" do
resource[:source] = ':ext:source@example.com:/foo/bar'
resource[:revision] = 'an-unimportant-value'
expects_chdir('/tmp')
provider.expects(:cvs).with('-d', resource.value(:source), 'checkout', '-r', 'an-unimportant-value', '-d', 'test', 'bar')
provider.create
end
it "should just execute 'cvs checkout' without a revision" do
resource[:source] = ':ext:source@example.com:/foo/bar'
resource.delete(:revision)
provider.expects(:cvs).with('-d', resource.value(:source), 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source)))
provider.create
end
context "with a compression" do
it "should just execute 'cvs checkout' without a revision" do
resource[:source] = ':ext:source@example.com:/foo/bar'
resource[:compression] = '3'
resource.delete(:revision)
provider.expects(:cvs).with('-d', resource.value(:source), '-z', '3', 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source)))
provider.create
end
end
end
context "when a source is not given" do
it "should execute 'cvs init'" do
resource.delete(:source)
provider.expects(:cvs).with('-d', resource.value(:path), 'init')
provider.create
end
end
end
describe 'destroying' do
it "it should remove the directory" do
provider.destroy
end
end
describe "checking existence" do
it "should check for the CVS directory with source" do
resource[:source] = ':ext:source@example.com:/foo/bar'
File.expects(:directory?).with(File.join(resource.value(:path), 'CVS'))
provider.exists?
end
it "should check for the CVSROOT directory without source" do
resource.delete(:source)
File.expects(:directory?).with(File.join(resource.value(:path), 'CVSROOT'))
provider.exists?
end
end
describe "checking the revision property" do
before do
@tag_file = File.join(resource.value(:path), 'CVS', 'Tag')
end
context "when CVS/Tag exists" do
before do
@tag = 'TAG'
File.expects(:exist?).with(@tag_file).returns(true)
end
it "should read CVS/Tag" do
File.expects(:read).with(@tag_file).returns("T#{@tag}")
provider.revision.should == @tag
end
end
context "when CVS/Tag does not exist" do
before do
File.expects(:exist?).with(@tag_file).returns(false)
end
it "assumes HEAD" do
provider.revision.should == 'HEAD'
end
end
end
describe "when setting the revision property" do
before do
@tag = 'SOMETAG'
end
it "should use 'cvs update -dr'" do
expects_chdir
provider.expects(:cvs).with('update', '-dr', @tag, '.')
provider.revision = @tag
end
end
end

View file

@ -0,0 +1,400 @@
require 'spec_helper'
describe Puppet::Type.type(:vcsrepo).provider(:git_provider) do
def branch_a_list(include_branch = nil?)
<<branches
end
#{"* master" unless include_branch.nil?}
#{"* " + include_branch unless !include_branch}
remote/origin/master
remote/origin/foo
branches
end
let(:resource) { Puppet::Type.type(:vcsrepo).new({
:name => 'test',
:ensure => :present,
:provider => :git,
:revision => '2634',
:source => 'git@repo',
:path => '/tmp/test',
:force => false
})}
let(:provider) { resource.provider }
before :each do
Puppet::Util.stubs(:which).with('git').returns('/usr/bin/git')
end
context 'creating' do
context "with a revision that is a remote branch" do
it "should execute 'git clone' and 'git checkout -b'" do
resource[:revision] = 'only/remote'
Dir.expects(:chdir).with('/').at_least_once.yields
Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
provider.expects(:git).with('clone', resource.value(:source), resource.value(:path))
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').returns(branch_a_list(resource.value(:revision)))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.create
end
end
context "with a remote not named 'origin'" do
it "should execute 'git clone --origin not_origin" do
resource[:remote] = 'not_origin'
Dir.expects(:chdir).with('/').at_least_once.yields
Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
provider.expects(:git).with('clone', '--origin', 'not_origin', resource.value(:source), resource.value(:path))
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').returns(branch_a_list(resource.value(:revision)))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.create
end
end
context "with shallow clone enable" do
it "should execute 'git clone --depth 1'" do
resource[:revision] = 'only/remote'
resource[:depth] = 1
Dir.expects(:chdir).with('/').at_least_once.yields
Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
provider.expects(:git).with('clone', '--depth', '1', resource.value(:source), resource.value(:path))
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').returns(branch_a_list(resource.value(:revision)))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.create
end
end
context "with a revision that is not a remote branch" do
it "should execute 'git clone' and 'git reset --hard'" do
resource[:revision] = 'a-commit-or-tag'
Dir.expects(:chdir).with('/').at_least_once.yields
Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
provider.expects(:git).with('clone', resource.value(:source), resource.value(:path))
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').returns(branch_a_list(resource.value(:revision)))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.create
end
it "should execute 'git clone' and submodule commands" do
resource.delete(:revision)
provider.expects(:git).with('clone', resource.value(:source), resource.value(:path))
provider.expects(:update_submodules)
provider.create
end
end
context "with an ensure of bare" do
context "with revision" do
it "should raise an error" do
resource[:ensure] = :bare
expect { provider.create }.to raise_error Puppet::Error, /cannot set a revision.+bare/i
end
end
context "without revision" do
it "should just execute 'git clone --bare'" do
resource[:ensure] = :bare
resource.delete(:revision)
provider.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
provider.create
end
end
end
context "when a source is not given" do
context "when the path does not exist" do
it "should execute 'git init'" do
resource[:ensure] = :present
resource.delete(:source)
expects_mkdir
expects_chdir
expects_directory?(false)
provider.expects(:bare_exists?).returns(false)
provider.expects(:git).with('init')
provider.create
end
end
context "when the path is a bare repository" do
it "should convert it to a working copy" do
resource[:ensure] = :present
resource.delete(:source)
provider.expects(:bare_exists?).returns(true)
provider.expects(:convert_bare_to_working_copy)
provider.create
end
end
context "when the path is not empty and not a repository" do
it "should raise an exception" do
provider.expects(:path_exists?).returns(true)
provider.expects(:path_empty?).returns(false)
proc { provider.create }.should raise_error(Puppet::Error)
end
end
end
context "when the path does not exist" do
it "should execute 'git init --bare'" do
resource[:ensure] = :bare
resource.delete(:source)
resource.delete(:revision)
expects_chdir
expects_mkdir
expects_directory?(false)
provider.expects(:working_copy_exists?).returns(false)
provider.expects(:git).with('init', '--bare')
provider.create
end
end
context "when the path is a working copy repository" do
it "should convert it to a bare repository" do
resource[:ensure] = :bare
resource.delete(:source)
resource.delete(:revision)
provider.expects(:working_copy_exists?).returns(true)
provider.expects(:convert_working_copy_to_bare)
provider.create
end
it "should clone overtop it using force" do
resource[:force] = true
Dir.expects(:chdir).with('/').at_least_once.yields
Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
provider.expects(:path_exists?).returns(true)
provider.expects(:path_empty?).returns(false)
provider.destroy
provider.expects(:git).with('clone',resource.value(:source), resource.value(:path))
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').returns(branch_a_list(resource.value(:revision)))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.create
end
it "should warn about destroying it using force and noop attribute" do
resource[:force] = true
resource[:noop] = true
resource.delete(:revision)
provider.expects(:working_copy_exists?).returns(true)
provider.expects(:destroy).never
provider.expects(:create).never
Puppet::Type::Vcsrepo::Ensure.any_instance.expects(:send_log).with(:notice, "Noop Mode - Would have deleted repository and re-created from latest")
provider.resource.retrieve
end
it "should warn about destroying it using force and global noop" do
resource[:force] = true
Puppet[:noop] = true
resource.delete(:revision)
provider.expects(:working_copy_exists?).returns(true)
provider.expects(:destroy).never
provider.expects(:create).never
Puppet::Type::Vcsrepo::Ensure.any_instance.expects(:send_log).with(:notice, "Noop Mode - Would have deleted repository and re-created from latest")
provider.resource.retrieve
end
end
context "when the path is not empty and not a repository" do
it "should raise an exception" do
provider.expects(:path_exists?).returns(true)
provider.expects(:path_empty?).returns(false)
provider.expects(:working_copy_exists?).returns(false)
proc { provider.create }.should raise_error(Puppet::Error)
end
end
end
context 'destroying' do
it "it should remove the directory" do
#expects_rm_rf
provider.destroy
end
end
context "checking the revision property" do
before do
expects_chdir('/tmp/test')
resource[:revision] = 'currentsha'
resource.delete(:source)
provider.stubs(:git).with('config', 'remote.origin.url').returns('')
provider.stubs(:git).with('fetch', 'origin') # FIXME
provider.stubs(:git).with('fetch', '--tags', 'origin')
provider.stubs(:git).with('rev-parse', 'HEAD').returns('currentsha')
provider.stubs(:git).with('branch', '-a').returns(branch_a_list(resource.value(:revision)))
provider.stubs(:git).with('tag', '-l').returns("Hello")
end
context "when its SHA is not different than the current SHA" do
it "should return the ref" do
provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('currentsha')
provider.revision.should == resource.value(:revision)
end
end
context "when its SHA is different than the current SHA" do
it "should return the current SHA" do
provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('othersha')
provider.revision.should == resource.value(:revision)
end
end
context "when its a ref to a remote head" do
it "should return the revision" do
provider.stubs(:git).with('branch', '-a').returns(" remotes/origin/#{resource.value(:revision)}")
provider.expects(:git).with('rev-parse', "origin/#{resource.value(:revision)}").returns("newsha")
provider.revision.should == resource.value(:revision)
end
end
context "when its a ref to non existant remote head" do
it "should fail" do
provider.expects(:git).with('branch', '-a').returns(branch_a_list)
provider.expects(:git).with('rev-parse', '--revs-only', resource.value(:revision)).returns('')
expect { provider.revision }.to raise_error(Puppet::Error, /not a local or remote ref$/)
end
end
context "when the source is modified" do
it "should update the origin url" do
resource[:source] = 'git://git@foo.com/bar.git'
provider.expects(:git).with('config', 'remote.origin.url').returns('old')
provider.expects(:git).with('config', 'remote.origin.url', 'git://git@foo.com/bar.git')
provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('currentsha')
provider.revision.should == resource.value(:revision)
end
end
end
context "setting the revision property" do
before do
expects_chdir
end
context "when it's an existing local branch" do
it "should use 'git fetch' and 'git reset'" do
resource[:revision] = 'feature/foo'
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').at_least_once.returns(branch_a_list(resource.value(:revision)))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.expects(:git).with('reset', '--hard', "origin/#{resource.value(:revision)}")
provider.revision = resource.value(:revision)
end
end
context "when it's a remote branch" do
it "should use 'git fetch' and 'git reset'" do
resource[:revision] = 'only/remote'
provider.expects(:update_submodules)
provider.expects(:git).with('branch', '-a').at_least_once.returns(resource.value(:revision))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.expects(:git).with('reset', '--hard', "origin/#{resource.value(:revision)}")
provider.revision = resource.value(:revision)
end
end
context "when it's a commit or tag" do
it "should use 'git fetch' and 'git reset'" do
resource[:revision] = 'a-commit-or-tag'
provider.expects(:git).with('branch', '-a').at_least_once.returns(fixture(:git_branch_a))
provider.expects(:git).with('checkout', '--force', resource.value(:revision))
provider.expects(:git).with('branch', '-a').returns(fixture(:git_branch_a))
provider.expects(:git).with('branch', '-a').returns(fixture(:git_branch_a))
provider.expects(:git).with('submodule', 'update', '--init', '--recursive')
provider.revision = resource.value(:revision)
end
end
end
context "updating references" do
it "should use 'git fetch --tags'" do
resource.delete(:source)
expects_chdir
provider.expects(:git).with('config', 'remote.origin.url').returns('')
provider.expects(:git).with('fetch', 'origin')
provider.expects(:git).with('fetch', '--tags', 'origin')
provider.update_references
end
end
context "checking if revision" do
before do
expects_chdir
provider.expects(:git).with('branch', '-a').returns(fixture(:git_branch_a))
end
context "is a local branch" do
context "when it's listed in 'git branch -a'" do
it "should return true" do
resource[:revision] = 'feature/foo'
provider.should be_local_branch_revision
end
end
context "when it's not listed in 'git branch -a'" do
it "should return false" do
resource[:revision] = 'feature/notexist'
provider.should_not be_local_branch_revision
end
end
end
context "is a remote branch" do
context "when it's listed in 'git branch -a' with an 'origin/' prefix" do
it "should return true" do
resource[:revision] = 'only/remote'
provider.should be_remote_branch_revision
end
end
context "when it's not listed in 'git branch -a' with an 'origin/' prefix" do
it "should return false" do
resource[:revision] = 'only/local'
provider.should_not be_remote_branch_revision
end
end
end
end
describe 'latest?' do
context 'when true' do
it do
provider.expects(:revision).returns('testrev')
provider.expects(:latest_revision).returns('testrev')
provider.latest?.should be_true
end
end
context 'when false' do
it do
provider.expects(:revision).returns('master')
provider.expects(:latest_revision).returns('testrev')
provider.latest?.should be_false
end
end
end
describe 'convert_working_copy_to_bare' do
it do
FileUtils.expects(:mv).returns(true)
FileUtils.expects(:rm_rf).returns(true)
FileUtils.expects(:mv).returns(true)
provider.instance_eval { convert_working_copy_to_bare }
end
end
describe 'convert_bare_to_working_copy' do
it do
FileUtils.expects(:mv).returns(true)
FileUtils.expects(:mkdir).returns(true)
FileUtils.expects(:mv).returns(true)
provider.expects(:commits_in?).returns(true)
# If you forget to stub these out you lose 3 hours of rspec work.
provider.expects(:reset).with('HEAD').returns(true)
provider.expects(:git_with_identity).returns(true)
provider.expects(:update_owner_and_excludes).returns(true)
provider.instance_eval { convert_bare_to_working_copy }
end
end
end

View file

@ -0,0 +1,138 @@
require 'spec_helper'
describe Puppet::Type.type(:vcsrepo).provider(:hg) do
let(:resource) { Puppet::Type.type(:vcsrepo).new({
:name => 'test',
:ensure => :present,
:provider => :hg,
:path => '/tmp/vcsrepo',
})}
let(:provider) { resource.provider }
before :each do
Puppet::Util.stubs(:which).with('hg').returns('/usr/bin/hg')
end
describe 'creating' do
context 'with source and revision' do
it "should execute 'hg clone -u' with the revision" do
resource[:source] = 'something'
resource[:revision] = '1'
provider.expects(:hg).with('clone', '-u',
resource.value(:revision),
resource.value(:source),
resource.value(:path))
provider.create
end
end
context 'without revision' do
it "should just execute 'hg clone' without a revision" do
resource[:source] = 'something'
provider.expects(:hg).with('clone', resource.value(:source), resource.value(:path))
provider.create
end
end
context "when a source is not given" do
it "should execute 'hg init'" do
provider.expects(:hg).with('init', resource.value(:path))
provider.create
end
end
context "when basic auth is used" do
it "should execute 'hg clone'" do
resource[:source] = 'something'
resource[:basic_auth_username] = 'user'
resource[:basic_auth_password] = 'pass'
provider.expects(:hg).with('clone',
resource.value(:source),
resource.value(:path),
"--config","\"auth.x.prefix=" + resource.value(:source) + "\"",
"--config","\"auth.x.username=" + resource.value(:basic_auth_username) + "\"",
"--config","\"auth.x.password=" + resource.value(:basic_auth_password) + "\"",
"--config","\"auth.x.schemes=http https" + "\"")
provider.create
end
end
end
describe 'destroying' do
it "it should remove the directory" do
expects_rm_rf
provider.destroy
end
end
describe "checking existence" do
it "should check for the directory" do
expects_directory?(true, File.join(resource.value(:path), '.hg'))
provider.exists?
end
end
describe "checking the revision property" do
before do
expects_chdir
end
context "when given a non-SHA as the resource revision" do
before do
provider.expects(:hg).with('parents').returns(fixture(:hg_parents))
provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
end
context "when its SHA is not different than the current SHA" do
it "should return the ref" do
resource[:revision] = '0.6'
provider.revision.should == '0.6'
end
end
context "when its SHA is different than the current SHA" do
it "should return the current SHA" do
resource[:revision] = '0.5.3'
provider.revision.should == '34e6012c783a'
end
end
end
context "when given a SHA as the resource revision" do
before do
provider.expects(:hg).with('parents').returns(fixture(:hg_parents))
end
context "when it is the same as the current SHA", :resource => {:revision => '34e6012c783a'} do
it "should return it" do
resource[:revision] = '34e6012c783a'
provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
provider.revision.should == resource.value(:revision)
end
end
context "when it is not the same as the current SHA", :resource => {:revision => 'not-the-same'} do
it "should return the current SHA" do
resource[:revision] = 'not-the-same'
provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
provider.revision.should == '34e6012c783a'
end
end
end
end
describe "setting the revision property" do
before do
@revision = '6aa99e9b3ab1'
end
it "should use 'hg update ---clean -r'" do
expects_chdir
provider.expects(:hg).with('pull')
provider.expects(:hg).with('merge')
provider.expects(:hg).with('update', '--clean', '-r', @revision)
provider.revision = @revision
end
end
end

View file

@ -0,0 +1,82 @@
require 'spec_helper'
describe Puppet::Type.type(:vcsrepo).provider(:p4) do
let(:resource) { Puppet::Type.type(:vcsrepo).new({
:name => 'test',
:ensure => :present,
:provider => :p4,
:path => '/tmp/vcsrepo',
})}
let(:provider) { resource.provider }
before :each do
Puppet::Util.stubs(:which).with('p4').returns('/usr/local/bin/p4')
end
spec = {
:input => "Description: Generated by Puppet VCSrepo\nRoot: /tmp/vcsrepo\n\nView:\n",
:marshal => false
}
describe 'creating' do
context 'with source and revision' do
it "should execute 'p4 sync' with the revision" do
resource[:source] = 'something'
resource[:revision] = '1'
ENV['P4CLIENT'] = 'client_ws1'
provider.expects(:p4).with(['client', '-o', 'client_ws1']).returns({})
provider.expects(:p4).with(['client', '-i'], spec)
provider.expects(:p4).with(['sync', resource.value(:source) + "@" + resource.value(:revision)])
provider.create
end
end
context 'without revision' do
it "should just execute 'p4 sync' without a revision" do
resource[:source] = 'something'
ENV['P4CLIENT'] = 'client_ws2'
provider.expects(:p4).with(['client', '-o', 'client_ws2']).returns({})
provider.expects(:p4).with(['client', '-i'], spec)
provider.expects(:p4).with(['sync', resource.value(:source)])
provider.create
end
end
context "when a client and source are not given" do
it "should execute 'p4 client'" do
ENV['P4CLIENT'] = nil
path = resource.value(:path)
host = Facter.value('hostname')
default = "puppet-" + Digest::MD5.hexdigest(path + host)
provider.expects(:p4).with(['client', '-o', default]).returns({})
provider.expects(:p4).with(['client', '-i'], spec)
provider.create
end
end
end
describe 'destroying' do
it "it should remove the directory" do
ENV['P4CLIENT'] = 'test_client'
provider.expects(:p4).with(['client', '-d', '-f', 'test_client'])
expects_rm_rf
provider.destroy
end
end
describe "checking existence" do
it "should check for the directory" do
provider.expects(:p4).with(['info'], {:marshal => false}).returns({})
provider.expects(:p4).with(['where', resource.value(:path) + "..."], {:raise => false}).returns({})
provider.exists?
end
end
end

View file

@ -0,0 +1,105 @@
require 'spec_helper'
describe Puppet::Type.type(:vcsrepo).provider(:svn) do
let(:resource) { Puppet::Type.type(:vcsrepo).new({
:name => 'test',
:ensure => :present,
:provider => :svn,
:path => '/tmp/vcsrepo',
})}
let(:provider) { resource.provider }
before :each do
Puppet::Util.stubs(:which).with('git').returns('/usr/bin/git')
end
describe 'creating' do
context 'with source and revision' do
it "should execute 'svn checkout' with a revision" do
resource[:source] = 'exists'
resource[:revision] = '1'
provider.expects(:svn).with('--non-interactive', 'checkout', '-r',
resource.value(:revision),
resource.value(:source),
resource.value(:path))
provider.create
end
end
context 'with source' do
it "should just execute 'svn checkout' without a revision" do
resource[:source] = 'exists'
provider.expects(:svn).with('--non-interactive', 'checkout',
resource.value(:source),
resource.value(:path))
provider.create
end
end
context 'with fstype' do
it "should execute 'svnadmin create' with an '--fs-type' option" do
resource[:fstype] = 'ext4'
provider.expects(:svnadmin).with('create', '--fs-type',
resource.value(:fstype),
resource.value(:path))
provider.create
end
end
context 'without fstype' do
it "should execute 'svnadmin create' without an '--fs-type' option" do
provider.expects(:svnadmin).with('create', resource.value(:path))
provider.create
end
end
end
describe 'destroying' do
it "it should remove the directory" do
expects_rm_rf
provider.destroy
end
end
describe "checking existence" do
it "should check for the directory" do
expects_directory?(true, resource.value(:path))
expects_directory?(true, File.join(resource.value(:path), '.svn'))
provider.exists?
end
end
describe "checking the revision property" do
before do
provider.expects(:svn).with('--non-interactive', 'info').returns(fixture(:svn_info))
end
it "should use 'svn info'" do
expects_chdir
provider.revision.should == '4' # From 'Revision', not 'Last Changed Rev'
end
end
describe "setting the revision property" do
before do
@revision = '30'
end
it "should use 'svn update'" do
expects_chdir
provider.expects(:svn).with('--non-interactive', 'update', '-r', @revision)
provider.revision = @revision
end
end
describe "setting the revision property and repo source" do
before do
@revision = '30'
end
it "should use 'svn switch'" do
resource[:source] = 'an-unimportant-value'
expects_chdir
provider.expects(:svn).with('--non-interactive', 'switch', '-r', @revision, 'an-unimportant-value')
provider.revision = @revision
end
end
end

View file

@ -0,0 +1,4 @@
Resource Type Specs
===================
Define specs for your resource types in this directory.