content_data 1.0.1 → 1.1.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.
@@ -1,18 +1,31 @@
1
1
  require 'thread'
2
2
 
3
+ require 'content_server/globals'
4
+ require 'params'
5
+
3
6
  module ContentData
4
7
 
5
8
  # TODO(kolman): When content data is immutable, remove the clones (waste).
6
9
  class DynamicContentData
7
10
  def initialize()
11
+ ObjectSpace.define_finalizer(self,
12
+ self.class.method(:finalize).to_proc)
13
+ if Params['enable_monitoring']
14
+ ::ContentServer::Globals.process_vars.inc('obj add DynamicContentData')
15
+ end
8
16
  @last_content_data = nil
9
17
  @last_content_data_available_mutex = Mutex.new
10
18
  end
11
19
 
20
+ def self.finalize(id)
21
+ if Params['enable_monitoring']
22
+ ::ContentServer::Globals.process_vars.inc('obj rem DynamicContentData')
23
+ end
24
+ end
25
+
12
26
  def update(content_data)
13
- ref = ContentData.new(content_data)
14
27
  @last_content_data_available_mutex.synchronize {
15
- @last_content_data = ref
28
+ @last_content_data = content_data
16
29
  Log.debug2("updating last content data:#{@last_content_data}\n")
17
30
  }
18
31
  end
@@ -26,12 +39,40 @@ module ContentData
26
39
  false
27
40
  end
28
41
 
42
+ def each_instance(&block)
43
+ ref = nil
44
+ @last_content_data_available_mutex.synchronize {
45
+ ref = @last_content_data
46
+ }
47
+ ref.each_instance(&block)
48
+ end
49
+
50
+ def add_instance(checksum, size, server_name, path, modification_time)
51
+ @last_content_data_available_mutex.synchronize {
52
+ @last_content_data.add_instance(checksum, size, server_name, path, modification_time)
53
+ }
54
+ end
55
+
56
+ def remove_instance(location, checksum=nil)
57
+ @last_content_data_available_mutex.synchronize {
58
+ @last_content_data.remove_instance(location, checksum)
59
+ }
60
+ end
61
+
62
+ def stats_by_location(location)
63
+ ref = nil
64
+ @last_content_data_available_mutex.synchronize {
65
+ ref = @last_content_data
66
+ }
67
+ return ref.stats_by_location(location)
68
+ end
69
+
29
70
  def last_content_data
30
71
  ref = nil
31
72
  @last_content_data_available_mutex.synchronize {
32
73
  ref = @last_content_data
33
74
  }
34
- return ContentData.new(ref)
75
+ return ref
35
76
  end
36
77
  end
37
78
 
@@ -1,3 +1,3 @@
1
1
  module ContentData
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -3,143 +3,289 @@ require 'test/unit'
3
3
 
4
4
  require_relative '../../lib/content_data/content_data.rb'
5
5
 
6
- module ContentData
7
-
8
6
  class TestContentData < Test::Unit::TestCase
9
- def test_content
10
- content_data = ContentData.new
11
- content_data.add_content(Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039")))
12
- content_data.add_content(Content.new("B12A1C98A3", 123123, ContentData.parse_time("1296527039")))
13
- content_data.add_content(Content.new("D1234C98A3", 12444, ContentData.parse_time("1296527039")))
14
- content_data.add_content(Content.new("DB12A1C233", 2, ContentData.parse_time("1296527039")))
15
- content_data.add_content(Content.new("DB12A4338A", 12412, ContentData.parse_time("1296527039")))
16
- content_data.add_content(Content.new("232A1C98A3", 124424, ContentData.parse_time("1296527039")))
17
- content_data.add_content(Content.new("AC12A1C983", 1242, ContentData.parse_time("1296527039")))
18
- content_data.add_content(Content.new("AAC12A1C983", 1242,ContentData.parse_time("1296527039")))
19
-
20
- content_data.add_instance(ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
21
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
22
- content_data.add_instance(ContentInstance.new("DB12A4338A", 765, "large_server_1", "dev2",
23
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
24
- content_data.add_instance(ContentInstance.new("232A1C98A3", 765, "large_server_1", "dev3",
25
- "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
26
- content_data.add_instance(ContentInstance.new("DB12A4338A", 765, "large_server_2", "dev2",
27
- "/home/lala/k.txt", ContentData.parse_time("1296527039")))
28
- content_data.add_instance(ContentInstance.new("D1234C98A3", 765, "large_server_2", "dev1",
29
- "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
30
- content_data.add_instance(ContentInstance.new("D12A1C98A3", 765, "large_server_2", "dev1",
31
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
32
- content_data.add_instance(ContentInstance.new("AC12A1C983", 765, "large_server_2", "dev2",
33
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
34
- content_data.add_instance(ContentInstance.new("232A1C98A3", 765, "large_server_2", "dev3",
35
- "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
36
- content_data.add_instance(ContentInstance.new("D12A1C98A3", 765, "large_server_2", "dev2",
37
- "/home/lala/k.txt", ContentData.parse_time("1296527039")))
38
- content_data.add_instance(ContentInstance.new("D1234C98A3", 12412, "large_server_2", "dev1",
39
- "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
40
- content_data.add_instance(ContentInstance.new("DB12A4338A", 12412, "large_server_2", "dev1",
41
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
42
- content_data.add_instance(ContentInstance.new("AC12A1C983", 12412, "large_server_2", "dev2",
43
- "/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
44
- content_data.add_instance(ContentInstance.new("232A1C98A3", 12412, "large_server_2", "dev3",
45
- "/home/kuku/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
46
- content_data.add_instance(ContentInstance.new("DB12A4338A", 12412, "large_server_1", "dev2",
47
- "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
48
- content_data.add_instance(ContentInstance.new("D1234C98A3", 12412, "large_server_1", "dev1",
49
- "/home/kuku/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
50
-
51
- #print content_data.to_s
52
-
53
- assert_equal("8\nD12A1C98A3,765,1296527039\nB12A1C98A3,123123,1296527039\nD1234C98A3,12444,1296527039\nDB12A1C233,2,1296527039\nDB12A4338A,12412,1296527039\n232A1C98A3,124424,1296527039\nAC12A1C983,1242,1296527039\nAAC12A1C983,1242,1296527039\n3\nDB12A4338A,12412,large_server_2,dev1,/home/kuku/dev/lala/k.txt,1296527039\nD12A1C98A3,765,large_server_2,dev2,/home/lala/k.txt,1296527039\nDB12A4338A,12412,large_server_1,dev2,/home/kuku/lala/k.txt,1296527039\n",
54
- content_data.to_s)
55
- content_data.to_file(File.join File.dirname(__FILE__), "/content_data_test.data")
56
- new_content_data = ContentData.new()
57
- new_content_data.from_file(File.join File.dirname(__FILE__), "/content_data_test.data")
58
- assert_equal(new_content_data, content_data)
59
-
60
- content_data2 = ContentData.new
61
- content_data2.add_content(Content.new("AD12A1C98A3", 765, ContentData.parse_time("1296527039")))
62
- content_data2.add_content(Content.new("AB12A1C98A3", 123123, ContentData.parse_time("1296527039")))
63
- content_data2.add_content(Content.new("AD1234C98A3", 12444, ContentData.parse_time("1296527039")))
64
- content_data2.add_content(Content.new("ADB12A1C233", 2, ContentData.parse_time("1296527039")))
65
- content_data2.add_content(Content.new("ADB12A4338A", 12412, ContentData.parse_time("1296527039")))
66
- content_data2.add_content(Content.new("A232A1C98A3", 124424, ContentData.parse_time("1296527039")))
67
- content_data2.add_content(Content.new("AAC12A1C983", 1242, ContentData.parse_time("1296527039")))
68
-
69
- content_data2.add_instance(ContentInstance.new("ADB12A1C233", 765, "large_server_11", "dev1",
70
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
71
- content_data2.add_instance(ContentInstance.new("ADB12A4338A", 765, "large_server_11", "dev2",
72
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
73
- content_data2.add_instance(ContentInstance.new("A232A1C98A3", 765, "large_server_11", "dev3",
74
- "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
75
- content_data2.add_instance(ContentInstance.new("ADB12A4338A", 765, "large_server_12", "dev2",
76
- "/home/lala/k.txt", ContentData.parse_time("1296527039")))
77
- content_data2.add_instance(ContentInstance.new("AD1234C98A3", 765, "large_server_12", "dev1",
78
- "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
79
- content_data2.add_instance(ContentInstance.new("AD12A1C98A3", 765, "large_server_12", "dev1",
80
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
81
- content_data2.add_instance(ContentInstance.new("AAC12A1C983", 765, "large_server_12", "dev2",
82
- "/home/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
83
- content_data2.add_instance(ContentInstance.new("A232A1C98A3", 765, "large_server_12", "dev3",
84
- "/home/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
85
- content_data2.add_instance(ContentInstance.new("AD12A1C98A3", 765, "large_server_12", "dev2",
86
- "/home/lala/k.txt", ContentData.parse_time("1296527039")))
87
- content_data2.add_instance(ContentInstance.new("AD1234C98A3", 12412, "large_server_12", "dev1",
88
- "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
89
- content_data2.add_instance(ContentInstance.new("ADB12A4338A", 12412, "large_server_12", "dev1",
90
- "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039")))
91
- content_data2.add_instance(ContentInstance.new("AAC12A1C983", 12412, "large_server_12", "dev2",
92
- "/home/kuku/kuku/dev/lala/k1.txt", ContentData.parse_time("1296527039")))
93
- content_data2.add_instance(ContentInstance.new("A232A1C98A3", 12412, "large_server_12", "dev3",
94
- "/home/kuku/kuku/dev/k.txt", ContentData.parse_time("1296527039")))
95
- content_data2.add_instance(ContentInstance.new("ADB12A4338A", 12412, "large_server_11", "dev2",
96
- "/home/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
97
- content_data2.add_instance(ContentInstance.new("AD1234C98A3", 12412, "large_server_11", "dev1",
98
- "/home/kuku/kuku/lala/k.txt", ContentData.parse_time("1296527039")))
99
-
100
- old_content_data = ContentData.new
101
- old_content_data.merge(content_data)
102
- assert_equal(true, old_content_data == content_data)
103
- content_data.merge(content_data2)
104
- content_data.to_file(File.join File.dirname(__FILE__), "/content_data_test2.data")
105
- new_content_data2 = ContentData.new()
106
- new_content_data2.from_file(File.join File.dirname(__FILE__), "/content_data_test2.data")
107
- assert_equal(true, new_content_data2 == content_data)
108
- assert_equal(false, new_content_data2 == old_content_data)
109
-
110
- cd3 = ContentData.remove(content_data2, content_data)
111
- assert_equal(false, old_content_data == cd3)
112
- cd4 = ContentData.remove(cd3, content_data)
113
- #assert_equal(content_data.to_s, "")
114
- assert_equal(cd3.to_s, "7\nD12A1C98A3,765,1296527039\nB12A1C98A3,123123,1296527039\nD1234C98A3,12444,1296527039\nDB12A1C233,2,1296527039\nDB12A4338A,12412,1296527039\n232A1C98A3,124424,1296527039\nAC12A1C983,1242,1296527039\n3\nDB12A4338A,12412,large_server_2,dev1,/home/kuku/dev/lala/k.txt,1296527039\nD12A1C98A3,765,large_server_2,dev2,/home/lala/k.txt,1296527039\nDB12A4338A,12412,large_server_1,dev2,/home/kuku/lala/k.txt,1296527039\n")
115
- assert_equal(cd4.to_s, "7\nAAC12A1C983,1242,1296527039\nAD12A1C98A3,765,1296527039\nAB12A1C98A3,123123,1296527039\nAD1234C98A3,12444,1296527039\nADB12A1C233,2,1296527039\nADB12A4338A,12412,1296527039\nA232A1C98A3,124424,1296527039\n3\nADB12A4338A,12412,large_server_12,dev1,/home/kuku/dev/lala/k.txt,1296527039\nAD12A1C98A3,765,large_server_12,dev2,/home/lala/k.txt,1296527039\nADB12A4338A,12412,large_server_11,dev2,/home/kuku/lala/k.txt,1296527039\n")
116
- cd5 = ContentData.merge(cd3, cd4)
117
- assert_equal(cd5, content_data)
118
-
119
- intersect = ContentData.intersect(cd3, cd4)
120
- assert_equal(intersect, ContentData.new)
121
- intersect = ContentData.intersect(cd5, cd4)
122
- assert_equal(cd4, intersect)
123
-
124
- # Content serialization test
125
- #content = Content.new("D12A1C98A3", 765, ContentData.parse_time("1296527039"))
126
- #content_serializer = content.serialize()
127
- #content_copy = Content.new(nil, nil, nil, content_serializer)
128
- #assert_equal(content, content_copy)
129
-
130
- # ContentInstance serialization test
131
- #instance = ContentInstance.new("DB12A1C233", 765, "large_server_1", "dev1",
132
- # "/home/kuku/dev/lala/k.txt", ContentData.parse_time("1296527039"))
133
- #instance_serializer = instance.serialize()
134
- #instance_copy = ContentInstance.new(nil, nil, nil, nil, nil, nil, instance_serializer)
135
- #assert_equal(instance, instance_copy)
136
-
137
- # ContentData serialization test
138
- #content_data_serializer = content_data.serialize
139
- #content_data_copy = ContentData.new(content_data_serializer)
140
- #assert_equal(content_data, content_data_copy)
7
+ def test_cloning_db_1
8
+ content_data = ContentData::ContentData.new
9
+ content_data.add_instance("A1", 1242, "server_1",
10
+ "/home/file_1", 2222222222)
11
+
12
+ content_data_cloned = ContentData::ContentData.new(content_data)
13
+ #check that DBs are equal
14
+ assert_equal(content_data, content_data_cloned)
15
+
16
+ content_data_cloned.add_instance("A1", 1242, "server_1",
17
+ "/home/file_2", 3333333333)
18
+ #change orig DB - size
19
+ assert_not_equal(content_data, content_data_cloned)
20
+ end
21
+
22
+ def test_cloning_db_2
23
+ content_data = ContentData::ContentData.new
24
+ content_data.add_instance("A1", 1242, "server_1",
25
+ "/home/file_1", 2222222222)
26
+
27
+ content_data_cloned = ContentData::ContentData.new(content_data)
28
+ #check that DBs are equal
29
+ assert_equal(content_data, content_data_cloned)
30
+
31
+ content_data_cloned.add_instance("A2", 1243, "server_1",
32
+ "/home/file_2", 3333333333)
33
+ #change orig DB - size
34
+ assert_not_equal(content_data, content_data_cloned)
35
+ end
36
+
37
+
38
+ def test_add_instance
39
+ #create first content with instance
40
+ content_data = ContentData::ContentData.new
41
+ content_data.add_instance("A1", 50, "server_1",
42
+ "/home/file_1", 2222222222)
43
+
44
+ #Add new instance - wrong size
45
+ # instance should not be added
46
+ content_data.add_instance("A1", 60, "server_1",
47
+ "/home/file_2", 2222222222)
48
+ assert_equal(content_data.to_s, "1\nA1,50,2222222222\n1\nA1,50,server_1,/home/file_1,2222222222\n")
49
+
50
+ #Add new instance - new content
51
+ #both new content and new instances are created in DB
52
+ content_data.add_instance("A2", 60, "server_1",
53
+ "/home/file_2", 3333333333)
54
+ assert_equal(content_data.to_s, "2\nA1,50,2222222222\nA2,60,3333333333\n2\nA1,50,server_1,/home/file_1,2222222222\nA2,60,server_1,/home/file_2,3333333333\n")
55
+
56
+ #Add new instance - same content
57
+ content_data.add_instance("A2", 60, "server_1",
58
+ "/home/file_3", 4444444444)
59
+ assert_equal(content_data.to_s, "2\nA1,50,2222222222\nA2,60,3333333333\n3\nA1,50,server_1,/home/file_1,2222222222\nA2,60,server_1,/home/file_2,3333333333\nA2,60,server_1,/home/file_3,4444444444\n")
60
+
61
+
62
+ end
63
+
64
+ def test_instance_exists
65
+ content_data = ContentData::ContentData.new
66
+ content_data.add_instance("A1", 50, "server_1",
67
+ "/home/file_1", 2222222222)
68
+ assert_equal(true, content_data.instance_exists('/home/file_1', 'server_1', 'A1'))
69
+ assert_equal(false, content_data.instance_exists('/home/file_1', 'server_1', 'stum'))
70
+ assert_equal(true, content_data.instance_exists('/home/file_1', 'server_1'))
71
+ assert_equal(false, content_data.instance_exists('/home/file_1', 'stum'))
72
+ end
73
+
74
+ def test_remove_instance
75
+ #remove instance also removes content
76
+ content_data = ContentData::ContentData.new
77
+ content_data.add_instance("A1", 50, "server_1",
78
+ "/home/file_1", 2222222222)
79
+ assert_equal(true, content_data.content_exists('A1'))
80
+ assert_equal(true, content_data.instance_exists('/home/file_1', 'server_1', 'A1'))
81
+ content_data.remove_instance(['server_1','home/file_1'])
82
+ assert_equal(false, content_data.instance_exists('/home/file_1', 'server_1', 'A1'))
83
+ assert_equal(false, content_data.content_exists('A1'))
84
+
85
+
86
+ #remove instance does not remove content
87
+ content_data.add_instance("A1", 50, "server_1",
88
+ "/home/file_1", 2222222222)
89
+ content_data.add_instance("A1", 50, "server_1",
90
+ "/home/file_2", 3333333333)
91
+ assert_equal(true, content_data.content_exists('A1'))
92
+ assert_equal(true, content_data.instance_exists('/home/file_1', 'server_1', 'A1'))
93
+ content_data.remove_instance(['server_1','/home/file_1'])
94
+ assert_equal(false, content_data.instance_exists('/home/file_1', 'server_1', 'A1'))
95
+ assert_equal(true, content_data.content_exists('A1'))
96
+
97
+ #remove also removes content
98
+ content_data.remove_instance(['server_1', '/home/file_2'])
99
+ assert_equal(false, content_data.instance_exists('/home/file_1', 'server_1', 'A1'))
100
+ assert_equal(false, content_data.content_exists('A1'))
101
+ end
102
+
103
+ def test_to_a_from_a
104
+ content_data = ContentData::ContentData.new
105
+ content_data.add_instance("A1", 50, "server_1",
106
+ "/home/file_1", 22222222222)
107
+ content_data.add_instance("B1", 60, "server_1",
108
+ "/home/file_2", 44444444444)
109
+ content_data.add_instance("B1", 60, "server_1",
110
+ "/home/file_3", 55555555555)
111
+ arr = content_data.to_a
112
+
113
+ assert_equal(true,arr.instance_of?(Array))
114
+ assert_equal(12,arr.size)
115
+ content_data_2 = ContentData::ContentData.new
116
+ content_data_2.from_a(arr)
117
+ assert_equal(true, content_data == content_data_2)
118
+ end
119
+
120
+ def test_to_file_from_file
121
+ content_data = ContentData::ContentData.new
122
+ content_data.add_instance("A1", 50, "server_1",
123
+ "/home/file_1", 22222222222)
124
+ content_data.add_instance("B1", 60, "server_1",
125
+ "/home/file_2", 44444444444)
126
+ content_data.add_instance("B1", 60, "server_1",
127
+ "/home/file_3", 55555555555)
128
+ file_moc_object = StringIO.new
129
+ file_moc_object.write(content_data.to_s)
130
+ test_file = __FILE__ + 'test'
131
+ content_data.to_file(test_file)
132
+ content_data_2 = ContentData::ContentData.new
133
+ content_data_2.from_file(test_file)
134
+ assert_equal(true, content_data == content_data_2)
135
+ end
136
+
137
+ def test_merge
138
+ content_data_a = ContentData::ContentData.new
139
+ content_data_a.add_instance("A1", 50, "server_1",
140
+ "/home/file_1", 22222222222)
141
+
142
+ content_data_b = ContentData::ContentData.new
143
+ content_data_b.add_instance("B1", 60, "server_1",
144
+ "/home/file_2", 44444444444)
145
+ content_data_b.add_instance("B1", 60, "server_1",
146
+ "/home/file_3", 55555555555)
147
+ content_data_merged = ContentData.merge(content_data_a, content_data_b)
148
+ assert_equal(content_data_merged.to_s, "2\nB1,60,44444444444\nA1,50,22222222222\n3\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\nA1,50,server_1,/home/file_1,22222222222\n")
149
+ content_data_a.remove_instance(['server_1','home/file_1'])
150
+ assert_equal(content_data_merged.to_s, "2\nB1,60,44444444444\nA1,50,22222222222\n3\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\nA1,50,server_1,/home/file_1,22222222222\n")
151
+ content_data_b.remove_instance(['server_1','home/file_2'])
152
+ assert_equal(content_data_merged.to_s, "2\nB1,60,44444444444\nA1,50,22222222222\n3\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\nA1,50,server_1,/home/file_1,22222222222\n")
153
+
154
+ end
155
+
156
+ def test_merge_override_b
157
+ content_data_a = ContentData::ContentData.new
158
+ content_data_a.add_instance("A1", 50, "server_1",
159
+ "/home/file_1", 22222222222)
160
+
161
+ content_data_b = ContentData::ContentData.new
162
+ content_data_b.add_instance("A1", 50, "server_1",
163
+ "/home/file_1", 22222222222)
164
+ content_data_b.add_instance("B1", 60, "server_1",
165
+ "/home/file_2", 44444444444)
166
+ content_data_b.add_instance("B1", 60, "server_1",
167
+ "/home/file_3", 55555555555)
168
+ content_data_merged = ContentData.merge_override_b(content_data_a, content_data_b)
169
+ assert_equal(content_data_merged.to_s, "2\nA1,50,22222222222\nB1,60,44444444444\n3\nA1,50,server_1,/home/file_1,22222222222\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
170
+ content_data_a.remove_instance(['server_1','home/file_1'])
171
+ assert_equal(content_data_merged.to_s, "2\nA1,50,22222222222\nB1,60,44444444444\n3\nA1,50,server_1,/home/file_1,22222222222\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
172
+ content_data_b.remove_instance(['server_1','home/file_2'])
173
+ assert_equal(content_data_b.to_s, "2\nA1,50,22222222222\nB1,60,44444444444\n2\nA1,50,server_1,/home/file_1,22222222222\nB1,60,server_1,/home/file_3,55555555555\n")
174
+ assert_equal(true, content_data_merged == content_data_b)
175
+ end
176
+
177
+ def test_remove
178
+ content_data_a = ContentData::ContentData.new
179
+ content_data_a.add_instance("A1", 50, "server_1",
180
+ "/home/file_1", 22222222222)
181
+
182
+ content_data_b = ContentData::ContentData.new
183
+ content_data_b.add_instance("A1", 50, "server_1",
184
+ "/home/file_1", 22222222222)
185
+ content_data_b.add_instance("A1", 50, "server_1",
186
+ "extra_inst", 66666666666)
187
+ content_data_b.add_instance("B1", 60, "server_1",
188
+ "/home/file_2", 44444444444)
189
+ content_data_b.add_instance("B1", 60, "server_1",
190
+ "/home/file_3", 55555555555)
191
+ content_data_removed = ContentData.remove(content_data_a, content_data_b)
192
+ assert_equal(content_data_removed.to_s, "1\nB1,60,44444444444\n2\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
193
+ content_data_a.remove_instance(['server_1','home/file_1'])
194
+ assert_equal(content_data_removed.to_s, "1\nB1,60,44444444444\n2\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
195
+ content_data_b.remove_instance(['server_1','home/file_2'])
196
+ assert_equal(content_data_removed.to_s, "1\nB1,60,44444444444\n2\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
197
+
198
+ #check nil
199
+ content_data_removed = ContentData.remove(nil, content_data_b)
200
+ assert_equal(content_data_removed.to_s, content_data_b.to_s)
201
+ content_data_removed = ContentData.remove(content_data_b, nil)
202
+ assert_equal(content_data_removed, nil)
203
+ end
204
+
205
+ def test_remove_instances
206
+ content_data_a = ContentData::ContentData.new
207
+ content_data_a.add_instance("A1", 50, "server_1",
208
+ "/home/file_1", 22222222222)
209
+
210
+ content_data_b = ContentData::ContentData.new
211
+ content_data_b.add_instance("A1", 50, "server_1",
212
+ "/home/file_1", 22222222222)
213
+ content_data_b.add_instance("A1", 50, "server_1",
214
+ "extra_inst", 66666666666)
215
+ content_data_b.add_instance("B1", 60, "server_1",
216
+ "/home/file_2", 44444444444)
217
+ content_data_b.add_instance("B1", 60, "server_1",
218
+ "/home/file_3", 55555555555)
219
+ content_data_removed = ContentData.remove_instances(content_data_a, content_data_b)
220
+ assert_equal(content_data_removed.to_s,"2\nA1,50,22222222222\nB1,60,44444444444\n3\nA1,50,server_1,extra_inst,66666666666\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
221
+ content_data_a.remove_instance(['server_1','home/file_1'])
222
+ assert_equal(content_data_removed.to_s,"2\nA1,50,22222222222\nB1,60,44444444444\n3\nA1,50,server_1,extra_inst,66666666666\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
223
+ content_data_b.remove_instance(['server_1','home/file_2'])
224
+ assert_equal(content_data_removed.to_s,"2\nA1,50,22222222222\nB1,60,44444444444\n3\nA1,50,server_1,extra_inst,66666666666\nB1,60,server_1,/home/file_2,44444444444\nB1,60,server_1,/home/file_3,55555555555\n")
225
+
226
+ #assert_equal(content_data_b, nil)
227
+
228
+ #check nil
229
+ content_data_removed = ContentData.remove_instances(nil, content_data_b)
230
+ assert_equal(content_data_removed.to_s, content_data_b.to_s)
231
+ content_data_removed = ContentData.remove_instances(content_data_b, nil)
232
+ assert_equal(content_data_removed, nil)
233
+ end
234
+
235
+ def test_remove_directory
236
+
237
+ content_data_b = ContentData::ContentData.new
238
+ content_data_b.add_instance("A1", 50, "server_1",
239
+ "/home/file_1", 22222222222)
240
+ content_data_b.add_instance("A1", 50, "server_1",
241
+ "extra_inst", 66666666666)
242
+ content_data_b.add_instance("B1", 60, "server_1",
243
+ "/home/file_2", 44444444444)
244
+ content_data_b.add_instance("B1", 60, "server_1",
245
+ "/home/file_3", 55555555555)
246
+ content_data_removed = ContentData.remove_directory(content_data_b, 'home', "server_1")
247
+ assert_equal(content_data_removed.to_s, "1\nA1,50,66666666666\n1\nA1,50,server_1,extra_inst,66666666666\n")
248
+
249
+ content_data_b.remove_instance(['server_1','home/file_2'])
250
+ assert_equal(content_data_removed.to_s, "1\nA1,50,66666666666\n1\nA1,50,server_1,extra_inst,66666666666\n")
251
+
252
+ assert_equal(content_data_b.to_s, "2\nA1,50,22222222222\nB1,60,44444444444\n3\nA1,50,server_1,/home/file_1,22222222222\nA1,50,server_1,extra_inst,66666666666\nB1,60,server_1,/home/file_3,55555555555\n")
253
+ content_data_b = ContentData::ContentData.new
254
+ content_data_removed = ContentData.remove_directory(content_data_b, 'home', "server_1")
255
+ assert_equal(0, content_data_removed.contents_size)
256
+ content_data_removed = ContentData.remove_directory(nil, 'home', "server_1")
257
+ assert_equal(content_data_removed, nil)
258
+ end
259
+
260
+ def test_intersect
261
+ content_data_a = ContentData::ContentData.new
262
+ content_data_a.add_instance("A1", 50, "server_1",
263
+ "/home/file_1", 22222222222)
264
+ content_data_a.add_instance("C1", 70, "server_1",
265
+ "/home/file_4", 77777777777)
266
+ content_data_b = ContentData::ContentData.new
267
+ content_data_b.add_instance("A1", 50, "server_1",
268
+ "/home/file_1", 22222222222)
269
+ content_data_b.add_instance("A1", 50, "server_1",
270
+ "/home/file_5", 55555555555)
271
+ content_data_b.add_instance("B1", 60, "server_1",
272
+ "/home/file_2", 44444444444)
273
+
274
+ content_data_intersect = ContentData.intersect(content_data_a, content_data_b)
275
+ assert_equal(content_data_intersect.to_s, "1\nA1,50,22222222222\n2\nA1,50,server_1,/home/file_1,22222222222\nA1,50,server_1,/home/file_5,55555555555\n")
276
+ end
277
+
278
+ def test_unify_time
279
+ content_data_a = ContentData::ContentData.new
280
+ content_data_a.add_instance("A1", 50, "server_1",
281
+ "/home/file_1", 22222222222)
282
+ content_data_a.add_instance("C1", 70, "server_1",
283
+ "/home/file_4", 77777777777)
284
+ content_data_a.add_instance("C1", 70, "server_1",
285
+ "/home/file_5", 33333333333)
286
+ content_data_a.unify_time
287
+ assert_equal(content_data_a.to_s, "2\nA1,50,22222222222\nC1,70,33333333333\n3\nA1,50,server_1,/home/file_1,22222222222\nC1,70,server_1,/home/file_4,33333333333\nC1,70,server_1,/home/file_5,33333333333\n")
141
288
  end
142
289
  end
143
290
 
144
- end
145
291