bc3 0.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.
- data/BCSS_Binary_Format.txt +239 -0
- data/bin/bc3_merge.rb +155 -0
- data/examples/folder1_2011-01-21.bcss +0 -0
- data/examples/folder2_2011-01-21.bcss +0 -0
- data/examples/test_combine.rb +43 -0
- data/examples/test_filesystem.rb +6 -0
- data/examples/test_hardcoded.rb +15 -0
- data/examples/test_merge.bat +5 -0
- data/examples/test_yaml.rb +188 -0
- data/lib/bc3.rb +89 -0
- data/lib/bc3/file.rb +120 -0
- data/lib/bc3/folder.rb +239 -0
- data/lib/bc3/helper.rb +101 -0
- data/lib/bc3/parse.rb +312 -0
- data/lib/bc3/snapshot.rb +264 -0
- data/lib/bc3/time.rb +1 -0
- data/unittest/unittest_bc3.rb +66 -0
- data/unittest/unittest_bc3_file.rb +35 -0
- data/unittest/unittest_bc3_folder.rb +179 -0
- data/unittest/unittest_bc3_merge.rb +102 -0
- data/unittest/unittest_bc3_snapshot.rb +121 -0
- metadata +119 -0
data/lib/bc3/time.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
=begin rdoc
|
2
|
bignum too big to convert into `unsigned long' (RangeError)
|
1
3
|
AD_EPOCH = 116_444_736_000_000_000
|
2
4
|
AD_MULTIPLIER = 10_000_000
|
3
5
|
# convert a Time object to AD's epoch
|
4
6
|
def time2ad()
|
5
7
|
(self.to_i * AD_MULTIPLIER) + AD_EPOCH
|
6
8
|
end
|
7
9
|
# convert from AD's time string to a Time object
|
8
10
|
def self.ad2time(time)
|
9
11
|
Time.at((time.to_i - AD_EPOCH) / AD_MULTIPLIER)
|
10
12
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
gem 'test-unit'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
$:.unshift('../lib')
|
5
|
+
require 'bc3'
|
6
|
+
|
7
|
+
class Test_helper < Test::Unit::TestCase
|
8
|
+
include BC3::Helper
|
9
|
+
def test_fixnum2int64()
|
10
|
+
assert_equal("\x05\x00\x00\x00\x00\x00\x00\x00", fixnum2int64(5))
|
11
|
+
assert_equal("\xff\x00\x00\x00\x00\x00\x00\x00", fixnum2int64(255))
|
12
|
+
assert_equal("\x00\x01\x00\x00\x00\x00\x00\x00", fixnum2int64(256))
|
13
|
+
assert_equal("\x01\x01\x00\x00\x00\x00\x00\x00", fixnum2int64(257))
|
14
|
+
assert_equal("\x00\x04\x00\x00\x00\x00\x00\x00", fixnum2int64(1024))
|
15
|
+
end
|
16
|
+
def test_fixnum2int32()
|
17
|
+
assert_equal("\x05\x00\x00\x00", fixnum2int32(5))
|
18
|
+
assert_equal("\xff\x00\x00\x00", fixnum2int32(255))
|
19
|
+
assert_equal("\x00\x01\x00\x00", fixnum2int32(256))
|
20
|
+
assert_equal("\x01\x01\x00\x00", fixnum2int32(257))
|
21
|
+
assert_equal("\x00\x04\x00\x00", fixnum2int32(1024))
|
22
|
+
end
|
23
|
+
def test_crc32()
|
24
|
+
assert_equal('CBF43926', '%X' % BC3::Helper.crc32('123456789'))
|
25
|
+
assert_equal('D87F7E0C', '%X' % BC3::Helper.crc32('test'))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
class Test_time < Test::Unit::TestCase
|
31
|
+
#Nonoseconds are ignored (missing feature in Time-class?)
|
32
|
+
def test_ad2time()
|
33
|
+
assert_equal('2006-08-17 09:19:04 000000000',
|
34
|
+
Time.ad2time(128002727440808261).strftime("%Y-%m-%d %H:%M:%S %9N")
|
35
|
+
)
|
36
|
+
assert_equal('2006-08-17 09:19:04 000000000',
|
37
|
+
Time.ad2time(128002727440000000).strftime("%Y-%m-%d %H:%M:%S %9N")
|
38
|
+
)
|
39
|
+
end
|
40
|
+
def test_time2ad()
|
41
|
+
assert_equal(128002464000000000, Time.utc(2006,8,17).time2ad())
|
42
|
+
assert_equal(128002727440000000, Time.local(2006,8,17,9,19,4).time2ad())
|
43
|
+
|
44
|
+
#Test does not work. Split in two areas (high/Low) makes calculating unpossible.
|
45
|
+
#~ p 60 * 60 * 1_000_000_000 #one hour in nanoseconds
|
46
|
+
#~ assert_equal( 3_600_000_000_000, #one hour in nanoseconds
|
47
|
+
#~ Time.utc(2006,8,17,12).time2ad() - Time.utc(2006,8,17,11).time2ad()
|
48
|
+
#~ )
|
49
|
+
|
50
|
+
#~ assert_equal( 3_600_000_000_000, #one hour in nanoseconds
|
51
|
+
#~ Time.utc(2006,8,17).time2ad() - Time.local(2006,8,17).time2ad()
|
52
|
+
#~ )
|
53
|
+
end
|
54
|
+
def test_conversions()
|
55
|
+
testtime = Time.utc(2006,8,17)
|
56
|
+
assert_equal(testtime, Time.ad2time(testtime.time2ad))
|
57
|
+
|
58
|
+
testtime = Time.local(2006,8,17)
|
59
|
+
assert_equal(testtime, Time.ad2time(testtime.time2ad))
|
60
|
+
|
61
|
+
#Test with now does not work. Changed nanoseconds?
|
62
|
+
#~ testtime = Time.now
|
63
|
+
#~ assert_equal(testtime, Time.ad2time(testtime.time2ad))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
gem 'test-unit'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
$:.unshift('../lib')
|
6
|
+
require 'bc3'
|
7
|
+
$log.level = Log4r::FATAL
|
8
|
+
|
9
|
+
#<just a timestamp for testing
|
10
|
+
$timestamp= Time.local(2010,1,1)
|
11
|
+
|
12
|
+
class Test_file < Test::Unit::TestCase
|
13
|
+
def self.startup
|
14
|
+
$log.level = Log4r::FATAL
|
15
|
+
end
|
16
|
+
def test_interface()
|
17
|
+
#Test all keys
|
18
|
+
assert_nothing_raised{ BC3::File.new( filename: 'f', filesize: 5, crc: 4, timestamp: Time.now )}
|
19
|
+
#Test all needed keys
|
20
|
+
assert_nothing_raised{ BC3::File.new( filename: 'f', filesize: 5 )}
|
21
|
+
#Test additional key (returns warning in log)
|
22
|
+
assert_nothing_raised{ BC3::File.new( filename: 'f', filesize: 5, xxx: nil )}
|
23
|
+
#Must be a hash
|
24
|
+
assert_raise(ArgumentError){ BC3::File.new( 'f' )}
|
25
|
+
assert_raise(ArgumentError){ BC3::File.new( 1 )}
|
26
|
+
end
|
27
|
+
def test_hash()
|
28
|
+
assert_equal( { filename: 'f', filesize: 5, timestamp: $timestamp, attributes: BC3::Attrib::Archive, crc: nil},
|
29
|
+
BC3::File.new( filename: 'f', filesize: 5, timestamp: $timestamp ).to_hash
|
30
|
+
)
|
31
|
+
assert_equal( { filename: 'f', filesize: 5, crc: 27, timestamp: $timestamp, attributes: 127 },
|
32
|
+
BC3::File.new( filename: 'f', filesize: 5, crc: 27, timestamp: $timestamp, attributes: 127 ).to_hash
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
gem 'test-unit'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
$:.unshift('../lib')
|
6
|
+
require 'bc3'
|
7
|
+
$log.level = Log4r::FATAL
|
8
|
+
|
9
|
+
#<just a timestamp for testing
|
10
|
+
$timestamp= Time.local(2010,1,1)
|
11
|
+
|
12
|
+
class Test_folder < Test::Unit::TestCase
|
13
|
+
def test_add_content()
|
14
|
+
folder = BC3::Folder.new('x')
|
15
|
+
assert_nothing_raised{ folder << BC3::Folder.new('dir1')}
|
16
|
+
assert_nothing_raised{ folder << BC3::File.new( filename: 'file1', filesize: 1) }
|
17
|
+
assert_raise(ArgumentError){ folder << 1 }
|
18
|
+
|
19
|
+
assert_equal(2, folder.each.size)
|
20
|
+
end
|
21
|
+
def test_add_duplicate_filename()
|
22
|
+
folder = BC3::Folder.new('x')
|
23
|
+
assert_nothing_raised{ folder << BC3::Folder.new('name')}
|
24
|
+
#Overwrite content (Warning)
|
25
|
+
assert_nothing_raised{ folder << BC3::File.new( filename: 'name', filesize: 1) }
|
26
|
+
assert_equal(1, folder.each.size)
|
27
|
+
assert_kind_of(BC3::File, folder.each.first.last)
|
28
|
+
|
29
|
+
end
|
30
|
+
def test_hash()
|
31
|
+
folder = BC3::Folder.new('dir', $timestamp)
|
32
|
+
folder << BC3::File.new( filename: 'f', filesize: 5, timestamp: $timestamp )
|
33
|
+
assert_equal(
|
34
|
+
{
|
35
|
+
dirname: 'dir',
|
36
|
+
timestamp: $timestamp,
|
37
|
+
attributes: BC3::Attrib::Directory,
|
38
|
+
content: [
|
39
|
+
{ filename: 'f', filesize: 5, timestamp: $timestamp, crc: nil, attributes: BC3::Attrib::Archive,},
|
40
|
+
]
|
41
|
+
},
|
42
|
+
folder.to_hash
|
43
|
+
)
|
44
|
+
end
|
45
|
+
def test_newh_interface()
|
46
|
+
#Test no-hash
|
47
|
+
assert_raise(ArgumentError){ BC3::Folder.newh('x')}
|
48
|
+
assert_raise(ArgumentError){ BC3::Folder.newh('1')}
|
49
|
+
#Hash must contain dirname (and content?)
|
50
|
+
assert_raise(ArgumentError){ BC3::Folder.newh({})}
|
51
|
+
#~ assert_raise(ArgumentError){ BC3::Folder.newh({dirname: 'x' })}
|
52
|
+
#~ assert_raise(ArgumentError){ BC3::Folder.newh({dirname: 'x' })}
|
53
|
+
#~ assert_raise(ArgumentError){ BC3::Folder.newh({dirname: 'x', timestamp: $timestamp })}
|
54
|
+
|
55
|
+
assert_nothing_raised{ bc3 = BC3::Folder.newh({ dirname: 'x', content: [] })}
|
56
|
+
#Content must be an array
|
57
|
+
assert_raise(ArgumentError){ bc3 = BC3::Folder.newh({ dirname: 'x', content: :x })}
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_newh()
|
61
|
+
hash = {
|
62
|
+
dirname: 'dir', timestamp: $timestamp, attributes: BC3::Attrib::Directory,
|
63
|
+
content: [
|
64
|
+
filename: 'file1', filesize: 5, timestamp: $timestamp, crc: nil, attributes: BC3::Attrib::Archive,
|
65
|
+
]
|
66
|
+
}
|
67
|
+
assert_equal(hash, BC3::Folder.newh( hash ).to_hash)
|
68
|
+
|
69
|
+
hash = {
|
70
|
+
dirname: 'dir', timestamp: $timestamp, attributes: BC3::Attrib::Directory,
|
71
|
+
content: []
|
72
|
+
}
|
73
|
+
assert_equal(hash, BC3::Folder.newh( hash ).to_hash)
|
74
|
+
#Test w/o content
|
75
|
+
assert_equal(hash, BC3::Folder.newh( {dirname: 'dir', timestamp: $timestamp} ).to_hash)
|
76
|
+
end
|
77
|
+
def test_newh_yaml()
|
78
|
+
hash = YAML.load(%{
|
79
|
+
:dirname: dir
|
80
|
+
:timestamp: 2011-01-21 11:57:22 +01:00
|
81
|
+
:attributes: 16
|
82
|
+
:content:
|
83
|
+
- :filename: file1
|
84
|
+
:filesize: 5
|
85
|
+
:crc:
|
86
|
+
:attributes: 32
|
87
|
+
:timestamp: 2011-01-21 11:57:22 +01:00
|
88
|
+
})
|
89
|
+
assert_equal(hash, BC3::Folder.newh( hash ).to_hash)
|
90
|
+
|
91
|
+
hash = {
|
92
|
+
dirname: 'dir', timestamp: $timestamp, attributes: BC3::Attrib::Directory,
|
93
|
+
content: []
|
94
|
+
}
|
95
|
+
assert_equal(hash, BC3::Folder.newh( hash ).to_hash)
|
96
|
+
#Test w/o content
|
97
|
+
assert_equal(hash, BC3::Folder.newh( {dirname: 'dir', timestamp: $timestamp} ).to_hash)
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_each_file()
|
102
|
+
hash = {
|
103
|
+
dirname: 'dir', timestamp: $timestamp, attributes: BC3::Attrib::Directory,
|
104
|
+
content: [
|
105
|
+
filename: 'file1', filesize: 5, timestamp: $timestamp, crc: nil, attributes: BC3::Attrib::Archive,
|
106
|
+
]
|
107
|
+
}
|
108
|
+
folder = BC3::Folder.newh( hash )
|
109
|
+
#each without block
|
110
|
+
assert_instance_of(Hash, folder.each)
|
111
|
+
|
112
|
+
folder.each{|key, object|
|
113
|
+
assert_equal('file1', key)
|
114
|
+
assert_instance_of(BC3::File, object)
|
115
|
+
}
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_each()
|
119
|
+
folder = BC3::Folder.newh( YAML.load(%{
|
120
|
+
:dirname: dir
|
121
|
+
:content:
|
122
|
+
- :dirname: subdir
|
123
|
+
:content:
|
124
|
+
- :filename: subfile
|
125
|
+
:filesize: 10
|
126
|
+
- :filename: file1
|
127
|
+
:filesize: 5
|
128
|
+
- :filename: file2
|
129
|
+
:filesize: 15
|
130
|
+
}))
|
131
|
+
#each without block
|
132
|
+
assert_instance_of(Hash, folder.each)
|
133
|
+
assert_equal(3, folder.each.size)
|
134
|
+
assert_equal(2, folder.each(:files).size)
|
135
|
+
assert_equal(1, folder.each(:folders).size)
|
136
|
+
|
137
|
+
assert_equal(%w{subdir file1 file2}, folder.each.keys)
|
138
|
+
assert_equal(%w{file1 file2}, folder.each(:files).keys)
|
139
|
+
assert_equal(%w{subdir}, folder.each(:folders).keys)
|
140
|
+
|
141
|
+
assert_equal(1, folder.each(:folders, :recursive).size)
|
142
|
+
assert_equal(3, folder.each(:files, :recursive).size)
|
143
|
+
assert_equal(4, folder.each(:folders,:files, :recursive).size)
|
144
|
+
|
145
|
+
|
146
|
+
assert_equal(%w{subdir}, folder.each(:folders, :recursive).keys)
|
147
|
+
assert_equal(%w{subdir/subfile file1 file2}, folder.each(:files, :recursive).keys)
|
148
|
+
assert_equal(%w{subdir subdir/subfile file1 file2}, folder.each(:folders,:files, :recursive).keys)
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_each_2()
|
153
|
+
folder = BC3::Folder.newh( YAML.load(%{
|
154
|
+
:dirname: dir
|
155
|
+
:content:
|
156
|
+
- :dirname: subdir
|
157
|
+
:content:
|
158
|
+
- :dirname: subsubdir
|
159
|
+
:content:
|
160
|
+
- :filename: subsubfile
|
161
|
+
:filesize: 10
|
162
|
+
- :filename: subfile
|
163
|
+
:filesize: 10
|
164
|
+
- :filename: file
|
165
|
+
:filesize: 5
|
166
|
+
}))
|
167
|
+
#each without block
|
168
|
+
|
169
|
+
assert_equal(2, folder.each(:folders, :recursive).size)
|
170
|
+
assert_equal(3, folder.each(:files, :recursive).size)
|
171
|
+
assert_equal(5, folder.each(:folders,:files, :recursive).size)
|
172
|
+
|
173
|
+
assert_equal(%w{subdir subdir/subsubdir}, folder.each(:folders, :recursive).keys)
|
174
|
+
assert_equal(%w{subdir/subsubdir/subsubfile subdir/subfile file}, folder.each(:files, :recursive).keys)
|
175
|
+
assert_equal(%w{subdir subdir/subsubdir subdir/subsubdir/subsubfile subdir/subfile file}, folder.each(:folders,:files, :recursive).keys)
|
176
|
+
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
@@ -0,0 +1,102 @@
|
|
1
|
+
gem 'test-unit'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
$:.unshift('../lib')
|
5
|
+
require 'bc3'
|
6
|
+
$log.level = Log4r::WARN
|
7
|
+
|
8
|
+
#<just a timestamp for testing
|
9
|
+
$timestamp= Time.local(2010,1,1)
|
10
|
+
class Time
|
11
|
+
def self.now()
|
12
|
+
$timestamp
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
#Start with local sources
|
17
|
+
$call_bc3_merge = 'ruby -I ../lib ../bin/bc3_merge.rb'
|
18
|
+
|
19
|
+
|
20
|
+
class Test_merge < Test::Unit::TestCase
|
21
|
+
Snap1 = {
|
22
|
+
snapshot: 'c:\usr\snap1',
|
23
|
+
timestamp: $timestamp,
|
24
|
+
content: [
|
25
|
+
{
|
26
|
+
dirname: 'dir1',
|
27
|
+
timestamp: $timestamp,
|
28
|
+
attributes: BC3::Attrib::Directory,
|
29
|
+
content: [
|
30
|
+
{ filename: 'file1_1', filesize: 1, timestamp: $timestamp, crc: 111, attributes: BC3::Attrib::Archive },
|
31
|
+
]
|
32
|
+
}
|
33
|
+
],
|
34
|
+
}
|
35
|
+
Snap2 = {
|
36
|
+
snapshot: 'c:\usr\snap2',
|
37
|
+
timestamp: $timestamp,
|
38
|
+
content: [
|
39
|
+
{
|
40
|
+
dirname: 'dir2',
|
41
|
+
timestamp: $timestamp,
|
42
|
+
attributes: BC3::Attrib::Directory,
|
43
|
+
content: [
|
44
|
+
{ filename: 'file2_1', filesize: 2, timestamp: $timestamp, crc: 222, attributes: BC3::Attrib::Archive },
|
45
|
+
]
|
46
|
+
}
|
47
|
+
],
|
48
|
+
}
|
49
|
+
TestFiles = %w{snap1.bcss snap2.bcss
|
50
|
+
merge_i.bcss merge_b_1.bcss merge_b_2.bcss merge_r.bcss
|
51
|
+
}
|
52
|
+
|
53
|
+
def self.startup
|
54
|
+
TestFiles.each{|f| File.delete(f) if File.exist?(f)}
|
55
|
+
BC3::Snapshot.newh(Snap1).save('snap1.bcss')
|
56
|
+
BC3::Snapshot.newh(Snap2).save('snap2.bcss')
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.shutdown
|
60
|
+
TestFiles.each{|f| File.delete(f) if File.exist?(f)}
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_merge_b_1()
|
64
|
+
mergetest_b('merge_b_1.bcss', "-s merge_b -t merge_b_1.bcss -b 'snap?.bcss'")
|
65
|
+
end
|
66
|
+
def test_merge_b_2()
|
67
|
+
mergetest_b('merge_b_2.bcss', '-s merge_b -t merge_b_2.bcss snap?.bcss')
|
68
|
+
end
|
69
|
+
#~ def test_merge_r()
|
70
|
+
#~ mergetest_b('merge_r.bcss', "-s merge_b -t merge_r.bcss -r 'snap?.bcss'")
|
71
|
+
#~ end
|
72
|
+
def mergetest_b(filename, par)
|
73
|
+
assert_false(File.exist?(filename))
|
74
|
+
`#{$call_bc3_merge} #{par}`
|
75
|
+
assert_true(File.exist?(filename))
|
76
|
+
|
77
|
+
result = BC3::SnapshotParser.new(filename).snapshot.to_hash
|
78
|
+
merge = {
|
79
|
+
snapshot: 'merge_b',
|
80
|
+
timestamp: result[:timestamp],
|
81
|
+
content: [
|
82
|
+
{ dirname: 'snap1', timestamp: $timestamp, attributes: 16, content: Snap1[:content] },
|
83
|
+
{ dirname: 'snap2', timestamp: $timestamp, attributes: 16, content: Snap2[:content] },
|
84
|
+
]
|
85
|
+
}
|
86
|
+
assert_equal(merge, result)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_merge_i()
|
90
|
+
assert_false(File.exist?('merge_i.bcss'))
|
91
|
+
`#{$call_bc3_merge} -s merge_i -t merge_i.bcss -i 'snap?.bcss'`
|
92
|
+
assert_true(File.exist?('merge_i.bcss'))
|
93
|
+
|
94
|
+
result = BC3::SnapshotParser.new('merge_i.bcss').snapshot.to_hash
|
95
|
+
merge = {
|
96
|
+
snapshot: 'merge_i',
|
97
|
+
timestamp: result[:timestamp],
|
98
|
+
content: Snap1[:content] + Snap2[:content]
|
99
|
+
}
|
100
|
+
assert_equal(merge, result)
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
gem 'test-unit'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
$:.unshift('../lib')
|
6
|
+
require 'bc3'
|
7
|
+
$log.level = Log4r::FATAL
|
8
|
+
|
9
|
+
#<just a timestamp for testing
|
10
|
+
$timestamp= Time.local(2010,1,1)
|
11
|
+
|
12
|
+
class Test_snapshot < Test::Unit::TestCase
|
13
|
+
def test_add_content()
|
14
|
+
bc3 = BC3::Snapshot.new('x')
|
15
|
+
assert_nothing_raised{ bc3 << BC3::Folder.new('dir')}
|
16
|
+
assert_nothing_raised{ bc3 << BC3::File.new( filename: 'file', filesize: 1 )}
|
17
|
+
assert_raise(ArgumentError){ bc3 << 1 }
|
18
|
+
|
19
|
+
assert_equal(2, bc3.each.size)
|
20
|
+
end
|
21
|
+
def test_hash()
|
22
|
+
bc3 = BC3::Snapshot.new('x', $timestamp)
|
23
|
+
bc3 << folder = BC3::Folder.new('dir', $timestamp)
|
24
|
+
folder << BC3::File.new( filename: 'f', filesize: 5, timestamp: $timestamp )
|
25
|
+
|
26
|
+
assert_equal(
|
27
|
+
{ snapshot: 'x',
|
28
|
+
timestamp: $timestamp,
|
29
|
+
content: [
|
30
|
+
{
|
31
|
+
dirname: 'dir',
|
32
|
+
timestamp: $timestamp,
|
33
|
+
attributes: BC3::Attrib::Directory,
|
34
|
+
content: [
|
35
|
+
{ filename: 'f', filesize: 5, timestamp: $timestamp, crc: nil, attributes: BC3::Attrib::Archive },
|
36
|
+
]
|
37
|
+
}
|
38
|
+
],
|
39
|
+
}, bc3.to_hash
|
40
|
+
)
|
41
|
+
end
|
42
|
+
def test_newh_interface()
|
43
|
+
#Test no-hash
|
44
|
+
assert_raise(ArgumentError){ BC3::Snapshot.newh('x')}
|
45
|
+
assert_raise(ArgumentError){ BC3::Snapshot.newh('1')}
|
46
|
+
#Hash must contain snapshot and content
|
47
|
+
assert_raise(ArgumentError){ BC3::Snapshot.newh({})}
|
48
|
+
assert_raise(ArgumentError){ BC3::Snapshot.newh({snapshot: 'x' })}
|
49
|
+
assert_raise(ArgumentError){ BC3::Snapshot.newh({snapshot: 'x' })}
|
50
|
+
assert_raise(ArgumentError){ BC3::Snapshot.newh({snapshot: 'x', timestamp: $timestamp })}
|
51
|
+
|
52
|
+
assert_nothing_raised{ bc3 = BC3::Snapshot.newh({ snapshot: 'x', content: [] })}
|
53
|
+
#Content must be an array
|
54
|
+
assert_raise(ArgumentError){ bc3 = BC3::Snapshot.newh({ snapshot: 'x', content: :x })}
|
55
|
+
end
|
56
|
+
def test_newh()
|
57
|
+
hash = { snapshot: 'x', timestamp: $timestamp,
|
58
|
+
content: [
|
59
|
+
filename: 'file1', filesize: 5, timestamp: $timestamp, crc: nil, attributes: BC3::Attrib::Archive,
|
60
|
+
]
|
61
|
+
}
|
62
|
+
assert_equal(hash, BC3::Snapshot.newh( hash ).to_hash)
|
63
|
+
|
64
|
+
hash[:content] << { filename: 'file2', filesize: 15, timestamp: $timestamp, crc: nil, attributes: BC3::Attrib::Archive, }
|
65
|
+
assert_equal(hash, BC3::Snapshot.newh( hash ).to_hash)
|
66
|
+
|
67
|
+
hash[:content] << { dirname: 'dir1', timestamp: $timestamp, :content => [], attributes: BC3::Attrib::Directory, }
|
68
|
+
assert_equal(hash, BC3::Snapshot.newh( hash ).to_hash)
|
69
|
+
end
|
70
|
+
def test_newd()
|
71
|
+
bc3 = BC3::Snapshot.newd( '../examples/folder1' )
|
72
|
+
|
73
|
+
#timestamp change
|
74
|
+
#~ assert_equal(%{
|
75
|
+
#~ :snapshot: C:/usr/Script/bc3/examples/folder1
|
76
|
+
#~ :timestamp: 2011-01-21 23:53:45.875000 +01:00
|
77
|
+
#~ :content:
|
78
|
+
#~ - :filename: file1.txt
|
79
|
+
#~ :filesize: 0
|
80
|
+
#~ :crc: 0
|
81
|
+
#~ :attributes: 32
|
82
|
+
#~ :timestamp: 2011-01-21 16:58:38 +01:00
|
83
|
+
#~ }, bc3.to_hash.to_yaml)
|
84
|
+
|
85
|
+
assert_equal(1, bc3.each.size)
|
86
|
+
assert_equal(1, bc3.each(:files).size)
|
87
|
+
assert_equal(1, bc3.each(:recursive).size)
|
88
|
+
assert_equal(1, bc3.each(:recursive, :files).size)
|
89
|
+
|
90
|
+
assert_equal('file1.txt', bc3.each.first.first)
|
91
|
+
|
92
|
+
end
|
93
|
+
def test_new_list()
|
94
|
+
pend 'BC3::Snapshot.new_list'
|
95
|
+
bc3 = BC3::Snapshot.new_list( 'dir', %w{
|
96
|
+
file
|
97
|
+
folder/file1
|
98
|
+
folder/subfolder/subfile1
|
99
|
+
folder/subfolder2/
|
100
|
+
}
|
101
|
+
)
|
102
|
+
|
103
|
+
assert_equal(2, bc3.each.size)
|
104
|
+
assert_equal(1, bc3.each(:files).size)
|
105
|
+
assert_equal(5, bc3.each(:recursive).size)
|
106
|
+
assert_equal(2, bc3.each(:recursive, :files).size)
|
107
|
+
assert_equal(3, bc3.each(:recursive, :folders).size)
|
108
|
+
|
109
|
+
assert_equal( %w{
|
110
|
+
file
|
111
|
+
folder
|
112
|
+
folder/file1
|
113
|
+
folder/subfolder
|
114
|
+
folder/subfolder/subfile1
|
115
|
+
folder/subfolder2
|
116
|
+
}, bc3.each(:recursive, :files).keys)
|
117
|
+
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|