defog 0.9.3 → 0.9.4
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/.travis.yml +1 -0
- data/README.md +1 -0
- data/defog.gemspec +2 -2
- data/lib/defog/proxy.rb +4 -1
- data/lib/defog/version.rb +1 -1
- data/spec/file_spec.rb +36 -36
- data/spec/handle_spec.rb +22 -22
- data/spec/proxy_spec.rb +66 -63
- data/spec/spec_helper.rb +1 -1
- data/spec/support/helpers.rb +4 -4
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a60db0801e91688744ef767c60e5f2c63bc4459
|
4
|
+
data.tar.gz: e889069aa987fec086b1f1fe355bc5807c7fe7ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98059d13cc752f0552a2afa0699808efbc25715c66fcb1e3bc35760fc47bcc88ed8e729e54fb2a8be305e42eca48ae8191b2e2a19588e844d837811ee6697008
|
7
|
+
data.tar.gz: 6ad35f25424c6bd77b59d419bf1efc9e9cab2ac85477452ad44419177b3f877dc9d9ce90ef29877a01859043171f5962c9d65e90b98924c4d3f88037a98cc490
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -253,6 +253,7 @@ plus appropriate rspec examples.)
|
|
253
253
|
## History
|
254
254
|
|
255
255
|
Release Notes:
|
256
|
+
* 0.9.4 - Bug fix: don't fail when checking atime if file gets deleted by another process (more robust)
|
256
257
|
* 0.9.3 - Bug fix: don't fail when measuring cache if file gets deleted by another process (more robust)
|
257
258
|
* 0.9.2 - Bug fix: don't fail when measuring cache if file gets deleted by another process (more robust)
|
258
259
|
* 0.9.1 - Bug fix: don't fail when measuring cache if file gets deleted by another process
|
data/defog.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |gem|
|
|
21
21
|
|
22
22
|
gem.add_development_dependency 'rake'
|
23
23
|
gem.add_development_dependency 'rdoc'
|
24
|
-
gem.add_development_dependency 'rspec', "
|
24
|
+
gem.add_development_dependency 'rspec', "~> 3.0"
|
25
25
|
gem.add_development_dependency 'simplecov'
|
26
|
-
gem.add_development_dependency 'simplecov-gem-
|
26
|
+
gem.add_development_dependency 'simplecov-gem-profile'
|
27
27
|
end
|
data/lib/defog/proxy.rb
CHANGED
data/lib/defog/version.rb
CHANGED
data/spec/file_spec.rb
CHANGED
@@ -6,7 +6,7 @@ shared_examples "get proxy" do
|
|
6
6
|
create_remote("hello")
|
7
7
|
should_log /Download/
|
8
8
|
file = @proxy.file(key, @mode)
|
9
|
-
File.exist?(file.path).
|
9
|
+
expect(File.exist?(file.path)).to be_truthy
|
10
10
|
file.close
|
11
11
|
end
|
12
12
|
|
@@ -17,24 +17,24 @@ shared_examples "get proxy" do
|
|
17
17
|
it "should overwrite existing proxy if it's not valid " do
|
18
18
|
create_remote("hello")
|
19
19
|
create_proxy("goodbye")
|
20
|
-
proxy_path.read.
|
20
|
+
expect(proxy_path.read).to eq("goodbye")
|
21
21
|
should_log /Download/
|
22
22
|
@proxy.file(key, @mode)
|
23
|
-
proxy_path.read.
|
23
|
+
expect(proxy_path.read).to eq("hello")
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should use existing proxy if it's valid" do
|
27
27
|
create_remote("hello")
|
28
28
|
create_proxy("hello")
|
29
29
|
handle = @proxy.file(key)
|
30
|
-
handle.proxy_path.
|
30
|
+
expect(handle.proxy_path).not_to receive(:open).with(/^w/)
|
31
31
|
should_not_log /Download/
|
32
32
|
handle.open(@mode)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should include key info in exception messages" do
|
36
36
|
create_remote("error me")
|
37
|
-
File.
|
37
|
+
expect_any_instance_of(File).to receive(:write) { raise Encoding::UndefinedConversionError, "dummy" }
|
38
38
|
expect {
|
39
39
|
@proxy.file(key, "r")
|
40
40
|
}.to raise_error Encoding::UndefinedConversionError, /#{key}/
|
@@ -46,22 +46,22 @@ shared_examples "read" do
|
|
46
46
|
create_remote("read me")
|
47
47
|
@proxy.file(key, @mode) do |file|
|
48
48
|
file.rewind
|
49
|
-
file.read.
|
49
|
+
expect(file.read).to eq("read me")
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should pass 'b' mode through" do
|
54
54
|
create_remote("binary me")
|
55
55
|
@proxy.file(key, "#{@mode}b") do |file|
|
56
|
-
file.external_encoding.name.
|
56
|
+
expect(file.external_encoding.name).to eq("ASCII-8BIT")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should pass encodings through" do
|
61
61
|
create_remote("encode me")
|
62
62
|
@proxy.file(key, "#{@mode}:EUC-JP:UTF-8") do |file|
|
63
|
-
file.external_encoding.name.
|
64
|
-
file.internal_encoding.name.
|
63
|
+
expect(file.external_encoding.name).to eq("EUC-JP")
|
64
|
+
expect(file.internal_encoding.name).to eq("UTF-8")
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -72,7 +72,7 @@ shared_examples "read after write" do
|
|
72
72
|
@proxy.file(key, @mode) do |file|
|
73
73
|
file.write "read me"
|
74
74
|
file.rewind
|
75
|
-
file.read.
|
75
|
+
expect(file.read).to eq("read me")
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -83,7 +83,7 @@ shared_examples "write" do
|
|
83
83
|
@proxy.file(key, @mode, :persist => true) do |file|
|
84
84
|
file.write "write me"
|
85
85
|
end
|
86
|
-
proxy_path.read.
|
86
|
+
expect(proxy_path.read).to match(/write me$/)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -94,7 +94,7 @@ shared_examples "append" do
|
|
94
94
|
file.write "goodbye"
|
95
95
|
should_log /Upload/
|
96
96
|
end
|
97
|
-
proxy_path.read.
|
97
|
+
expect(proxy_path.read).to eq("hellogoodbye")
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -105,7 +105,7 @@ shared_examples "create" do
|
|
105
105
|
file = @proxy.file(key, @mode)
|
106
106
|
create_proxy("upload me")
|
107
107
|
file.close
|
108
|
-
remote_body.
|
108
|
+
expect(remote_body).to eq("upload me")
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should not create remote if proxy is deleted" do
|
@@ -114,7 +114,7 @@ shared_examples "create" do
|
|
114
114
|
file.write("ignore me")
|
115
115
|
proxy_path.unlink
|
116
116
|
end
|
117
|
-
expect
|
117
|
+
expect(remote_body).to be_nil
|
118
118
|
end
|
119
119
|
|
120
120
|
it "should not create remote if :synchronize => false" do
|
@@ -122,19 +122,19 @@ shared_examples "create" do
|
|
122
122
|
file = @proxy.file(key, @mode)
|
123
123
|
create_proxy("ignore me")
|
124
124
|
file.close(:synchronize => false)
|
125
|
-
expect
|
125
|
+
expect(remote_body).to be_nil
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should create remote asynchronously if :synchronize => async" do
|
129
129
|
should_log /Upload/
|
130
130
|
file = @proxy.file(key, @mode)
|
131
131
|
create_proxy("upload me in thread")
|
132
|
-
Thread.
|
133
|
-
expect
|
132
|
+
expect(Thread).to receive(:new) { |&block|
|
133
|
+
expect(remote_body).to be_nil
|
134
134
|
block.call
|
135
135
|
}
|
136
136
|
file.close(:synchronize => :async)
|
137
|
-
remote_body.
|
137
|
+
expect(remote_body).to eq("upload me in thread")
|
138
138
|
end
|
139
139
|
|
140
140
|
end
|
@@ -143,25 +143,25 @@ shared_examples "update" do
|
|
143
143
|
|
144
144
|
it "should overwrite remote" do
|
145
145
|
create_remote("overwrite me")
|
146
|
-
remote_body.
|
146
|
+
expect(remote_body).to eq("overwrite me")
|
147
147
|
file = @proxy.file(key, @mode)
|
148
148
|
create_proxy("upload me")
|
149
149
|
should_log /Upload/
|
150
150
|
file.close
|
151
|
-
remote_body.
|
151
|
+
expect(remote_body).to eq("upload me")
|
152
152
|
end
|
153
153
|
|
154
154
|
it "should overwrite remote asynchronously if :synchronize => :async" do
|
155
155
|
create_remote("overwrite me")
|
156
156
|
file = @proxy.file(key, @mode)
|
157
157
|
create_proxy("upload me")
|
158
|
-
Thread.
|
159
|
-
remote_body.
|
158
|
+
expect(Thread).to receive(:new) { |&block|
|
159
|
+
expect(remote_body).to eq("overwrite me")
|
160
160
|
block.call
|
161
161
|
}
|
162
162
|
should_log /Upload/
|
163
163
|
file.close(:synchronize => :async)
|
164
|
-
remote_body.
|
164
|
+
expect(remote_body).to eq("upload me")
|
165
165
|
end
|
166
166
|
|
167
167
|
it "should not overwrite remote if proxy is deleted" do
|
@@ -171,7 +171,7 @@ shared_examples "update" do
|
|
171
171
|
file.write("ignore me")
|
172
172
|
proxy_path.unlink
|
173
173
|
end
|
174
|
-
remote_body.
|
174
|
+
expect(remote_body).to eq("keep me")
|
175
175
|
end
|
176
176
|
|
177
177
|
it "should not overwrite remote if :synchronize => false" do
|
@@ -180,7 +180,7 @@ shared_examples "update" do
|
|
180
180
|
file = @proxy.file(key, @mode)
|
181
181
|
create_proxy("ignore me")
|
182
182
|
file.close(:synchronize => false)
|
183
|
-
remote_body.
|
183
|
+
expect(remote_body).to eq("keep me")
|
184
184
|
end
|
185
185
|
|
186
186
|
end
|
@@ -189,41 +189,41 @@ shared_examples "persistence" do
|
|
189
189
|
it "should delete proxy on close" do
|
190
190
|
create_remote("whatever")
|
191
191
|
file = @proxy.file(key, @mode)
|
192
|
-
proxy_path.
|
192
|
+
expect(proxy_path).to be_exist
|
193
193
|
file.close
|
194
|
-
proxy_path.
|
194
|
+
expect(proxy_path).not_to be_exist
|
195
195
|
end
|
196
196
|
|
197
197
|
it "should delete proxy on close (block form)" do
|
198
198
|
create_remote("whatever")
|
199
199
|
@proxy.file(key, @mode) do |file|
|
200
|
-
proxy_path.
|
200
|
+
expect(proxy_path).to be_exist
|
201
201
|
end
|
202
|
-
proxy_path.
|
202
|
+
expect(proxy_path).not_to be_exist
|
203
203
|
end
|
204
204
|
|
205
205
|
it "should not delete proxy if persisting" do
|
206
206
|
create_remote("whatever")
|
207
207
|
@proxy.file(key, @mode, :persist => true) do |file|
|
208
|
-
proxy_path.
|
208
|
+
expect(proxy_path).to be_exist
|
209
209
|
end
|
210
|
-
proxy_path.
|
210
|
+
expect(proxy_path).to be_exist
|
211
211
|
end
|
212
212
|
|
213
213
|
it "close should override persist true" do
|
214
214
|
create_remote("whatever")
|
215
215
|
file = @proxy.file(key, @mode)
|
216
|
-
proxy_path.
|
216
|
+
expect(proxy_path).to be_exist
|
217
217
|
file.close(:persist => true)
|
218
|
-
proxy_path.
|
218
|
+
expect(proxy_path).to be_exist
|
219
219
|
end
|
220
220
|
|
221
221
|
it "close should override persist false" do
|
222
222
|
create_remote("whatever")
|
223
223
|
file = @proxy.file(key, @mode, :persist => true)
|
224
|
-
proxy_path.
|
224
|
+
expect(proxy_path).to be_exist
|
225
225
|
file.close(:persist => false)
|
226
|
-
proxy_path.
|
226
|
+
expect(proxy_path).not_to be_exist
|
227
227
|
end
|
228
228
|
|
229
229
|
end
|
@@ -263,7 +263,7 @@ shared_examples "a proxy file" do |proxyargs|
|
|
263
263
|
|
264
264
|
it "should have a nice to_s" do
|
265
265
|
@proxy.file(key, "w") {|f|
|
266
|
-
f.to_s.
|
266
|
+
expect(f.to_s).to include f.path
|
267
267
|
}
|
268
268
|
end
|
269
269
|
|
data/spec/handle_spec.rb
CHANGED
@@ -11,21 +11,21 @@ shared_examples "a handle" do |proxyargs|
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should have a nice to_s" do
|
14
|
-
@handle.to_s.
|
14
|
+
expect(@handle.to_s).to include key
|
15
15
|
end
|
16
16
|
|
17
17
|
context "proxy path" do
|
18
18
|
it "should start with proxy root" do
|
19
|
-
@handle.proxy_path.to_s.
|
19
|
+
expect(@handle.proxy_path.to_s).to start_with(@proxy.proxy_root.to_s)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should end with key" do
|
23
|
-
@handle.proxy_path.to_s.
|
23
|
+
expect(@handle.proxy_path.to_s).to end_with(key)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should include prefix" do
|
27
27
|
prefix = "IAmAPrefix"
|
28
|
-
Defog::Proxy.new(proxyargs.merge(:prefix => prefix)).file(key).proxy_path.to_s.
|
28
|
+
expect(Defog::Proxy.new(proxyargs.merge(:prefix => prefix)).file(key).proxy_path.to_s).to include(prefix.to_s)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -36,21 +36,21 @@ shared_examples "a handle" do |proxyargs|
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should report exist? true" do
|
39
|
-
@handle.
|
39
|
+
expect(@handle).to be_exist
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should return md5 hash" do
|
43
|
-
@handle.md5_hash.
|
43
|
+
expect(@handle.md5_hash).to eq(Digest::MD5.hexdigest("i exist"))
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
context "if remote cloud file does not exist" do
|
48
48
|
it "should report exist? false" do
|
49
|
-
@handle.
|
49
|
+
expect(@handle).not_to be_exist
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should return nil md5 hash" do
|
53
|
-
@handle.md5_hash.
|
53
|
+
expect(@handle.md5_hash).to be_nil
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -60,45 +60,45 @@ shared_examples "a handle" do |proxyargs|
|
|
60
60
|
|
61
61
|
it "should delegate #{method.inspect} to the fog model #{fog_method.inspect} if the remote file exists" do
|
62
62
|
create_remote("delegate me")
|
63
|
-
@handle.fog_model.class.
|
64
|
-
@handle.send(method).
|
63
|
+
expect_any_instance_of(@handle.fog_model.class).to receive(fog_method) { "dummy" }
|
64
|
+
expect(@handle.send(method)).to eq("dummy")
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should return nil from #{method} if the remote file does not exist" do
|
68
|
-
@handle.send(method).
|
68
|
+
expect(@handle.send(method)).to be_nil
|
69
69
|
end
|
70
70
|
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should delete a remote cloud file" do
|
74
74
|
create_remote("delete me")
|
75
|
-
remote_exist
|
75
|
+
expect(remote_exist?).to be_truthy
|
76
76
|
@handle.delete
|
77
|
-
remote_exist
|
77
|
+
expect(remote_exist?).to be_falsey
|
78
78
|
end
|
79
79
|
|
80
80
|
it "should return a URL to a file" do
|
81
81
|
create_remote("reach out to me")
|
82
|
-
@handle.url.
|
82
|
+
expect(@handle.url).to be_a String
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should open a file" do
|
86
|
-
Defog::File.
|
86
|
+
expect(Defog::File).to receive(:open).with(hash_including(:handle => @handle, :mode => "w"))
|
87
87
|
@handle.open("w")
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should return a Fog model" do
|
91
91
|
create_remote("foggy")
|
92
|
-
@handle.fog_model.body.
|
92
|
+
expect(@handle.fog_model.body).to eq("foggy")
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should update when file changes" do
|
96
96
|
create_remote("abc")
|
97
|
-
@proxy.file(key).size.
|
97
|
+
expect(@proxy.file(key).size).to eq(3)
|
98
98
|
@proxy.file(key).open("w") do |f|
|
99
99
|
f.write("defghij")
|
100
100
|
end
|
101
|
-
@proxy.file(key).size.
|
101
|
+
expect(@proxy.file(key).size).to eq(7)
|
102
102
|
end
|
103
103
|
|
104
104
|
|
@@ -117,7 +117,7 @@ describe Defog::Handle do
|
|
117
117
|
|
118
118
|
it "should return a file:// URL" do
|
119
119
|
@proxy = Defog::Proxy.new(args)
|
120
|
-
@proxy.file(key).url.
|
120
|
+
expect(@proxy.file(key).url).to eq("file://" + (LOCAL_CLOUD_PATH + key).to_s)
|
121
121
|
end
|
122
122
|
|
123
123
|
context "with a rails app" do
|
@@ -125,14 +125,14 @@ describe Defog::Handle do
|
|
125
125
|
it "should return a path relative to public if in public" do
|
126
126
|
with_rails_defined do
|
127
127
|
@proxy = Defog::Proxy.new(:provider => :local, :local_root => Rails.root + "public/defog")
|
128
|
-
@proxy.file(key).url.
|
128
|
+
expect(@proxy.file(key).url).to eq("/defog/#{key}")
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
132
|
it "should return a file:// path if not in public" do
|
133
133
|
with_rails_defined do
|
134
134
|
@proxy = Defog::Proxy.new(args)
|
135
|
-
@proxy.file(key).url.
|
135
|
+
expect(@proxy.file(key).url).to eq("file://" + (LOCAL_CLOUD_PATH + key).to_s)
|
136
136
|
end
|
137
137
|
end
|
138
138
|
end
|
@@ -154,7 +154,7 @@ describe Defog::Handle do
|
|
154
154
|
t = Time.now + 10*60
|
155
155
|
#Fog::Storage::AWS::File.any_instance.should_receive(:url).with(t, "response-content-disposition" => "attachment")
|
156
156
|
url = @proxy.file(key).url(:expiry => t, :query => {"response-content-disposition" => "attachment"})
|
157
|
-
url.
|
157
|
+
expect(url).to include "response-content-disposition=attachment"
|
158
158
|
end
|
159
159
|
|
160
160
|
|
data/spec/proxy_spec.rb
CHANGED
@@ -8,51 +8,51 @@ shared_examples "a proxy" do |args|
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should have a nice to_s" do
|
11
|
-
@proxy.to_s.
|
12
|
-
@proxy.to_s.
|
11
|
+
expect(@proxy.to_s).to include @proxy.provider.to_s
|
12
|
+
expect(@proxy.to_s).to include @proxy.location
|
13
13
|
end
|
14
14
|
|
15
15
|
it "file should return a handle" do
|
16
16
|
handle = @proxy.file(key)
|
17
|
-
handle.proxy.
|
18
|
-
handle.key.
|
17
|
+
expect(handle.proxy).to eq(@proxy)
|
18
|
+
expect(handle.key).to eq(key)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "file should yield a handle" do
|
22
22
|
ret = @proxy.file(key) do |handle|
|
23
|
-
handle.proxy.
|
24
|
-
handle.key.
|
23
|
+
expect(handle.proxy).to eq(@proxy)
|
24
|
+
expect(handle.key).to eq(key)
|
25
25
|
123
|
26
26
|
end
|
27
|
-
ret.
|
27
|
+
expect(ret).to eq(123)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should forward file open to handle" do
|
31
|
-
Defog::Handle.
|
32
|
-
handle.
|
31
|
+
expect(Defog::Handle).to receive(:new).with(@proxy, key) { double('Handle').tap { |handle|
|
32
|
+
expect(handle).to receive(:open).with("r+", :persist => true)
|
33
33
|
} }
|
34
34
|
@proxy.file(key, "r+", :persist => true)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should return fog storage" do
|
38
|
-
@proxy.fog_connection.
|
38
|
+
expect(@proxy.fog_connection).to eq(@proxy.fog_directory.service)
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should return fog directory" do
|
42
42
|
create_remote("hello")
|
43
|
-
@proxy.fog_directory.files.get(key).body.
|
43
|
+
expect(@proxy.fog_directory.files.get(key).body).to eq("hello")
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
context "settings" do
|
48
48
|
it "should set default for :persist => true" do
|
49
49
|
@proxy = Defog::Proxy.new(args.merge(:persist => true))
|
50
|
-
Defog::File.
|
50
|
+
expect(Defog::File).to receive(:open).with(hash_including :persist => true)
|
51
51
|
@proxy.file(key, "w") do end
|
52
52
|
end
|
53
53
|
it "should set default for :synchronize => :async" do
|
54
54
|
@proxy = Defog::Proxy.new(args.merge(:synchronize => :async))
|
55
|
-
Defog::File.
|
55
|
+
expect(Defog::File).to receive(:open).with(hash_including :synchronize => :async)
|
56
56
|
@proxy.file(key, "w") do end
|
57
57
|
end
|
58
58
|
end
|
@@ -73,11 +73,11 @@ shared_examples "a proxy" do |args|
|
|
73
73
|
@proxy.each do |handle|
|
74
74
|
seen << handle.key
|
75
75
|
end
|
76
|
-
seen.
|
76
|
+
expect(seen).to match_array([other_key("i0"), other_key("i1"), other_key("i2")])
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should return an enumerator" do
|
80
|
-
@proxy.each.map(&:key).
|
80
|
+
expect(@proxy.each.map(&:key)).to match_array([other_key("i0"), other_key("i1"), other_key("i2")])
|
81
81
|
end
|
82
82
|
|
83
83
|
end
|
@@ -86,14 +86,14 @@ shared_examples "a proxy" do |args|
|
|
86
86
|
it "should return its prefix" do
|
87
87
|
prefix = "me-first"
|
88
88
|
@proxy = Defog::Proxy.new(args.merge(:prefix => prefix))
|
89
|
-
@proxy.prefix.
|
89
|
+
expect(@proxy.prefix).to eq(prefix)
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should use a prefix" do
|
93
93
|
prefix = "me-first"
|
94
94
|
@proxy = Defog::Proxy.new(args.merge(:prefix => prefix))
|
95
95
|
@proxy.file(key, "w") { |f| f.puts "hello" }
|
96
|
-
@proxy.file(key).fog_model.key.
|
96
|
+
expect(@proxy.file(key).fog_model.key).to eq(prefix + key)
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should iterate only matches to prefix" do
|
@@ -105,7 +105,7 @@ shared_examples "a proxy" do |args|
|
|
105
105
|
create_other_remote("yes-y1")
|
106
106
|
create_other_remote("yes-y2")
|
107
107
|
create_other_remote("yes-y3")
|
108
|
-
@proxy.each.map(&:key).
|
108
|
+
expect(@proxy.each.map(&:key)).to match_array([other_key("y1"), other_key("y2"), other_key("y3")])
|
109
109
|
end
|
110
110
|
|
111
111
|
end
|
@@ -113,20 +113,20 @@ shared_examples "a proxy" do |args|
|
|
113
113
|
context "proxy root location" do
|
114
114
|
it "should default proxy root to tmpdir/defog" do
|
115
115
|
proxy = Defog::Proxy.new(args)
|
116
|
-
proxy.proxy_root.
|
116
|
+
expect(proxy.proxy_root).to eq(Pathname.new(Dir.tmpdir) + "defog" + "#{proxy.provider.to_s}-#{proxy.location}")
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should default proxy root to Rails.root" do
|
120
120
|
with_rails_defined do
|
121
121
|
proxy = Defog::Proxy.new(args)
|
122
|
-
proxy.proxy_root.
|
122
|
+
expect(proxy.proxy_root).to eq(Rails.root + "tmp/defog" + "#{proxy.provider.to_s}-#{proxy.location}")
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
126
|
it "should accept proxy root parameter" do
|
127
127
|
path = Pathname.new("/a/random/path")
|
128
128
|
proxy = Defog::Proxy.new(args.merge(:proxy_root => path))
|
129
|
-
proxy.proxy_root.
|
129
|
+
expect(proxy.proxy_root).to eq(path)
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
@@ -144,15 +144,15 @@ shared_examples "a proxy" do |args|
|
|
144
144
|
it "should raise an error trying to proxy a file larger than the cache" do
|
145
145
|
create_remote("x" * 101)
|
146
146
|
expect { @proxy.file(key, "r") }.to raise_error(Defog::Error::CacheFull)
|
147
|
-
proxy_path.
|
147
|
+
expect(proxy_path).not_to be_exist
|
148
148
|
end
|
149
149
|
|
150
150
|
it "should not count existing proxy in total" do
|
151
151
|
create_proxy("y" * 70)
|
152
152
|
create_remote("x" * 70)
|
153
|
-
expect { @proxy.file(key, "r") do end }.
|
154
|
-
proxy_path.
|
155
|
-
proxy_path.read.
|
153
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
154
|
+
expect(proxy_path).to be_exist
|
155
|
+
expect(proxy_path.read).to eq(remote_body)
|
156
156
|
end
|
157
157
|
|
158
158
|
it "should delete proxies to make room" do
|
@@ -160,11 +160,11 @@ shared_examples "a proxy" do |args|
|
|
160
160
|
create_other_proxy("b", 30)
|
161
161
|
create_other_proxy("c", 40)
|
162
162
|
create_remote("x" * 80)
|
163
|
-
expect { @proxy.file(key, "r") do end }.
|
164
|
-
proxy_path.
|
165
|
-
other_proxy_path("a").
|
166
|
-
other_proxy_path("b").
|
167
|
-
other_proxy_path("c").
|
163
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
164
|
+
expect(proxy_path).to be_exist
|
165
|
+
expect(other_proxy_path("a")).to be_exist
|
166
|
+
expect(other_proxy_path("b")).not_to be_exist
|
167
|
+
expect(other_proxy_path("c")).not_to be_exist
|
168
168
|
end
|
169
169
|
|
170
170
|
[0, 3, 6].each do |sizect|
|
@@ -172,14 +172,14 @@ shared_examples "a proxy" do |args|
|
|
172
172
|
create_other_proxy("a", 30)
|
173
173
|
create_other_proxy("b", 30)
|
174
174
|
create_other_proxy("c", 30)
|
175
|
-
create_remote("x" *
|
175
|
+
create_remote("x" * 9)
|
176
176
|
z = 0
|
177
|
-
Pathname.
|
177
|
+
allow_any_instance_of(Pathname).to receive(:size) { |path|
|
178
178
|
raise Errno::ENOENT if z == sizect
|
179
179
|
z += 1
|
180
180
|
30
|
181
181
|
}
|
182
|
-
expect { @proxy.file(key, "r") do end }.
|
182
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -188,28 +188,31 @@ shared_examples "a proxy" do |args|
|
|
188
188
|
create_other_proxy("b", 30)
|
189
189
|
create_other_proxy("c", 40)
|
190
190
|
create_remote("x" * 80)
|
191
|
-
Pathname.
|
192
|
-
expect { @proxy.file(key, "r") do end }.
|
191
|
+
allow_any_instance_of(Pathname).to receive(:unlink) { raise Errno::ENOENT }
|
192
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
193
193
|
end
|
194
194
|
|
195
|
-
it "should not fail atime when
|
195
|
+
it "should not fail atime when a proxy gets deleted by another process" do
|
196
196
|
create_other_proxy("a", 10)
|
197
197
|
create_other_proxy("b", 30)
|
198
198
|
create_other_proxy("c", 40)
|
199
199
|
create_remote("x" * 80)
|
200
|
-
Pathname.
|
201
|
-
|
200
|
+
allow_any_instance_of(Pathname).to receive(:atime) {
|
201
|
+
@raised = true and raise Errno::ENOENT unless @raised
|
202
|
+
Time.now
|
203
|
+
}
|
204
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
202
205
|
end
|
203
206
|
|
204
207
|
it "should delete proxies to make room for hinted size" do
|
205
208
|
create_other_proxy("a", 10)
|
206
209
|
create_other_proxy("b", 30)
|
207
210
|
create_other_proxy("c", 40)
|
208
|
-
expect { @proxy.file(key, "w", :size_hint => 80) do end }.
|
209
|
-
proxy_path.
|
210
|
-
other_proxy_path("a").
|
211
|
-
other_proxy_path("b").
|
212
|
-
other_proxy_path("c").
|
211
|
+
expect { @proxy.file(key, "w", :size_hint => 80) do end }.not_to raise_error
|
212
|
+
expect(proxy_path).to be_exist
|
213
|
+
expect(other_proxy_path("a")).to be_exist
|
214
|
+
expect(other_proxy_path("b")).not_to be_exist
|
215
|
+
expect(other_proxy_path("c")).not_to be_exist
|
213
216
|
end
|
214
217
|
|
215
218
|
it "should not delete proxies that are open" do
|
@@ -220,12 +223,12 @@ shared_examples "a proxy" do |args|
|
|
220
223
|
@proxy.file(other_key("R"), "r") do
|
221
224
|
@proxy.file(other_key("S"), "w") do
|
222
225
|
create_other_proxy("S", 30)
|
223
|
-
expect { @proxy.file(key, "r") do end }.
|
224
|
-
proxy_path.
|
225
|
-
other_proxy_path("R").
|
226
|
-
other_proxy_path("S").
|
227
|
-
other_proxy_path("a").
|
228
|
-
other_proxy_path("b").
|
226
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
227
|
+
expect(proxy_path).to be_exist
|
228
|
+
expect(other_proxy_path("R")).to be_exist
|
229
|
+
expect(other_proxy_path("S")).to be_exist
|
230
|
+
expect(other_proxy_path("a")).not_to be_exist
|
231
|
+
expect(other_proxy_path("b")).not_to be_exist
|
229
232
|
end
|
230
233
|
end
|
231
234
|
end
|
@@ -234,10 +237,10 @@ shared_examples "a proxy" do |args|
|
|
234
237
|
create_other_remote("R", 60)
|
235
238
|
create_remote("z" * 60)
|
236
239
|
@proxy.file(other_key("R"), "r") do end
|
237
|
-
other_proxy_path("R").
|
238
|
-
expect { @proxy.file(key, "r") do end }.
|
239
|
-
proxy_path.
|
240
|
-
other_proxy_path("R").
|
240
|
+
expect(other_proxy_path("R")).to be_exist
|
241
|
+
expect { @proxy.file(key, "r") do end }.not_to raise_error
|
242
|
+
expect(proxy_path).to be_exist
|
243
|
+
expect(other_proxy_path("R")).not_to be_exist
|
241
244
|
end
|
242
245
|
|
243
246
|
it "should not delete proxies if there wouldn't be enough space" do
|
@@ -249,11 +252,11 @@ shared_examples "a proxy" do |args|
|
|
249
252
|
@proxy.file(other_key("R"), "r") do
|
250
253
|
@proxy.file(other_key("S"), "r") do
|
251
254
|
expect { @proxy.file(key, "r") do end }.to raise_error(Defog::Error::CacheFull)
|
252
|
-
proxy_path.
|
253
|
-
other_proxy_path("a").
|
254
|
-
other_proxy_path("b").
|
255
|
-
other_proxy_path("R").
|
256
|
-
other_proxy_path("S").
|
255
|
+
expect(proxy_path).not_to be_exist
|
256
|
+
expect(other_proxy_path("a")).to be_exist
|
257
|
+
expect(other_proxy_path("b")).to be_exist
|
258
|
+
expect(other_proxy_path("R")).to be_exist
|
259
|
+
expect(other_proxy_path("S")).to be_exist
|
257
260
|
end
|
258
261
|
end
|
259
262
|
end
|
@@ -296,7 +299,7 @@ describe Defog::Proxy do
|
|
296
299
|
it_should_behave_like "a proxy", args
|
297
300
|
|
298
301
|
it "should use the deslashed local_root as the location" do
|
299
|
-
Defog::Proxy.new(args).location.
|
302
|
+
expect(Defog::Proxy.new(args).location).to eq(LOCAL_CLOUD_PATH.to_s.gsub(%r{/},"-"))
|
300
303
|
end
|
301
304
|
|
302
305
|
end
|
@@ -310,25 +313,25 @@ describe Defog::Proxy do
|
|
310
313
|
it_should_behave_like "a proxy", args
|
311
314
|
|
312
315
|
it "should use the bucket name as the location" do
|
313
|
-
Defog::Proxy.new(args).location.
|
316
|
+
expect(Defog::Proxy.new(args).location).to eq(args[:bucket])
|
314
317
|
end
|
315
318
|
|
316
319
|
it "should share fog connection with same bucket" do
|
317
320
|
proxy1 = Defog::Proxy.new(args)
|
318
321
|
proxy2 = Defog::Proxy.new(args)
|
319
|
-
proxy1.fog_connection.
|
322
|
+
expect(proxy1.fog_connection).to be_equal proxy2.fog_connection
|
320
323
|
end
|
321
324
|
|
322
325
|
it "should share fog connection with different bucket" do
|
323
326
|
proxy1 = Defog::Proxy.new(args)
|
324
327
|
proxy2 = Defog::Proxy.new(args.merge(:bucket => "other"))
|
325
|
-
proxy1.fog_connection.
|
328
|
+
expect(proxy1.fog_connection).to be_equal proxy2.fog_connection
|
326
329
|
end
|
327
330
|
|
328
331
|
it "should not share fog connection with different connection args" do
|
329
332
|
proxy1 = Defog::Proxy.new(args)
|
330
333
|
proxy2 = Defog::Proxy.new(args.merge(:aws_access_key_id => "other"))
|
331
|
-
proxy1.fog_connection.
|
334
|
+
expect(proxy1.fog_connection).not_to be_equal proxy2.fog_connection
|
332
335
|
end
|
333
336
|
|
334
337
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/helpers.rb
CHANGED
@@ -3,7 +3,7 @@ module Helpers
|
|
3
3
|
def key
|
4
4
|
# returns a key that will be different for each example, to avoid any
|
5
5
|
# cross-example interactions
|
6
|
-
|
6
|
+
RSpec.current_example.metadata[:full_description].gsub(/\+/,'plus').gsub(/\W/,'-') + "/filename"
|
7
7
|
end
|
8
8
|
|
9
9
|
def create_remote(body)
|
@@ -23,7 +23,7 @@ module Helpers
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def remote_body
|
26
|
-
@proxy.file(key).fog_model.body
|
26
|
+
@proxy.file(key).fog_model.andand.body
|
27
27
|
end
|
28
28
|
|
29
29
|
def remote_exist?
|
@@ -40,11 +40,11 @@ module Helpers
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def should_log(arg)
|
43
|
-
@proxy.logger.
|
43
|
+
expect(@proxy.logger).to receive(:info).with(arg)
|
44
44
|
end
|
45
45
|
|
46
46
|
def should_not_log(arg)
|
47
|
-
@proxy.logger.
|
47
|
+
expect(@proxy.logger).not_to receive(:info).with(arg)
|
48
48
|
end
|
49
49
|
|
50
50
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: defog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ronen barzel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '3.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '3.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: simplecov
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: simplecov-gem-
|
112
|
+
name: simplecov-gem-profile
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
requirements: []
|
170
170
|
rubyforge_project:
|
171
|
-
rubygems_version: 2.
|
171
|
+
rubygems_version: 2.4.5
|
172
172
|
signing_key:
|
173
173
|
specification_version: 4
|
174
174
|
summary: Wrapper to fog gem, proxying access to cloud files as local files. Access
|