rightimage_tools 0.2.0 → 0.2.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.
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ Jeweler::Tasks.new do |gem|
21
21
  gem.homepage = "http://github.com/rightscale/rightimage_tools"
22
22
  gem.license = "MIT"
23
23
  gem.summary = %Q{A set of tools to support the building of RightImages}
24
- gem.files = %w(LICENSE.txt VERSION README.rdoc Rakefile Gemfile) + FileList["{bin,lib}/**/*"].to_a
24
+ gem.files = %w(LICENSE.txt VERSION README.rdoc Rakefile Gemfile) + FileList["{bin,lib,spec}/**/*"].to_a
25
25
  gem.executables = %w(image_mover mci_merge update_s3_index)
26
26
  gem.description = gem.summary
27
27
  gem.email = "peter.schroeter@rightscale.com"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/lib/util.rb CHANGED
@@ -29,7 +29,10 @@ module RightImage
29
29
  end
30
30
 
31
31
  def self.rightimage_package_version(version, build_number=nil)
32
- raise "ERROR: version must be a 'N.N' format." unless version.to_s =~ /^[0-9]*\.[0-9]*$/
32
+ unless version.to_s =~ /^[0-9]*\.[0-9]*$/ or
33
+ version.to_s =~ /^2\d\d\d\.\d\d.\d\d$/
34
+ raise ArgumentError, "rightimage version must be a 'N.N' or 'YYYY.MM.DD' format."
35
+ end
33
36
  ver = "#{version.to_s}"
34
37
  ver << ".#{build_number}" if build_number
35
38
  ver
@@ -47,4 +50,4 @@ module RightImage
47
50
 
48
51
 
49
52
  end
50
- end
53
+ end
@@ -0,0 +1,30 @@
1
+ require 'flexmock/rspec'
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+
4
+ describe RightImage::IdList do
5
+ before(:each) do
6
+ mock_logger = flexmock('Logger')
7
+ mock_logger.should_receive(:info)
8
+
9
+ @id_list = RightImage::IdList.new(mock_logger)
10
+ @id_list.clear
11
+ #{"ami-96f200ff":{"storage_type":"EBS"},"ami-8af200e3":{}}
12
+ #{"ami-08f30161":{"storage_type":"EBS"},"ami-fcf20095":{"storage_type":"EBS"}}
13
+ @id_list.add("ami-8af200e3\n")
14
+
15
+ @id_list = RightImage::IdList.new(mock_logger)
16
+ @id_list.add("ami-foo\n", "EBS")
17
+
18
+ @images = @id_list.to_hash
19
+ end
20
+
21
+ it "should contain two images" do
22
+ @images.size.should == 2
23
+ end
24
+
25
+ it "should contain one EBS images" do
26
+ ebs_images = @images.select { |k, v| v["storage_type"] && v["storage_type"] == "EBS" }
27
+ ebs_images.size.should == 1
28
+ end
29
+
30
+ end
data/spec/mci_spec.rb ADDED
@@ -0,0 +1,97 @@
1
+ require 'flexmock/rspec'
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+
4
+ describe RightImageTools::MCI do
5
+
6
+ before :each do
7
+ @mci = RightImageTools::MCI.new
8
+
9
+ @mock_mci_name = "Mock_RightImage_Ubuntu_10.04_x64_v5.7"
10
+ @mock_ami = "ami-2ehahaha"
11
+
12
+ @mock_mci = flexmock(MultiCloudImage,
13
+ :is_head_version => true,
14
+ :name => @mock_mci_name,
15
+ :rs_id => "10000",
16
+ :version=>0,
17
+ :href=>"https://my.rightscale.com/api/acct/99999/multi_cloud_images/10000")
18
+
19
+ @mock_mci_setting1 = flexmock(MultiCloudImageCloudSettingInternal,
20
+ :href=>"https://my.rightscale.com/api/acct/99999/multi_cloud_image_cloud_settings/20000",
21
+ :aws_instance_type =>"m1.large",
22
+ :image_name => @mock_mci_name,
23
+ :image_href => "https://my.rightscale.com/api/acct/0/ec2_images/#{@mock_ami}?cloud_id=5",
24
+ :cloud_id=>5,
25
+ :cloud=>"AWS AP-Tokyo")
26
+
27
+ @mock_mci_i = flexmock(MultiCloudImageInternal,
28
+ :is_head_version => @mock_mci.is_head_version,
29
+ :name=>@mock_mci.name,
30
+ :rs_id => @mock_mci.rs_id,
31
+ :version=>@mock_mci.version,
32
+ :href=>@mock_mci.href,
33
+ :multi_cloud_image_cloud_settings=>[@mock_mci_setting1])
34
+ end
35
+
36
+ # it "finds a MCI for gateway cloud (cloudstack)" do
37
+ # pending "TODO"
38
+ # end
39
+ # it "creates a MCI for gateway cloud (cloudstack)" do
40
+ # pending "TODO"
41
+ # end
42
+ # it "associates an image for a gateway cloud (cloudstack)" do
43
+ # pending "TODO"
44
+ # end
45
+ # it "replaces an image association for a gateway cloud (cloudstack)" do
46
+ # pending "TODO"
47
+ # end
48
+ #
49
+ it "finds a MCI for EC2 cloud" do
50
+ flexmock(MultiCloudImage).should_receive(:find_all).and_return([@mock_mci])
51
+ flexmock(MultiCloudImageInternal).should_receive(:find).with(10000).and_return(@mock_mci_i)
52
+
53
+ @mci.find_mci(6, @mock_mci_name).rs_id.should == "10000"
54
+ end
55
+ it "creates a MCI for EC2 mock cloud" do
56
+ flexmock(MultiCloudImageInternal).should_receive(:create).with(
57
+ :name=>@mock_mci_name,
58
+ :description => "blah"
59
+ ).and_return(flexmock(MultiCloudImageInternal))
60
+ @mci.create_mci(6, @mock_mci_name, "blah")
61
+ end
62
+
63
+ it "associates an image to an EC2 cloud" do
64
+ flexmock(MultiCloudImage).should_receive(:find_all).and_return([@mock_mci])
65
+ flexmock(MultiCloudImageInternal).should_receive(:find).with(10000).and_return(@mock_mci_i)
66
+ flexmock(Tag).should_receive(:set).and_return(flexmock(Tag, :code=>"204"))
67
+ flexmock(MultiCloudImageCloudSettingInternal).should_receive(:create)
68
+
69
+ @mci.add_image_to_mci(
70
+ :cloud_id=>6,
71
+ :name=>@mock_mci_name,
72
+ :image_id=>"ami-b1ahb1ah")
73
+ end
74
+
75
+ it "replaces an image association for an EC2 cloud" do
76
+ flexmock(MultiCloudImage).should_receive(:find_all).and_return([@mock_mci])
77
+ flexmock(MultiCloudImageInternal).should_receive(:find).with(10000).and_return(@mock_mci_i)
78
+ flexmock(Tag).should_receive(:set).and_return(flexmock(Tag, :code=>"204"))
79
+ flexmock(MultiCloudImageCloudSettingInternal).should_receive(:destroy).and_return(flexmock("Response",:code=>"200"))
80
+ flexmock(MultiCloudImageCloudSettingInternal).should_receive(:create)
81
+
82
+ @mci.add_image_to_mci(
83
+ :cloud_id=>5,
84
+ :name=>@mock_mci_name,
85
+ :image_id=>"ami-b1ahb1ah")
86
+ end
87
+
88
+ it "sets a default description correctly" do
89
+ flexmock(MultiCloudImageInternal).should_receive(:create).with(
90
+ :name=>@mock_mci_name,
91
+ :description => "Development build: Ubuntu 10.04 with 64-bit architecture (x64) and RightLink 5.7."
92
+ ).and_return(@mock_mci)
93
+
94
+ @mci.create_mci(5, @mock_mci_name)
95
+ end
96
+
97
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format=nested
@@ -0,0 +1,19 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rubygems'
4
+ require 'rspec'
5
+ require 'rightimage_tools'
6
+ require 'flexmock'
7
+ require 'fileutils'
8
+ require 'logger'
9
+
10
+
11
+ # Requires supporting files with custom matchers and macros, etc,
12
+ # in ./support/ and its subdirectories.
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
14
+ Dir["#{File.dirname(__FILE__)}/../lib/**/*.rb"].each {|f| require f}
15
+
16
+ RSpec.configure do |config|
17
+ config.mock_with :flexmock
18
+ end
19
+
data/spec/util_spec.rb ADDED
@@ -0,0 +1,254 @@
1
+ require 'flexmock/rspec'
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+
4
+ PREFIX = "image_prefix"
5
+ OS_NAME = "os_name"
6
+ OS_VERSION = "os_version"
7
+ OS_ARCH = "os_arch"
8
+ OS_MODIFER = "os_modifier"
9
+ STORAGE_TYPE = "storage_type"
10
+ RELEASE_LEVEL = "Beta"
11
+ RIGHT_IMAGE_VERSION = "1.20"
12
+ SUFFIX = "suffix"
13
+
14
+
15
+ describe RightImage::Util, ".create_mci_name" do
16
+ before(:each) do
17
+
18
+ @name = RightImage::Util.create_mci_name(PREFIX,
19
+ OS_NAME,
20
+ OS_VERSION,
21
+ OS_ARCH ,
22
+ OS_MODIFER,
23
+ "1.20",
24
+ STORAGE_TYPE,
25
+ RELEASE_LEVEL, SUFFIX)
26
+ end
27
+
28
+ it "should not have any blank fields" do
29
+ @name.include?("__").should == false
30
+ end
31
+
32
+ it "should display two digit version number" do
33
+ (@name =~ /_v[0-9]\.[0-9][0-9]/).should_not == nil
34
+ end
35
+
36
+ it "should display prefix" do
37
+ @name.include?(PREFIX).should == true
38
+ end
39
+
40
+ it "should display OS_NAME" do
41
+ @name.include?(OS_NAME).should == true
42
+ end
43
+
44
+ it "should display OS_VERSION" do
45
+ @name.include?(OS_VERSION).should == true
46
+ end
47
+
48
+ it "should display OS_ARCH" do
49
+ @name.include?(OS_ARCH).should == true
50
+ end
51
+
52
+ it "should display OS_MODIFER" do
53
+ @name.include?(OS_MODIFER).should == true
54
+ end
55
+
56
+ it "should display RIGHT_IMAGE_VERSION" do
57
+ @name.include?(RIGHT_IMAGE_VERSION.to_s).should == true
58
+ end
59
+
60
+ it "should display STORAGE_TYPE" do
61
+ @name.include?(STORAGE_TYPE).should == true
62
+ end
63
+
64
+ it "should display RELEASE_LEVEL" do
65
+ @name.include?(RELEASE_LEVEL).should == true
66
+ end
67
+
68
+ it "should display SUFFIX" do
69
+ @name.include?(SUFFIX.capitalize).should == true
70
+ end
71
+ end
72
+
73
+ describe RightImage::Util, ".create_mci_name S3" do
74
+ before(:each) do
75
+ @name = RightImage::Util.create_mci_name(PREFIX,
76
+ OS_NAME,
77
+ OS_VERSION,
78
+ OS_ARCH ,
79
+ OS_MODIFER,
80
+ 1.20,
81
+ "S3",
82
+ RELEASE_LEVEL, SUFFIX)
83
+ end
84
+
85
+ it "should not have any blank fields" do
86
+ @name.include?("__").should == false
87
+ end
88
+
89
+ it "should not display S3" do
90
+ @name.include?("S3").should_not == true
91
+ end
92
+ end
93
+
94
+
95
+ describe RightImage::Util, ".create_mci_name GA" do
96
+
97
+ before(:each) do
98
+ @name = RightImage::Util.create_mci_name(PREFIX,
99
+ OS_NAME,
100
+ OS_VERSION,
101
+ OS_ARCH ,
102
+ OS_MODIFER,
103
+ 1.20,
104
+ STORAGE_TYPE,
105
+ "GA", SUFFIX)
106
+ end
107
+
108
+ it "should not have any blank fields" do
109
+ @name.include?("__").should == false
110
+ end
111
+
112
+ it "should not display GA" do
113
+ @name.include?("GA").should_not == true
114
+ end
115
+ end
116
+
117
+ describe RightImage::Util, "rightimage_version" do
118
+
119
+ it "should display two digit version number" do
120
+ @version = RightImage::Util.rightimage_version(4.3)
121
+ (@version =~ /^[0-9]\.[0-9]$/).should_not == nil
122
+ end
123
+
124
+ it "should display three digit version number" do
125
+ @version = RightImage::Util.rightimage_version(4.3, 2)
126
+ (@version =~ /^[0-9]\.[0-9]\.[0-9]$/).should_not == nil
127
+ end
128
+
129
+ it "should display four digit version number" do
130
+ @version = RightImage::Util.rightimage_version(4.3, 2, 1)
131
+ (@version =~ /^[0-9]\.[0-9]\.[0-9]\.[0-9]$/).should_not == nil
132
+ end
133
+
134
+ it "should hide fourth digit if zero" do
135
+ @version = RightImage::Util.rightimage_version(4.3, 2, 0)
136
+ (@version =~ /^[0-9]\.[0-9]\.[0-9]$/).should_not == nil
137
+ end
138
+
139
+ it "should fail if version is N.N.N format" do
140
+ lambda {
141
+ @version = RightImage::Util.rightimage_version("4.3.5")
142
+ }.should raise_error(Exception)
143
+ end
144
+
145
+ it "should fail if version is N format" do
146
+ lambda {
147
+ @version = RightImage::Util.rightimage_version(4)
148
+ }.should raise_error(Exception)
149
+ end
150
+
151
+ end
152
+
153
+ describe RightImage::Util, ".create_image_name GA" do
154
+
155
+ before(:each) do
156
+ @name = RightImage::Util.create_image_name("RightImage", \
157
+ "osname", \
158
+ "9.10", \
159
+ "x64", \
160
+ nil, \
161
+ 1.20, \
162
+ 3, \
163
+ 0,
164
+ "S3",
165
+ "GA")
166
+ end
167
+
168
+ it "should not have any blank fields" do
169
+ @name.include?("__").should == false
170
+ end
171
+
172
+ it "should display a three digit version number without zero build digit" do
173
+ (@name =~ /_v[0-9]\.[0-9]\.[0-9]/).should_not == nil
174
+ end
175
+
176
+ it "should display version number without 4th build digit" do
177
+ (@name =~ /_v[0-9]\.[0-9]\.[0-9]\.0/).should == nil
178
+ end
179
+
180
+ it "should not display GA" do
181
+ @name.include?("GA").should == false
182
+ end
183
+
184
+ it "should not display S3" do
185
+ @name.include?("S3").should == false
186
+ end
187
+
188
+ it "should display RightImage" do
189
+ @name.include?("RightImage").should == true
190
+ end
191
+
192
+ it "should include trailing zero on version number" do
193
+ @name.include?("9.10").should == true
194
+ end
195
+ end
196
+
197
+ describe RightImage::Util, ".create_image_name Beta EBS" do
198
+ before(:each) do
199
+ @name = RightImage::Util.create_image_name("RightImage", \
200
+ "osname", \
201
+ "99.99", \
202
+ "x64", \
203
+ nil, \
204
+ 1.2, \
205
+ 3, \
206
+ 4,
207
+ "EBS",
208
+ "Beta")
209
+ end
210
+
211
+ it "should not have any blank fields" do
212
+ @name.include?("__").should == false
213
+ end
214
+
215
+ it "should display a four digit version number" do
216
+ (@name =~ /_v[0-9]\.[0-9]\.[0-9]\.[0-9]/).should_not == nil
217
+ end
218
+
219
+ it "should display Beta" do
220
+ @name.include?("Beta").should == true
221
+ end
222
+
223
+ it "should display EBS" do
224
+ @name.include?("EBS").should == true
225
+ end
226
+ end
227
+
228
+ describe RightImage::Util, ".create_image_name Alpha S3 Dev" do
229
+ before(:each) do
230
+ @name = RightImage::Util.create_image_name("RightImage", \
231
+ "osname", \
232
+ "99.99", \
233
+ "x64", \
234
+ nil, \
235
+ 1.2, \
236
+ 3, \
237
+ 4,
238
+ "EBS",
239
+ "Alpha",
240
+ "dev0")
241
+ end
242
+
243
+ it "should not have any blank fields" do
244
+ @name.include?("__").should == false
245
+ end
246
+
247
+ it "should display Alpha" do
248
+ @name.include?("Alpha").should == true
249
+ end
250
+
251
+ it "should display capitalized dev0" do
252
+ @name.include?("Dev0").should == true
253
+ end
254
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rightimage_tools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Peter Schroeter
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-27 00:00:00 Z
18
+ date: 2012-03-02 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -146,6 +146,11 @@ files:
146
146
  - lib/rightimage_tools.rb
147
147
  - lib/s3_html_indexer.rb
148
148
  - lib/util.rb
149
+ - spec/id_list_spec.rb
150
+ - spec/mci_spec.rb
151
+ - spec/spec.opts
152
+ - spec/spec_helper.rb
153
+ - spec/util_spec.rb
149
154
  homepage: http://github.com/rightscale/rightimage_tools
150
155
  licenses:
151
156
  - MIT