polisher 0.4 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|