fog-brightbox 1.7.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|