filecluster 0.0.3

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.
@@ -0,0 +1,98 @@
1
+ require 'helper'
2
+ require 'open3'
3
+ require 'timeout'
4
+
5
+ class DaemonTest < Test::Unit::TestCase
6
+ class << self
7
+ def startup
8
+ @debug = false #show stdout and sterr of fc-daemon
9
+
10
+ dir = File.expand_path(File.dirname(__FILE__))
11
+ db_config_file = dir+'/db_test.yml'
12
+ daemon_bin = File.expand_path(dir+'/../bin/fc-daemon')
13
+
14
+ File.open(db_config_file, 'w') do |f|
15
+ f.write(FC::DB.options.to_yaml)
16
+ end
17
+
18
+ @@errors_count = FC::Error.where.count
19
+
20
+ @stotage_checks = 0
21
+ Thread.new do
22
+ Open3.popen2e("#{daemon_bin} -c #{db_config_file} -l debug -t 1 -g 1 -h host1") do |stdin, stdout, t|
23
+ @@pid = t.pid
24
+ while line = stdout.readline
25
+ @stotage_checks += 1 if line =~ /Finish stotage check/i
26
+ puts line if @debug
27
+ end
28
+ end
29
+ end
30
+
31
+ # tmp fake storages dirs
32
+ `rm -rf /tmp/host*-sd*`
33
+ `mkdir -p /tmp/host1-sda/ /tmp/host1-sdb/ /tmp/host1-sdc/`
34
+
35
+ # test file to copy
36
+ @@test_file_path = '/tmp/fc_test_file'
37
+ `dd if=/dev/urandom of=#{@@test_file_path} bs=1M count=1 2>&1`
38
+
39
+ @@storages = []
40
+ @@storages << FC::Storage.new(:name => 'host1-sda', :host => 'host1', :path => '/tmp/host1-sda/', :size_limit => 1000000000)
41
+ @@storages << FC::Storage.new(:name => 'host1-sdb', :host => 'host1', :path => '/tmp/host1-sdb/', :size_limit => 1000000000)
42
+ @@storages << FC::Storage.new(:name => 'host1-sdc', :host => 'host1', :path => '/tmp/host1-sdc/', :size_limit => 1000000000)
43
+ @@storages.each { |storage| storage.save}
44
+
45
+ @@policy = FC::Policy.new(:storages => 'host1-sda,host1-sdb,host1-sdc', :copies => 2)
46
+ @@policy.save
47
+
48
+ # wait for running fc-daemon
49
+ Timeout::timeout(5) do
50
+ while @stotage_checks < @@storages.size
51
+ sleep 0.1
52
+ end
53
+ end
54
+ end
55
+
56
+ def shutdown
57
+ Process.kill("KILL", @@pid)
58
+ FC::DB.connect.query("DELETE FROM items_storages")
59
+ FC::DB.connect.query("DELETE FROM items")
60
+ FC::DB.connect.query("DELETE FROM policies")
61
+ FC::DB.connect.query("DELETE FROM storages")
62
+ `rm -rf /tmp/host1-sda /tmp/host1-sdb /tmp/host1-sdc`
63
+ end
64
+ end
65
+
66
+ should "daemon_all" do
67
+ @@storages.each {|storage| storage.reload}
68
+ assert @@storages[0].up?, "Storage #{@@storages[0].name} down"
69
+ assert @@storages[1].up?, "Storage #{@@storages[1].name} down"
70
+
71
+ FC::Storage.any_instance.stubs(:host).returns('host1')
72
+ FC::Storage.stubs(:curr_host).returns('host1')
73
+ assert_nothing_raised { @item1 = FC::Item.create_from_local(@@test_file_path, 'test1', @@policy, {:tag => 'test1'}) }
74
+ assert_nothing_raised { @item2 = FC::Item.create_from_local(@@test_file_path, 'test2', @@policy, {:tag => 'test2'}) }
75
+ assert_nothing_raised { @item3 = FC::Item.create_from_local(@@test_file_path, 'test3', @@policy, {:tag => 'test3'}) }
76
+
77
+ @@policy.copies = 3
78
+ @@policy.save
79
+ sleep 2
80
+
81
+ # wait for copy
82
+ [1, 2, 3].each do |i|
83
+ ['b', 'c'].each do |j|
84
+ assert_equal `du -b /tmp/host1-sda/test$i 2>&1`.to_i, `du -b /tmp/host$i-sd$j/test$i 2>&1`.to_i
85
+ end
86
+ end
87
+
88
+ @@policy.copies = 2
89
+ @@policy.save
90
+ item_storage = FC::ItemStorage.where('item_id = ? AND storage_name = ?', @item1.id, 'host1-sdc').first
91
+ item_storage.status = 'delete'
92
+ item_storage.save
93
+ sleep 2
94
+ assert_equal 0, `du -b /tmp/host1-sdc/test1 2>&1`.to_i
95
+
96
+ assert_equal @@errors_count, FC::Error.where.count, "new errors in errors table"
97
+ end
98
+ end
data/test/db_test.rb ADDED
@@ -0,0 +1,182 @@
1
+ require 'helper'
2
+
3
+ class DbTest < Test::Unit::TestCase
4
+ class << self
5
+ def startup
6
+ storages = []
7
+ storages << FC::Storage.new(:name => 'rec1-sda', :host => 'rec1')
8
+ storages << FC::Storage.new(:name => 'rec1-sdb', :host => 'rec1')
9
+ storages << FC::Storage.new(:name => 'rec1-sdc', :host => 'rec1')
10
+ storages << FC::Storage.new(:name => 'rec1-sdd', :host => 'rec1')
11
+ storages << FC::Storage.new(:name => 'rec2-sda', :host => 'rec2')
12
+ storages << FC::Storage.new(:name => 'rec2-sdb', :host => 'rec2')
13
+ storages << FC::Storage.new(:name => 'rec2-sdc', :host => 'rec2')
14
+ storages << FC::Storage.new(:name => 'rec2-sdd', :host => 'rec2')
15
+ @@storages_ids = storages.map{|storage| storage.save; storage.id }
16
+
17
+ policies = []
18
+ policies << FC::Policy.new(:storages => 'rec1-sda,rec1-sdd', :copies => 2)
19
+ policies << FC::Policy.new(:storages => 'rec1-sda,bla,rec2-sdd', :copies => 3)
20
+ policies << FC::Policy.new(:storages => 'bla,rec1-sda,test', :copies => 4)
21
+ @@policies_ids = policies.map{|policy| policy.save; policy.id }
22
+
23
+ items = []
24
+ items << FC::Item.new(:name => 'test1', :policy_id => policies.first.id, :size => 150)
25
+ items << FC::Item.new(:name => 'test2', :policy_id => policies.first.id, :size => 200)
26
+ items << FC::Item.new(:name => 'test3', :policy_id => policies.first.id, :size => 400)
27
+ @@items_ids = items.map{|item| item.save; item.id }
28
+
29
+ item_storages = []
30
+ items.each do |item|
31
+ item_storages << FC::ItemStorage.new(:item_id => item.id, :storage_name => 'rec1-sda')
32
+ item_storages << FC::ItemStorage.new(:item_id => item.id, :storage_name => 'rec2-sda')
33
+ end
34
+ @@item_storages_ids = item_storages.map{|is| is.save; is.id }
35
+ end
36
+ def shutdown
37
+ FC::DB.connect.query("DELETE FROM items_storages")
38
+ FC::DB.connect.query("DELETE FROM items")
39
+ FC::DB.connect.query("DELETE FROM policies")
40
+ FC::DB.connect.query("DELETE FROM storages")
41
+ end
42
+ end
43
+ def setup
44
+ @storages = @@storages_ids.map{|id| FC::Storage.find(id)}
45
+ @storage = @storages.first
46
+ @policies = @@policies_ids.map{|id| FC::Policy.find(id)}
47
+ @policy = @policies.first
48
+ @items = @@items_ids.map{|id| FC::Item.find(id)}
49
+ @item = @items.first
50
+ @item_storages = @@item_storages_ids.map{|id| FC::ItemStorage.find(id)}
51
+ @item_storage = @item_storages.first
52
+ @item_storage2 = @item_storages[1]
53
+ end
54
+
55
+ should "items" do
56
+ assert @items.count > 0, 'Items not loaded'
57
+ @items.each{|item| assert item.time > 0, "Item (id=#{item.id}) time = 0"}
58
+ sleep 1
59
+ time = @item.time
60
+ @item.tag = 'blabla'
61
+ @item.save
62
+ @item.reload
63
+ assert_not_equal time, @item.time, "Item (id=#{@item.id}) time not changed after save"
64
+ item2 = FC::Item.new(:name => @item.name, :policy_id => @item.policy_id)
65
+ item2.save
66
+ assert_equal 0, item2.id, "Item (id=#{item2.id}) successfull insert on uniq key"
67
+ end
68
+
69
+ should "storages" do
70
+ assert @storages.count > 0, 'Storages not loaded'
71
+ storage = FC::Storage.new(:name => 'rec1-sda', :host => 'rec1')
72
+ storage.save
73
+ assert_equal storage.id, 0, "Storage duplicate name"
74
+ end
75
+
76
+ should "policies and storages" do
77
+ assert @policies.count > 0, 'Policies not loaded'
78
+ assert_equal 'rec1-sda,rec1-sdd', @policies[0].storages, "Policy (id=#{@policies[0].id}) incorrect storages"
79
+ assert_equal 'rec1-sda,rec2-sdd', @policies[1].storages, "Policy (id=#{@policies[0].id}) incorrect storages"
80
+ assert_equal 'rec1-sda', @policies[2].storages, "Policy (id=#{@policies[0].id}) incorrect storages"
81
+ assert_raise(Mysql2::Error, 'Create policy with incorrect storages') { FC::Policy.new(:storages => 'bla,test').save }
82
+ assert_raise(Mysql2::Error, 'Change storage name with linked polices') { @storages[0].name = 'blabla'; @storages[0].save }
83
+ assert_raise(Mysql2::Error, 'Delete storage name with linked polices') { @storages[0].delete }
84
+ assert_nothing_raised { @storages[6].name = 'rec2-sdc-new'; @storages[6].save }
85
+ @storages[3].name = 'rec1-sdd-new' #rec1-sdd
86
+ @storages[3].save
87
+ @policies[0].reload
88
+ assert_equal 'rec1-sda', @policies[0].storages, "Policy (id=#{@policies[0].id}) incorrect storages after storage change"
89
+ @storages[7].delete #rec2-sdd
90
+ @@storages_ids.delete(@storages[7].id)
91
+ @policies[1].reload
92
+ assert_equal 'rec1-sda', @policies[1].storages, "Policy (id=#{@policies[1].id}) incorrect storages after storage delete"
93
+ @policies[0].storages = 'rec1-sda,rec2-sda,bla bla'
94
+ @policies[0].save
95
+ @policies[0].reload
96
+ assert_equal 'rec1-sda,rec2-sda', @policies[0].storages, "Policy (id=#{@policies[0].id}) incorrect storages after change"
97
+ assert_raise(Mysql2::Error, 'Save empty policy storage') { @policies[0].storages = 'blabla'; @policies[0].save }
98
+ end
99
+
100
+ should "item_storages doubles" do
101
+ is = FC::ItemStorage.new(:item_id => @item_storage.item_id, :storage_name => @item_storage.storage_name)
102
+ is.save
103
+ assert_equal 0, is.id, 'Item_storages successfull insert on uniq key'
104
+ end
105
+
106
+ should "item_storages times" do
107
+ assert @item_storages.count > 0, 'Item_storages not loaded'
108
+ @item_storages.each{|is| assert is.time > 0, "Item_storage (id=#{is.id}) time = 0"}
109
+ sleep 1
110
+ storage_name = @item_storage.storage_name
111
+ time = @item_storage.time
112
+ @item_storage.storage_name = 'rec1-sdc'
113
+ @item_storage.save
114
+ @item_storage.reload
115
+ assert_not_equal time, @item_storage.time, "Item_storage (id=#{@item_storage.id}) time not changed after save"
116
+ @item_storage.storage_name = storage_name
117
+ @item_storage.save
118
+ end
119
+
120
+ should "item_storages references" do
121
+ assert_raise(Mysql2::Error, "Delete item (id=#{@items[2].id} with references to item_storages") { @items[2].delete }
122
+ assert_raise(Mysql2::Error, "Delete storage (id=#{@storages[4].id} with references to item_storages") { @storages[4].delete }
123
+ end
124
+
125
+ should "item_storages copies, statuses, size" do
126
+ @items.each{|item| assert_equal 2, item.copies, "Item (id=#{item.id}) copies not inc after add item_storage"}
127
+ size_sum = @items.inject(0){|sum, item| sum+item.size}
128
+ assert_equal size_sum, @storage.size, "storage (id=#{@storage.id}) size <> ready not inc after item_storage.status='ready'"
129
+
130
+ assert_equal 'new', @item.status, "Item (id=#{@item.id}) status <> 'new'"
131
+ @item_storage.status = 'ready'
132
+ @item_storage.save
133
+ @item_storage2.status = 'ready'
134
+ @item_storage2.save
135
+ @item.reload
136
+ assert_equal 'ready', @item.status, "Item (id=#{@item.id}) status <> 'ready' not changed after item_storage.status='ready'"
137
+ @item_storage.status = 'error'
138
+ @item_storage.save
139
+ @item.reload
140
+ assert_equal 'ready', @item.status, "Item (id=#{@item.id}) status <> 'ready' changed after one of two item_storage.status='error'"
141
+ @item_storage2.status = 'error'
142
+ @item_storage2.save
143
+ @item.reload
144
+ assert_equal 'error', @item.status, "Item (id=#{@item.id}) status <> 'error' not changed after item_storage.status='error'"
145
+ assert_equal 2, @item.copies, "Item (id=#{@item.id}) copies changed after item_storage.status='error'"
146
+
147
+ @item_storage.status = 'ready'
148
+ @item_storage.save
149
+ @item.reload
150
+ assert_equal 'ready', @item.status, "Item (id=#{@item.id}) status <> 'ready' not changed after item_storage.status='ready'"
151
+ @item_storage.status = 'delete'
152
+ @item_storage.save
153
+ @item.reload
154
+ assert_equal 'error', @item.status, "Item (id=#{@item.id}) status <> 'error' not changed after item_storage.status='delete'"
155
+ assert_equal 1, @item.copies, "Item (id=#{@item.id}) copies not decreased after item_storage.status='delete'"
156
+
157
+ @item_storage.status = 'ready'
158
+ @item_storage.save
159
+ @item_storage2.status = 'ready'
160
+ @item_storage2.save
161
+ @item.reload
162
+ assert_equal 'ready', @item.status, "Item (id=#{@item.id}) status <> 'ready' not changed after delete item_storage"
163
+ @item_storage.delete
164
+ @@item_storages_ids.delete(@item_storage.id)
165
+ @item.reload
166
+ @storage.reload
167
+ assert_equal 'ready', @item.status, "Item (id=#{@item.id}) status <> 'ready' changed after delete item_storage"
168
+ size_sum -= @item.size
169
+ assert_equal size_sum, @storage.size, "storage (id=#{@storage.id}) size not dec after delete item_storage"
170
+ @item_storage2.delete
171
+ @@item_storages_ids.delete(@item_storage2.id)
172
+ @item.reload
173
+ assert_equal 'error', @item.status, "Item (id=#{@item.id}) status <> 'error' not changed after delete all item_storage"
174
+ end
175
+
176
+ should "errors time" do
177
+ error = FC::Error.new(:message => 'test error')
178
+ error.save
179
+ error.reload
180
+ assert error.time > 0, "Error (id=#{error.id}) time = 0"
181
+ end
182
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ class ErrorTest < Test::Unit::TestCase
4
+ def setup
5
+ FC::Storage.stubs(:curr_host).returns('localhost')
6
+ end
7
+
8
+ should "get_storages" do
9
+ assert_raise(RuntimeError) { FC::Error.raise 'error message', :item_id => 111 }
10
+ assert error = FC::Error.where('1 ORDER BY id desc LIMIT 1').first
11
+ assert_equal 'error message', error.message
12
+ assert_equal 'localhost', error.host
13
+ assert_equal 111, error.item_id
14
+ end
15
+ end
@@ -0,0 +1,97 @@
1
+ require 'helper'
2
+
3
+ class FunctionalTest < Test::Unit::TestCase
4
+ class << self
5
+ def startup
6
+ # tmp fake storages dirs
7
+ `rm -rf /tmp/host*-sd*`
8
+ `mkdir -p /tmp/host1-sda/ /tmp/host2-sda/`
9
+
10
+ # test file to copy
11
+ @@test_file_path = '/tmp/fc_test_file'
12
+ `dd if=/dev/urandom of=#{@@test_file_path} bs=100K count=1 2>&1`
13
+
14
+ @@storages = []
15
+ @@storages << FC::Storage.new(:name => 'host1-sda', :host => 'host1', :path => '/tmp/host1-sda/', :size_limit => 1000000, :check_time => Time.new.to_i)
16
+ @@storages << FC::Storage.new(:name => 'host1-sdb', :host => 'host1', :path => '/tmp/host1-sdb/', :size_limit => 1000000, :check_time => Time.new.to_i)
17
+ @@storages << FC::Storage.new(:name => 'host2-sda', :host => 'host2', :path => '/tmp/host2-sda/', :size_limit => 1000000, :check_time => Time.new.to_i)
18
+ @@storages << FC::Storage.new(:name => 'host2-sdb', :host => 'host2', :path => '/tmp/host2-sdb/', :size_limit => 1000000, :check_time => Time.new.to_i)
19
+ @@storages << FC::Storage.new(:name => 'host3-sda', :host => 'host3', :path => '/tmp/host3-sda/', :size_limit => 1000000)
20
+ @@storages.each { |storage| storage.save}
21
+
22
+ @@policies = []
23
+ @@policies << FC::Policy.new(:storages => 'host1-sda,host2-sda', :copies => 2)
24
+ @@policies << FC::Policy.new(:storages => 'host1-sdb,host2-sdb', :copies => 2)
25
+ @@policies << FC::Policy.new(:storages => 'host3-sda', :copies => 1)
26
+ @@policies << FC::Policy.new(:storages => 'host2-sda', :copies => 1)
27
+ @@policies.each { |policy| policy.save}
28
+ end
29
+ def shutdown
30
+ FC::DB.connect.query("DELETE FROM items_storages")
31
+ FC::DB.connect.query("DELETE FROM items")
32
+ FC::DB.connect.query("DELETE FROM policies")
33
+ FC::DB.connect.query("DELETE FROM storages")
34
+ `rm -rf /tmp/host1-sda /tmp/host2-sda`
35
+ end
36
+ end
37
+
38
+ def setup
39
+ FC::Storage.any_instance.stubs(:host).returns('localhost')
40
+ FC::Storage.stubs(:curr_host).returns('localhost')
41
+ end
42
+
43
+ should "item create_from_local successful" do
44
+ assert_nothing_raised { @item = FC::Item.create_from_local(@@test_file_path, 'test1', @@policies[0], {:tag => 'test'}) }
45
+ assert_kind_of FC::Item, @item
46
+ assert_equal `du -b /tmp/host1-sda/test1 2>&1`.to_i, `du -b #{@@test_file_path} 2>&1`.to_i
47
+ assert_equal `du -b /tmp/host1-sda/test1 2>&1`.to_i, @item.size
48
+ assert_equal 'ready', @item.status
49
+ item_storages = @item.get_item_storages
50
+ assert_equal 1, item_storages.count
51
+ item_storage = item_storages.first
52
+ assert_equal 'ready', item_storage.status
53
+ assert_equal 'host1-sda', item_storage.storage_name
54
+ end
55
+
56
+ should "item create_from_local error local path" do
57
+ errors_count = FC::Error.where.count
58
+ assert_raise(RuntimeError) { FC::Item.create_from_local(@@test_file_path, 'test2', @@policies[1], {:tag => 'test'}) }
59
+ assert_equal errors_count+1, FC::Error.where.count, "Error not saved after error local path"
60
+ end
61
+
62
+ should "item create_from_local replace" do
63
+ @item = FC::Item.new(:name => 'test2', :policy_id => @@policies[0].id)
64
+ @item.save
65
+ errors_count = FC::Error.where.count
66
+ assert_raise(RuntimeError, "replace item") { FC::Item.create_from_local(@@test_file_path, 'test2', @@policies[0], {:tag => 'test'}) }
67
+ assert_equal errors_count+1, FC::Error.where.count, "Error not saved after replace item"
68
+ assert_nothing_raised { @item2 = FC::Item.create_from_local(@@test_file_path, 'test2', @@policies[0], {:replace => true, :tag => 'test'}) }
69
+ assert_equal @item.id, @item2.id, "Item (id1=#{@item.id}, id2=#{@item2.id}) change id after replace"
70
+ end
71
+
72
+ should "item create_from_local available storage" do
73
+ errors_count = FC::Error.where.count
74
+ assert_raise(RuntimeError, "available storage") { FC::Item.create_from_local(@@test_file_path, 'test3', @@policies[2], {:tag => 'test'}) }
75
+ assert_equal errors_count+1, FC::Error.where.count, "Error not saved on available storage"
76
+ end
77
+
78
+ should "item create_from_local delete item_storage" do
79
+ @item = FC::Item.new(:name => 'test4', :policy_id => @@policies[3].id)
80
+ @item.save
81
+ item_storage = FC::ItemStorage.new(:item_id => @item.id, :storage_name => 'host2-sda')
82
+ item_storage.save
83
+ assert_nothing_raised { @item = FC::Item.create_from_local(@@test_file_path, 'test4', @@policies[3], {:tag => 'test', :replace => true}) }
84
+ item_storages = @item.get_item_storages
85
+ assert_equal 1, item_storages.count
86
+ assert_not_equal item_storage.id, item_storages.first.id
87
+ assert_raise(RuntimeError) { item_storage.reload }
88
+ end
89
+
90
+ should "item create_from_local check size" do
91
+ FC::Storage.any_instance.stubs(:copy_path => true, :file_size => 10)
92
+ errors_count = FC::Error.where.count
93
+ assert_raise(RuntimeError) { FC::Item.create_from_local(@@test_file_path, 'test5', @@policies[1], {:tag => 'test'}) }
94
+ assert_equal errors_count+1, FC::Error.where.count, "Error not saved after check size"
95
+ end
96
+
97
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,17 @@
1
+ $:.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
+
3
+ require "test/unit"
4
+ require "shoulda-context"
5
+ require "filecluster"
6
+ require "mocha/setup"
7
+
8
+ TEST_DATABASE = 'fc_test'
9
+ TEST_USER = 'root'
10
+ TEST_PASSWORD = ''
11
+
12
+ FC::DB.connect_by_config(:username => TEST_USER, :password => TEST_PASSWORD)
13
+ FC::DB.connect.query("DROP DATABASE IF EXISTS #{TEST_DATABASE}")
14
+ FC::DB.connect.query("CREATE DATABASE #{TEST_DATABASE}")
15
+ FC::DB.connect.query("USE #{TEST_DATABASE}")
16
+ FC::DB.init_db
17
+ FC::DB.options[:database] = TEST_DATABASE
data/test/item_test.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'helper'
2
+
3
+ class ItemTest < Test::Unit::TestCase
4
+ class << self
5
+ def startup
6
+ @@item = FC::Item.new(:name => 'test item', :policy_id => 1, :size => 150)
7
+ @@item.save
8
+
9
+ @@storages = []
10
+ @@storages << FC::Storage.new(:name => 'rec1-sda', :host => 'rec1')
11
+ @@storages << FC::Storage.new(:name => 'rec2-sda', :host => 'rec2')
12
+ @@item_storages = @@storages.map do |storage|
13
+ storage.save
14
+ item_storage = FC::ItemStorage.new(:item_id => @@item.id, :storage_name => storage.name)
15
+ item_storage.save
16
+ item_storage
17
+ end
18
+ end
19
+ def shutdown
20
+ FC::DB.connect.query("DELETE FROM items_storages")
21
+ FC::DB.connect.query("DELETE FROM items")
22
+ FC::DB.connect.query("DELETE FROM storages")
23
+ end
24
+ end
25
+
26
+ should "get_item_storages" do
27
+ assert_same_elements @@item_storages.map(&:id), @@item.get_item_storages.map(&:id)
28
+ end
29
+
30
+ should "create_from_local" do
31
+ policy = FC::Policy.new
32
+ assert_raise(ArgumentError) { FC::Item.create_from_local }
33
+ assert_raise(ArgumentError) { FC::Item.create_from_local '/bla/bla' }
34
+ assert_raise(ArgumentError) { FC::Item.create_from_local '/bla/bla', 'test' }
35
+ assert_raise(RuntimeError) { FC::Item.create_from_local '/bla/bla', 'test', {}}
36
+ assert_raise(RuntimeError) { FC::Item.create_from_local '/bla/bla/bla', 'test', policy}
37
+ end
38
+
39
+ should "mark_deleted" do
40
+ @@item.mark_deleted
41
+ @@item.reload
42
+ assert_equal 'delete', @@item.status
43
+ @@item_storages.each do |item_storage|
44
+ item_storage.reload
45
+ assert_equal 'delete', item_storage.status
46
+ end
47
+ end
48
+
49
+ end