tinkit 0.0.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.
Files changed (51) hide show
  1. data/LICENSE +176 -0
  2. data/README +11 -0
  3. data/Rakefile +75 -0
  4. data/lib/glue_envs/couchrest/couchrest_attachment_handler.rb +260 -0
  5. data/lib/glue_envs/couchrest/couchrest_files_mgr.rb +198 -0
  6. data/lib/glue_envs/couchrest_glue_env.rb +536 -0
  7. data/lib/glue_envs/files_mgr_base.rb +51 -0
  8. data/lib/glue_envs/filesystem/filesystem_files_mgr.rb +187 -0
  9. data/lib/glue_envs/filesystem_glue_env.rb +395 -0
  10. data/lib/glue_envs/mysql/mysql_files_mgr.rb +175 -0
  11. data/lib/glue_envs/mysql_glue_env.rb +428 -0
  12. data/lib/glue_envs/sdb_s3/sdb_s3_files_mgr.rb +314 -0
  13. data/lib/glue_envs/sdb_s3_glue_env.rb +248 -0
  14. data/lib/helpers/camel.rb +21 -0
  15. data/lib/helpers/filesystem_helpers.rb +27 -0
  16. data/lib/helpers/hash_helpers.rb +74 -0
  17. data/lib/helpers/log_helper.rb +34 -0
  18. data/lib/helpers/mime_types_new.rb +126 -0
  19. data/lib/helpers/old_more_open_struct.rb +28 -0
  20. data/lib/helpers/require_helper.rb +45 -0
  21. data/lib/helpers/tk_escape.rb +17 -0
  22. data/lib/midas/bufs_data_structure.rb +84 -0
  23. data/lib/midas/node_element_operations.rb +264 -0
  24. data/lib/tinkit.rb +38 -0
  25. data/lib/tinkit_base_node.rb +733 -0
  26. data/lib/tinkit_node_factory.rb +47 -0
  27. data/spec/couchrest_files_mgr_spec.rb +551 -0
  28. data/spec/couchrest_glue_spec.rb +246 -0
  29. data/spec/filesystem_files_mgr_spec.rb +236 -0
  30. data/spec/filesystem_glue_spec.rb +243 -0
  31. data/spec/filesystem_helpers_spec.rb +42 -0
  32. data/spec/helpers/bufs_node_builder.rb +17 -0
  33. data/spec/helpers/bufs_sample_dataset.rb +160 -0
  34. data/spec/helpers/bufs_test_environments.rb +81 -0
  35. data/spec/helpers/tmp_view_cleaner.rb +15 -0
  36. data/spec/lib_helpers/tk_escape_spec.rb +45 -0
  37. data/spec/mysql_files_mgr_spec.rb +250 -0
  38. data/spec/mysql_glue_spec.rb +214 -0
  39. data/spec/node_element_operations_spec.rb +392 -0
  40. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec1.rb +82 -0
  41. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec2.rb +68 -0
  42. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec3.rb +80 -0
  43. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec4.rb +110 -0
  44. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec5.rb +84 -0
  45. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec6.rb +83 -0
  46. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec7.rb +101 -0
  47. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec8.rb +92 -0
  48. data/spec/sdb_s3_files_mgr_spec/sdb_s3_files_mgr_spec_all.rb +266 -0
  49. data/spec/sdb_s3_glue_spec.rb +230 -0
  50. data/spec/tinkit_node_factory_spec.rb +1108 -0
  51. metadata +114 -0
@@ -0,0 +1,68 @@
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 "2) should list attachment files" do
63
+ node = nil
64
+ @attach_handler.add(node, @file_datas)
65
+ files = @attach_handler.list(node)
66
+ files.sort.should == @file_stored_data.keys.sort
67
+ end
68
+ end
@@ -0,0 +1,80 @@
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 intialization" 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 "3) should list metadata" do
63
+ node = nil
64
+ @attach_handler.add(node, @file_datas)
65
+ md = @attach_handler.get_attachments_metadata(nil)
66
+ md.should_not == nil
67
+ @file_datas.each do |file_data|
68
+ file_basename = File.basename(file_data[:src_filename])
69
+ each_md = md[file_basename]
70
+ each_md.should_not == nil
71
+ each_md.keys.should include :content_type
72
+ each_md.keys.should include :file_modified
73
+
74
+ file_basename = File.basename(file_data[:src_filename])
75
+ md[file_basename][:content_type].should =~ /^text\/plain/
76
+ time_str = md[file_basename][:file_modified]
77
+ Time.parse(time_str).should > Time.now - 1 #should have been modified less than a second ago
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,110 @@
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 intialization" 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 "4) should be well behaved adding more files" do
63
+ node = nil
64
+ @attach_handler.add(node, @file_datas)
65
+
66
+
67
+ #Get the original files and verify data
68
+ @file_datas.each do |file_data|
69
+ file_basename = File.basename(file_data[:src_filename])
70
+ data = @attach_handler.get_raw_data(node, file_basename)
71
+ data.should == @file_stored_data[file_basename]
72
+ end
73
+
74
+ #create some more files
75
+ file1_data = "Example File1\nNEW!! text"
76
+ file3_data = "Example File3\nYet more text"
77
+ file4_data = "Example File4\nand more text"
78
+ file3_fname = "/tmp/example_file3.txt"
79
+ file4_fname = "/tmp/example_file4.txt"
80
+ files = {@file1_fname => file1_data, file3_fname => file3_data, file4_fname => file4_data}
81
+ files.each do |fname, data|
82
+ File.open(fname, 'w'){|f| f.write(data)}
83
+ end
84
+ file1_data.should == File.open(@file1_fname){|f| f.read}
85
+ @file_datas2 = [{:src_filename => @file1_fname},
86
+ {:src_filename => file3_fname},
87
+ {:src_filename => file4_fname}]
88
+
89
+ #add them
90
+ @attach_handler.add(node, @file_datas2)
91
+
92
+ #Check the unchanged file (file2)
93
+ file2_basename = File.basename(@file2_fname)
94
+ data2 = @attach_handler.get_raw_data(node, file2_basename)
95
+ data2.should == @file_stored_data[file2_basename]
96
+
97
+ #Get the changed files and verify it is the new data
98
+ file1_basename = File.basename(@file1_fname)
99
+ data1 = @attach_handler.get_raw_data(node, file1_basename)
100
+ data1.should == file1_data
101
+
102
+ file3_basename = File.basename(file3_fname)
103
+ data3 = @attach_handler.get_raw_data(node, file3_basename)
104
+ data3.should == file3_data
105
+
106
+ file4_basename = File.basename(file4_fname)
107
+ data4 = @attach_handler.get_raw_data(node, file4_basename)
108
+ data4.should == file4_data
109
+ end
110
+ end
@@ -0,0 +1,84 @@
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 intialization" 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 "5) should delete (subtract) files" do
63
+ node = nil
64
+ @attach_handler.add(node, @file_datas)
65
+
66
+ files_to_delete = [@file1_fname, @file2_fname]
67
+
68
+ #they should exist in the node
69
+ files_to_delete.each do |fname|
70
+ file_basename = File.basename(fname)
71
+ data = @attach_handler.get_raw_data(node, file_basename)
72
+ data.should match /^Example File/
73
+ end
74
+
75
+ basenames_to_delete = files_to_delete.map{|f| File.basename(f)}
76
+ @attach_handler.subtract(node, basenames_to_delete)
77
+
78
+ files_to_delete.each do |fname|
79
+ file_basename = File.basename(fname)
80
+ data = @attach_handler.get_raw_data(node, file_basename)
81
+ data.should be_nil
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,83 @@
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 intialization" 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 "6) should delete (subtract) files" do
63
+ node = nil
64
+ @attach_handler.add(node, @file_datas)
65
+
66
+ files_to_delete = [@file1_fname, @file2_fname]
67
+ #they should exist in the node
68
+ files_to_delete.each do |fname|
69
+ file_basename = File.basename(fname)
70
+ data = @attach_handler.get_raw_data(node, file_basename)
71
+ data.should match /^Example File/
72
+ end
73
+
74
+ basenames_to_delete = files_to_delete.map{|f| File.basename(f)}
75
+ @attach_handler.subtract(node, basenames_to_delete)
76
+
77
+ files_to_delete.each do |fname|
78
+ file_basename = File.basename(fname)
79
+ data = @attach_handler.get_raw_data(node, file_basename)
80
+ data.should be_nil
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,101 @@
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 intialization" 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
+ node_key_value = @node1_data[@node_key]
60
+ kill_attach_handler = FilesMgr.new(@glue_env_mock, node_key_value)
61
+ kill_attach_handler.destroy_file_container
62
+ end
63
+
64
+ it "7) should add attachments from the raw data" do
65
+ node = nil
66
+ @attach_handler.add(node, @file_datas)
67
+
68
+ raw_data = "Example File3\nYet more text"
69
+ content_type = "text/plain"
70
+ modified_at = Time.now.to_s
71
+ att_name = "example_raw_data.txt"
72
+
73
+ #Add the Raw Data
74
+ @attach_handler.add_raw_data(node, att_name, content_type, raw_data, modified_at)
75
+
76
+ #Get the files and verify data
77
+
78
+ #Let's try killing the @attach_handler [Fixed It!]
79
+ @attach_handler = nil
80
+
81
+ node_key_value = @node1_data[@node_key]
82
+ new_attach_handler = FilesMgr.new(@glue_env_mock, node_key_value)
83
+
84
+ data = new_attach_handler.get_raw_data(node, att_name)
85
+ all_metadata = new_attach_handler.get_attachments_metadata(node)
86
+ all_metadata.should_not be_nil
87
+
88
+ attachment_metadata = all_metadata[att_name]
89
+
90
+ data.should == raw_data
91
+
92
+ #THESE TESTS FAIL (now pass, the attach handler must be reinitialized to work)
93
+ #TODO: There is a metadata issue here, but not in general
94
+ #something strange about metadata being requested like this
95
+ #it might have to do with the retries?
96
+ attachment_metadata.should_not be_nil
97
+ att_md = attachment_metadata
98
+ att_md[:content_type].should == content_type
99
+ Time.parse(att_md[:file_modified]).should == Time.parse(modified_at)
100
+ end
101
+ end