polisher 0.4 → 0.5.1
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.
- checksums.yaml +7 -0
- data/LICENSE +20 -661
- data/README.md +39 -0
- data/Rakefile +11 -88
- data/bin/binary_gem_resolver.rb +95 -0
- data/bin/gem_dependency_checker.rb +165 -0
- data/bin/git_gem_updater.rb +86 -0
- data/bin/ruby_rpm_spec_updater.rb +29 -0
- data/lib/polisher.rb +19 -0
- data/lib/polisher/apt.rb +12 -0
- data/lib/polisher/bodhi.rb +21 -0
- data/lib/polisher/bugzilla.rb +9 -0
- data/lib/polisher/core.rb +33 -0
- data/lib/polisher/errata.rb +43 -0
- data/lib/polisher/fedora.rb +43 -0
- data/lib/polisher/gem.rb +155 -0
- data/lib/polisher/gemfile.rb +72 -0
- data/lib/polisher/gemspec.rb +32 -0
- data/lib/polisher/git.rb +135 -0
- data/lib/polisher/koji.rb +54 -0
- data/lib/polisher/rhn.rb +14 -0
- data/lib/polisher/rpmspec.rb +254 -0
- data/lib/polisher/upstream.rb +29 -0
- data/lib/polisher/vendor.rb +9 -0
- data/lib/polisher/version_checker.rb +100 -0
- data/lib/polisher/yum.rb +28 -0
- data/spec/core_spec.rb +64 -0
- data/spec/fedora_spec.rb +14 -0
- data/spec/gem_spec.rb +82 -0
- data/spec/gemfile_spec.rb +45 -0
- data/spec/git_spec.rb +74 -0
- data/spec/rpmspec_spec.rb +105 -0
- data/spec/spec_helper.rb +50 -37
- data/spec/upstream_spec.rb +39 -0
- metadata +173 -179
- data/COPYING +0 -8
- data/README.rdoc +0 -105
- data/TODO +0 -7
- data/bin/server +0 -4
- data/config.ru +0 -25
- data/config/database.yml +0 -13
- data/config/polisher.yml +0 -5
- data/db/connection.rb +0 -52
- data/db/migrations/001_create_projects.rb +0 -23
- data/db/migrations/002_create_sources.rb +0 -25
- data/db/migrations/003_create_project_source_versions.rb +0 -28
- data/db/migrations/004_create_events.rb +0 -27
- data/db/migrations/005_create_project_dependencies.rb +0 -28
- data/db/models/event.rb +0 -87
- data/db/models/project.rb +0 -110
- data/db/models/project_dependency.rb +0 -27
- data/db/models/project_source_version.rb +0 -31
- data/db/models/source.rb +0 -101
- data/lib/common.rb +0 -71
- data/lib/dsl.rb +0 -292
- data/lib/event_handlers.rb +0 -166
- data/lib/gem_adapter.rb +0 -94
- data/lib/sinatra/url_for.rb +0 -40
- data/polisher.rb +0 -372
- data/public/stylesheets/style.css +0 -67
- data/spec/common_spec.rb +0 -28
- data/spec/dsl_spec.rb +0 -357
- data/spec/event_handlers_spec.rb +0 -300
- data/spec/gem_adapter_spec.rb +0 -89
- data/spec/models_spec.rb +0 -721
- data/spec/polisher_spec.rb +0 -573
- data/views/layout.haml +0 -22
- data/views/projects/index.haml +0 -42
- data/views/projects/index.html.haml +0 -38
- data/views/result.haml +0 -9
- data/views/sources/index.haml +0 -24
- data/views/sources/index.html.haml +0 -26
data/spec/event_handlers_spec.rb
DELETED
@@ -1,300 +0,0 @@
|
|
1
|
-
# ruby gem polisher event handlers spec
|
2
|
-
#
|
3
|
-
# Copyright (C) 2010 Red Hat, Inc.
|
4
|
-
# Written by Mohammed Morsi <mmorsi@redhat.com>
|
5
|
-
#
|
6
|
-
# This program is free software, you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU Affero General Public License
|
8
|
-
# as published by the Free Software Foundation, either version 3
|
9
|
-
# of the License, or (at your option) any later version.
|
10
|
-
#
|
11
|
-
# You should have received a copy of the the GNU Affero
|
12
|
-
# General Public License, along with Motel. If not, see
|
13
|
-
# <http://www.gnu.org/licenses/>
|
14
|
-
|
15
|
-
require 'fileutils'
|
16
|
-
|
17
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
18
|
-
|
19
|
-
include EventHandlers
|
20
|
-
|
21
|
-
describe "EventHandlers" do
|
22
|
-
|
23
|
-
before(:all) do
|
24
|
-
@gem = Project.create! :name => 'rubygem-polisher'
|
25
|
-
@gem.primary_source = Source.new :name => 'polisher', :source_type => 'gem', :uri => 'http://rubygems.org/gems/polisher-%{version}.gem'
|
26
|
-
@gem_event0 = Event.create! :project => @gem, :process => 'download_sources'
|
27
|
-
@gem_event1 = Event.create! :project => @gem, :process => 'create_rpm_package', :process_options => "mock=fedora-12-x86_64"
|
28
|
-
|
29
|
-
@gem_event2 = Event.create! :project => @gem, :process => 'create_rpm_package',
|
30
|
-
:process_options => "spec=#{ARTIFACTS_DIR}/templates/polisher.spec.tpl;mock=fedora-12-x86_64"
|
31
|
-
|
32
|
-
@gem_event3 = Event.create! :project => @gem, :process => 'update_repo', :process_options => "#{ARTIFACTS_DIR}/repos/fedora-ruby"
|
33
|
-
|
34
|
-
@project = Project.create :name => 'ruby-activerecord'
|
35
|
-
@project.sources << Source.new(:name => 'activerecord', :source_type => 'file',
|
36
|
-
:uri => 'http://rubyforge.org/frs/download.php/%{level}/activerecord-%{version}.tgz')
|
37
|
-
|
38
|
-
@project_event0 = Event.create! :project => @project, :process => 'download_sources', :process_options => "level=28874"
|
39
|
-
@project_event1 = Event.create! :project => @project, :process => 'create_rpm_package',
|
40
|
-
:process_options => "spec=#{ARTIFACTS_DIR}/templates/polisher-projects.spec.tpl;mock=fedora-12-x86_64"
|
41
|
-
|
42
|
-
@project_event2 = Event.create! :project => @project, :process => 'update_repo', :process_options => "#{ARTIFACTS_DIR}/repos/fedora-ruby"
|
43
|
-
end
|
44
|
-
|
45
|
-
before(:each) do
|
46
|
-
FileUtils.rm_rf(ARTIFACTS_DIR) if File.directory? ARTIFACTS_DIR
|
47
|
-
FileUtils.mkdir_p(ARTIFACTS_DIR + '/repos')
|
48
|
-
FileUtils.mkdir_p(ARTIFACTS_DIR + '/SOURCES')
|
49
|
-
FileUtils.mkdir_p(ARTIFACTS_DIR + '/SPECS')
|
50
|
-
FileUtils.mkdir_p(ARTIFACTS_DIR + '/templates')
|
51
|
-
|
52
|
-
File.write(ARTIFACTS_DIR + '/templates/polisher.spec.tpl', POLISHER_GEM2RPM_TEST_TEMPLATE)
|
53
|
-
File.write(ARTIFACTS_DIR + '/templates/polisher-projects.spec.tpl', POLISHER_ERB_TEST_TEMPLATE)
|
54
|
-
end
|
55
|
-
|
56
|
-
after(:each) do
|
57
|
-
FileUtils.rm_rf(ARTIFACTS_DIR) if File.directory? ARTIFACTS_DIR
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should download sources" do
|
61
|
-
download_sources(@gem_event0, "0.3")
|
62
|
-
File.exists?(ARTIFACTS_DIR + '/SOURCES/polisher-0.3.gem').should == true
|
63
|
-
|
64
|
-
download_sources(@project_event0, "2.0.1")
|
65
|
-
File.exists?(ARTIFACTS_DIR + '/SOURCES/activerecord-2.0.1.tgz').should == true
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should correctly create a gem based package" do
|
69
|
-
download_sources(@gem_event0, "0.3")
|
70
|
-
create_rpm_package(@gem_event1, "0.3")
|
71
|
-
File.exists?(ARTIFACTS_DIR + '/SPECS/rubygem-polisher.spec').should == true
|
72
|
-
File.exists?(ARTIFACTS_DIR + "/SRPMS/rubygem-polisher-0.3-1.fc11.src.rpm").should == true
|
73
|
-
File.exists?(ARTIFACTS_DIR + "/RPMS/noarch/rubygem-polisher-0.3-1.fc12.noarch.rpm").should == true
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should correctly create a gem based package using template" do
|
77
|
-
download_sources(@gem_event0, "0.3")
|
78
|
-
create_rpm_package(@gem_event2, '0.3')
|
79
|
-
File.exists?(ARTIFACTS_DIR + '/SPECS/rubygem-polisher.spec').should == true
|
80
|
-
File.read_all(ARTIFACTS_DIR + '/SPECS/rubygem-polisher.spec').should =~ /.*by polisher.*/
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should correctly create an upstream based project package" do
|
84
|
-
download_sources(@project_event0, "2.0.1")
|
85
|
-
create_rpm_package(@project_event1, "2.0.1", :release => 3)
|
86
|
-
|
87
|
-
File.exists?(ARTIFACTS_DIR + '/SPECS/ruby-activerecord.spec').should == true
|
88
|
-
File.exists?(ARTIFACTS_DIR + "/SRPMS/ruby-activerecord-2.0.1-3.fc11.src.rpm").should == true
|
89
|
-
File.exists?(ARTIFACTS_DIR + "/RPMS/noarch/ruby-activerecord-2.0.1-3.fc12.noarch.rpm").should == true
|
90
|
-
File.exists?(ARTIFACTS_DIR + "/RPMS/noarch/ruby-activerecord-subpkg-2.0.1-3.fc12.noarch.rpm").should == true
|
91
|
-
File.exists?(ARTIFACTS_DIR + "/RPMS/noarch/another-subpkg-2.0.1-3.fc12.noarch.rpm").should == true
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should correctly update repository" do
|
95
|
-
download_sources(@gem_event0, "0.3")
|
96
|
-
create_rpm_package(@gem_event1, '0.3')
|
97
|
-
update_yum_repo(@gem_event3, '0.3')
|
98
|
-
|
99
|
-
template = ARTIFACTS_DIR + '/templates/polisher-projects.spec.tpl'
|
100
|
-
File.write(template, POLISHER_ERB_TEST_TEMPLATE)
|
101
|
-
download_sources(@project_event0, "2.0.1")
|
102
|
-
create_rpm_package(@project_event1, "2.0.1", :release => 3)
|
103
|
-
update_yum_repo(@project_event2, '2.0')
|
104
|
-
|
105
|
-
File.directory?(ARTIFACTS_DIR + '/repos/fedora-ruby/noarch').should == true
|
106
|
-
File.directory?(ARTIFACTS_DIR + '/repos/fedora-ruby/repodata').should == true
|
107
|
-
File.exists?(ARTIFACTS_DIR + "/repos/fedora-ruby/noarch/rubygem-polisher-0.3-1.fc12.noarch.rpm").should == true
|
108
|
-
File.exists?(ARTIFACTS_DIR + "/repos/fedora-ruby/noarch/ruby-activerecord-2.0.1-3.fc12.noarch.rpm").should == true
|
109
|
-
File.exists?(ARTIFACTS_DIR + "/repos/fedora-ruby/noarch/ruby-activerecord-subpkg-2.0.1-3.fc12.noarch.rpm").should == true
|
110
|
-
File.exists?(ARTIFACTS_DIR + "/repos/fedora-ruby/noarch/another-subpkg-2.0.1-3.fc12.noarch.rpm").should == true
|
111
|
-
File.exists?(ARTIFACTS_DIR + '/repos/fedora-ruby/repodata/repomd.xml').should == true
|
112
|
-
File.exists?(ARTIFACTS_DIR + '/repos/fedora-ruby/repodata/primary.xml.gz').should == true
|
113
|
-
File.exists?(ARTIFACTS_DIR + '/repos/fedora-ruby/repodata/other.xml.gz').should == true
|
114
|
-
File.exists?(ARTIFACTS_DIR + '/repos/fedora-ruby/repodata/filelists.xml.gz').should == true
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
POLISHER_GEM2RPM_TEST_TEMPLATE =
|
120
|
-
%q{# Generated from <%= File::basename(format.gem_path) %> by polisher -*- rpm-spec -*-
|
121
|
-
%define ruby_sitelib %(ruby -rrbconfig -e "puts Config::CONFIG['sitelibdir']")
|
122
|
-
%define gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null)
|
123
|
-
%define gemname <%= spec.name %>
|
124
|
-
%define geminstdir %{gemdir}/gems/%{gemname}-%{version}
|
125
|
-
|
126
|
-
Summary: <%= spec.summary.gsub(/\.$/, "") %>
|
127
|
-
Name: rubygem-%{gemname}
|
128
|
-
Version: <%= spec.version %>
|
129
|
-
Release: 1%{?dist}
|
130
|
-
Group: Development/Languages
|
131
|
-
License: GPLv2+ or Ruby
|
132
|
-
URL: <%= spec.homepage %>
|
133
|
-
Source0: <%= download_path %>%{gemname}-%{version}.gem
|
134
|
-
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
135
|
-
Requires: rubygems
|
136
|
-
<% for d in spec.dependencies %>
|
137
|
-
<% for req in d.version_requirements.to_rpm %>
|
138
|
-
Requires: rubygem(<%= d.name %>) <%= req %>
|
139
|
-
<% end %>
|
140
|
-
<% end %>
|
141
|
-
BuildRequires: rubygems
|
142
|
-
<% if spec.extensions.empty? %>
|
143
|
-
BuildArch: noarch
|
144
|
-
<% end %>
|
145
|
-
Provides: rubygem(%{gemname}) = %{version}
|
146
|
-
|
147
|
-
%description
|
148
|
-
<%= spec.description.to_s.chomp.word_wrap(78) + "\n" %>
|
149
|
-
|
150
|
-
<% if nongem %>
|
151
|
-
%package -n ruby-%{gemname}
|
152
|
-
Summary: <%= spec.summary.gsub(/\.$/, "") %>
|
153
|
-
Group: Development/Languages
|
154
|
-
Requires: rubygem(%{gemname}) = %{version}
|
155
|
-
<% spec.files.select{ |f| spec.require_paths.include?(File::dirname(f)) }.reject { |f| f =~ /\.rb$/ }.collect { |f| File::basename(f) }.each do |p| %>
|
156
|
-
Provides: ruby(<%= p %>) = %{version}
|
157
|
-
<% end %>
|
158
|
-
%description -n ruby-%{gemname}
|
159
|
-
<%= spec.description.to_s.chomp.word_wrap(78) + "\n" %>
|
160
|
-
<% end # if nongem %>
|
161
|
-
|
162
|
-
%prep
|
163
|
-
|
164
|
-
%build
|
165
|
-
|
166
|
-
%install
|
167
|
-
rm -rf %{buildroot}
|
168
|
-
mkdir -p %{buildroot}%{gemdir}
|
169
|
-
<% rdoc_opt = spec.has_rdoc ? "--rdoc " : "" %>
|
170
|
-
gem install --local --install-dir %{buildroot}%{gemdir} \
|
171
|
-
--force <%= rdoc_opt %>%{SOURCE0}
|
172
|
-
<% unless spec.executables.empty? %>
|
173
|
-
mkdir -p %{buildroot}/%{_bindir}
|
174
|
-
mv %{buildroot}%{gemdir}/bin/* %{buildroot}/%{_bindir}
|
175
|
-
rmdir %{buildroot}%{gemdir}/bin
|
176
|
-
find %{buildroot}%{geminstdir}/bin -type f | xargs chmod a+x
|
177
|
-
<% end %>
|
178
|
-
<% if nongem %>
|
179
|
-
mkdir -p %{buildroot}%{ruby_sitelib}
|
180
|
-
<% spec.files.select{ |f| spec.require_paths.include?(File::dirname(f)) }.each do |p| %>
|
181
|
-
ln -s %{gemdir}/gems/%{gemname}-%{version}/<%= p %> %{buildroot}%{ruby_sitelib}
|
182
|
-
<% end %>
|
183
|
-
<% end # if nongem %>
|
184
|
-
|
185
|
-
%clean
|
186
|
-
rm -rf %{buildroot}
|
187
|
-
|
188
|
-
%files
|
189
|
-
%defattr(-, root, root, -)
|
190
|
-
<% for f in spec.executables %>
|
191
|
-
%{_bindir}/<%= f %>
|
192
|
-
<% end %>
|
193
|
-
%{gemdir}/gems/%{gemname}-%{version}/
|
194
|
-
<% if spec.has_rdoc %>
|
195
|
-
%doc %{gemdir}/doc/%{gemname}-%{version}
|
196
|
-
<% end %>
|
197
|
-
<% for f in spec.extra_rdoc_files %>
|
198
|
-
%doc %{geminstdir}/<%= f %>
|
199
|
-
<% end %>
|
200
|
-
%{gemdir}/cache/%{gemname}-%{version}.gem
|
201
|
-
%{gemdir}/specifications/%{gemname}-%{version}.gemspec
|
202
|
-
|
203
|
-
<% if nongem %>
|
204
|
-
%files -n ruby-%{gemname}
|
205
|
-
%defattr(-, root, root, -)
|
206
|
-
%{ruby_sitelib}/*
|
207
|
-
<% end # if nongem %>
|
208
|
-
|
209
|
-
%changelog
|
210
|
-
* <%= Time.now.strftime("%a %b %d %Y") %> <%= packager %> - <%= spec.version %>-1
|
211
|
-
- Initial package
|
212
|
-
}
|
213
|
-
|
214
|
-
# copied w/ changes from http://cvs.fedoraproject.org/viewvc/rpms/ruby-activerecord/F-13/ruby-activerecord.spec?revision=1.6&view=co
|
215
|
-
POLISHER_ERB_TEST_TEMPLATE =
|
216
|
-
%q{
|
217
|
-
%{!?ruby_sitelib: %define ruby_sitelib %(ruby -rrbconfig -e "puts Config::CONFIG['sitelibdir']")}
|
218
|
-
%define rname activerecord
|
219
|
-
# Only run the tests on distros that have sqlite3
|
220
|
-
%define with_check 0
|
221
|
-
|
222
|
-
Name: ruby-%{rname}
|
223
|
-
Version: <%= version %>
|
224
|
-
Release: <%= release %>%{?dist}
|
225
|
-
Summary: Implements the ActiveRecord pattern for ORM
|
226
|
-
|
227
|
-
Group: Development/Languages
|
228
|
-
|
229
|
-
License: MIT
|
230
|
-
URL: http://rubyforge.org/projects/activerecord/
|
231
|
-
Source0: http://rubyforge.org/frs/download.php/28874/activerecord-%{version}.tgz
|
232
|
-
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
233
|
-
|
234
|
-
BuildArch: noarch
|
235
|
-
BuildRequires: ruby >= 1.8
|
236
|
-
%if %with_check
|
237
|
-
BuildRequires: ruby(active_support) = 2.0.1
|
238
|
-
BuildRequires: ruby(sqlite3)
|
239
|
-
%endif
|
240
|
-
Requires: ruby(abi) = 1.8
|
241
|
-
Requires: ruby(active_support) = 2.0.1
|
242
|
-
Provides: ruby(active_record) = %{version}
|
243
|
-
|
244
|
-
%description
|
245
|
-
Implements the ActiveRecord pattern (Fowler, PoEAA) for ORM. It ties
|
246
|
-
database tables and classes together for business objects, like Customer or
|
247
|
-
Subscription, that can find, save, and destroy themselves without resorting
|
248
|
-
to manual SQL.
|
249
|
-
|
250
|
-
%package subpkg
|
251
|
-
Summary: Test sub package
|
252
|
-
Group: Development/Languages
|
253
|
-
|
254
|
-
%package -n another-subpkg
|
255
|
-
Summary: Another test sub package
|
256
|
-
Group: Development/Languages
|
257
|
-
|
258
|
-
%description subpkg
|
259
|
-
Test subpackage
|
260
|
-
|
261
|
-
%description -n another-subpkg
|
262
|
-
Another est subpackage
|
263
|
-
|
264
|
-
%prep
|
265
|
-
%setup -q -n %{rname}-%{version}
|
266
|
-
chmod 0644 README
|
267
|
-
|
268
|
-
%build
|
269
|
-
|
270
|
-
%install
|
271
|
-
rm -rf $RPM_BUILD_ROOT
|
272
|
-
install -d $RPM_BUILD_ROOT/%{ruby_sitelib}/
|
273
|
-
cp -pr lib/* $RPM_BUILD_ROOT/%{ruby_sitelib}/
|
274
|
-
find $RPM_BUILD_ROOT/%{ruby_sitelib} -type f | xargs chmod a-x
|
275
|
-
|
276
|
-
%check
|
277
|
-
%if %with_check
|
278
|
-
cd test
|
279
|
-
ruby -I "connections/native_sqlite3" base_test.rb
|
280
|
-
%endif
|
281
|
-
|
282
|
-
%clean
|
283
|
-
rm -rf $RPM_BUILD_ROOT
|
284
|
-
|
285
|
-
%files
|
286
|
-
%defattr(-,root,root,-)
|
287
|
-
%{ruby_sitelib}/activerecord.rb
|
288
|
-
%{ruby_sitelib}/active_record.rb
|
289
|
-
%{ruby_sitelib}/active_record
|
290
|
-
%doc README CHANGELOG examples/
|
291
|
-
|
292
|
-
%files subpkg
|
293
|
-
%defattr(-,root,root,-)
|
294
|
-
%doc README
|
295
|
-
|
296
|
-
%files -n another-subpkg
|
297
|
-
%defattr(-,root,root,-)
|
298
|
-
%doc CHANGELOG
|
299
|
-
|
300
|
-
}
|
data/spec/gem_adapter_spec.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
# ruby gem polisher gem adapter spec
|
2
|
-
#
|
3
|
-
# Copyright (C) 2010 Red Hat, Inc.
|
4
|
-
# Written by Mohammed Morsi <mmorsi@redhat.com>
|
5
|
-
#
|
6
|
-
# This program is free software, you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU Affero General Public License
|
8
|
-
# as published by the Free Software Foundation, either version 3
|
9
|
-
# of the License, or (at your option) any later version.
|
10
|
-
#
|
11
|
-
# You should have received a copy of the the GNU Affero
|
12
|
-
# General Public License, along with Polisher. If not, see
|
13
|
-
# <http://www.gnu.org/licenses/>
|
14
|
-
|
15
|
-
require 'uri'
|
16
|
-
require 'json'
|
17
|
-
require 'net/http'
|
18
|
-
|
19
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
20
|
-
|
21
|
-
describe "Polisher::GemAdapter" do
|
22
|
-
it "should successfully subscribe/unsubscribe to updates" do
|
23
|
-
gem = Source.new :name => "polisher", :source_type => "gem",
|
24
|
-
:uri => "http://rubygems.org/downloads/polisher-0.3.gem"
|
25
|
-
|
26
|
-
Polisher::GemAdapter.subscribe(gem,
|
27
|
-
"http://projects.morsi.org/polisher/demo/gems/released/1",
|
28
|
-
POLISHER_CONFIG["gem_api_key"])
|
29
|
-
Polisher::GemAdapter.subscribed?(gem, POLISHER_CONFIG["gem_api_key"]).should == true
|
30
|
-
Polisher::GemAdapter.unsubscribe(gem,
|
31
|
-
"http://projects.morsi.org/polisher/demo/gems/released/1",
|
32
|
-
POLISHER_CONFIG["gem_api_key"])
|
33
|
-
Polisher::GemAdapter.subscribed?(gem, POLISHER_CONFIG["gem_api_key"]).should == false
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should raise error if subscribe source, callback_url, or api_key is invalid" do
|
37
|
-
lambda {
|
38
|
-
Polisher::GemAdapter.subscribe(nil,
|
39
|
-
"http://projects.morsi.org/polisher/demo/gems/released/1",
|
40
|
-
POLISHER_CONFIG['gem_api_key'])
|
41
|
-
}.should raise_error(ArgumentError)
|
42
|
-
|
43
|
-
gem = Source.new :name => "polisher", :source_type => "gem",
|
44
|
-
:uri => "http://rubygems.org/downloads/polisher-0.3.gem"
|
45
|
-
lambda {
|
46
|
-
Polisher::GemAdapter.subscribe(gem, 42, POLISHER_CONFIG['gem_api_key'])
|
47
|
-
}.should raise_error(ArgumentError)
|
48
|
-
|
49
|
-
lambda {
|
50
|
-
Polisher::GemAdapter.subscribe(gem,
|
51
|
-
"http://projects.morsi.org/polisher/demo/gems/released/1",
|
52
|
-
nil)
|
53
|
-
}.should raise_error(ArgumentError)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should raise error if subscription target is invalid" do
|
57
|
-
gem = Source.new :name => "polisher", :source_type => "gem",
|
58
|
-
:uri => "http://non.existant/downloads/polisher-0.3.gem"
|
59
|
-
lambda {
|
60
|
-
Polisher::GemAdapter.subscribe(gem,
|
61
|
-
"http://projects.morsi.org/polisher/demo/gems/released/1",
|
62
|
-
POLISHER_CONFIG["gem_api_key"])
|
63
|
-
}.should raise_error(RuntimeError)
|
64
|
-
|
65
|
-
gem = Source.new :name => "polisher", :source_type => "gem",
|
66
|
-
:uri => "http://morsi.org/downloads/polisher-0.3.gem"
|
67
|
-
lambda {
|
68
|
-
Polisher::GemAdapter.subscribe(gem,
|
69
|
-
"http://projects.morsi.org/polisher/demo/gems/released/1",
|
70
|
-
POLISHER_CONFIG["gem_api_key"])
|
71
|
-
}.should raise_error(RuntimeError)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should successfully get remote gem info" do
|
75
|
-
gem = Source.new :name => "polisher", :source_type => "gem",
|
76
|
-
:uri => "http://rubygems.org/downloads/polisher-0.3.gem"
|
77
|
-
info = Polisher::GemAdapter.get_info(gem)
|
78
|
-
info["name"].should == "polisher"
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should raise error if get info target is invalid" do
|
82
|
-
gem = Source.new :name => "polisher", :source_type => "gem",
|
83
|
-
:uri => "http://invalid.uri/downloads/polisher-0.3.gem"
|
84
|
-
lambda {
|
85
|
-
Polisher::GemAdapter.get_info(gem)
|
86
|
-
}.should raise_error(RuntimeError)
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
data/spec/models_spec.rb
DELETED
@@ -1,721 +0,0 @@
|
|
1
|
-
# ruby gem polisher models spec
|
2
|
-
#
|
3
|
-
# Copyright (C) 2010 Red Hat, Inc.
|
4
|
-
# Written by Mohammed Morsi <mmorsi@redhat.com>
|
5
|
-
#
|
6
|
-
# This program is free software, you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU Affero General Public License
|
8
|
-
# as published by the Free Software Foundation, either version 3
|
9
|
-
# of the License, or (at your option) any later version.
|
10
|
-
#
|
11
|
-
# You should have received a copy of the the GNU Affero
|
12
|
-
# General Public License, along with Polisher. If not, see
|
13
|
-
# <http://www.gnu.org/licenses/>
|
14
|
-
|
15
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
16
|
-
|
17
|
-
describe "Polisher::Project" do
|
18
|
-
before(:each) do
|
19
|
-
FileUtils.rm_rf(ARTIFACTS_DIR) if File.directory? ARTIFACTS_DIR
|
20
|
-
FileUtils.mkdir_p(ARTIFACTS_DIR)
|
21
|
-
end
|
22
|
-
|
23
|
-
after(:each) do
|
24
|
-
FileUtils.rm_rf(ARTIFACTS_DIR) if File.directory? ARTIFACTS_DIR
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should not be valid if name is missing" do
|
28
|
-
project = Project.new :name => 'foo'
|
29
|
-
project.should be_valid
|
30
|
-
|
31
|
-
project.name = nil
|
32
|
-
project.should_not be_valid
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should not be valid if duplicate name exists" do
|
36
|
-
Project.create! :name => 'dup-project-name-test'
|
37
|
-
project = Project.new :name => 'dup-project-name-test'
|
38
|
-
project.should_not be_valid
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should provide access to all dependencies and dependent projects" do
|
42
|
-
project1 = Project.create! :name => "project-dependency-tree1"
|
43
|
-
project2 = Project.create! :name => "project-dependency-tree2"
|
44
|
-
project3 = Project.create! :name => "project-dependency-tree3"
|
45
|
-
project4 = Project.create! :name => "project-dependency-tree4"
|
46
|
-
project5 = Project.create! :name => "project-dependency-tree5"
|
47
|
-
|
48
|
-
pd1 = ProjectDependency.create! :project => project2, :depends_on_project => project1
|
49
|
-
pd2 = ProjectDependency.create! :project => project3, :depends_on_project => project2
|
50
|
-
pd3 = ProjectDependency.create! :project => project4, :depends_on_project => project2
|
51
|
-
pd4 = ProjectDependency.create! :project => project4, :depends_on_project => project5
|
52
|
-
|
53
|
-
deps = project1.dependencies
|
54
|
-
deps.size.should == 0
|
55
|
-
depts = project1.dependents
|
56
|
-
depts.size.should == 1
|
57
|
-
depts[0].project.id.should == project2.id
|
58
|
-
|
59
|
-
deps = project2.dependencies
|
60
|
-
deps.size.should == 1
|
61
|
-
deps[0].depends_on_project.id.should == project1.id
|
62
|
-
depts = project2.dependents
|
63
|
-
depts.size.should == 2
|
64
|
-
depts[0].project.id.should == project3.id
|
65
|
-
depts[1].project.id.should == project4.id
|
66
|
-
|
67
|
-
deps = project3.dependencies
|
68
|
-
deps.size.should == 1
|
69
|
-
deps[0].depends_on_project.id.should == project2.id
|
70
|
-
depts = project3.dependents
|
71
|
-
depts.size.should == 0
|
72
|
-
|
73
|
-
deps = project4.dependencies
|
74
|
-
deps.size.should == 2
|
75
|
-
deps[0].depends_on_project.id.should == project2.id
|
76
|
-
deps[1].depends_on_project.id.should == project5.id
|
77
|
-
depts = project4.dependents
|
78
|
-
depts.size.should == 0
|
79
|
-
|
80
|
-
deps = project5.dependencies
|
81
|
-
deps.size.should == 0
|
82
|
-
depts = project5.dependents
|
83
|
-
depts.size.should == 1
|
84
|
-
depts[0].project.id.should == project4.id
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should download all sources" do
|
88
|
-
project = Project.create! :name => 'project-dl-test100'
|
89
|
-
|
90
|
-
# see FIXME in Project::download_to
|
91
|
-
source1 = Source.create! :name => 'jffi-spec', :uri => 'http://mo.morsi.org/files/jruby/jffi.spec', :source_type => 'spec'
|
92
|
-
source2 = Source.create! :name => 'joni-spec', :uri => 'http://mo.morsi.org/files/jruby/joni.spec', :source_type => 'spec'
|
93
|
-
|
94
|
-
ps1 = ProjectSourceVersion.create! :project => project, :source => source1
|
95
|
-
ps2 = ProjectSourceVersion.create! :project => project, :source => source2, :project_version => "1.5"
|
96
|
-
|
97
|
-
project.download_to :dir => ARTIFACTS_DIR
|
98
|
-
|
99
|
-
File.size?(ARTIFACTS_DIR + '/joni.spec').should_not be_nil
|
100
|
-
File.size?(ARTIFACTS_DIR + '/jffi.spec').should_not be_nil
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should download all sources for specified version" do
|
104
|
-
project = Project.new :name => 'project-dl-test100'
|
105
|
-
source1 = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
106
|
-
source2 = Source.new :name => 'joni-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/joni.spec', :source_type => 'spec'
|
107
|
-
|
108
|
-
ps1 = ProjectSourceVersion.new :project => project, :source => source1, :project_version => "1.6", :source_uri_params => "cluster=jruby;filetype=spec"
|
109
|
-
ps2 = ProjectSourceVersion.new :project => project, :source => source2, :project_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
110
|
-
project.project_source_versions << ps1 << ps2
|
111
|
-
|
112
|
-
project.download_to :version => "1.5", :dir => ARTIFACTS_DIR
|
113
|
-
|
114
|
-
File.size?(ARTIFACTS_DIR + '/joni.spec').should_not be_nil
|
115
|
-
File.size?(ARTIFACTS_DIR + '/jffi.spec').should be_nil
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should return all events for the specified version" do
|
119
|
-
project = Project.new :name => 'project-dl-test100'
|
120
|
-
event1 = Event.new :version_qualifier => "=", :version => "1.5"
|
121
|
-
event2 = Event.new :version_qualifier => ">", :version => "1.6"
|
122
|
-
project.events << event1 << event2
|
123
|
-
|
124
|
-
events = project.events_for_version("1.5")
|
125
|
-
events.size.should == 1
|
126
|
-
events.include?(event1).should be_true
|
127
|
-
events.include?(event2).should be_false
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should return all project_source_versions for the specified version" do
|
131
|
-
project = Project.new :name => 'project-dl-test100'
|
132
|
-
source1 = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
133
|
-
source2 = Source.new :name => 'joni-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/joni.spec', :source_type => 'spec'
|
134
|
-
source3 = Source.new :name => 'jruby-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jruby.spec', :source_type => 'spec'
|
135
|
-
|
136
|
-
ps1 = ProjectSourceVersion.new :project => project, :source => source1, :project_version => '1.6', :source_uri_params => "cluster=jruby;filetype=spec"
|
137
|
-
ps2 = ProjectSourceVersion.new :project => project, :source => source2, :project_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
138
|
-
ps3 = ProjectSourceVersion.new :project => project, :source => source3, :source_uri_params => "cluster=jruby;filetype=spec"
|
139
|
-
project.project_source_versions << ps1 << ps2 << ps3
|
140
|
-
|
141
|
-
project_sources = project.project_source_versions_for_version("1.5")
|
142
|
-
project_sources.size.should == 2
|
143
|
-
project_sources.include?(ps1).should be_false
|
144
|
-
project_sources.include?(ps2).should be_true
|
145
|
-
project_sources.include?(ps3).should be_true
|
146
|
-
end
|
147
|
-
|
148
|
-
it "should return all sources for the specified version with formatted uris" do
|
149
|
-
project = Project.new :name => 'project-dl-test100'
|
150
|
-
source1 = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
151
|
-
source2 = Source.new :name => 'joni-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/joni.spec', :source_type => 'spec'
|
152
|
-
source3 = Source.new :name => 'jruby-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jruby.spec', :source_type => 'spec'
|
153
|
-
|
154
|
-
ps1 = ProjectSourceVersion.new :project => project, :source => source1, :project_version => "1.6", :source_uri_params => "cluster=jruby;filetype=spec"
|
155
|
-
ps2 = ProjectSourceVersion.new :project => project, :source => source2, :project_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
156
|
-
ps3 = ProjectSourceVersion.new :project => project, :source => source3, :source_uri_params => "cluster=jruby;dir=files"
|
157
|
-
project.project_source_versions << ps1 << ps2 << ps3
|
158
|
-
|
159
|
-
sources = project.sources_for_version("1.5")
|
160
|
-
sources.size.should == 2
|
161
|
-
sources.include?(source1).should be_false
|
162
|
-
sources.include?(source2).should be_true
|
163
|
-
sources.include?(source3).should be_true
|
164
|
-
|
165
|
-
sources[0].uri.should == "http://mo.morsi.org/files/jruby/joni.spec"
|
166
|
-
sources[1].uri.should == "http://mo.morsi.org/files/jruby/jruby.spec"
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should provide access to primary source" do
|
170
|
-
project = Project.create! :name => 'primary-source-project-test'
|
171
|
-
source1 = Source.create!(:name => 'primary-source-test1', :source_type => 'file', :uri => 'http://foo1.foo')
|
172
|
-
source2 = Source.create!(:name => 'primary-source-test2', :source_type => 'file', :uri => 'http://foo2.foo')
|
173
|
-
project.sources << source1
|
174
|
-
project.primary_source= source2
|
175
|
-
|
176
|
-
primary_src = project.primary_source
|
177
|
-
primary_src.should_not be_nil
|
178
|
-
primary_src.name.should == source2.name
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should provide access to all dependencies for the specified version" do
|
182
|
-
project1 = Project.create! :name => "project-dependency-tree10"
|
183
|
-
project2 = Project.create! :name => "project-dependency-tree20"
|
184
|
-
project3 = Project.create! :name => "project-dependency-tree30"
|
185
|
-
project4 = Project.create! :name => "project-dependency-tree40"
|
186
|
-
|
187
|
-
pd1 = ProjectDependency.create! :project => project1, :depends_on_project => project2, :project_version => "1.0.0"
|
188
|
-
pd2 = ProjectDependency.create! :project => project1, :depends_on_project => project3, :project_version => "2.0.0"
|
189
|
-
pd2 = ProjectDependency.create! :project => project1, :depends_on_project => project4
|
190
|
-
|
191
|
-
deps = project1.dependencies_for_version("1.0.0")
|
192
|
-
deps.size.should == 2
|
193
|
-
deps[0].depends_on_project.id.should == project2.id
|
194
|
-
deps[1].depends_on_project.id.should == project4.id
|
195
|
-
end
|
196
|
-
|
197
|
-
it "should return all versions which the project is configured for" do
|
198
|
-
project = Project.new :name => 'project-dl-test100'
|
199
|
-
event1 = Event.new :version_qualifier => "=", :version => "1.5"
|
200
|
-
event2 = Event.new :version_qualifier => ">", :version => "1.6"
|
201
|
-
project.events << event1 << event2
|
202
|
-
|
203
|
-
source1 = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
204
|
-
source2 = Source.new :name => 'joni-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/joni.spec', :source_type => 'spec'
|
205
|
-
source3 = Source.new :name => 'jruby-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jruby.spec', :source_type => 'spec'
|
206
|
-
ps1 = ProjectSourceVersion.new :project => project, :source => source1, :source_uri_params => "cluster=jruby;filetype=spec"
|
207
|
-
ps2 = ProjectSourceVersion.new :project => project, :source => source2, :project_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
208
|
-
ps3 = ProjectSourceVersion.new :project => project, :source => source3, :project_version => "1.7", :source_uri_params => "cluster=jruby;dir=files"
|
209
|
-
project.project_source_versions << ps1 << ps2 << ps3
|
210
|
-
|
211
|
-
projectd = Project.new :name => 'project-version-test99'
|
212
|
-
project.project_dependencies << ProjectDependency.new(:project => project, :depends_on_project => projectd, :project_version => "9.9")
|
213
|
-
|
214
|
-
versions = project.versions
|
215
|
-
versions.size.should == 4
|
216
|
-
versions.include?("1.5").should be_true
|
217
|
-
versions.include?("1.6").should be_true
|
218
|
-
versions.include?("1.7").should be_true
|
219
|
-
versions.include?("9.9").should be_true
|
220
|
-
end
|
221
|
-
|
222
|
-
it "should trigger dependencies and events upon release" do
|
223
|
-
project = Project.create :name => 'project-release-test-199'
|
224
|
-
|
225
|
-
Event.create :project => project,
|
226
|
-
:process => "project_released_test_handlerAAA",
|
227
|
-
:version_qualifier => '=',
|
228
|
-
:version => "5.6"
|
229
|
-
|
230
|
-
Event.create :project => project,
|
231
|
-
:process => "project_released_test_handlerBBB",
|
232
|
-
:version_qualifier => '>',
|
233
|
-
:version => "7.9"
|
234
|
-
|
235
|
-
projectd1 = Project.create :name => 'project-release-test-299'
|
236
|
-
Event.create :project => projectd1,
|
237
|
-
:process => "project_released_test_handlerDDD"
|
238
|
-
Event.create :project => projectd1,
|
239
|
-
:process => "project_released_test_handlerEEE",
|
240
|
-
:version_qualifier => "=",
|
241
|
-
:version => "1.9"
|
242
|
-
|
243
|
-
projectd2 = Project.create :name => 'project-release-test-399'
|
244
|
-
Event.create :project => projectd2,
|
245
|
-
:process => "project_released_test_handlerFFF",
|
246
|
-
:version_qualifier => "=",
|
247
|
-
:version => "1.9"
|
248
|
-
Event.create :project => projectd2,
|
249
|
-
:process => "project_released_test_handlerGGG",
|
250
|
-
:version_qualifier => "=",
|
251
|
-
:version => "6.5"
|
252
|
-
|
253
|
-
projectd3 = Project.create :name => 'project-release-test-499'
|
254
|
-
Event.create :project => projectd3,
|
255
|
-
:process => "project_released_test_handlerCCC"
|
256
|
-
|
257
|
-
pd1 = ProjectDependency.new :project => project, :depends_on_project => projectd1, :depends_on_project_params => "jim=bo;john=mark"
|
258
|
-
pd2 = ProjectDependency.new :project => project, :depends_on_project => projectd2, :project_version => "5.6", :depends_on_project_version => "6.5"
|
259
|
-
pd3 = ProjectDependency.new :project => project, :depends_on_project => projectd3, :project_version => "7.9"
|
260
|
-
project.project_dependencies << pd1 << pd2 << pd3
|
261
|
-
|
262
|
-
project.released_version("5.6", :joe => 'bob', :sam => 'sue')
|
263
|
-
|
264
|
-
$project_released_test_handler_flags.include?('AAA').should be_true
|
265
|
-
$project_released_test_handler_flags.include?('BBB').should be_false
|
266
|
-
$project_released_test_handler_flags.include?('CCC').should be_false
|
267
|
-
$project_released_test_handler_flags.include?('DDD').should be_true
|
268
|
-
$project_released_test_handler_flags.include?('EEE').should be_true
|
269
|
-
$project_released_test_handler_flags.include?('FFF').should be_false
|
270
|
-
$project_released_test_handler_flags.include?('GGG').should be_true
|
271
|
-
$project_released_test_handler_flags.include?('joe=bob').should be_true
|
272
|
-
$project_released_test_handler_flags.include?('sam=sue').should be_true
|
273
|
-
$project_released_test_handler_flags.include?('jim=bo').should be_true
|
274
|
-
$project_released_test_handler_flags.include?('john=mark').should be_true
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
describe "Polisher::Source" do
|
279
|
-
before(:each) do
|
280
|
-
FileUtils.rm_rf(ARTIFACTS_DIR) if File.directory? ARTIFACTS_DIR
|
281
|
-
FileUtils.mkdir_p(ARTIFACTS_DIR)
|
282
|
-
end
|
283
|
-
|
284
|
-
after(:each) do
|
285
|
-
FileUtils.rm_rf(ARTIFACTS_DIR) if File.directory? ARTIFACTS_DIR
|
286
|
-
end
|
287
|
-
|
288
|
-
it "should not be valid if name, source_type, or uri is missing or invalid" do
|
289
|
-
source = Source.new :uri => 'uri', :name => "foo", :source_type => "gem"
|
290
|
-
source.should be_valid
|
291
|
-
|
292
|
-
source.uri = nil
|
293
|
-
source.should_not be_valid
|
294
|
-
source.uri = 'uri'
|
295
|
-
|
296
|
-
source.source_type = nil
|
297
|
-
source.should_not be_valid
|
298
|
-
source.source_type = 'bar'
|
299
|
-
source.should_not be_valid
|
300
|
-
source.source_type = 'file'
|
301
|
-
|
302
|
-
source.name = nil
|
303
|
-
source.should_not be_valid
|
304
|
-
end
|
305
|
-
|
306
|
-
it "should not be valid if name or uri is not unique in scope" do
|
307
|
-
source1 = Source.create! :uri => 'uri', :name => "foo", :source_type => "gem"
|
308
|
-
source2 = Source.new :uri => 'uri', :name => "bar", :source_type => "archive"
|
309
|
-
source2.should_not be_valid
|
310
|
-
|
311
|
-
source3 = Source.new :uri => 'zaz', :name => "foo", :source_type => "archive"
|
312
|
-
source3.should_not be_valid
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should return filename generated from uri" do
|
316
|
-
source = Source.new(
|
317
|
-
:uri => 'http://mo.morsi.org/files/jruby/joni-123.spec?addition=foo¶ms=bar',
|
318
|
-
:name => "joni-spec", :source_type => "spec")
|
319
|
-
source.filename.should == "joni-123.spec"
|
320
|
-
end
|
321
|
-
|
322
|
-
it "should return all project_source_versions for the specified version" do
|
323
|
-
project1 = Project.new :name => 'project-src-p100'
|
324
|
-
project2 = Project.new :name => 'project-src-p101'
|
325
|
-
project3 = Project.new :name => 'project-src-p102'
|
326
|
-
source = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
327
|
-
|
328
|
-
ps1 = ProjectSourceVersion.new :project => project1, :source => source, :source_uri_params => "cluster=jruby;filetype=spec"
|
329
|
-
ps2 = ProjectSourceVersion.new :project => project2, :source => source, :project_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
330
|
-
ps3 = ProjectSourceVersion.new :project => project3, :source => source, :project_version => "1.6", :source_uri_params => "cluster=jruby;dir=files"
|
331
|
-
source.project_source_versions << ps1 << ps2
|
332
|
-
|
333
|
-
project_sources = source.project_source_versions_for_version("1.5")
|
334
|
-
project_sources.size.should == 2
|
335
|
-
project_sources.include?(ps1).should be_true
|
336
|
-
project_sources.include?(ps2).should be_true
|
337
|
-
project_sources.include?(ps3).should be_false
|
338
|
-
end
|
339
|
-
|
340
|
-
it "should return all projects for the specified version" do
|
341
|
-
project1 = Project.new :name => 'project-src-p100'
|
342
|
-
project2 = Project.new :name => 'project-src-p101'
|
343
|
-
project3 = Project.new :name => 'project-src-p102'
|
344
|
-
source = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
345
|
-
|
346
|
-
ps1 = ProjectSourceVersion.new :project => project1, :source => source, :source_uri_params => "cluster=jruby;filetype=spec"
|
347
|
-
ps2 = ProjectSourceVersion.new :project => project2, :source => source, :source_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
348
|
-
ps3 = ProjectSourceVersion.new :project => project3, :source => source, :source_version => "1.6", :source_uri_params => "cluster=jruby;dir=files"
|
349
|
-
source.project_source_versions << ps1 << ps2 << ps3
|
350
|
-
|
351
|
-
projects = source.project_source_versions_for_version("1.5")
|
352
|
-
projects.size.should == 2
|
353
|
-
projects.collect { |p| p.source_version }.include?(nil).should be_true
|
354
|
-
projects.collect { |p| p.source_version }.include?("1.5").should be_true
|
355
|
-
projects.collect { |p| p.source_version }.include?("1.6").should be_false
|
356
|
-
|
357
|
-
projects.collect { |p| p.project.name }.include?("project-src-p100").should be_true
|
358
|
-
projects.collect { |p| p.project.name }.include?("project-src-p101").should be_true
|
359
|
-
projects.collect { |p| p.project.name }.include?("project-src-p102").should be_false
|
360
|
-
end
|
361
|
-
|
362
|
-
it "should return all versions which the source is configured for" do
|
363
|
-
project1 = Project.new :name => 'project-src-p100'
|
364
|
-
project2 = Project.new :name => 'project-src-p101'
|
365
|
-
project3 = Project.new :name => 'project-src-p102'
|
366
|
-
source = Source.new :name => 'jffi-spec', :uri => 'http://mo.morsi.org/%{dir}/%{cluster}/jffi.spec', :source_type => 'spec'
|
367
|
-
|
368
|
-
ps1 = ProjectSourceVersion.new :project => project1, :source => source, :source_uri_params => "cluster=jruby;filetype=spec"
|
369
|
-
ps2 = ProjectSourceVersion.new :project => project2, :source => source, :source_version => "1.5", :source_uri_params => "cluster=jruby;dir=files"
|
370
|
-
ps3 = ProjectSourceVersion.new :project => project3, :source => source, :source_version => "1.6", :source_uri_params => "cluster=jruby;dir=files"
|
371
|
-
source.project_source_versions << ps1 << ps2 << ps3
|
372
|
-
|
373
|
-
versions = source.versions
|
374
|
-
versions.size.should == 2
|
375
|
-
versions.include?("1.5").should be_true
|
376
|
-
versions.include?("1.6").should be_true
|
377
|
-
end
|
378
|
-
|
379
|
-
it "should format the uri w/ the specified variables" do
|
380
|
-
source = Source.new :uri => "http://%{var1}.%{var2}/%{another}?%{yet_another}=%{even_more}&%{last}"
|
381
|
-
source.format_uri! :var1 => 'val1', :var2 => 'val2',
|
382
|
-
:another => 'foo', :yet_another => 'bar',
|
383
|
-
:even_more => 'something', :last => '123'
|
384
|
-
|
385
|
-
source.uri.should == "http://val1.val2/foo?bar=something&123"
|
386
|
-
end
|
387
|
-
|
388
|
-
it "should be downloadable" do
|
389
|
-
source = Source.new(
|
390
|
-
:uri => 'http://mo.morsi.org/files/jruby/joni.spec',
|
391
|
-
:name => "joni-spec", :source_type => "spec")
|
392
|
-
path = source.download_to(:dir => ARTIFACTS_DIR)
|
393
|
-
File.size?(ARTIFACTS_DIR + '/joni.spec').should_not be_nil
|
394
|
-
FileUtils.rm(ARTIFACTS_DIR + '/joni.spec')
|
395
|
-
path.should == ARTIFACTS_DIR + '/joni.spec'
|
396
|
-
|
397
|
-
source.download_to(:path => ARTIFACTS_DIR + '/joni.spec')
|
398
|
-
File.size?(ARTIFACTS_DIR + '/joni.spec').should_not be_nil
|
399
|
-
end
|
400
|
-
|
401
|
-
it "should permit a parameterized download" do
|
402
|
-
source = Source.new(
|
403
|
-
:uri => 'http://mo.morsi.org/files/%{group}/%{name}.spec',
|
404
|
-
:name => "joni-spec", :source_type => 'spec')
|
405
|
-
path = source.download_to(:dir => ARTIFACTS_DIR, :group => "jruby", :name => "joni")
|
406
|
-
File.size?(ARTIFACTS_DIR + '/joni.spec').should_not be_nil
|
407
|
-
FileUtils.rm(ARTIFACTS_DIR + '/joni.spec')
|
408
|
-
path.should == ARTIFACTS_DIR + '/joni.spec'
|
409
|
-
|
410
|
-
source.download_to(:path => ARTIFACTS_DIR + '/joni.spec')
|
411
|
-
File.size?(ARTIFACTS_DIR + '/joni.spec').should_not be_nil
|
412
|
-
end
|
413
|
-
|
414
|
-
it "should raise an exception if download source uri or destination path is invalid" do
|
415
|
-
source = Source.new(
|
416
|
-
:uri => 'http://invalid.uri',
|
417
|
-
:name => 'invalid-source1', :source_type => 'file')
|
418
|
-
lambda {
|
419
|
-
path = source.download_to(:dir => ARTIFACTS_DIR)
|
420
|
-
}.should raise_error(RuntimeError)
|
421
|
-
|
422
|
-
source = Source.new(
|
423
|
-
:uri => 'http://mo.morsi.org/files/jruby/joni.spec',
|
424
|
-
:name => 'invalid-source2', :source_type => 'spec')
|
425
|
-
lambda {
|
426
|
-
path = source.download_to(:dir => '/')
|
427
|
-
}.should raise_error(RuntimeError)
|
428
|
-
|
429
|
-
lambda {
|
430
|
-
path = source.download_to(:dir => '/nonexistantfoobar')
|
431
|
-
}.should raise_error(RuntimeError)
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
describe "Polisher::ProjectSourceVersion" do
|
436
|
-
|
437
|
-
it "should default primary_source to false" do
|
438
|
-
project = Project.create! :name => 'project-source-valid-testproj0'
|
439
|
-
source = Source.create! :name => 'project-source-valid-testsource0',
|
440
|
-
:uri => 'http://presvts234', :source_type => 'file'
|
441
|
-
ps = ProjectSourceVersion.create! :project => project, :source => source
|
442
|
-
ps.primary_source.should be_false
|
443
|
-
end
|
444
|
-
|
445
|
-
it "should default versions to nil" do
|
446
|
-
project = Project.create! :name => 'project-source-valid-testproj10'
|
447
|
-
source = Source.create! :name => 'project-source-valid-testsource10',
|
448
|
-
:uri => 'http://presvts098', :source_type => 'file'
|
449
|
-
ps = ProjectSourceVersion.create! :project => project, :source => source, :project_version => "", :source_version => ""
|
450
|
-
ps.project_version.should be_nil
|
451
|
-
ps.source_version.should be_nil
|
452
|
-
end
|
453
|
-
|
454
|
-
it "should not be valid if a project id/version is associated w/ a source multiple times" do
|
455
|
-
project = Project.create! :name => 'project-source-valid-testproj1'
|
456
|
-
source = Source.create! :name => 'project-source-valid-testsource1',
|
457
|
-
:uri => 'http://presvts581', :source_type => 'file'
|
458
|
-
|
459
|
-
ps1 = ProjectSourceVersion.create! :project => project, :source => source, :project_version => '1.6'
|
460
|
-
ps2 = ProjectSourceVersion.new :project => project, :source => source, :project_version => '1.6'
|
461
|
-
|
462
|
-
ps2.valid?.should be_false
|
463
|
-
end
|
464
|
-
|
465
|
-
it "should not be valid if a project id/version is associated w/ multiple primary sources" do
|
466
|
-
project = Project.create! :name => 'project-source-valid-testproj2'
|
467
|
-
source1 = Source.create! :name => 'project-source-valid-testsource100',
|
468
|
-
:uri => 'http://presvts690', :source_type => 'file'
|
469
|
-
source2 = Source.create! :name => 'project-source-valid-testsource200',
|
470
|
-
:uri => 'http://presvts456', :source_type => 'file'
|
471
|
-
|
472
|
-
ps1 = ProjectSourceVersion.create! :project => project, :source => source1, :project_version => '1.6',
|
473
|
-
:primary_source => true
|
474
|
-
|
475
|
-
ps2 = ProjectSourceVersion.new :project => project, :source => source2, :project_version => '1.6',
|
476
|
-
:primary_source => true
|
477
|
-
|
478
|
-
ps2.valid?.should be_false
|
479
|
-
end
|
480
|
-
|
481
|
-
end
|
482
|
-
|
483
|
-
describe "Polisher::ProjectDependency" do
|
484
|
-
|
485
|
-
it "should default versions to nil" do
|
486
|
-
project1 = Project.create! :name => 'project-dep-valid-testproj10'
|
487
|
-
project2 = Project.create! :name => 'project-dep-valid-testproj20'
|
488
|
-
|
489
|
-
pd = ProjectDependency.create! :project => project1, :depends_on_project => project2
|
490
|
-
pd.project_version.should be_nil
|
491
|
-
pd.depends_on_project_version.should be_nil
|
492
|
-
end
|
493
|
-
|
494
|
-
it "should not be valid if missing project or depends_on_project" do
|
495
|
-
project1 = Project.create! :name => 'project-dep-valid-testproj30'
|
496
|
-
project2 = Project.create! :name => 'project-dep-valid-testproj40'
|
497
|
-
|
498
|
-
pd = ProjectDependency.new
|
499
|
-
pd.should_not be_valid
|
500
|
-
|
501
|
-
|
502
|
-
pd = ProjectDependency.new :project => project1
|
503
|
-
pd.should_not be_valid
|
504
|
-
|
505
|
-
pd = ProjectDependency.new :depends_on_project => project2
|
506
|
-
pd.should_not be_valid
|
507
|
-
|
508
|
-
pd = ProjectDependency.new :project => project1, :depends_on_project => project2
|
509
|
-
pd.should be_valid
|
510
|
-
end
|
511
|
-
|
512
|
-
it "should not be valid if project/depends_on_project/project_version/depends_on_project_version are not unique" do
|
513
|
-
project1 = Project.create! :name => 'project-dep-valid-testproj50'
|
514
|
-
project2 = Project.create! :name => 'project-dep-valid-testproj60'
|
515
|
-
|
516
|
-
pd = ProjectDependency.create! :project => project1, :depends_on_project => project2, :project_version => "1.0.0", :depends_on_project_version => "2.0.1"
|
517
|
-
|
518
|
-
pd2 = ProjectDependency.new :project => project1, :depends_on_project => project2, :project_version => "1.0.0", :depends_on_project_version => "2.0.1"
|
519
|
-
pd2.should_not be_valid
|
520
|
-
|
521
|
-
pd2.depends_on_project_version = "2.0.2"
|
522
|
-
pd2.should be_valid
|
523
|
-
end
|
524
|
-
|
525
|
-
end
|
526
|
-
|
527
|
-
describe "Polisher::Event" do
|
528
|
-
|
529
|
-
it "should return list of supported event handlers" do
|
530
|
-
processes = Event::processes
|
531
|
-
processes.size.should == 3
|
532
|
-
processes.include?("download_sources").should be_true
|
533
|
-
processes.include?("create_rpm_package").should be_true
|
534
|
-
processes.include?("update_yum_repo").should be_true
|
535
|
-
end
|
536
|
-
|
537
|
-
it "should not be valid if process is missing" do
|
538
|
-
project = Project.create! :name => 'valid-event-test-project0'
|
539
|
-
event = Event.new :project_id => project.id, :process => 'create_repo'
|
540
|
-
event.should be_valid
|
541
|
-
|
542
|
-
event.process = nil
|
543
|
-
event.should_not be_valid
|
544
|
-
end
|
545
|
-
|
546
|
-
it "should not be valid if project is missing" do
|
547
|
-
project = Project.create! :name => 'valid-event-test-project1'
|
548
|
-
event = Event.new :process => 'create_repo'
|
549
|
-
event.should_not be_valid
|
550
|
-
event.project = project
|
551
|
-
event.should be_valid
|
552
|
-
end
|
553
|
-
|
554
|
-
it "should not be valid with invalid version qualifier" do
|
555
|
-
project = Project.create! :name => 'valid-event-test-project2'
|
556
|
-
|
557
|
-
event = Event.new :project_id => project.id, :process => 'create_repo', :version_qualifier => ">", :version => 5
|
558
|
-
event.should be_valid
|
559
|
-
|
560
|
-
event.version_qualifier = '=='
|
561
|
-
event.should_not be_valid
|
562
|
-
end
|
563
|
-
|
564
|
-
it "should not be valid if version/qualifier are not both present or nil" do
|
565
|
-
project = Project.create! :name => 'valid-event-test-project3'
|
566
|
-
|
567
|
-
event = Event.new :project_id => project.id, :process => 'create_repo', :version_qualifier => ">"
|
568
|
-
event.should_not be_valid
|
569
|
-
|
570
|
-
event = Event.new :project_id => project.id, :process => 'create_repo', :version => 5
|
571
|
-
event.should_not be_valid
|
572
|
-
|
573
|
-
event = Event.new :project_id => project.id, :process => 'create_repo', :version => 5, :version_qualifier => '<='
|
574
|
-
event.should be_valid
|
575
|
-
end
|
576
|
-
|
577
|
-
it "should correctly resolve version qualifiers" do
|
578
|
-
event = Event.new :version_qualifier => nil, :version => "5"
|
579
|
-
event.applies_to_version?('1.1').should be(true)
|
580
|
-
event.applies_to_version?('1.5.3').should be(true)
|
581
|
-
|
582
|
-
event = Event.new :version_qualifier => "=", :version => "5.3"
|
583
|
-
event.applies_to_version?('1.2').should be(false)
|
584
|
-
event.applies_to_version?('5.3').should be(true)
|
585
|
-
event.applies_to_version?('5.3.0').should be(false)
|
586
|
-
event.applies_to_version?('5.3.1').should be(false)
|
587
|
-
event.applies_to_version?('7.9').should be(false)
|
588
|
-
|
589
|
-
event = Event.new :version_qualifier => ">", :version => "1.9.2"
|
590
|
-
event.applies_to_version?('1.8.1').should be(false)
|
591
|
-
event.applies_to_version?('1.9.1').should be(false)
|
592
|
-
event.applies_to_version?('1.9.3').should be(true)
|
593
|
-
event.applies_to_version?('2.0').should be(true)
|
594
|
-
|
595
|
-
event = Event.new :version_qualifier => "<", :version => "0.6"
|
596
|
-
event.applies_to_version?('0.5').should be(true)
|
597
|
-
event.applies_to_version?('0.6').should be(false)
|
598
|
-
event.applies_to_version?('0.7').should be(false)
|
599
|
-
|
600
|
-
event = Event.new :version_qualifier => ">=", :version => "1.9"
|
601
|
-
event.applies_to_version?('1.8').should be(false)
|
602
|
-
event.applies_to_version?('1.9').should be(true)
|
603
|
-
event.applies_to_version?('2.0').should be(true)
|
604
|
-
|
605
|
-
event = Event.new :version_qualifier => "<=", :version => "0.6.4"
|
606
|
-
event.applies_to_version?('0.5.2').should be(true)
|
607
|
-
event.applies_to_version?('0.6.1').should be(true)
|
608
|
-
event.applies_to_version?('0.6.6').should be(false)
|
609
|
-
event.applies_to_version?('0.7.4').should be(false)
|
610
|
-
end
|
611
|
-
|
612
|
-
it "should raise error if trying to compare invalid versions" do
|
613
|
-
event = Event.new
|
614
|
-
|
615
|
-
# nil event version and version_qualifier is permitted
|
616
|
-
#lambda {
|
617
|
-
# event.applies_to_version?('0.5.2')
|
618
|
-
#}.should raise_error(ArgumentError)
|
619
|
-
|
620
|
-
event.version = '0.7'
|
621
|
-
lambda {
|
622
|
-
event.applies_to_version?(111)
|
623
|
-
}.should raise_error(ArgumentError)
|
624
|
-
end
|
625
|
-
|
626
|
-
it "should successfully run event process" do
|
627
|
-
project = Project.new :name => "foobar"
|
628
|
-
event = Event.new :project => project, :process => "test_event_run_method"
|
629
|
-
event.run(:version => "5.0", :key1 => "val1", :some => "thing", :answer => 42)
|
630
|
-
|
631
|
-
$test_event_run_hash[:event].should_not be_nil
|
632
|
-
$test_event_run_hash[:project].should_not be_nil
|
633
|
-
$test_event_run_hash[:version].should_not be_nil
|
634
|
-
$test_event_run_hash[:key1].should_not be_nil
|
635
|
-
$test_event_run_hash[:some].should_not be_nil
|
636
|
-
$test_event_run_hash[:answer].should_not be_nil
|
637
|
-
|
638
|
-
$test_event_run_hash[:event].process == "test_event_run_method"
|
639
|
-
$test_event_run_hash[:project].name.should == "foobar"
|
640
|
-
$test_event_run_hash[:version].should == "5.0"
|
641
|
-
$test_event_run_hash[:key1].should == "val1"
|
642
|
-
$test_event_run_hash[:some].should == "thing"
|
643
|
-
$test_event_run_hash[:answer].should == 42
|
644
|
-
end
|
645
|
-
|
646
|
-
it "should raise an exception if running event w/out specifying version" do
|
647
|
-
project = Project.new :name => "foobar"
|
648
|
-
event = Event.new :project => project, :process => "test_event_run_method"
|
649
|
-
lambda {
|
650
|
-
event.run
|
651
|
-
}.should raise_error(ArgumentError)
|
652
|
-
end
|
653
|
-
|
654
|
-
it "should raise an exception if running event process that doesn't correspond to a method" do
|
655
|
-
project = Project.new :name => "foobar"
|
656
|
-
event = Event.new :project => project, :process => "non_existant_method"
|
657
|
-
lambda {
|
658
|
-
event.run :version => "5"
|
659
|
-
}.should raise_error(ArgumentError)
|
660
|
-
end
|
661
|
-
|
662
|
-
it "should raise an exception if event process being run does" do
|
663
|
-
project = Project.new :name => "foobar"
|
664
|
-
event = Event.new :project => project, :process => "error_generating_method"
|
665
|
-
lambda {
|
666
|
-
event.run :version => "5"
|
667
|
-
}.should raise_error(RuntimeError)
|
668
|
-
end
|
669
|
-
end
|
670
|
-
|
671
|
-
# prolly should fixure out a better way todo this
|
672
|
-
$test_event_run_hash = {}
|
673
|
-
|
674
|
-
# helper method, invoked in Event::run spec
|
675
|
-
def test_event_run_method(event, version, args = {})
|
676
|
-
$test_event_run_hash[:event] = event
|
677
|
-
$test_event_run_hash[:project] = event.project
|
678
|
-
$test_event_run_hash[:version] = version
|
679
|
-
$test_event_run_hash[:key1] = args[:key1]
|
680
|
-
$test_event_run_hash[:some] = args[:some]
|
681
|
-
$test_event_run_hash[:answer] = args[:answer]
|
682
|
-
end
|
683
|
-
|
684
|
-
def error_generating_method(event, version, args = {})
|
685
|
-
raise RuntimeError
|
686
|
-
end
|
687
|
-
|
688
|
-
$project_released_test_handler_flags = []
|
689
|
-
|
690
|
-
def project_released_test_handlerAAA(event, version, args = {})
|
691
|
-
$project_released_test_handler_flags << "AAA"
|
692
|
-
end
|
693
|
-
|
694
|
-
def project_released_test_handlerBBB(event, version, args = {})
|
695
|
-
$project_released_test_handler_flags << "BBB"
|
696
|
-
end
|
697
|
-
|
698
|
-
def project_released_test_handlerCCC(event, version, args = {})
|
699
|
-
$project_released_test_handler_flags << "CCC"
|
700
|
-
end
|
701
|
-
|
702
|
-
def project_released_test_handlerDDD(event, version, args = {})
|
703
|
-
$project_released_test_handler_flags << "DDD"
|
704
|
-
|
705
|
-
args.each { |k,v|
|
706
|
-
$project_released_test_handler_flags << "#{k}=#{v}"
|
707
|
-
}
|
708
|
-
end
|
709
|
-
|
710
|
-
def project_released_test_handlerEEE(event, version, args = {})
|
711
|
-
$project_released_test_handler_flags << "EEE"
|
712
|
-
end
|
713
|
-
|
714
|
-
def project_released_test_handlerFFF(event, version, args = {})
|
715
|
-
$project_released_test_handler_flags << "FFF"
|
716
|
-
end
|
717
|
-
|
718
|
-
def project_released_test_handlerGGG(event, version, args = {})
|
719
|
-
$project_released_test_handler_flags << "GGG"
|
720
|
-
end
|
721
|
-
|