tinkit 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +176 -0
- data/README +11 -0
- data/Rakefile +75 -0
- data/lib/glue_envs/couchrest/couchrest_attachment_handler.rb +260 -0
- data/lib/glue_envs/couchrest/couchrest_files_mgr.rb +198 -0
- data/lib/glue_envs/couchrest_glue_env.rb +536 -0
- data/lib/glue_envs/files_mgr_base.rb +51 -0
- data/lib/glue_envs/filesystem/filesystem_files_mgr.rb +187 -0
- data/lib/glue_envs/filesystem_glue_env.rb +395 -0
- data/lib/glue_envs/mysql/mysql_files_mgr.rb +175 -0
- data/lib/glue_envs/mysql_glue_env.rb +428 -0
- data/lib/glue_envs/sdb_s3/sdb_s3_files_mgr.rb +314 -0
- data/lib/glue_envs/sdb_s3_glue_env.rb +248 -0
- data/lib/helpers/camel.rb +21 -0
- data/lib/helpers/filesystem_helpers.rb +27 -0
- data/lib/helpers/hash_helpers.rb +74 -0
- data/lib/helpers/log_helper.rb +34 -0
- data/lib/helpers/mime_types_new.rb +126 -0
- data/lib/helpers/old_more_open_struct.rb +28 -0
- data/lib/helpers/require_helper.rb +45 -0
- data/lib/helpers/tk_escape.rb +17 -0
- data/lib/midas/bufs_data_structure.rb +84 -0
- data/lib/midas/node_element_operations.rb +264 -0
- data/lib/tinkit.rb +38 -0
- data/lib/tinkit_base_node.rb +733 -0
- data/lib/tinkit_node_factory.rb +47 -0
- data/spec/couchrest_files_mgr_spec.rb +551 -0
- data/spec/couchrest_glue_spec.rb +246 -0
- data/spec/filesystem_files_mgr_spec.rb +236 -0
- data/spec/filesystem_glue_spec.rb +243 -0
- data/spec/filesystem_helpers_spec.rb +42 -0
- data/spec/helpers/bufs_node_builder.rb +17 -0
- data/spec/helpers/bufs_sample_dataset.rb +160 -0
- data/spec/helpers/bufs_test_environments.rb +81 -0
- data/spec/helpers/tmp_view_cleaner.rb +15 -0
- data/spec/lib_helpers/tk_escape_spec.rb +45 -0
- data/spec/mysql_files_mgr_spec.rb +250 -0
- data/spec/mysql_glue_spec.rb +214 -0
- data/spec/node_element_operations_spec.rb +392 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec1.rb +82 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec2.rb +68 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec3.rb +80 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec4.rb +110 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec5.rb +84 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec6.rb +83 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec7.rb +101 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec8.rb +92 -0
- data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec_all.rb +266 -0
- data/spec/sdb_s3_glue_spec.rb +230 -0
- data/spec/tinkit_node_factory_spec.rb +1108 -0
- metadata +114 -0
@@ -0,0 +1,392 @@
|
|
1
|
+
#require helper for cleaner require statements
|
2
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '/../lib/helpers/require_helper')
|
3
|
+
|
4
|
+
require Tinkit.midas 'node_element_operations'
|
5
|
+
|
6
|
+
module NodeElementOperationsSpecHelpers
|
7
|
+
def execute_operations(neo_obj, operand_values={}, initial_field_values={}, op_names=:all)
|
8
|
+
field_ops = neo_obj.field_op_defs
|
9
|
+
final_field_values = {}
|
10
|
+
record_fields = field_ops.keys
|
11
|
+
|
12
|
+
record_fields.each do |field|
|
13
|
+
operations = field_ops[field].keys
|
14
|
+
operations.each do |op_label|
|
15
|
+
if (op_names == :all || op_names.include?(op_label))
|
16
|
+
init_val = initial_field_values[field]
|
17
|
+
op_val = operand_values[field]
|
18
|
+
|
19
|
+
result = execute_single_operation(neo_obj, field, op_label, init_val, op_val)
|
20
|
+
|
21
|
+
final_field_values[field] = final_field_values[field]||{}
|
22
|
+
final_field_values[field][op_label] = result
|
23
|
+
else
|
24
|
+
next
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
final_field_values
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute_single_operation(neo_obj, field, op_label, init_val, op_val)
|
32
|
+
field_ops = neo_obj.field_op_defs
|
33
|
+
ops = field_ops[field]
|
34
|
+
op_proc = ops[op_label] if ops
|
35
|
+
result = op_proc.call(init_val, op_val) if op_proc
|
36
|
+
end
|
37
|
+
|
38
|
+
def check_field_results(results, field, operation)
|
39
|
+
#puts "Results for Field: #{field} / #{operation}"
|
40
|
+
results[field][operation][:update_this]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe NodeElementOperations, "Defaults" do
|
45
|
+
include NodeElementOperationsSpecHelpers
|
46
|
+
|
47
|
+
before(:each) do
|
48
|
+
@default_fields = [:id, :data, :name, :tags]#, :kvlist]
|
49
|
+
@default_operations = [:add, :subtract]
|
50
|
+
#@key_fields = {:required_keys => [:id], :primary_key => :id}}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should initialize to default when no parameters are used" do
|
54
|
+
neo_set = NodeElementOperations.new
|
55
|
+
neo_set.field_op_defs.keys.should == @default_fields
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should have a default set of fields and operations" do
|
59
|
+
#initial conditions
|
60
|
+
neo_set = NodeElementOperations.new
|
61
|
+
#the default field to operation assignmen: {:id => :static_ops, :data => :replace_ops}
|
62
|
+
|
63
|
+
#change the existing values of the fields to these with the default operations
|
64
|
+
operand_values = {:id => "should not be able to change default",
|
65
|
+
:data => ['new data', 'more new data']}
|
66
|
+
|
67
|
+
#test
|
68
|
+
results = execute_operations(neo_set, operand_values)
|
69
|
+
#verify results
|
70
|
+
init_vals = {} #default_init_field_values
|
71
|
+
neo_set.field_op_set_sym.each do |field, op_label|
|
72
|
+
#puts "Checking Field #{field}, Op Label: #{op_label}"
|
73
|
+
case op_label
|
74
|
+
when :static_ops
|
75
|
+
#check results set
|
76
|
+
@default_operations.each do |op|
|
77
|
+
results[field].keys.should include op
|
78
|
+
results[field][op].keys.should include :update_this
|
79
|
+
end
|
80
|
+
#check results value
|
81
|
+
check_field_results(results, field, :add).should == init_vals[field]
|
82
|
+
check_field_results(results, field, :subtract).should == init_vals[field]
|
83
|
+
|
84
|
+
when :replace_ops
|
85
|
+
#check results set
|
86
|
+
@default_operations.each do |op|
|
87
|
+
results[field].keys.should include op
|
88
|
+
results[field][op].keys.should include :update_this
|
89
|
+
end
|
90
|
+
#check results value
|
91
|
+
check_field_results(results, field, :add).should == operand_values[field]
|
92
|
+
check_field_results(results, field, :subtract).should == nil #nil - anything = nil
|
93
|
+
|
94
|
+
when :list_ops
|
95
|
+
#check results set
|
96
|
+
@default_operations.each do |op|
|
97
|
+
results[field].keys.should include op
|
98
|
+
results[field][op].keys.should include :update_this
|
99
|
+
end
|
100
|
+
#more complete tests are later
|
101
|
+
check_field_results(results, field, :add).should == []
|
102
|
+
check_field_results(results, field, :add).should == []
|
103
|
+
|
104
|
+
when :key_list_ops
|
105
|
+
#check results set
|
106
|
+
@default_operations.each do |op|
|
107
|
+
results[field].keys.should include op
|
108
|
+
results[field][op].keys.should include :update_this
|
109
|
+
end
|
110
|
+
#more complete tests are later
|
111
|
+
check_field_results(results, field, :add).should == {}
|
112
|
+
check_field_results(results, field, :add).should == {}
|
113
|
+
|
114
|
+
else
|
115
|
+
raise "Invalid Operation Label #{op_label} for field: #{field}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should work as expected with populated initial values" do
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe NodeElementOperations, "Validate Default Operation Behaviors" do
|
125
|
+
include NodeElementOperationsSpecHelpers
|
126
|
+
|
127
|
+
before(:each) do
|
128
|
+
@default_behaviors = [:static_ops, :replace_ops, :list_ops, :key_list_ops]
|
129
|
+
@field_op_set = {:test_id => :static_ops,
|
130
|
+
:test_label1 => :replace_ops,
|
131
|
+
:test_label2 => :replace_ops,
|
132
|
+
:test_list => :list_ops,
|
133
|
+
:test_kvlist => :key_list_ops }
|
134
|
+
|
135
|
+
@neo_set = NodeElementOperations.new(:field_op_set => @field_op_set)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should have field operations for all default operation behaviors" do
|
139
|
+
all_behaviors = @default_behaviors.dup
|
140
|
+
@field_op_set.each { |op_behav, op_set_sym| all_behaviors.delete(op_set_sym) }
|
141
|
+
all_behaviors.size.should == 0 #empty
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should return appropriate - add - operation results for default operation behaviors" do
|
145
|
+
|
146
|
+
op_name = :add
|
147
|
+
|
148
|
+
#initial conditions
|
149
|
+
initial_operand_values = {:test_id => "Original ID",
|
150
|
+
:test_label1 => "Original Label",
|
151
|
+
:test_label2 => "Not Used",
|
152
|
+
:test_list => ['item1', 'item2'],
|
153
|
+
:test_kvlist => { :list1 => ['klist1-a', 'klist1-b'],
|
154
|
+
:list2 => ['klist2-a', 'klist2-b']} }
|
155
|
+
|
156
|
+
new_operand_values = {:test_id => "New ID",
|
157
|
+
:test_label1 => "New Label",
|
158
|
+
:test_label2 => "Not Used",
|
159
|
+
:test_list => ['item3', 'item4'],
|
160
|
+
:test_kvlist => { :list1 => ['klist1-c', 'klist1-d'],
|
161
|
+
:list2 => 'klist2-c',
|
162
|
+
:list3 => 'klist3-a',
|
163
|
+
:list4 => ['klist4-a', 'klist4-b']} }
|
164
|
+
|
165
|
+
#test
|
166
|
+
results = execute_operations(@neo_set, new_operand_values, initial_operand_values, [op_name])
|
167
|
+
|
168
|
+
#verify
|
169
|
+
verified_list = {}
|
170
|
+
initial_operand_values.keys.should == new_operand_values.keys
|
171
|
+
|
172
|
+
static_field_name = :test_id
|
173
|
+
verified_list[static_field_name] = @field_op_set[static_field_name]
|
174
|
+
results[static_field_name][op_name][:update_this].should == initial_operand_values[static_field_name]
|
175
|
+
|
176
|
+
replace_field_name = :test_label1
|
177
|
+
verified_list[replace_field_name] = @field_op_set[replace_field_name]
|
178
|
+
results[replace_field_name][op_name][:update_this].should == new_operand_values[replace_field_name]
|
179
|
+
|
180
|
+
list_field_name = :test_list
|
181
|
+
verified_list[list_field_name] = @field_op_set[list_field_name]
|
182
|
+
combined_values = initial_operand_values[list_field_name] + new_operand_values[list_field_name]
|
183
|
+
results[list_field_name][op_name][:update_this].should == combined_values
|
184
|
+
|
185
|
+
kvlist_field_name = :test_kvlist
|
186
|
+
verified_list[kvlist_field_name] = @field_op_set[kvlist_field_name]
|
187
|
+
init_v = initial_operand_values[kvlist_field_name]
|
188
|
+
new_v = new_operand_values[kvlist_field_name]
|
189
|
+
combined_v = {}
|
190
|
+
combined_labels = (init_v.keys + new_v.keys).flatten
|
191
|
+
combined_labels.uniq!
|
192
|
+
combined_labels.each do |label|
|
193
|
+
init_list = [init_v[label]].flatten
|
194
|
+
new_list = [new_v[label]].flatten
|
195
|
+
#puts "Init List: #{init_list.inspect}"
|
196
|
+
#puts "New List: #{new_list.inspect}"
|
197
|
+
#combined_list
|
198
|
+
combined_v[label] = (init_list + new_list).flatten
|
199
|
+
combined_v[label].compact!
|
200
|
+
combined_v[label].uniq!
|
201
|
+
end
|
202
|
+
#what to do with verified list?
|
203
|
+
end
|
204
|
+
|
205
|
+
it "should return appropriate - subtract - operations results for default operation behaviors" do
|
206
|
+
|
207
|
+
op_name = :subtract
|
208
|
+
|
209
|
+
#initial conditions
|
210
|
+
initial_operand_values = {:test_id => "Original ID",
|
211
|
+
:test_label1 => "Original Label",
|
212
|
+
:test_label2 => "Remove Me",
|
213
|
+
:test_list => ['item1', 'item2'],
|
214
|
+
:test_kvlist => { :list1 => ['klist1-a', 'klist1-d'],
|
215
|
+
:list2 => ['klist2-a', 'klist2-b'],
|
216
|
+
:list3 => 'klist3-a' } }
|
217
|
+
|
218
|
+
new_operand_values = {:test_id => "New ID",
|
219
|
+
:test_label1 => "New Label",
|
220
|
+
:test_label2 => "Remove Me",
|
221
|
+
:test_list => ['item2', 'item4'],
|
222
|
+
:test_kvlist => { :list1 => ['klist1-a', 'klist1-b'],
|
223
|
+
:list2 => 'klist2-b',
|
224
|
+
:list3 => 'klist3-a',
|
225
|
+
:list4 => ['klist4-a', 'klist4-b']} }
|
226
|
+
|
227
|
+
#test
|
228
|
+
results = execute_operations(@neo_set, new_operand_values, initial_operand_values, [op_name])
|
229
|
+
|
230
|
+
#verify
|
231
|
+
verified_list = {}
|
232
|
+
initial_operand_values.keys.should == new_operand_values.keys
|
233
|
+
|
234
|
+
static_field_name = :test_id
|
235
|
+
verified_list[static_field_name] = @field_op_set[static_field_name]
|
236
|
+
results[static_field_name][op_name][:update_this].should == initial_operand_values[static_field_name]
|
237
|
+
|
238
|
+
replace_field_name = :test_label1
|
239
|
+
verified_list[replace_field_name] = @field_op_set[replace_field_name]
|
240
|
+
results[replace_field_name][op_name][:update_this].should == initial_operand_values[replace_field_name]
|
241
|
+
|
242
|
+
replace_field_name = :test_label2
|
243
|
+
verified_list[replace_field_name] = @field_op_set[replace_field_name]
|
244
|
+
results[replace_field_name][op_name][:update_this].should == nil
|
245
|
+
|
246
|
+
list_field_name = :test_list
|
247
|
+
verified_list[list_field_name] = @field_op_set[list_field_name]
|
248
|
+
subtracted_values = initial_operand_values[list_field_name] - new_operand_values[list_field_name]
|
249
|
+
results[list_field_name][op_name][:update_this].should == subtracted_values
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe NodeElementOperations, "NodeElementOperation defined but not default key-value lists" do
|
254
|
+
include NodeElementOperationsSpecHelpers
|
255
|
+
|
256
|
+
before(:each) do
|
257
|
+
@field_op = :kvlist
|
258
|
+
@op_def = :key_list_ops
|
259
|
+
@built_in_op_names = [:add, :subtract, :getkeys]
|
260
|
+
@neo_set = NodeElementOperations.new(:field_op_set => {@field_op => @op_def})
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should merge in custom field operatoins with default field operations" do
|
264
|
+
@neo_set.field_op_set_sym.keys.should include :id
|
265
|
+
@neo_set.field_op_set_sym.keys.should include :tags
|
266
|
+
@neo_set.field_op_set_sym.keys.should include @field_op
|
267
|
+
end
|
268
|
+
|
269
|
+
it "should provide built-in operations to act on lists of lists" do
|
270
|
+
@built_in_op_names.each do |op_name|
|
271
|
+
@neo_set.lookup_op_proc(@op_def)[op_name].class.should == Proc
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
it "should return appropriate - add - operation results for list of lists" do
|
276
|
+
op_name = :add
|
277
|
+
|
278
|
+
#initial conditions
|
279
|
+
initial_operand_values = {:id => 'InitList',
|
280
|
+
:kvlist => { :list1 => ['klist1-a', 'klist1-d'],
|
281
|
+
:list2 => ['klist2-a', 'klist2-b'],
|
282
|
+
:list3 => 'klist3-a' } }
|
283
|
+
|
284
|
+
new_operand_values = {:kvlist => { :list1 => ['klist1-c', 'klist1-d'],
|
285
|
+
:list2 => 'klist2-c',
|
286
|
+
:list3 => 'klist3-a',
|
287
|
+
:list4 => ['klist4-a', 'klist4-b']} }
|
288
|
+
|
289
|
+
kvlist_field_name = :kvlist
|
290
|
+
#verified_list[kvlist_field_name] = @field_op_set[kvlist_field_name]
|
291
|
+
init_v = initial_operand_values[kvlist_field_name]
|
292
|
+
new_v = new_operand_values[kvlist_field_name]
|
293
|
+
combined_v = {}
|
294
|
+
combined_labels = (init_v.keys + new_v.keys).flatten
|
295
|
+
combined_labels.uniq!
|
296
|
+
combined_labels.each do |label|
|
297
|
+
init_list = [init_v[label]].flatten
|
298
|
+
new_list = [new_v[label]].flatten
|
299
|
+
#puts "Init List: #{init_list.inspect}"
|
300
|
+
#puts "New List: #{new_list.inspect}"
|
301
|
+
#combined_list
|
302
|
+
combined_v[label] = (init_list + new_list).flatten
|
303
|
+
combined_v[label].compact!
|
304
|
+
combined_v[label].uniq!
|
305
|
+
end
|
306
|
+
#combined_v is what we should get back from the operation
|
307
|
+
|
308
|
+
result_to_update = execute_single_operation(@neo_set, kvlist_field_name, op_name, init_v, new_v)
|
309
|
+
result = result_to_update[:update_this]
|
310
|
+
result.should == combined_v
|
311
|
+
end
|
312
|
+
|
313
|
+
it "should return appropriate - subtract - operation results for list of lists" do
|
314
|
+
op_name = :subtract
|
315
|
+
|
316
|
+
#initial conditions
|
317
|
+
initial_operand_values = {:id => 'InitList',
|
318
|
+
:kvlist => { :list1 => ['klist1-a', 'klist1-d'],
|
319
|
+
:list2 => ['klist2-a', 'klist2-b'],
|
320
|
+
:list3 => 'klist3-a' } }
|
321
|
+
|
322
|
+
new_operand_values = {:kvlist => { :list1 => ['klist1-c', 'klist1-d'],
|
323
|
+
:list2 => 'klist2-b',
|
324
|
+
:list3 => 'klist3-a',
|
325
|
+
:list4 => ['klist4-a', 'klist4-b']} }
|
326
|
+
|
327
|
+
kvlist_field_name = :kvlist
|
328
|
+
#verified_list[kvlist_field_name] = @field_op_set[kvlist_field_name]
|
329
|
+
init_v = initial_operand_values[kvlist_field_name]
|
330
|
+
new_v = new_operand_values[kvlist_field_name]
|
331
|
+
combined_v = {}
|
332
|
+
combined_labels = (init_v.keys).flatten
|
333
|
+
combined_labels.uniq!
|
334
|
+
combined_labels.each do |label|
|
335
|
+
init_list = [init_v[label]].flatten
|
336
|
+
new_list = [new_v[label]].flatten
|
337
|
+
#puts "Init List: #{init_list.inspect}"
|
338
|
+
#puts "New List: #{new_list.inspect}"
|
339
|
+
#combined_list
|
340
|
+
combined_v[label] = (init_list - new_list).flatten
|
341
|
+
combined_v[label].compact!
|
342
|
+
combined_v[label].uniq!
|
343
|
+
end
|
344
|
+
#combined_v is what we should get back from the operation
|
345
|
+
|
346
|
+
result_to_update = execute_single_operation(@neo_set, kvlist_field_name, op_name, init_v, new_v)
|
347
|
+
result = result_to_update[:update_this]
|
348
|
+
result.should == combined_v
|
349
|
+
end
|
350
|
+
|
351
|
+
it "should return appropriate - getkeys - operations results for default operation behaviors" do
|
352
|
+
|
353
|
+
op_name = :getkeys
|
354
|
+
|
355
|
+
#initial conditions
|
356
|
+
initial_operand_values = {:id => "Original ID",
|
357
|
+
:kvlist => { :list1 => ['klist1-a', 'klist1-d'],
|
358
|
+
:list2 => ['klist2-a', 'klist2-b'],
|
359
|
+
:list3 => 'klist3-a' } }
|
360
|
+
|
361
|
+
lookup_values1 = {:kvlist => 'klist2-b'}
|
362
|
+
lookup_values2 = {:kvlist => ['klist2-a', 'klist3-a']}
|
363
|
+
|
364
|
+
kvlist_field_name = :kvlist
|
365
|
+
#verified_list[kvlist_field_name] = @field_op_set[kvlist_field_name]
|
366
|
+
init_v = initial_operand_values[kvlist_field_name]
|
367
|
+
lookup_v1 = lookup_values1[kvlist_field_name]
|
368
|
+
lookup_v2 = lookup_values2[kvlist_field_name]
|
369
|
+
expected_return_value1 = []
|
370
|
+
expected_return_value2 = []
|
371
|
+
init_v.each do |label, list_items|
|
372
|
+
expected_return_value1 << label if list_items.include? lookup_v1
|
373
|
+
end
|
374
|
+
init_v.each do |label, list_items|
|
375
|
+
lookup_v2.each do |lookup|
|
376
|
+
expected_return_value2 << label if list_items.include? lookup
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
results1 = execute_single_operation(@neo_set, kvlist_field_name, op_name, init_v, lookup_v1)
|
381
|
+
results2 = execute_single_operation(@neo_set, kvlist_field_name, op_name, init_v, lookup_v2)
|
382
|
+
expected_return_value1.should == results1[:return_value]
|
383
|
+
expected_return_value2.should == results2[:return_value]
|
384
|
+
initial_operand_values[kvlist_field_name].should == results1[:update_this]
|
385
|
+
initial_operand_values[kvlist_field_name].should == results2[:update_this]
|
386
|
+
|
387
|
+
end
|
388
|
+
|
389
|
+
|
390
|
+
end
|
391
|
+
|
392
|
+
#complete non-default with proc from scratch
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#require helper for cleaner require statements
|
2
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../../lib/helpers/require_helper')
|
3
|
+
require Tinkit.glue 'sdb_s3/sdb_s3_files_mgr'
|
4
|
+
|
5
|
+
include SdbS3Interface
|
6
|
+
GlueEnvMock = Struct.new(:user_datastore_location)
|
7
|
+
|
8
|
+
describe FilesMgr, "Setup and intializatoin" do
|
9
|
+
before(:all) do
|
10
|
+
|
11
|
+
@glue_env_mock = GlueEnvMock.new("attachment_spec__node_loc")
|
12
|
+
@node_key = :_id
|
13
|
+
|
14
|
+
file1_data = "Example File1\nJust some text"
|
15
|
+
file2_data = "Example File2\nJust some more text"
|
16
|
+
file1_fname = "/tmp/example_file1.txt"
|
17
|
+
file2_fname = "/tmp/example_file2.txt"
|
18
|
+
files = {file1_fname => file1_data, file2_fname => file2_data}
|
19
|
+
files.each do |fname, data|
|
20
|
+
File.open(fname, 'w'){|f| f.write(data)}
|
21
|
+
end
|
22
|
+
@file_datas = [{:src_filename => file1_fname}, {:src_filename => file2_fname}]
|
23
|
+
@node1_data = {:_id => 'spec_test1', :data => 'stuff1'}
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should initialize" do
|
27
|
+
node_key_value = @node1_data[@node_key]
|
28
|
+
attach_handler = FilesMgr.new(@glue_env_mock, node_key_value)
|
29
|
+
buck_prefix = FilesMgr::BucketNamespacePrefix
|
30
|
+
node_loc = @glue_env_mock.user_datastore_location
|
31
|
+
check_bucket_location = "#{buck_prefix}_#{node_loc}"
|
32
|
+
#the below will sometimes fail due to AWS
|
33
|
+
attach_handler.bucket_name.should == check_bucket_location
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe FilesMgr, "Basic Operations" do
|
38
|
+
before(:all) do
|
39
|
+
@file1_fname = "/tmp/example_file1.txt"
|
40
|
+
@file2_fname = "/tmp/example_file2.txt"
|
41
|
+
f1_bname = File.basename(@file1_fname)
|
42
|
+
f2_bname = File.basename(@file2_fname)
|
43
|
+
@file_stored_data = { f1_bname => File.open(@file1_fname, 'rb'){|f| f.read},
|
44
|
+
f2_bname =>File.open(@file2_fname, 'rb'){|f| f.read} }
|
45
|
+
@glue_env_mock = GlueEnvMock.new("attachment_spec__node_loc")
|
46
|
+
@node_key = :_id
|
47
|
+
@file_datas = [{:src_filename => @file1_fname}, {:src_filename => @file2_fname}]
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
before(:each) do
|
52
|
+
@node1_data = {:_id => 'spec_test1', :data => 'stuff1'}
|
53
|
+
node_key_value = @node1_data[@node_key]
|
54
|
+
@attach_handler = FilesMgr.new(@glue_env_mock, node_key_value)
|
55
|
+
@attach_handler.subtract_files(nil, :all)
|
56
|
+
end
|
57
|
+
|
58
|
+
after(:each) do
|
59
|
+
@attach_handler.destroy_file_container
|
60
|
+
end
|
61
|
+
|
62
|
+
it "1) should add and retrieve files" do
|
63
|
+
node = nil
|
64
|
+
#@attach_handler.subtract_files(:all)
|
65
|
+
#Test that buckets/files don't exist on AWS
|
66
|
+
@file_datas.each do |file_data|
|
67
|
+
file_basename = File.basename(file_data[:src_filename])
|
68
|
+
data = @attach_handler.get_raw_data(node, file_basename)
|
69
|
+
data.should be_nil
|
70
|
+
end
|
71
|
+
|
72
|
+
#Add the Files
|
73
|
+
@attach_handler.add(node, @file_datas)
|
74
|
+
|
75
|
+
#Get the files and verify data
|
76
|
+
@file_datas.each do |file_data|
|
77
|
+
file_basename = File.basename(file_data[:src_filename])
|
78
|
+
data = @attach_handler.get_raw_data(node, file_basename)
|
79
|
+
data.should == @file_stored_data[file_basename]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|