fog-brightbox 1.7.1 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/lib/fog/brightbox/models/compute/server.rb +11 -1
- data/lib/fog/brightbox/models/storage/directory.rb +2 -1
- data/lib/fog/brightbox/models/storage/files.rb +3 -3
- data/lib/fog/brightbox/storage.rb +2 -1
- data/lib/fog/brightbox/version.rb +1 -1
- data/spec/fog/brightbox/storage/escape_spec.rb +62 -0
- data/spec/fog/brightbox/storage/files_spec.rb +88 -0
- data/spec/fog/brightbox/storage_spec.rb +34 -0
- data/spec/fog/compute/brightbox/server_spec.rb +49 -1
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fd48abde8380eb206f3b30abcb6000a8bec7c066d1913649efdde89719f0a79
|
4
|
+
data.tar.gz: b75f15aabc38798dcb1a8bcb13eb3e0b66e9ee9fe93beb91e462808d822f9fb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ea1059b94824d5ae37fda327001f94704a544fd29bfa7825627599cef850653fdcb55c18d493352af9bb1afd6864faf89c2d824da4baccd9fcdbd0d020096e4
|
7
|
+
data.tar.gz: 464af05ddefa022497cce27fb7535eaac5f9db282e32037e922780f0ab05f96eb1f72ccad07f9ad5860c5a2e62228a5a05c676ee83e666507d1a62191e7f3580
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
### 1.8.0 / 2022-08-31
|
2
|
+
|
3
|
+
Changes:
|
4
|
+
|
5
|
+
* Allow custom `volume_size` in server creation where supported
|
6
|
+
|
7
|
+
### 1.7.3 / 2022-08-17
|
8
|
+
|
9
|
+
Bug fixes:
|
10
|
+
|
11
|
+
* Fix to deduplicate forward slashes in `Storage::File#public_url` when object keys are prefixed with "/"
|
12
|
+
|
13
|
+
### 1.7.2 / 2022-08-17
|
14
|
+
|
15
|
+
Bug fixes:
|
16
|
+
|
17
|
+
* Fix in `Storage.escape` regexp which failed to handle dashes correctly and broke generated URLs.
|
18
|
+
|
1
19
|
### 1.7.1 / 2022-08-17
|
2
20
|
|
3
21
|
Bug fixes:
|
@@ -8,6 +8,7 @@ module Fog
|
|
8
8
|
include Fog::Brightbox::Compute::ResourceLocking
|
9
9
|
|
10
10
|
attr_accessor :volume_id
|
11
|
+
attr_accessor :volume_size
|
11
12
|
|
12
13
|
identity :id
|
13
14
|
attribute :resource_type
|
@@ -197,7 +198,16 @@ module Fog
|
|
197
198
|
options.merge!(:disk_encrypted => disk_encrypted) if disk_encrypted
|
198
199
|
|
199
200
|
if volume_id
|
200
|
-
options.merge!(:volumes => [:
|
201
|
+
options.merge!(:volumes => [{ volume: volume_id }])
|
202
|
+
elsif volume_size
|
203
|
+
options.merge!(
|
204
|
+
volumes: [
|
205
|
+
{
|
206
|
+
image: image_id,
|
207
|
+
size: volume_size
|
208
|
+
}
|
209
|
+
]
|
210
|
+
)
|
201
211
|
else
|
202
212
|
options.merge!(:image => image_id)
|
203
213
|
end
|
@@ -32,7 +32,8 @@ module Fog
|
|
32
32
|
|
33
33
|
def public_url
|
34
34
|
requires :key
|
35
|
-
@public_url ||=
|
35
|
+
@public_url ||= ::File.join(service.management_url.to_s,
|
36
|
+
Fog::Brightbox::Storage.escape(key, "/"))
|
36
37
|
end
|
37
38
|
|
38
39
|
def save
|
@@ -63,9 +63,9 @@ module Fog
|
|
63
63
|
|
64
64
|
def get_url(key)
|
65
65
|
requires :directory
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
return unless directory.public_url
|
67
|
+
|
68
|
+
::File.join(directory.public_url, Fog::Brightbox::Storage.escape(key, "/"))
|
69
69
|
end
|
70
70
|
|
71
71
|
def get_http_url(key, expires, options = {})
|
@@ -215,7 +215,8 @@ module Fog
|
|
215
215
|
|
216
216
|
# CGI.escape, but without special treatment on spaces
|
217
217
|
def self.escape(str, extra_exclude_chars = "")
|
218
|
-
|
218
|
+
# Includes fix to Regexp so "-" is correctly handled by placing last
|
219
|
+
str.gsub(/([^a-zA-Z0-9_.#{extra_exclude_chars}-]+)/) do
|
219
220
|
"%" + Regexp.last_match[1].unpack("H2" * Regexp.last_match[1].bytesize).join("%").upcase
|
220
221
|
end
|
221
222
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "fog/brightbox"
|
3
|
+
|
4
|
+
describe Fog::Brightbox::Storage, ".escape" do
|
5
|
+
describe "when only excluded characters are used" do
|
6
|
+
it "escapes no letters" do
|
7
|
+
str = ("A".."Z").to_a.join
|
8
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
9
|
+
assert_equal str, escaped
|
10
|
+
|
11
|
+
str = ("a".."z").to_a.join
|
12
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
13
|
+
assert_equal str, escaped
|
14
|
+
end
|
15
|
+
|
16
|
+
it "escapes no numbers" do
|
17
|
+
str = ("0".."9").to_a.join
|
18
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
19
|
+
assert_equal str, escaped
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not escape dashes" do
|
23
|
+
str = "test-pattern123"
|
24
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
25
|
+
assert_equal str, escaped
|
26
|
+
end
|
27
|
+
|
28
|
+
it "does not escape dots" do
|
29
|
+
str = "sample.demo"
|
30
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
31
|
+
assert_equal str, escaped
|
32
|
+
end
|
33
|
+
|
34
|
+
it "does not escape underscores" do
|
35
|
+
str = "file_name"
|
36
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
37
|
+
assert_equal str, escaped
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "when escaped characters are included" do
|
42
|
+
it "escapes those forward slashes" do
|
43
|
+
str = "test/pattern/123.txt"
|
44
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
45
|
+
assert_equal "test%2Fpattern%2F123.txt", escaped
|
46
|
+
end
|
47
|
+
|
48
|
+
it "escapes those backslashes" do
|
49
|
+
str = "test\\pattern\\123.txt"
|
50
|
+
escaped = Fog::Brightbox::Storage.escape(str)
|
51
|
+
assert_equal "test%5Cpattern%5C123.txt", escaped
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "when additional characters are excluded" do
|
56
|
+
it "escapes those characters" do
|
57
|
+
str = "test/pattern/123.txt"
|
58
|
+
escaped = Fog::Brightbox::Storage.escape(str, "/")
|
59
|
+
assert_equal "test/pattern/123.txt", escaped
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "fog/brightbox"
|
3
|
+
require "fog/brightbox/models/storage/directory"
|
4
|
+
require "fog/brightbox/models/storage/files"
|
5
|
+
|
6
|
+
describe Fog::Brightbox::Storage::Files do
|
7
|
+
describe "#get_url" do
|
8
|
+
before do
|
9
|
+
@options = {
|
10
|
+
:brightbox_client_id => "cli-12345",
|
11
|
+
:brightbox_secret => "1234567890",
|
12
|
+
:brightbox_storage_management_url => "https://management.url/v1/acc-12345"
|
13
|
+
}
|
14
|
+
@service = Fog::Brightbox::Storage.new(@options)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "when directory can generate URL" do
|
18
|
+
describe "with object prefixed by forward slash" do
|
19
|
+
it do
|
20
|
+
assert_equal "https://management.url/v1/acc-12345", @service.management_url.to_s
|
21
|
+
|
22
|
+
directory = Fog::Brightbox::Storage::Directory.new(
|
23
|
+
service: @service,
|
24
|
+
key: "container-name"
|
25
|
+
)
|
26
|
+
assert_equal "https://management.url/v1/acc-12345/container-name", directory.public_url
|
27
|
+
|
28
|
+
files = Fog::Brightbox::Storage::Files.new(
|
29
|
+
service: @service,
|
30
|
+
directory: directory
|
31
|
+
)
|
32
|
+
|
33
|
+
expected = "https://management.url/v1/acc-12345/container-name/object"
|
34
|
+
|
35
|
+
assert_equal expected, files.get_url("/object")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "when object is correctly named" do
|
40
|
+
it do
|
41
|
+
assert_equal "https://management.url/v1/acc-12345", @service.management_url.to_s
|
42
|
+
|
43
|
+
directory = Fog::Brightbox::Storage::Directory.new(
|
44
|
+
service: @service,
|
45
|
+
key: "container-name"
|
46
|
+
)
|
47
|
+
assert_equal "https://management.url/v1/acc-12345/container-name", directory.public_url
|
48
|
+
|
49
|
+
files = Fog::Brightbox::Storage::Files.new(
|
50
|
+
service: @service,
|
51
|
+
directory: directory
|
52
|
+
)
|
53
|
+
|
54
|
+
expected = "https://management.url/v1/acc-12345/container-name/object"
|
55
|
+
|
56
|
+
assert_equal expected, files.get_url("object")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "when no management URL" do
|
62
|
+
before do
|
63
|
+
@options = {
|
64
|
+
:brightbox_client_id => "cli-12345",
|
65
|
+
:brightbox_secret => "1234567890"
|
66
|
+
}
|
67
|
+
@service = Fog::Brightbox::Storage.new(@options)
|
68
|
+
end
|
69
|
+
|
70
|
+
it do
|
71
|
+
assert_equal "", @service.management_url.to_s
|
72
|
+
|
73
|
+
directory = Fog::Brightbox::Storage::Directory.new(
|
74
|
+
service: @service,
|
75
|
+
key: "container-name"
|
76
|
+
)
|
77
|
+
assert_equal "/container-name", directory.public_url
|
78
|
+
|
79
|
+
files = Fog::Brightbox::Storage::Files.new(
|
80
|
+
service: @service,
|
81
|
+
directory: directory
|
82
|
+
)
|
83
|
+
|
84
|
+
assert_equal "/container-name/object", files.get_url("/object")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "fog/brightbox"
|
3
|
+
|
4
|
+
describe Fog::Brightbox::Storage do
|
5
|
+
describe "when passed in configuration" do
|
6
|
+
before do
|
7
|
+
@options = {
|
8
|
+
:brightbox_client_id => "cli-12345",
|
9
|
+
:brightbox_secret => "1234567890",
|
10
|
+
:brightbox_storage_management_url => "https://management.url/v1/acc-12345"
|
11
|
+
}
|
12
|
+
@service = Fog::Brightbox::Storage.new(@options)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns a URI matching config option" do
|
16
|
+
assert_kind_of URI, @service.management_url
|
17
|
+
assert_equal "https://management.url/v1/acc-12345", @service.management_url.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when unavailable" do
|
22
|
+
before do
|
23
|
+
@options = {
|
24
|
+
:brightbox_client_id => "cli-12345",
|
25
|
+
:brightbox_secret => "1234567890"
|
26
|
+
}
|
27
|
+
@service = Fog::Brightbox::Storage.new(@options)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns nil" do
|
31
|
+
assert_nil @service.management_url
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -20,7 +20,7 @@ describe Fog::Brightbox::Compute::Server do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
describe "when creating" do
|
23
|
-
describe "with
|
23
|
+
describe "with image_id" do
|
24
24
|
it "sends correct JSON" do
|
25
25
|
options = {
|
26
26
|
image_id: "img-12345"
|
@@ -38,6 +38,33 @@ describe Fog::Brightbox::Compute::Server do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
describe "with image_id and custom size" do
|
42
|
+
it "sends correct JSON" do
|
43
|
+
options = {
|
44
|
+
image_id: "img-12345",
|
45
|
+
volume_size: 25_000
|
46
|
+
}
|
47
|
+
expected_args = {
|
48
|
+
volumes: [
|
49
|
+
{
|
50
|
+
image: "img-12345",
|
51
|
+
size: 25_000
|
52
|
+
}
|
53
|
+
]
|
54
|
+
}
|
55
|
+
|
56
|
+
stub_request(:post, "http://localhost/1.0/servers").
|
57
|
+
with(:query => hash_including(:account_id),
|
58
|
+
:headers => { "Authorization" => "Bearer FAKECACHEDTOKEN",
|
59
|
+
"Content-Type" => "application/json" },
|
60
|
+
:body => hash_including(expected_args)).
|
61
|
+
to_return(:status => 202, :body => %q({"id":"srv-12345"}), :headers => {})
|
62
|
+
|
63
|
+
@server = Fog::Brightbox::Compute::Server.new({ :service => service }.merge(options))
|
64
|
+
assert @server.save
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
41
68
|
describe "with additional disk_encrypted" do
|
42
69
|
it "sends correct JSON" do
|
43
70
|
options = {
|
@@ -61,6 +88,27 @@ describe Fog::Brightbox::Compute::Server do
|
|
61
88
|
end
|
62
89
|
end
|
63
90
|
|
91
|
+
describe "with volume_id" do
|
92
|
+
it "sends correct JSON" do
|
93
|
+
options = {
|
94
|
+
volume_id: "vol-12345"
|
95
|
+
}
|
96
|
+
expected_args = {
|
97
|
+
volumes: [{ volume: "vol-12345" }]
|
98
|
+
}
|
99
|
+
|
100
|
+
stub_request(:post, "http://localhost/1.0/servers").
|
101
|
+
with(:query => hash_including(:account_id),
|
102
|
+
:headers => { "Authorization" => "Bearer FAKECACHEDTOKEN",
|
103
|
+
"Content-Type" => "application/json" },
|
104
|
+
:body => hash_including(expected_args)).
|
105
|
+
to_return(:status => 202, :body => %q({"id":"srv-12345"}), :headers => {})
|
106
|
+
|
107
|
+
@server = Fog::Brightbox::Compute::Server.new({ :service => service }.merge(options))
|
108
|
+
assert @server.save
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
64
112
|
describe "when snapshotting with no options" do
|
65
113
|
it "returns the server" do
|
66
114
|
stub_request(:post, "http://localhost/1.0/servers/srv-12345/snapshot").
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-brightbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Thornthwaite
|
@@ -403,6 +403,9 @@ files:
|
|
403
403
|
- spec/fog/brightbox/storage/config_spec.rb
|
404
404
|
- spec/fog/brightbox/storage/connection_errors_spec.rb
|
405
405
|
- spec/fog/brightbox/storage/connection_spec.rb
|
406
|
+
- spec/fog/brightbox/storage/escape_spec.rb
|
407
|
+
- spec/fog/brightbox/storage/files_spec.rb
|
408
|
+
- spec/fog/brightbox/storage_spec.rb
|
406
409
|
- spec/fog/compute/brightbox/account_spec.rb
|
407
410
|
- spec/fog/compute/brightbox/api_client_spec.rb
|
408
411
|
- spec/fog/compute/brightbox/application_spec.rb
|
@@ -513,6 +516,9 @@ test_files:
|
|
513
516
|
- spec/fog/brightbox/storage/config_spec.rb
|
514
517
|
- spec/fog/brightbox/storage/connection_errors_spec.rb
|
515
518
|
- spec/fog/brightbox/storage/connection_spec.rb
|
519
|
+
- spec/fog/brightbox/storage/escape_spec.rb
|
520
|
+
- spec/fog/brightbox/storage/files_spec.rb
|
521
|
+
- spec/fog/brightbox/storage_spec.rb
|
516
522
|
- spec/fog/compute/brightbox/account_spec.rb
|
517
523
|
- spec/fog/compute/brightbox/api_client_spec.rb
|
518
524
|
- spec/fog/compute/brightbox/application_spec.rb
|