tinkit 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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