simp-rake-helpers 4.1.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/simp/yum.rb ADDED
@@ -0,0 +1,209 @@
1
+ module Simp
2
+ # Various utilities for dealing with YUM repos
3
+ class Simp::YUM
4
+
5
+ class Error < StandardError
6
+ end
7
+
8
+ require 'tmpdir'
9
+ require 'facter'
10
+ require 'simp/rpm'
11
+
12
+ attr_reader :yum_conf
13
+
14
+ def initialize(yum_conf, initialize_cache = false)
15
+ if File.exist?(yum_conf)
16
+ @yum_conf = File.absolute_path(yum_conf)
17
+ else
18
+ raise(Error, "Could not find yum configuration at '#{yum_conf}'")
19
+ end
20
+
21
+ # Only need to look these up once!
22
+ @@yum_cmd ||= %x(which yum).strip
23
+ raise(Error, "Error: Could not find 'yum'. Please install and try again.") if @@yum_cmd.empty?
24
+
25
+ tmp_dir = ENV['TMPDIR'] || '/tmp'
26
+
27
+ # Ensure that yumdownloader uses a fresh cache directory for each run of a given platform
28
+ @@yum_cache ||= File.join(tmp_dir, 'yum_cache-' +
29
+ Facter.fact('operatingsystem').value + '-' +
30
+ Facter.fact('operatingsystemmajrelease').value + '-' +
31
+ Facter.fact('architecture').value)
32
+
33
+ FileUtils.mkdir_p(@@yum_cache)
34
+
35
+ @@yum ||= "TMPDIR=#{@@yum_cache} #{@@yum_cmd} -c #{@yum_conf}"
36
+
37
+ @@yumdownloader_cmd ||= %x(which yumdownloader).strip
38
+ raise(Error, "Error: Could not find 'yumdownloader'. Please install and try again.") if @@yumdownloader_cmd.empty?
39
+
40
+ @@yumdownloader ||= "TMPDIR=#{@@yum_cache} #{@@yumdownloader_cmd} -c #{@yum_conf}"
41
+
42
+ @@curl ||= %x(which curl).strip
43
+ raise(Error, "Error: Could not find 'curl'. Please install and try again.") if @@curl.empty?
44
+
45
+ @@file ||= %x(which file).strip
46
+ raise(Error, "Error: Could not find 'file'. Please install and try again.") if @@file.empty?
47
+
48
+ generate_cache if initialize_cache
49
+ end
50
+
51
+ def clean_yum_cache_dir
52
+ # Make this as safe as we can
53
+ if @@yum_cache =~ /yum_cache/
54
+ FileUtils.remove_entry(@@yum_cache)
55
+ end
56
+ end
57
+
58
+ def generate_cache
59
+ puts "Attempting to generate build-specific YUM cache from\n #{@yum_conf}"
60
+
61
+ %x(#{@@yum} clean all 2>/dev/null)
62
+ %x(#{@@yum} makecache 2>/dev/null)
63
+
64
+ unless $?.success?
65
+ puts "WARNING: Unable to generate build-specific YUM cache from #{@yum_conf}"
66
+ end
67
+ end
68
+
69
+ # Create a reasonable YUM config file
70
+ # * yum_tmp => The directory in which to store the YUM DB and any other temporary files
71
+ #
72
+ # Returns the location of the YUM configuration
73
+ def self.generate_yum_conf(yum_dir=nil)
74
+ yum_dir ||= Dir.pwd
75
+
76
+ raise(Error, "Could not find YUM data dir at '#{yum_dir}'") unless File.directory?(yum_dir)
77
+
78
+ yum_conf = nil
79
+ Dir.chdir(yum_dir) do
80
+ # Create the target directory
81
+ yum_tmp = File.join('packages','yum_tmp')
82
+
83
+ FileUtils.mkdir_p(yum_tmp) unless File.directory?(yum_tmp)
84
+
85
+ yum_cache = File.expand_path('yum_cache', yum_tmp)
86
+ FileUtils.mkdir_p(yum_cache) unless File.directory?(yum_cache)
87
+
88
+ yum_logfile = File.expand_path('yum.log', yum_tmp)
89
+
90
+ repo_dirs = []
91
+
92
+ # Add the global directory
93
+ repo_dirs << File.expand_path('../my_repos')
94
+
95
+ if File.directory?('my_repos')
96
+ # Add the local user repos if they exist
97
+ repo_dirs << File.expand_path('my_repos')
98
+ else
99
+ # Add the default Internet repos otherwise
100
+ repo_dirs << File.expand_path('repos')
101
+ end
102
+
103
+ # Create our YUM config file
104
+ yum_conf = File.expand_path('yum.conf', yum_tmp)
105
+
106
+ File.open(yum_conf, 'w') do |fh|
107
+ fh.puts <<-EOM.gsub(/^\s+/,'')
108
+ [main]
109
+ keepcache = 0
110
+ persistdir = #{yum_cache}
111
+ logfile = #{yum_logfile}
112
+ exactarch = 1
113
+ obsoletes = 0
114
+ gpgcheck = 0
115
+ plugins = 1
116
+ reposdir = #{repo_dirs.join(' ')}
117
+ assumeyes = 1
118
+ EOM
119
+ end
120
+ end
121
+
122
+ return yum_conf
123
+ end
124
+
125
+ # Returns the full name of the latest package of the given name
126
+ #
127
+ # Returns nil if nothing found
128
+ def available_package(rpm)
129
+ yum_output = %x(#{@@yum} -C list #{rpm} 2>/dev/null)
130
+
131
+ found_rpm = nil
132
+ if $?.success?
133
+ pkg_name, pkg_version = yum_output.lines.last.strip.split(/\s+/)
134
+ pkg_name, pkg_arch = pkg_name.split('.')
135
+
136
+ found_rpm = %(#{pkg_name}-#{pkg_version}.#{pkg_arch}.rpm)
137
+ end
138
+
139
+ return found_rpm
140
+ end
141
+
142
+ def get_sources(rpm)
143
+ sources = %x(#{@@yumdownloader} --urls #{File.basename(rpm,'.rpm')} 2>/dev/null).split("\n").grep(%r(\.rpm$))
144
+
145
+ raise(Error, "No sources found for '#{rpm}'") if sources.empty?
146
+
147
+ return sources
148
+ end
149
+
150
+ def get_source(rpm, arch=nil)
151
+ sources = get_sources(rpm)
152
+
153
+ if arch
154
+ native_sources = sources.grep(%r((#{arch}|noarch)\.rpm$))
155
+
156
+ if native_sources.size > 1
157
+ # We can't have more than one native source
158
+ raise(Error, "More than one native source found for #{rpm}:\n * #{native_sources.join("\n *")}")
159
+ end
160
+ end
161
+
162
+ return sources.first
163
+ end
164
+
165
+ def download(rpm, opts={:target_dir => nil})
166
+ target_dir = Dir.pwd
167
+
168
+ if opts[:target_dir]
169
+ target_dir = File.absolute_path(opts[:target_dir])
170
+ end
171
+
172
+ Dir.mktmpdir do |dir|
173
+ Dir.chdir(dir) do
174
+ # If just passed an RPM name, use yumdownloader
175
+ if rpm !~ %r(://)
176
+ # In case someone passed a path
177
+ rpm_name = rpm.split(File::SEPARATOR).last
178
+
179
+ #FIXME Should really report stderr output so user can
180
+ # diagnose the problem
181
+ %x(#{@@yumdownloader} #{File.basename(rpm_name, '.rpm')} 2>/dev/null)
182
+ else
183
+ # If passed a URL, curl it and fall back to yumdownloader
184
+ rpm_name = rpm.split('/').last
185
+
186
+ %x(#{@@curl} -L --max-redirs 10 -s -o #{rpm_name} -k #{rpm})
187
+
188
+ # Check what we've just downloaded
189
+ if !(File.exist?(rpm_name) || %x(#{@@file} #{rpm_name}).include('RPM'))
190
+ # Fall back on yumdownloader
191
+ FileUtils.rm_f(rpm_name)
192
+
193
+ %x(#{@@yumdownloader} #{File.basename(rpm_name, '.rpm')} 2> /dev/null)
194
+ end
195
+ end
196
+
197
+ rpms = Dir.glob('*.rpm')
198
+ raise(Error, "Could not find any remote RPMs for #{rpm}") if rpms.empty?
199
+
200
+ # Copy over all of the RPMs
201
+ rpms.each do |new_rpm|
202
+ FileUtils.mkdir_p(target_dir)
203
+ FileUtils.mv(new_rpm, target_dir)
204
+ end
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,42 @@
1
+ Name: testpackage
2
+ Version: 1
3
+ Release: 0%{?dist}
4
+ Summary: dummy test package #2
5
+ BuildArch: noarch
6
+
7
+ License: Apache-2.0
8
+ URL: http://foo.bar
9
+
10
+ %description
11
+ A dummy package used to test Simp::RPM methods
12
+
13
+ %prep
14
+ exit 0
15
+
16
+ %build
17
+ exit 0
18
+
19
+
20
+ %install
21
+ exit 0
22
+
23
+ %clean
24
+ exit 0
25
+
26
+ %files
27
+ %doc
28
+
29
+
30
+ %package doc
31
+ Summary: Documentation for dummy test package #2
32
+ License: Apache-2.0
33
+ Version: 1.0.1
34
+ Release: 2
35
+
36
+ %description doc
37
+ Documentation for the 2nd dummy package used to test Simp::RPM methods
38
+
39
+
40
+ %changelog
41
+ * Wed Jun 10 2015 nobody
42
+ - some comment
@@ -1,4 +1,4 @@
1
- Name: testpackage-multi-1
1
+ Name: testpackage
2
2
  Version: 1
3
3
  Release: 0
4
4
  Summary: dummy test package #2
@@ -27,12 +27,14 @@ exit 0
27
27
  %doc
28
28
 
29
29
 
30
- %package testpackage-multi-2
31
- Summary: dummy test package #2
30
+ %package doc
31
+ Summary: Documentation for dummy test package #2
32
32
  License: Apache-2.0
33
+ Version: 1.0.1
34
+ Release: 2
33
35
 
34
- %description testpackage-multi-2
35
- A dummy package used to test Simp::RPM methods
36
+ %description doc
37
+ Documentation for the 2nd dummy package used to test Simp::RPM methods
36
38
 
37
39
 
38
40
  %changelog
@@ -3,48 +3,323 @@ require 'spec_helper'
3
3
 
4
4
  describe Simp::RPM do
5
5
  before :all do
6
+ Simp::RPM.stubs(:system_dist).returns('.testdist')
7
+
6
8
  dir = File.expand_path( 'files', File.dirname( __FILE__ ) )
7
9
  @spec_file = File.join( dir, 'testpackage.spec' )
8
10
  @spec_obj = Simp::RPM.new( @spec_file )
11
+
9
12
  @m_spec_file = File.join( dir, 'testpackage-multi.spec' )
10
- @m_spec_obj = Simp::RPM.new( @spec_file )
13
+ @m_spec_obj = Simp::RPM.new( @m_spec_file )
14
+
11
15
  @rpm_file = File.join( dir, 'testpackage-1-0.noarch.rpm' )
12
- @rpm_obj = Simp::RPM.new( @spec_file )
16
+ @rpm_obj = Simp::RPM.new( @rpm_file )
17
+
18
+ @d_spec_file = File.join( dir, 'testpackage-dist.spec' )
19
+ @d_spec_obj = Simp::RPM.new( @d_spec_file )
20
+
21
+ @d_rpm_file = File.join( dir, 'testpackage-1-0.el7.noarch.rpm' )
22
+ @d_rpm_obj = Simp::RPM.new( @d_rpm_file )
23
+
24
+ #FIXME
25
+ # @signed_rpm_file = File.join( dir, 'testpackage-1-0.noarch.rpm' )
26
+ # @signed_rpm_obj = Simp::RPM.new( @signed_rpm_file )
13
27
  end
14
28
 
15
- describe "#initialize" do
29
+ describe 'class #initialize' do
16
30
 
17
- it "initializes w/RPM (smoke test)" do
31
+ it 'initializes w/unsigned RPM (smoke test)' do
18
32
  expect( @rpm_obj.class ).to eq Simp::RPM
19
33
  end
20
34
 
21
- it "initializes w/spec file (smoke test)" do
35
+ #FIXME
36
+ # it 'initializes w/signed RPM (smoke test)' do
37
+ # expect( @signed_rpm_obj.class ).to eq Simp::RPM
38
+ # end
39
+
40
+ it 'initializes w/spec file (smoke test)' do
22
41
  expect( @spec_obj.class ).to eq Simp::RPM
23
42
  end
24
43
 
25
- it "initializes w/multi-package spec file (smoke test)" do
44
+ it 'initializes w/multi-package spec file (smoke test)' do
26
45
  expect( @m_spec_obj.class ).to eq Simp::RPM
27
46
  end
28
47
 
48
+ it 'fails to initialize when rpm source cannot be opened' do
49
+ expect{ Simp::RPM.new('/does/not/exist/') }.to raise_error(RuntimeError)
50
+ end
51
+ end
52
+
53
+ describe 'getter methods' do
54
+ context '#packages' do
55
+ it 'returns packages' do
56
+ expect( @rpm_obj.packages ).to eq ['testpackage']
57
+ # expect( @signed_rpm_obj.packages ).to eq ['testpackage']
58
+ expect( @spec_obj.packages ).to eq ['testpackage']
59
+ expect( @m_spec_obj.packages ).to eq ['testpackage','testpackage-doc']
60
+ end
61
+ end
62
+
63
+ context '#basename' do
64
+ it 'returns basename' do
65
+ expect( @rpm_obj.basename ).to eq 'testpackage'
66
+ # expect( @signed_rpm_obj.basename ).to eq 'testpackage'
67
+ expect( @spec_obj.basename ).to eq 'testpackage'
68
+ expect( @m_spec_obj.basename ).to eq 'testpackage'
69
+ expect( @m_spec_obj.basename('testpackage') ).to eq 'testpackage'
70
+ expect( @m_spec_obj.basename('testpackage-doc') ).to eq 'testpackage-doc'
71
+ end
72
+
73
+ it 'fails when invalid package specified' do
74
+ expect { @rpm_obj.basename('oops') }.to raise_error(ArgumentError)
75
+ # expect { @signed_rpm_obj.basename('oops') }.to raise_error(ArgumentError)
76
+ expect { @spec_obj.basename('oops') }.to raise_error(ArgumentError)
77
+ expect { @m_spec_obj.basename('oops') }.to raise_error(ArgumentError)
78
+ end
79
+ end
80
+
81
+ context '#version' do
82
+ it 'returns version' do
83
+ expect( @rpm_obj.version ).to eq '1'
84
+ # expect( @signed_rpm_obj.version ).to eq '1'
85
+ expect( @spec_obj.version ).to eq '1'
86
+ expect( @m_spec_obj.version ).to eq '1'
87
+ expect( @m_spec_obj.version('testpackage') ).to eq '1'
88
+ expect( @m_spec_obj.version('testpackage-doc') ).to eq '1.0.1'
89
+ end
90
+
91
+ it 'fails when invalid package specified' do
92
+ expect { @rpm_obj.version('oops') }.to raise_error(ArgumentError)
93
+ # expect { @signed_rpm_obj.version('oops') }.to raise_error(ArgumentError)
94
+ expect { @spec_obj.version('oops') }.to raise_error(ArgumentError)
95
+ expect { @m_spec_obj.version('oops') }.to raise_error(ArgumentError)
96
+ end
97
+ end
98
+
99
+ context '#release' do
100
+ it 'returns release' do
101
+ expect( @rpm_obj.release ).to eq '0'
102
+ # expect( @signed_rpm_obj.release ).to eq '0'
103
+ expect( @spec_obj.release ).to eq '0'
104
+ expect( @m_spec_obj.release ).to eq '0'
105
+ expect( @m_spec_obj.release('testpackage') ).to eq '0'
106
+ expect( @m_spec_obj.release('testpackage-doc') ).to eq '2'
107
+ end
108
+
109
+ it 'fails when invalid package specified' do
110
+ expect { @rpm_obj.release('oops') }.to raise_error(ArgumentError)
111
+ # expect { @signed_rpm_obj.release('oops') }.to raise_error(ArgumentError)
112
+ expect { @spec_obj.release('oops') }.to raise_error(ArgumentError)
113
+ expect { @m_spec_obj.release('oops') }.to raise_error(ArgumentError)
114
+ end
115
+ end
116
+
117
+ context '#full_version' do
118
+ it 'returns full_version' do
119
+ expect( @rpm_obj.full_version ).to eq '1-0'
120
+ # expect( @signed_rpm_obj.full_version ).to eq '1-0'
121
+ expect( @spec_obj.full_version ).to eq '1-0'
122
+ expect( @m_spec_obj.full_version ).to eq '1-0'
123
+ expect( @m_spec_obj.full_version('testpackage') ).to eq '1-0'
124
+ expect( @m_spec_obj.full_version('testpackage-doc') ).to eq '1.0.1-2'
125
+ end
126
+
127
+ it 'fails when invalid package specified' do
128
+ expect { @rpm_obj.full_version('oops') }.to raise_error(ArgumentError)
129
+ # expect { @signed_rpm_obj.full_version('oops') }.to raise_error(ArgumentError)
130
+ expect { @spec_obj.full_version('oops') }.to raise_error(ArgumentError)
131
+ expect { @m_spec_obj.full_version('oops') }.to raise_error(ArgumentError)
132
+ end
133
+ end
134
+
135
+ context '#name' do
136
+ it 'returns name' do
137
+ expect( @rpm_obj.name ).to eq 'testpackage-1-0'
138
+ # expect( @signed_rpm_obj.name ).to eq 'testpackage-1-0'
139
+ expect( @spec_obj.name ).to eq 'testpackage-1-0'
140
+ expect( @m_spec_obj.name ).to eq 'testpackage-1-0'
141
+ expect( @m_spec_obj.name('testpackage') ).to eq 'testpackage-1-0'
142
+ expect( @m_spec_obj.name('testpackage-doc') ).to eq 'testpackage-doc-1.0.1-2'
143
+ end
144
+
145
+ it 'fails when invalid package specified' do
146
+ expect { @rpm_obj.name('oops') }.to raise_error(ArgumentError)
147
+ # expect { @signed_rpm_obj.name('oops') }.to raise_error(ArgumentError)
148
+ expect { @spec_obj.name('oops') }.to raise_error(ArgumentError)
149
+ expect { @m_spec_obj.name('oops') }.to raise_error(ArgumentError)
150
+ end
151
+ end
152
+
153
+ context '#arch' do
154
+ it 'returns arch' do
155
+ expect( @rpm_obj.arch ).to eq 'noarch'
156
+ # expect( @signed_rpm_obj.arch ).to eq 'noarch'
157
+ expect( @spec_obj.arch ).to eq 'noarch'
158
+ expect( @m_spec_obj.arch ).to eq 'noarch'
159
+ expect( @m_spec_obj.arch('testpackage') ).to eq 'noarch'
160
+ expect( @m_spec_obj.arch('testpackage-doc') ).to eq 'noarch'
161
+ end
162
+
163
+ it 'fails when invalid package specified' do
164
+ expect { @rpm_obj.arch('oops') }.to raise_error(ArgumentError)
165
+ # expect { @signed_rpm_obj.arch('oops') }.to raise_error(ArgumentError)
166
+ expect { @spec_obj.arch('oops') }.to raise_error(ArgumentError)
167
+ expect { @m_spec_obj.arch('oops') }.to raise_error(ArgumentError)
168
+ end
169
+ end
170
+
171
+ context '#signature' do
172
+ it 'returns signature' do
173
+ expect( @rpm_obj.signature ).to be nil
174
+ # expect( @signed_rpm_obj.signature ).to eq 'xxxx'
175
+ expect( @spec_obj.signature ).to be nil
176
+ expect( @m_spec_obj.signature ).to be nil
177
+ expect( @m_spec_obj.signature('testpackage') ).to be nil
178
+ expect( @m_spec_obj.signature('testpackage-doc') ).to be nil
179
+ end
180
+
181
+ it 'fails when invalid package specified' do
182
+ expect { @rpm_obj.signature('oops') }.to raise_error(ArgumentError)
183
+ # expect { @signed_rpm_obj.signature('oops') }.to raise_error(ArgumentError)
184
+ expect { @spec_obj.signature('oops') }.to raise_error(ArgumentError)
185
+ expect { @m_spec_obj.signature('oops') }.to raise_error(ArgumentError)
186
+ end
187
+ end
188
+
189
+ context '#rpm_name' do
190
+ it 'returns rpm_name' do
191
+ expect( @rpm_obj.rpm_name ).to eq 'testpackage-1-0.noarch.rpm'
192
+ # expect( @signed_rpm_obj.rpm_name ).to eq 'testpackage-1-0.noarch.rpm'
193
+ expect( @spec_obj.rpm_name ).to eq 'testpackage-1-0.noarch.rpm'
194
+ expect( @m_spec_obj.rpm_name ).to eq 'testpackage-1-0.noarch.rpm'
195
+ expect( @m_spec_obj.rpm_name('testpackage') ).to eq 'testpackage-1-0.noarch.rpm'
196
+ expect( @m_spec_obj.rpm_name('testpackage-doc') ).to eq 'testpackage-doc-1.0.1-2.noarch.rpm'
197
+ end
198
+
199
+ it 'fails when invalid package specified' do
200
+ expect { @rpm_obj.rpm_name('oops') }.to raise_error(ArgumentError)
201
+ # expect { @signed_rpm_obj.rpm_name('oops') }.to raise_error(ArgumentError)
202
+ expect { @spec_obj.rpm_name('oops') }.to raise_error(ArgumentError)
203
+ expect { @m_spec_obj.rpm_name('oops') }.to raise_error(ArgumentError)
204
+ end
205
+ end
206
+
207
+ context '#has_dist_tag?' do
208
+ it 'returns has_dist_tag?' do
209
+ expect( @rpm_obj.has_dist_tag?).to eq false
210
+ # expect( @signed_rpm_obj.has_dist_tag?).to eq false
211
+ expect( @d_rpm_obj.has_dist_tag?).to eq true
212
+ expect( @spec_obj.has_dist_tag?).to eq false
213
+ expect( @d_spec_obj.has_dist_tag?).to eq true
214
+ end
215
+
216
+ it 'fails when invalid package specified' do
217
+ expect { @rpm_obj.has_dist_tag?('oops') }.to raise_error(ArgumentError)
218
+ # expect { @signed_rpm_obj.has_dist_tag?('oops') }.to raise_error(ArgumentError)
219
+ expect { @d_rpm_obj.has_dist_tag?('oops') }.to raise_error(ArgumentError)
220
+ expect { @spec_obj.has_dist_tag?('oops') }.to raise_error(ArgumentError)
221
+ expect { @m_spec_obj.has_dist_tag?('oops') }.to raise_error(ArgumentError)
222
+ expect { @d_spec_obj.has_dist_tag?('oops') }.to raise_error(ArgumentError)
223
+ end
224
+ end
225
+
226
+ context '#dist' do
227
+ it 'returns dist' do
228
+ expect( @rpm_obj.dist ).to eq '.testdist'
229
+ expect( @d_rpm_obj.dist ).to eq '.el7'
230
+ expect( @spec_obj.dist ).to eq '.testdist'
231
+ expect( @d_spec_obj.dist ).to eq '.testdist'
232
+ end
233
+
234
+ it 'fails when invalid package specified' do
235
+ expect { @rpm_obj.dist('oops') }.to raise_error(ArgumentError)
236
+ # expect { @signed_rpm_obj.dist('oops') }.to raise_error(ArgumentError)
237
+ expect { @d_rpm_obj.dist('oops') }.to raise_error(ArgumentError)
238
+ expect { @spec_obj.dist('oops') }.to raise_error(ArgumentError)
239
+ expect { @m_spec_obj.dist('oops') }.to raise_error(ArgumentError)
240
+ expect { @d_spec_obj.dist('oops') }.to raise_error(ArgumentError)
241
+ end
242
+ end
243
+ end
244
+
245
+ =begin
246
+ describe '#newer? and #package_newer?' do
247
+ end
248
+
249
+ describe '#valid_package?' do
250
+ end
251
+
252
+ describe '.copy_wo_vcs?' do
29
253
  end
30
254
 
31
- describe ".get_info" do
32
- it "extracts correct information from a .spec file" do
255
+ describe '.execute?' do
256
+ end
257
+ =end
258
+
259
+
260
+ describe '.get_info' do
261
+ it 'extracts correct information from a .spec file' do
33
262
  info = Simp::RPM.get_info(@spec_file)
34
- expect( info.fetch( :name ) ).to eq 'testpackage'
263
+ expect( info.fetch( :basename ) ).to eq 'testpackage'
35
264
  expect( info.fetch( :version ) ).to eq '1'
265
+ expect( info.fetch( :release ) ).to eq '0'
266
+ expect( info.fetch( :full_version ) ).to eq '1-0'
267
+ expect( info.fetch( :name ) ).to eq 'testpackage-1-0'
268
+ expect( info.fetch( :arch ) ).to eq 'noarch'
269
+ expect( info[:signature] ).to be nil
270
+ expect( info.fetch( :rpm_name ) ).to eq 'testpackage-1-0.noarch.rpm'
36
271
  end
37
272
 
38
- it "extracts correct information from an .rpm file" do
273
+ it 'extracts correct information from an .rpm file' do
39
274
  info = Simp::RPM.get_info(@rpm_file)
40
- expect( info.fetch( :name ) ).to eq 'testpackage'
275
+ expect( info.fetch( :basename ) ).to eq 'testpackage'
41
276
  expect( info.fetch( :version ) ).to eq '1'
277
+ expect( info.fetch( :release ) ).to eq '0'
278
+ expect( info.fetch( :full_version ) ).to eq '1-0'
279
+ expect( info.fetch( :name ) ).to eq 'testpackage-1-0'
280
+ expect( info.fetch( :arch ) ).to eq 'noarch'
281
+ expect( info[:signature] ).to be nil
282
+ expect( info.fetch( :rpm_name ) ).to eq 'testpackage-1-0.noarch.rpm'
42
283
  end
43
284
 
44
- it "extracts correct information from the first entry from a multi-package .spec file" do
285
+ it 'extracts correct information for all entries from a multi-package .spec file' do
45
286
  info = Simp::RPM.get_info(@m_spec_file)
46
- expect( info.fetch( :name ) ).to eq 'testpackage-multi-1'
47
- expect( info.fetch( :version ) ).to eq '1'
287
+ expect( info.size ).to eq 2
288
+ expect( info[0].fetch( :basename ) ).to eq 'testpackage'
289
+ expect( info[0].fetch( :version ) ).to eq '1'
290
+ expect( info[0].fetch( :release ) ).to eq '0'
291
+ expect( info[0].fetch( :full_version ) ).to eq '1-0'
292
+ expect( info[0].fetch( :name ) ).to eq 'testpackage-1-0'
293
+ expect( info[0].fetch( :arch ) ).to eq 'noarch'
294
+ expect( info[0][:signature] ).to be nil
295
+ expect( info[0].fetch( :rpm_name ) ).to eq 'testpackage-1-0.noarch.rpm'
296
+
297
+ expect( info[1].fetch( :basename ) ).to eq 'testpackage-doc'
298
+ expect( info[1].fetch( :version ) ).to eq '1.0.1'
299
+ expect( info[1].fetch( :release ) ).to eq '2'
300
+ expect( info[1].fetch( :full_version ) ).to eq '1.0.1-2'
301
+ expect( info[1].fetch( :name ) ).to eq 'testpackage-doc-1.0.1-2'
302
+ expect( info[1].fetch( :arch ) ).to eq 'noarch'
303
+ expect( info[1][:signature] ).to be nil
304
+ expect( info[1].fetch( :rpm_name ) ).to eq 'testpackage-doc-1.0.1-2.noarch.rpm'
305
+ end
306
+
307
+ it 'fails to when rpm source cannot be opened ' do
308
+ expect{ Simp::RPM.get_info('/does/not/exist/') }.to raise_error(RuntimeError)
48
309
  end
49
310
  end
311
+
312
+ =begin
313
+ describe '.indent' do
314
+ end
315
+
316
+ describe '.create_rpm_build_metadata' do
317
+ end
318
+
319
+ describe '.load_key' do
320
+ end
321
+
322
+ describe '.signrpm' do
323
+ end
324
+ =end
50
325
  end