dpkg-tools 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +198 -0
- data/MIT-LICENSE +20 -0
- data/README +17 -0
- data/Rakefile +1 -0
- data/bin/dpkg-etc +6 -0
- data/bin/dpkg-gem +6 -0
- data/bin/dpkg-rails +6 -0
- data/lib/dpkg-tools.rb +6 -0
- data/lib/dpkg-tools/command_line.rb +142 -0
- data/lib/dpkg-tools/package.rb +30 -0
- data/lib/dpkg-tools/package/builder.rb +112 -0
- data/lib/dpkg-tools/package/config.rb +96 -0
- data/lib/dpkg-tools/package/control_files.rb +24 -0
- data/lib/dpkg-tools/package/control_files/base.rb +75 -0
- data/lib/dpkg-tools/package/control_files/changelog.rb +23 -0
- data/lib/dpkg-tools/package/control_files/control.rb +148 -0
- data/lib/dpkg-tools/package/control_files/copyright.rb +27 -0
- data/lib/dpkg-tools/package/control_files/rakefile.rb +28 -0
- data/lib/dpkg-tools/package/control_files/rules.rb +29 -0
- data/lib/dpkg-tools/package/data.rb +125 -0
- data/lib/dpkg-tools/package/etc.rb +26 -0
- data/lib/dpkg-tools/package/etc/builder.rb +19 -0
- data/lib/dpkg-tools/package/etc/control_files.rb +22 -0
- data/lib/dpkg-tools/package/etc/control_files/changelog.rb +30 -0
- data/lib/dpkg-tools/package/etc/control_files/rakefile.rb +18 -0
- data/lib/dpkg-tools/package/etc/data.rb +48 -0
- data/lib/dpkg-tools/package/etc/rake.rb +31 -0
- data/lib/dpkg-tools/package/etc/setup.rb +30 -0
- data/lib/dpkg-tools/package/fs_methods.rb +10 -0
- data/lib/dpkg-tools/package/gem.rb +43 -0
- data/lib/dpkg-tools/package/gem/builder.rb +77 -0
- data/lib/dpkg-tools/package/gem/control_files.rb +23 -0
- data/lib/dpkg-tools/package/gem/control_files/changelog.rb +19 -0
- data/lib/dpkg-tools/package/gem/control_files/copyright.rb +24 -0
- data/lib/dpkg-tools/package/gem/control_files/rakefile.rb +19 -0
- data/lib/dpkg-tools/package/gem/data.rb +115 -0
- data/lib/dpkg-tools/package/gem/gem_format.rb +10 -0
- data/lib/dpkg-tools/package/gem/rake.rb +37 -0
- data/lib/dpkg-tools/package/gem/setup.rb +159 -0
- data/lib/dpkg-tools/package/rails.rb +26 -0
- data/lib/dpkg-tools/package/rails/builder.rb +77 -0
- data/lib/dpkg-tools/package/rails/cap.rb +30 -0
- data/lib/dpkg-tools/package/rails/control_files.rb +22 -0
- data/lib/dpkg-tools/package/rails/control_files/changelog.rb +19 -0
- data/lib/dpkg-tools/package/rails/control_files/rakefile.rb +24 -0
- data/lib/dpkg-tools/package/rails/data.rb +160 -0
- data/lib/dpkg-tools/package/rails/rake.rb +40 -0
- data/lib/dpkg-tools/package/rails/setup.rb +84 -0
- data/lib/dpkg-tools/package/rake.rb +90 -0
- data/lib/dpkg-tools/package/setup.rb +145 -0
- data/lib/dpkg-tools/version.rb +23 -0
- data/spec/dpkg-tools/command_line_spec.rb +9 -0
- data/spec/dpkg-tools/package/builder_spec.rb +159 -0
- data/spec/dpkg-tools/package/config_spec.rb +150 -0
- data/spec/dpkg-tools/package/control_files/base_spec.rb +111 -0
- data/spec/dpkg-tools/package/control_files/changelog_spec.rb +22 -0
- data/spec/dpkg-tools/package/control_files/control_spec.rb +131 -0
- data/spec/dpkg-tools/package/control_files/copyright_spec.rb +29 -0
- data/spec/dpkg-tools/package/control_files/rakefile_spec.rb +37 -0
- data/spec/dpkg-tools/package/control_files/rules_spec.rb +16 -0
- data/spec/dpkg-tools/package/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/data_spec.rb +115 -0
- data/spec/dpkg-tools/package/etc/builder_spec.rb +28 -0
- data/spec/dpkg-tools/package/etc/control_files/changelog_spec.rb +21 -0
- data/spec/dpkg-tools/package/etc/control_files/rakefile_spec.rb +16 -0
- data/spec/dpkg-tools/package/etc/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/etc/data_spec.rb +74 -0
- data/spec/dpkg-tools/package/etc/rake_spec.rb +71 -0
- data/spec/dpkg-tools/package/etc/setup_spec.rb +62 -0
- data/spec/dpkg-tools/package/etc_spec.rb +39 -0
- data/spec/dpkg-tools/package/fs_methods_spec.rb +33 -0
- data/spec/dpkg-tools/package/gem/builder_spec.rb +84 -0
- data/spec/dpkg-tools/package/gem/control_files/changelog_spec.rb +25 -0
- data/spec/dpkg-tools/package/gem/control_files/copyright_spec.rb +28 -0
- data/spec/dpkg-tools/package/gem/control_files/rakefile_spec.rb +17 -0
- data/spec/dpkg-tools/package/gem/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/gem/data_spec.rb +176 -0
- data/spec/dpkg-tools/package/gem/gem_format_spec.rb +26 -0
- data/spec/dpkg-tools/package/gem/rake_spec.rb +102 -0
- data/spec/dpkg-tools/package/gem/setup_spec.rb +274 -0
- data/spec/dpkg-tools/package/gem_spec.rb +68 -0
- data/spec/dpkg-tools/package/rails/builder_spec.rb +113 -0
- data/spec/dpkg-tools/package/rails/cap_spec.rb +37 -0
- data/spec/dpkg-tools/package/rails/control_files/changelog_spec.rb +25 -0
- data/spec/dpkg-tools/package/rails/control_files/rakefile_spec.rb +24 -0
- data/spec/dpkg-tools/package/rails/control_files_spec.rb +12 -0
- data/spec/dpkg-tools/package/rails/data_spec.rb +178 -0
- data/spec/dpkg-tools/package/rails/rake_spec.rb +78 -0
- data/spec/dpkg-tools/package/rails/setup_spec.rb +152 -0
- data/spec/dpkg-tools/package/rails_spec.rb +27 -0
- data/spec/dpkg-tools/package/rake_spec.rb +87 -0
- data/spec/dpkg-tools/package/setup_spec.rb +247 -0
- data/spec/dpkg-tools/package_spec.rb +34 -0
- data/spec/fixtures/BlueCloth-1.0.0.gem +1190 -0
- data/spec/fixtures/database.yml +33 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +52 -0
- data/tasks/dist.rake +118 -0
- data/tasks/rspec.rake +21 -0
- metadata +165 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'rake'
|
|
4
|
+
|
|
5
|
+
describe DpkgTools::Package::Rails::BuildTasks, "task creation" do
|
|
6
|
+
it "check_setup should be fine if base_path is defined" do
|
|
7
|
+
DpkgTools::Package::Rails::BuildTasks.any_instance.stubs(:define_tasks)
|
|
8
|
+
DpkgTools::Package::Rails::BuildTasks.any_instance.stubs(:define_base_tasks)
|
|
9
|
+
|
|
10
|
+
result = DpkgTools::Package::Rails::BuildTasks.new do |t|
|
|
11
|
+
t.base_path = 'path'
|
|
12
|
+
end
|
|
13
|
+
result.base_path.should == 'path'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should raise an error if base_path hasn't been defined" do
|
|
17
|
+
DpkgTools::Package::Rails::BuildTasks.any_instance.stubs(:define_tasks)
|
|
18
|
+
DpkgTools::Package::Rails::BuildTasks.any_instance.stubs(:define_base_tasks)
|
|
19
|
+
|
|
20
|
+
lambda { DpkgTools::Package::Rails::BuildTasks.new }.should raise_error(ArgumentError)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should be able to return a properly instantiated Builder from create_builder" do
|
|
24
|
+
build_tasks = DpkgTools::Package::Rails::BuildTasks.new do |t|
|
|
25
|
+
t.base_path = 'path'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
DpkgTools::Package::Rails.expects(:create_builder).with('path').returns(:builder)
|
|
29
|
+
|
|
30
|
+
build_tasks.create_builder.should == :builder
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should be able to return a properly instantiated Setup from create_setup" do
|
|
34
|
+
build_tasks = DpkgTools::Package::Rails::BuildTasks.new do |t|
|
|
35
|
+
t.base_path = 'path'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
DpkgTools::Package::Rails.expects(:create_setup).with('path').returns(:setup)
|
|
39
|
+
|
|
40
|
+
build_tasks.create_setup.should == :setup
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe DpkgTools::Package::Rails::BuildTasks, "rake tasks" do
|
|
45
|
+
before(:each) do
|
|
46
|
+
@rake = Rake::Application.new
|
|
47
|
+
Rake.application = @rake
|
|
48
|
+
|
|
49
|
+
@build_tasks = DpkgTools::Package::Rails::BuildTasks.new do |t|
|
|
50
|
+
t.base_path = "base_path"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
after(:each) do
|
|
55
|
+
Rake.application = nil
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should properly call the DpkgTools::Package::Rails.create_builder from the task 'binary-arch'" do
|
|
59
|
+
mock_builder = mock('DpkgTools::Package::Rails::Builder')
|
|
60
|
+
mock_builder.expects(:binary_package)
|
|
61
|
+
@build_tasks.expects(:create_builder).returns(mock_builder)
|
|
62
|
+
@rake["binary-arch"].invoke
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should properly call the DpkgTools::Package::Rails.create_builder from the task 'binary-indep'" do
|
|
66
|
+
mock_builder = mock('DpkgTools::Package::Rails::Builder')
|
|
67
|
+
mock_builder.expects(:binary_package)
|
|
68
|
+
@build_tasks.expects(:create_builder).returns(mock_builder)
|
|
69
|
+
@rake["binary-indep"].invoke
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should be able to correctly generate the mongrel_cluster YAML config file" do
|
|
73
|
+
mock_setup = mock('DpkgTools::Package::Rails::Setup')
|
|
74
|
+
mock_setup.expects(:generate_mongrel_cluster_config)
|
|
75
|
+
@build_tasks.expects(:create_setup).returns(mock_setup)
|
|
76
|
+
@rake["dpkg:mongrel_cluster"].invoke
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DpkgTools::Package::Rails::Setup, ".from_path" do
|
|
4
|
+
it "should return the correct class from .data_class" do
|
|
5
|
+
DpkgTools::Package::Rails::Setup.data_class.should == DpkgTools::Package::Rails::Data
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should create a DpkgTools::Package::Rails::Data instance, and feed it to .new" do
|
|
9
|
+
DpkgTools::Package::Rails::Setup.stubs(:needs_bootstrapping?).returns(false)
|
|
10
|
+
DpkgTools::Package::Rails::Data.expects(:new).with('base_path').returns(:data)
|
|
11
|
+
DpkgTools::Package::Rails::Setup.expects(:new).with(:data, 'base_path').returns(:instance)
|
|
12
|
+
|
|
13
|
+
DpkgTools::Package::Rails::Setup.from_path('base_path').should == :instance
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe DpkgTools::Package::Rails::Setup, "bootstrapping" do
|
|
18
|
+
before(:each) do
|
|
19
|
+
DpkgTools::Package::Rails::Data.stubs(:resources_path).returns('/a/path/to/resources')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should be able to construct the target file path of a file for bootstrapping" do
|
|
23
|
+
DpkgTools::Package::Rails::Setup.bootstrap_file_path('base_path', 'deb.yml').
|
|
24
|
+
should == 'base_path/config/deb.yml'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should be able to report which files are needed for bootstrapping" do
|
|
28
|
+
DpkgTools::Package::Rails::Setup.bootstrap_files.should == ['deb.yml']
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe DpkgTools::Package::Rails::Setup, ".new" do
|
|
33
|
+
before(:each) do
|
|
34
|
+
@data = stub('stub DpkgTools::Package::Rails::Data', :name => 'name', :version => '1', :base_path => 'base_path')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should raise an error without any arguments" do
|
|
38
|
+
lambda { DpkgTools::Package::Rails::Setup.new }.should raise_error
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should require one argument" do
|
|
42
|
+
DpkgTools::Package::Rails::Setup.new(@data)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should result in @config being set to a DpkgTools::Package::Config instance" do
|
|
46
|
+
setup = DpkgTools::Package::Rails::Setup.new(@data)
|
|
47
|
+
setup.config.should be_an_instance_of(DpkgTools::Package::Config)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe DpkgTools::Package::Rails::Setup do
|
|
52
|
+
before(:each) do
|
|
53
|
+
@data = stub('stub DpkgTools::Package::Rails::Data', :name => 'name', :version => '1', :base_path => 'base_path',
|
|
54
|
+
:resources_path => '/a/path/to/resources',
|
|
55
|
+
:app_install_path => '/var/lib/name',
|
|
56
|
+
:pidfile_dir_path => '/var/run/name',
|
|
57
|
+
:mongrel_cluster_config_hash => {'port' => "8000",
|
|
58
|
+
'environment' => 'production',
|
|
59
|
+
'address' => '127.0.0.1',
|
|
60
|
+
'servers' => 3})
|
|
61
|
+
@data.stubs(:deployers_ssh_keys_dir).returns('deployers_ssh_keys')
|
|
62
|
+
@config = DpkgTools::Package::Config.new('name', '1', :base_path => 'base_path')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should be able to provide a list of the resource files to be copied across during setup" do
|
|
66
|
+
DpkgTools::Package::Rails::Setup.resource_file_names.
|
|
67
|
+
should == ['apache.conf.erb', 'logrotate.conf.erb', 'mongrel_cluster_init.erb', 'deploy.rb']
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it ".prepare_package should copy the conf templates and extra structures across" do
|
|
71
|
+
DpkgTools::Package::Rails::Setup.stubs(:resource_file_names).returns(['apache.conf.erb'])
|
|
72
|
+
DpkgTools::Package::Rails::Data.stubs(:resources_path).returns('/a/path/to/resources')
|
|
73
|
+
data = stub('stub DpkgTools::Package::Rails::Data', :name => 'name', :version => '1', :base_path => 'base_path',
|
|
74
|
+
:resources_path => '/a/path/to/resources')
|
|
75
|
+
data.stubs(:deployers_ssh_keys_dir).returns('deployers_ssh_keys')
|
|
76
|
+
config = DpkgTools::Package::Config.new('name', '1', :base_path => 'base_path')
|
|
77
|
+
DpkgTools::Package::Rails::Setup.expects(:bootstrap_file).with('base_path', 'apache.conf.erb')
|
|
78
|
+
|
|
79
|
+
DpkgTools::Package::Rails::Setup.expects(:create_dir_if_needed).with('deployers_ssh_keys')
|
|
80
|
+
|
|
81
|
+
DpkgTools::Package::Rails::Setup.expects(:sh).with('capify "base_path"')
|
|
82
|
+
DpkgTools::Package::Rails::Setup.expects(:generate_mongrel_cluster_config).with(@data, @config)
|
|
83
|
+
|
|
84
|
+
DpkgTools::Package::Rails::Setup.prepare_package(@data, @config)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should be able to back up and reset the resource files created by .prepare_package" do
|
|
88
|
+
DpkgTools::Package::Rails::Setup.stubs(:resource_file_names).returns(['apache.conf.erb'])
|
|
89
|
+
DpkgTools::Package::Rails::Setup.expects(:bootstrap_file).with('base_path', 'apache.conf.erb', :backup => true)
|
|
90
|
+
|
|
91
|
+
DpkgTools::Package::Rails::Setup.reset_package_resource_files(@data, @config)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should be able to generate the complete config/mongrel_cluster.yml hash" do
|
|
95
|
+
DpkgTools::Package::Rails::Setup.generate_mongrel_cluster_config_hash(@data, @config).
|
|
96
|
+
should == {'port' => "8000",
|
|
97
|
+
'environment' => 'production',
|
|
98
|
+
'address' => '127.0.0.1',
|
|
99
|
+
'servers' => 3,
|
|
100
|
+
'pid_file' => '/var/run/name/mongrel.pid',
|
|
101
|
+
'cwd' => '/var/lib/name/current',
|
|
102
|
+
'log_file' => 'log/mongrel.log',
|
|
103
|
+
'user' => 'name',
|
|
104
|
+
'group' => 'name'}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should be able to write the config/mongrel_cluster.yml file" do
|
|
108
|
+
conf_data = {'port' => '8000'}
|
|
109
|
+
conf_data.expects(:to_yaml).returns("---\nport: blah")
|
|
110
|
+
DpkgTools::Package::Rails::Setup.expects(:generate_mongrel_cluster_config_hash).with(@data, @config).returns(conf_data)
|
|
111
|
+
mock_file = mock('File')
|
|
112
|
+
mock_file.expects(:write).with("# Auto-generated by dpkg-tools, don't edit!\n# You can edit config/deb.yml and then regenerate this file\n# with rake dpkg:mongrel_cluster.\n\nport: blah")
|
|
113
|
+
File.expects(:open).with('base_path/config/mongrel_cluster.yml', 'w').yields(mock_file)
|
|
114
|
+
|
|
115
|
+
DpkgTools::Package::Rails::Setup.generate_mongrel_cluster_config(@data, @config)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe DpkgTools::Package::Rails::Setup, "instances" do
|
|
120
|
+
before(:each) do
|
|
121
|
+
@data = stub("stub DpkgTools::Package::Rails::Data", :name => 'rails-app-name', :version => '1.0.8',
|
|
122
|
+
:full_name => 'rails-app-name-1.0.8', :base_path => 'base_path')
|
|
123
|
+
@setup = DpkgTools::Package::Rails::Setup.new(@data)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should provide access to the correct options for making a new DpkgTools::Package::Config" do
|
|
127
|
+
@setup.config_options.should == {:base_path => 'base_path'}
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "should provide access to its Package::Rails::Data" do
|
|
131
|
+
@setup.data.should == @data
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "should be able to return the correct list of classes to build control files with" do
|
|
135
|
+
@setup.control_file_classes.should == DpkgTools::Package::Rails::ControlFiles.classes
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should properly invoke .prepare_package from #prepare_package" do
|
|
139
|
+
DpkgTools::Package::Rails::Setup.expects(:prepare_package).with(@setup.data, @setup.config)
|
|
140
|
+
@setup.prepare_package
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "should properly invoke .prepare_package from #prepare_package" do
|
|
144
|
+
DpkgTools::Package::Rails::Setup.expects(:generate_mongrel_cluster_config).with(@setup.data, @setup.config)
|
|
145
|
+
@setup.generate_mongrel_cluster_config
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should properly invoke .reset_package_resource_files from #reset_package_resource_files" do
|
|
149
|
+
DpkgTools::Package::Rails::Setup.expects(:reset_package_resource_files).with(@setup.data, @setup.config)
|
|
150
|
+
@setup.reset_package_resource_files
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DpkgTools::Package::Rails, ".create_builder" do
|
|
4
|
+
it "should instantiate a Package::Rails::Data and a Package::Rails::Builder and make 'em work" do
|
|
5
|
+
DpkgTools::Package::Rails::Builder.expects(:from_path).with('/a/path/to/rails-app').returns(:builder)
|
|
6
|
+
|
|
7
|
+
DpkgTools::Package::Rails.create_builder('/a/path/to/rails-app').should == :builder
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe DpkgTools::Package::Rails, ".setup_from_path" do
|
|
12
|
+
it "should be able to create package structure from a path to a gem file" do
|
|
13
|
+
mock_setup = mock('mock DpkgTools::Package::Rails::Setup')
|
|
14
|
+
DpkgTools::Package::Rails::Setup.expects(:from_path).with('/path/to/rails-app').returns(mock_setup)
|
|
15
|
+
mock_setup.expects(:create_structure)
|
|
16
|
+
|
|
17
|
+
DpkgTools::Package::Rails.setup_from_path('/path/to/rails-app')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe DpkgTools::Package::Rails, ".create_setup" do
|
|
22
|
+
it "should be able to create a Setup instance" do
|
|
23
|
+
DpkgTools::Package::Rails::Setup.expects(:from_path).with('/path/to/rails-app').returns(:setup)
|
|
24
|
+
|
|
25
|
+
DpkgTools::Package::Rails.create_setup('/path/to/rails-app').should == :setup
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DpkgTools::Package::BuildTasks, "task creation" do
|
|
4
|
+
it "should yield itself if a block is given to .new" do
|
|
5
|
+
DpkgTools::Package::BuildTasks.any_instance.stubs(:define_tasks)
|
|
6
|
+
|
|
7
|
+
yielded_result = nil
|
|
8
|
+
result = DpkgTools::Package::BuildTasks.new do |t|
|
|
9
|
+
yielded_result = t
|
|
10
|
+
end
|
|
11
|
+
result.should === yielded_result
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should call the necessary methods to set up the base and subclass Rake tasks on init" do
|
|
15
|
+
DpkgTools::Package::BuildTasks.any_instance.expects(:check_setup)
|
|
16
|
+
DpkgTools::Package::BuildTasks.any_instance.expects(:define_tasks)
|
|
17
|
+
DpkgTools::Package::BuildTasks.any_instance.expects(:define_base_tasks)
|
|
18
|
+
|
|
19
|
+
DpkgTools::Package::BuildTasks.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe DpkgTools::Package::BuildTasks, "instances" do
|
|
24
|
+
before(:each) do
|
|
25
|
+
@rake = Rake::Application.new
|
|
26
|
+
Rake.application = @rake
|
|
27
|
+
|
|
28
|
+
@build_tasks = DpkgTools::Package::BuildTasks.new
|
|
29
|
+
@mock_builder = stub('DpkgTools::Package::Builder')
|
|
30
|
+
@build_tasks.stubs(:create_builder).returns(@mock_builder)
|
|
31
|
+
@mock_setup = stub('DpkgTools::Package::Setup')
|
|
32
|
+
@build_tasks.stubs(:create_setup).returns(@mock_setup)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
after(:each) do
|
|
36
|
+
Rake.application = nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should define the needed base tasks for debian/rules emulation" do
|
|
40
|
+
@build_tasks.stubs(:task).with(anything)
|
|
41
|
+
@build_tasks.expects(:task).with(:clean)
|
|
42
|
+
@build_tasks.expects(:task).with('build-arch')
|
|
43
|
+
@build_tasks.expects(:task).with('build-indep')
|
|
44
|
+
@build_tasks.expects(:task).with(:build)
|
|
45
|
+
@build_tasks.expects(:task).with("binary-arch")
|
|
46
|
+
@build_tasks.expects(:task).with("binary-indep")
|
|
47
|
+
@build_tasks.expects(:task).with(:binary)
|
|
48
|
+
|
|
49
|
+
@build_tasks.define_base_tasks
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should invoke binary-arch from :binary when the builder says it's an arch package" do
|
|
53
|
+
@mock_builder.expects(:architecture_independent?).returns(false)
|
|
54
|
+
|
|
55
|
+
@rake['binary-arch'].expects(:invoke)
|
|
56
|
+
@rake['binary'].invoke
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should invoke binary-indep from :binary when the builder says it's an arch-indep package" do
|
|
60
|
+
@mock_builder.expects(:architecture_independent?).returns(true)
|
|
61
|
+
|
|
62
|
+
@rake['binary-indep'].expects(:invoke)
|
|
63
|
+
@rake['binary'].invoke
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should invoke build-arch from :build when the builder says it's an arch package" do
|
|
67
|
+
@mock_builder.expects(:architecture_independent?).returns(false)
|
|
68
|
+
|
|
69
|
+
@rake['build-arch'].expects(:invoke)
|
|
70
|
+
@rake['build'].invoke
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should invoke build-indep from :build when the builder says it's an arch-indep package" do
|
|
74
|
+
@mock_builder.expects(:architecture_independent?).returns(true)
|
|
75
|
+
|
|
76
|
+
@rake['build-indep'].expects(:invoke)
|
|
77
|
+
@rake['build'].invoke
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should call the correct reset methods on a setup instance from dpkg:setup:reset" do
|
|
81
|
+
@mock_setup.expects(:reset_maintainer_script_templates)
|
|
82
|
+
@mock_setup.expects(:reset_control_files)
|
|
83
|
+
@mock_setup.expects(:reset_package_resource_files)
|
|
84
|
+
|
|
85
|
+
@rake['dpkg:setup:reset'].invoke
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe DpkgTools::Package::Setup do
|
|
4
|
+
describe "bootstrapping" do
|
|
5
|
+
it "should report that it does NOT need bootstrapping if deb.yml is present" do
|
|
6
|
+
DpkgTools::Package::Setup.expects(:bootstrap_file_path).with('base_path', 'deb.yml').returns('base_path/deb.yml')
|
|
7
|
+
DpkgTools::Package::Setup.expects(:bootstrap_files).returns('deb.yml')
|
|
8
|
+
File.expects(:file?).with('base_path/deb.yml').returns(true)
|
|
9
|
+
|
|
10
|
+
DpkgTools::Package::Setup.needs_bootstrapping?('base_path').should be_false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should report that it does need bootstrapping if deb.yml is NOT present" do
|
|
14
|
+
DpkgTools::Package::Setup.expects(:bootstrap_file_path).with('base_path', 'deb.yml').returns('base_path/deb.yml')
|
|
15
|
+
DpkgTools::Package::Setup.expects(:bootstrap_files).returns('deb.yml')
|
|
16
|
+
File.expects(:file?).with('base_path/deb.yml').returns(false)
|
|
17
|
+
|
|
18
|
+
DpkgTools::Package::Setup.needs_bootstrapping?('base_path').should be_true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should respond to bootstrap" do
|
|
22
|
+
DpkgTools::Package::Setup.should respond_to(:bootstrap)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should provide a for-overriding bootstrap_files method" do
|
|
26
|
+
DpkgTools::Package::Setup.bootstrap_files.should == ['deb.yml']
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should provide a for-overriding bootstrap_file_path method" do
|
|
30
|
+
DpkgTools::Package::Setup.bootstrap_file_path('base_path', 'deb.yml').should == 'base_path/deb.yml'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe ".bootstrap_file support methods" do
|
|
34
|
+
it "should be able to report that a target file already exists" do
|
|
35
|
+
File.stubs(:file?).with('target/file/path').returns(true)
|
|
36
|
+
DpkgTools::Package::Setup.file_exists?('target/file/path').should be_true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should be able to report that a target file does not already exist" do
|
|
40
|
+
File.stubs(:file?).with('target/file/path').returns(false)
|
|
41
|
+
DpkgTools::Package::Setup.file_exists?('target/file/path').should be_false
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should be able to move a target file out of the way by adding a .bak suffix" do
|
|
45
|
+
FileUtils.expects(:mv).with('target/file/path', 'target/file/path.bak')
|
|
46
|
+
DpkgTools::Package::Setup.move_original_aside('target/file/path')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should be able to copy a bootstrap file across to a target file path" do
|
|
50
|
+
FileUtils.expects(:cp).with('source/file/path', 'target/file/path.bak')
|
|
51
|
+
DpkgTools::Package::Setup.copy_bootstrap_file_across('source/file/path', 'target/file/path.bak')
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe ".bootstrap_file" do
|
|
56
|
+
before(:each) do
|
|
57
|
+
mock_data_class = mock('DpkgTools::Package::Data')
|
|
58
|
+
mock_data_class.stubs(:resources_path).returns('/a/path/to/resources')
|
|
59
|
+
DpkgTools::Package::Setup.stubs(:data_class).returns(mock_data_class)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should be able to create a needed files" do
|
|
63
|
+
DpkgTools::Package::Setup.expects(:bootstrap_file_path).with('base_path', 'deb.yml').returns('bootstrap_file_path')
|
|
64
|
+
File.stubs(:file?).with('bootstrap_file_path').returns(false)
|
|
65
|
+
|
|
66
|
+
FileUtils.expects(:cp).with('/a/path/to/resources/deb.yml', 'bootstrap_file_path')
|
|
67
|
+
|
|
68
|
+
DpkgTools::Package::Setup.bootstrap_file('base_path', 'deb.yml')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should not, by default, attempt to create a file that's already there..." do
|
|
72
|
+
DpkgTools::Package::Setup.expects(:bootstrap_file_path).with('base_path', 'deb.yml').returns('bootstrap_file_path')
|
|
73
|
+
File.stubs(:file?).with('bootstrap_file_path').returns(true)
|
|
74
|
+
|
|
75
|
+
FileUtils.expects(:cp).never
|
|
76
|
+
|
|
77
|
+
DpkgTools::Package::Setup.bootstrap_file('base_path', 'deb.yml')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should be able to backup and replace a file that's already there..." do
|
|
81
|
+
DpkgTools::Package::Setup.expects(:bootstrap_file_path).with('base_path', 'deb.yml').returns('bootstrap_file_path')
|
|
82
|
+
File.stubs(:file?).with('bootstrap_file_path').returns(true)
|
|
83
|
+
|
|
84
|
+
FileUtils.expects(:mv).with('bootstrap_file_path', 'bootstrap_file_path.bak')
|
|
85
|
+
FileUtils.expects(:cp).with('/a/path/to/resources/deb.yml', 'bootstrap_file_path')
|
|
86
|
+
|
|
87
|
+
DpkgTools::Package::Setup.bootstrap_file('base_path', 'deb.yml', :backup => true)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it ".bootstrap should copy across the files correctly" do
|
|
92
|
+
DpkgTools::Package::Setup.stubs(:bootstrap_files).returns('deb.yml')
|
|
93
|
+
DpkgTools::Package::Setup.expects(:bootstrap_file).with('base_path', 'deb.yml')
|
|
94
|
+
|
|
95
|
+
DpkgTools::Package::Setup.bootstrap('base_path')
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe ".from_path support methods" do
|
|
100
|
+
it "should provide a for-overriding method to return the Package::Data subclass to use" do
|
|
101
|
+
DpkgTools::Package::Setup.data_class.should == DpkgTools::Package::Data
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe ".from_path" do
|
|
106
|
+
it "should create a DpkgTools::Package::Data instance, and feed it to .new" do
|
|
107
|
+
DpkgTools::Package::Setup.expects(:needs_bootstrapping?).with('base_path').returns(false)
|
|
108
|
+
DpkgTools::Package::Data.expects(:new).with('base_path').returns(:data)
|
|
109
|
+
DpkgTools::Package::Setup.expects(:new).with(:data, 'base_path').returns(:instance)
|
|
110
|
+
|
|
111
|
+
DpkgTools::Package::Setup.from_path('base_path').should == :instance
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should be able to bootstrap the rails app if needed" do
|
|
115
|
+
DpkgTools::Package::Setup.expects(:needs_bootstrapping?).with('base_path').returns(true)
|
|
116
|
+
DpkgTools::Package::Setup.expects(:bootstrap).with('base_path')
|
|
117
|
+
|
|
118
|
+
DpkgTools::Package::Data.expects(:new).with('base_path').returns(:data)
|
|
119
|
+
DpkgTools::Package::Setup.expects(:new).with(:data, 'base_path').returns(:instance)
|
|
120
|
+
|
|
121
|
+
DpkgTools::Package::Setup.from_path('base_path').should == :instance
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe DpkgTools::Package::Setup, "#create_structure" do
|
|
127
|
+
before(:each) do
|
|
128
|
+
@data = stub("stub DpkgTools::Package::Data", :name => 'hello', :version => '1')
|
|
129
|
+
DpkgTools::Package::Config.root_path = '/a/path/to/package/dirs'
|
|
130
|
+
@config = DpkgTools::Package::Config.new('hello', '1', {})
|
|
131
|
+
DpkgTools::Package::Config.expects(:new).with('hello', '1', {}).returns(@config)
|
|
132
|
+
|
|
133
|
+
@setup = DpkgTools::Package::Setup.new(@data, :base_path => 'base_path')
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "should be able to provide the options needed for DpkgTools::Package::Config" do
|
|
137
|
+
@setup.config_options.should == {}
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "should be able to perform all the steps needed to create the package structure" do
|
|
141
|
+
DpkgTools::Package.expects(:check_package_dir).with(@config)
|
|
142
|
+
|
|
143
|
+
@setup.expects(:prepare_package)
|
|
144
|
+
@setup.expects(:write_control_files)
|
|
145
|
+
@setup.expects(:copy_maintainer_script_templates)
|
|
146
|
+
|
|
147
|
+
@setup.create_structure
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should be able to write out the control files" do
|
|
151
|
+
mock_control_file = mock('DpkgTools::Package::ControlFile::* instance')
|
|
152
|
+
mock_control_file.expects(:write)
|
|
153
|
+
|
|
154
|
+
mock_control_file_class = mock('DpkgTools::Package::ControlFile::* class')
|
|
155
|
+
mock_control_file_class.expects(:new).with(@data, @config).returns(mock_control_file)
|
|
156
|
+
|
|
157
|
+
@setup.expects(:control_file_classes).returns([mock_control_file_class])
|
|
158
|
+
|
|
159
|
+
@setup.write_control_files
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should be able to return a list of maintainer script template names" do
|
|
163
|
+
@setup.maintainer_script_template_names.should == ['postinst.erb', 'postrm.erb', 'preinst.erb', 'prerm.erb']
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "should be able to copy across any of the maintainer script templates present in the resources dir" do
|
|
167
|
+
@data.stubs(:resources_path).returns('/a/path/to/resources')
|
|
168
|
+
File.expects(:file?).with('/a/path/to/resources/postinst.erb').returns(true)
|
|
169
|
+
File.expects(:file?).with('/a/path/to/resources/postrm.erb').returns(false)
|
|
170
|
+
File.expects(:file?).with('/a/path/to/resources/preinst.erb').returns(false)
|
|
171
|
+
File.expects(:file?).with('/a/path/to/resources/prerm.erb').returns(true)
|
|
172
|
+
|
|
173
|
+
FileUtils.expects(:cp).with('/a/path/to/resources/postinst.erb', '/a/path/to/package/dirs/hello-1/debian/postinst.erb')
|
|
174
|
+
FileUtils.expects(:cp).with('/a/path/to/resources/prerm.erb', '/a/path/to/package/dirs/hello-1/debian/prerm.erb')
|
|
175
|
+
|
|
176
|
+
@setup.copy_maintainer_script_templates
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it "should provide a no-op version of prepare_package" do
|
|
180
|
+
@setup.should respond_to(:prepare_package)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe DpkgTools::Package::Setup, "regenerating control files and maintainer scripts" do
|
|
185
|
+
before(:each) do
|
|
186
|
+
@data = stub("stub DpkgTools::Package::Data", :name => 'hello', :version => '1')
|
|
187
|
+
DpkgTools::Package::Config.root_path = '/a/path/to/package/dirs'
|
|
188
|
+
@config = DpkgTools::Package::Config.new('hello', '1', {})
|
|
189
|
+
DpkgTools::Package::Config.expects(:new).with('hello', '1', {}).returns(@config)
|
|
190
|
+
|
|
191
|
+
@setup = DpkgTools::Package::Setup.new(@data, :base_path => 'base_path')
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "should be able to regenerate the control files, saving the existing files to name.bak" do
|
|
195
|
+
mock_control_file_class = mock('DpkgTools::Package::ControlFile')
|
|
196
|
+
mock_control_file_class.expects(:new).with(@data, @config).returns(mock_control_file_class)
|
|
197
|
+
mock_control_file_class.stubs(:needs_reset?).returns(true)
|
|
198
|
+
mock_control_file_class.stubs(:file_path).returns('/a/path/to/control_file')
|
|
199
|
+
@setup.stubs(:control_file_classes).returns([mock_control_file_class])
|
|
200
|
+
|
|
201
|
+
mock_control_file_class.expects(:write)
|
|
202
|
+
File.expects(:exist?).with('/a/path/to/control_file').returns(true)
|
|
203
|
+
FileUtils.expects(:mv).with('/a/path/to/control_file', '/a/path/to/control_file.bak')
|
|
204
|
+
@setup.reset_control_files
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
it "should not bother trying to back up a control file if the file is missing" do
|
|
208
|
+
mock_control_file_class = mock('DpkgTools::Package::ControlFile')
|
|
209
|
+
mock_control_file_class.expects(:new).with(@data, @config).returns(mock_control_file_class)
|
|
210
|
+
mock_control_file_class.stubs(:needs_reset?).returns(true)
|
|
211
|
+
mock_control_file_class.stubs(:file_path).returns('/a/path/to/control_file')
|
|
212
|
+
@setup.stubs(:control_file_classes).returns([mock_control_file_class])
|
|
213
|
+
|
|
214
|
+
File.expects(:exist?).with('/a/path/to/control_file').returns(false)
|
|
215
|
+
mock_control_file_class.expects(:write)
|
|
216
|
+
@setup.reset_control_files
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "should not try to regenerate a control file which doesn't need it" do
|
|
220
|
+
mock_control_file_class = mock('DpkgTools::Package::ControlFile')
|
|
221
|
+
mock_control_file_class.expects(:new).with(@data, @config).returns(mock_control_file_class)
|
|
222
|
+
mock_control_file_class.stubs(:needs_reset?).returns(false)
|
|
223
|
+
mock_control_file_class.stubs(:file_path).returns('/a/path/to/control_file')
|
|
224
|
+
@setup.stubs(:control_file_classes).returns([mock_control_file_class])
|
|
225
|
+
|
|
226
|
+
mock_control_file_class.expects(:write).never
|
|
227
|
+
@setup.reset_control_files
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "should be able to regenerate maintainer scripts, as needed" do
|
|
231
|
+
@data.stubs(:resources_path).returns('/a/path/to/resources')
|
|
232
|
+
File.expects(:file?).with('/a/path/to/resources/postinst.erb').returns(true)
|
|
233
|
+
File.expects(:file?).with('/a/path/to/resources/postrm.erb').returns(false)
|
|
234
|
+
File.expects(:file?).with('/a/path/to/resources/preinst.erb').returns(false)
|
|
235
|
+
File.expects(:file?).with('/a/path/to/resources/prerm.erb').returns(true)
|
|
236
|
+
|
|
237
|
+
FileUtils.expects(:identical?).with('/a/path/to/resources/prerm.erb',
|
|
238
|
+
'/a/path/to/package/dirs/hello-1/debian/prerm.erb').returns(true)
|
|
239
|
+
FileUtils.expects(:identical?).with('/a/path/to/resources/postinst.erb',
|
|
240
|
+
'/a/path/to/package/dirs/hello-1/debian/postinst.erb').returns(false)
|
|
241
|
+
FileUtils.expects(:mv).with('/a/path/to/package/dirs/hello-1/debian/postinst.erb',
|
|
242
|
+
'/a/path/to/package/dirs/hello-1/debian/postinst.erb.bak')
|
|
243
|
+
FileUtils.expects(:cp).with('/a/path/to/resources/postinst.erb', '/a/path/to/package/dirs/hello-1/debian/postinst.erb')
|
|
244
|
+
|
|
245
|
+
@setup.reset_maintainer_script_templates
|
|
246
|
+
end
|
|
247
|
+
end
|