siba 0.4.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.
- data/.gitignore +7 -0
- data/Gemfile +4 -0
- data/Guardfile +18 -0
- data/LICENSE +22 -0
- data/README.md +47 -0
- data/Rakefile +27 -0
- data/bin/siba +5 -0
- data/lib/siba.rb +27 -0
- data/lib/siba/backup.rb +31 -0
- data/lib/siba/console.rb +196 -0
- data/lib/siba/errors.rb +8 -0
- data/lib/siba/generator.rb +115 -0
- data/lib/siba/globals.rb +19 -0
- data/lib/siba/helpers/encoding_helper.rb +38 -0
- data/lib/siba/helpers/file_helper.rb +89 -0
- data/lib/siba/helpers/gem_helper.rb +22 -0
- data/lib/siba/helpers/password_strength.rb +94 -0
- data/lib/siba/helpers/security_helper.rb +30 -0
- data/lib/siba/helpers/string_helper.rb +32 -0
- data/lib/siba/helpers/test/extend_test.rb +114 -0
- data/lib/siba/helpers/test/file_mock.rb +38 -0
- data/lib/siba/helpers/test/helper.rb +55 -0
- data/lib/siba/helpers/test/kernel_mock.rb +44 -0
- data/lib/siba/helpers/test/removable_constants.rb +18 -0
- data/lib/siba/helpers/test/require.rb +12 -0
- data/lib/siba/logger_plug.rb +36 -0
- data/lib/siba/options_backup.rb +37 -0
- data/lib/siba/options_loader.rb +38 -0
- data/lib/siba/plugins/archive/tar/archive.rb +117 -0
- data/lib/siba/plugins/archive/tar/init.rb +38 -0
- data/lib/siba/plugins/archive/tar/options.yml +1 -0
- data/lib/siba/plugins/destination/dir/dest_dir.rb +77 -0
- data/lib/siba/plugins/destination/dir/init.rb +31 -0
- data/lib/siba/plugins/destination/dir/options.yml +2 -0
- data/lib/siba/plugins/encryption/gpg/encryption.rb +140 -0
- data/lib/siba/plugins/encryption/gpg/init.rb +45 -0
- data/lib/siba/plugins/encryption/gpg/options.yml +2 -0
- data/lib/siba/plugins/installed_plugins.rb +77 -0
- data/lib/siba/plugins/plugin_loader.rb +100 -0
- data/lib/siba/plugins/plugins.rb +57 -0
- data/lib/siba/plugins/plugins.yml +9 -0
- data/lib/siba/plugins/source/files/files.rb +166 -0
- data/lib/siba/plugins/source/files/init.rb +33 -0
- data/lib/siba/plugins/source/files/options.yml +11 -0
- data/lib/siba/restore.rb +113 -0
- data/lib/siba/scaffold.rb +166 -0
- data/lib/siba/siba_check.rb +75 -0
- data/lib/siba/siba_file.rb +89 -0
- data/lib/siba/siba_kernel.rb +37 -0
- data/lib/siba/siba_logger.rb +172 -0
- data/lib/siba/tasks/siba_task.rb +42 -0
- data/lib/siba/tasks/siba_tasks.rb +120 -0
- data/lib/siba/test_files.rb +76 -0
- data/lib/siba/test_files/a_file +1 -0
- data/lib/siba/test_files/files_and_dirs/.hidden +1 -0
- data/lib/siba/test_files/files_and_dirs/.hidden_dir/file10 +1 -0
- data/lib/siba/test_files/files_and_dirs/File With Spaces +1 -0
- data/lib/siba/test_files/files_and_dirs/dir1/file10 +1 -0
- data/lib/siba/test_files/files_and_dirs/dir1/sub-dir/file111.txt +1 -0
- data/lib/siba/test_files/files_and_dirs/file1 +1 -0
- data/lib/siba/test_files/files_and_dirs/file2.txt +1 -0
- data/lib/siba/tmp_dir.rb +94 -0
- data/lib/siba/version.rb +5 -0
- data/scaffolds/archive.rb +26 -0
- data/scaffolds/destination.rb +20 -0
- data/scaffolds/encryption.rb +26 -0
- data/scaffolds/project/.gitignore +5 -0
- data/scaffolds/project/Gemfile +4 -0
- data/scaffolds/project/Guardfile +9 -0
- data/scaffolds/project/LICENSE +22 -0
- data/scaffolds/project/README.md +33 -0
- data/scaffolds/project/Rakefile +28 -0
- data/scaffolds/project/lib/siba-c6y-demo.rb +11 -0
- data/scaffolds/project/lib/siba-c6y-demo/options.yml +2 -0
- data/scaffolds/project/lib/siba-c6y-demo/version.rb +9 -0
- data/scaffolds/project/siba-c6y-demo.gemspec +26 -0
- data/scaffolds/project/test/helper/require_integration.rb +5 -0
- data/scaffolds/project/test/helper/require_unit.rb +4 -0
- data/scaffolds/project/test/integration/i9n_init.rb +35 -0
- data/scaffolds/project/test/unit/test_init.rb +43 -0
- data/scaffolds/project/test/unit/yml/valid.yml +8 -0
- data/scaffolds/shared/examples.rb +47 -0
- data/scaffolds/shared/init_example.rb +13 -0
- data/scaffolds/source.rb +25 -0
- data/siba.gemspec +30 -0
- data/test/helper/require_integration.rb +4 -0
- data/test/helper/require_unit.rb +4 -0
- data/test/integration/helpers/i9n_file_helper.rb +50 -0
- data/test/integration/i9n_backup.rb +53 -0
- data/test/integration/i9n_console.rb +16 -0
- data/test/integration/i9n_generator.rb +29 -0
- data/test/integration/i9n_options_backup.rb +22 -0
- data/test/integration/i9n_scaffold.rb +27 -0
- data/test/integration/i9n_siba_file.rb +30 -0
- data/test/integration/i9n_test_unicode_files.rb +40 -0
- data/test/integration/i9n_tmp_dir.rb +44 -0
- data/test/integration/plugins/archive/tar/i9n_archive.rb +18 -0
- data/test/integration/plugins/destination/dir/i9n_dest_dir.rb +52 -0
- data/test/integration/plugins/encryption/gpg/i9n_encryption.rb +87 -0
- data/test/integration/plugins/i9n_installed_plugins.rb +13 -0
- data/test/integration/plugins/source/files/i9n_files.rb +146 -0
- data/test/integration/tasks/i9n_siba_tasks.rb +30 -0
- data/test/integration/yml/valid.yml +16 -0
- data/test/unit/helpers/test_encoding_helper.rb +17 -0
- data/test/unit/helpers/test_gem_helper.rb +17 -0
- data/test/unit/helpers/test_security_helper.rb +21 -0
- data/test/unit/helpers/test_string_helper.rb +35 -0
- data/test/unit/plugins/archive/tar/test_archive.rb +41 -0
- data/test/unit/plugins/archive/tar/test_init.rb +36 -0
- data/test/unit/plugins/archive/tar/yml/archive/check_installed.yml +2 -0
- data/test/unit/plugins/archive/tar/yml/init/default_compression.yml +1 -0
- data/test/unit/plugins/archive/tar/yml/init/invalid_compression.yml +2 -0
- data/test/unit/plugins/archive/tar/yml/init/valid.yml +2 -0
- data/test/unit/plugins/destination/dir/test_dest_dir.rb +41 -0
- data/test/unit/plugins/destination/dir/test_init.rb +36 -0
- data/test/unit/plugins/destination/dir/yml/init/valid.yml +2 -0
- data/test/unit/plugins/encryption/gpg/test_encryption.rb +70 -0
- data/test/unit/plugins/encryption/gpg/test_init.rb +47 -0
- data/test/unit/plugins/source/files/test_files.rb +44 -0
- data/test/unit/plugins/source/files/test_init.rb +48 -0
- data/test/unit/plugins/source/files/test_path_match.rb +140 -0
- data/test/unit/plugins/source/files/yml/ignore_list.yml +8 -0
- data/test/unit/plugins/source/files/yml/ignore_not_array.yml +5 -0
- data/test/unit/plugins/source/files/yml/include_not_array.yml +3 -0
- data/test/unit/plugins/source/files/yml/include_subdirs_false.yml +6 -0
- data/test/unit/plugins/source/files/yml/include_subdirs_missing.yml +5 -0
- data/test/unit/plugins/source/files/yml/no_ignore.yml +4 -0
- data/test/unit/plugins/source/files/yml/no_include.yml +1 -0
- data/test/unit/plugins/source/files/yml/valid.yml +9 -0
- data/test/unit/plugins/test_installed_plugins.rb +32 -0
- data/test/unit/plugins/test_plugin_loader.rb +27 -0
- data/test/unit/plugins/test_plugins.rb +44 -0
- data/test/unit/tasks/test_siba_task.rb +30 -0
- data/test/unit/tasks/test_siba_tasks.rb +84 -0
- data/test/unit/tasks/yml/task/invalid.yml +4 -0
- data/test/unit/tasks/yml/task/valid.yml +7 -0
- data/test/unit/test_backup.rb +18 -0
- data/test/unit/test_console.rb +166 -0
- data/test/unit/test_generator.rb +21 -0
- data/test/unit/test_globals.rb +34 -0
- data/test/unit/test_log_message.rb +26 -0
- data/test/unit/test_logger_plug.rb +49 -0
- data/test/unit/test_options_backup.rb +21 -0
- data/test/unit/test_options_loader.rb +72 -0
- data/test/unit/test_password_strength.rb +76 -0
- data/test/unit/test_restore.rb +18 -0
- data/test/unit/test_scaffold.rb +26 -0
- data/test/unit/test_siba_check.rb +118 -0
- data/test/unit/test_siba_logger.rb +174 -0
- data/test/unit/test_tmp_dir.rb +21 -0
- data/test/unit/yml/options_loader/array.yml +2 -0
- data/test/unit/yml/options_loader/empty.yml +0 -0
- data/test/unit/yml/options_loader/invalid.yml +4 -0
- data/test/unit/yml/options_loader/string.yml +1 -0
- data/test/unit/yml/options_loader/utf8_with_bom.yml +2 -0
- data/test/unit/yml/options_loader/valid.yml +12 -0
- data/test/unit/yml/siba_options_backup.yml +20 -0
- data/test/unit/yml/valid.yml +18 -0
- metadata +240 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
|
|
5
|
+
describe Siba::Backup do
|
|
6
|
+
before do
|
|
7
|
+
@yml_path = File.expand_path '../yml', __FILE__
|
|
8
|
+
@path_to_src_yml = File.join @yml_path, "valid.yml"
|
|
9
|
+
skip if SibaTest::IS_WINDOWS # Unicode paths do not work on Windows
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should create folders and files with unicode names" do
|
|
13
|
+
dir_path = prepare_test_dir SibaTest::UNICODE_FILE_NAME
|
|
14
|
+
File.directory?(dir_path).must_equal true
|
|
15
|
+
|
|
16
|
+
file_path = prepare_test_file SibaTest::UNICODE_FILE_NAME
|
|
17
|
+
File.file?(file_path).must_equal true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should backup with unicode files and dirs" do
|
|
21
|
+
@backup = Siba::Backup.new
|
|
22
|
+
Siba::LoggerPlug.close
|
|
23
|
+
Siba::SibaLogger.quiet = true
|
|
24
|
+
src_dir = prepare_test_dir "bf-src-dir-#{SibaTest::UNICODE_FILE_NAME}"
|
|
25
|
+
prepare_test_dir SibaTest::UNICODE_FILE_NAME, src_dir
|
|
26
|
+
prepare_test_file SibaTest::UNICODE_FILE_NAME, src_dir
|
|
27
|
+
src_file = prepare_test_file "bf-src-file-#{SibaTest::UNICODE_FILE_NAME}"
|
|
28
|
+
dest_dir = mkdir_in_tmp_dir "bf-dest-dir-#{SibaTest::UNICODE_FILE_NAME}"
|
|
29
|
+
|
|
30
|
+
test_yml_path = prepare_yml @path_to_src_yml,
|
|
31
|
+
{ src_dir: src_dir,
|
|
32
|
+
src_file: src_file,
|
|
33
|
+
dest_dir: dest_dir }
|
|
34
|
+
|
|
35
|
+
log_file = File.join File.dirname(test_yml_path), "testlog.log"
|
|
36
|
+
@backup.backup test_yml_path, log_file
|
|
37
|
+
Siba::FileHelper.entries(dest_dir).find{|a| a =~ /\.gpg$/}.wont_be_nil
|
|
38
|
+
wont_log_from "warn"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
|
|
5
|
+
describe Siba::TmpDir do
|
|
6
|
+
before do
|
|
7
|
+
@tmp_dir = Siba::TmpDir.new
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
after do
|
|
11
|
+
@tmp_dir.cleanup unless @tmp_dir.nil?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should get tmp dir" do
|
|
15
|
+
siba_file.file_directory?(@tmp_dir.get).must_equal true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should get the same tmp on second call" do
|
|
19
|
+
dir1 = @tmp_dir.get
|
|
20
|
+
dir2 = @tmp_dir.get
|
|
21
|
+
dir1.must_equal dir2
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should use dir specified in settings" do
|
|
25
|
+
test_dir = prepare_test_dir "tmp-dir"
|
|
26
|
+
Siba.settings = {"tmp_dir"=>test_dir}
|
|
27
|
+
dir1 = @tmp_dir.get
|
|
28
|
+
dir1.must_match /^#{test_dir}/
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should cleanup" do
|
|
32
|
+
dir = @tmp_dir.get
|
|
33
|
+
@tmp_dir.cleanup
|
|
34
|
+
siba_file.file_directory?(dir).must_equal false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should cleanup without calling get" do
|
|
38
|
+
@tmp_dir.cleanup
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should call test_access" do
|
|
42
|
+
Siba::TmpDir.test_access
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
require 'siba/plugins/archive/tar/init'
|
|
5
|
+
|
|
6
|
+
describe Siba::Archive::Tar::Archive do
|
|
7
|
+
it "should init with no compression" do
|
|
8
|
+
Siba::Archive::Tar::Archive.new "none"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should init with gzip" do
|
|
12
|
+
Siba::Archive::Tar::Archive.new "gzip"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should init with bzip2" do
|
|
16
|
+
Siba::Archive::Tar::Archive.new "bzip2"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
require 'siba/plugins/destination/dir/init'
|
|
5
|
+
|
|
6
|
+
describe Siba::Destination::Dir::DestDir do
|
|
7
|
+
before do
|
|
8
|
+
@cls = Siba::Destination::Dir::DestDir
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should init" do
|
|
12
|
+
dest_dir = mkdir_in_tmp_dir "test-dest-dir"
|
|
13
|
+
@cls.new dest_dir
|
|
14
|
+
|
|
15
|
+
siba_file.file_directory?(dest_dir).must_equal true, "Should create dest dir on init"
|
|
16
|
+
Siba::FileHelper.dir_empty?(dest_dir).must_equal true, "Must remove test file from dest dir"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should copy backup to dest dir" do
|
|
20
|
+
dest_dir = mkdir_in_tmp_dir "test-dest-dir"
|
|
21
|
+
dir_dest = @cls.new dest_dir
|
|
22
|
+
backup_file = prepare_test_file "destination-dir-backup"
|
|
23
|
+
dir_dest.copy_backup_to_dest backup_file
|
|
24
|
+
path_to_dest_file = File.join dest_dir, File.basename(backup_file)
|
|
25
|
+
siba_file.file_file?(path_to_dest_file).must_equal true
|
|
26
|
+
siba_file.file_utils_compare_file(backup_file, path_to_dest_file).must_equal true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should get list of backups and restore them to dir" do
|
|
30
|
+
prefix = "bak"
|
|
31
|
+
prepare_test_file prefix
|
|
32
|
+
file_to_restore = prepare_test_file prefix
|
|
33
|
+
prepare_test_file prefix
|
|
34
|
+
prepare_test_file "different"
|
|
35
|
+
@obj = @cls.new SibaTest.tmp_dir
|
|
36
|
+
list = @obj.get_backups_list prefix
|
|
37
|
+
list.must_be_instance_of Array
|
|
38
|
+
list.size.must_equal 3
|
|
39
|
+
list[0].size.must_equal 2
|
|
40
|
+
list[0][0].must_be_instance_of String
|
|
41
|
+
list[0][1].must_be_instance_of Time
|
|
42
|
+
|
|
43
|
+
# Restore backups to dir
|
|
44
|
+
file_name = File.basename file_to_restore
|
|
45
|
+
restore_dir = mkdir_in_tmp_dir "rst"
|
|
46
|
+
@obj.restore_backup_to_dir file_name, restore_dir
|
|
47
|
+
file_restored = File.join restore_dir, file_name
|
|
48
|
+
File.file?(file_restored).must_equal true
|
|
49
|
+
file_to_restore.wont_equal file_restored
|
|
50
|
+
FileUtils.compare_file(file_to_restore, file_restored).must_equal true
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
require 'siba/plugins/encryption/gpg/init'
|
|
5
|
+
|
|
6
|
+
describe Siba::Encryption::Gpg::Encryption do
|
|
7
|
+
before do
|
|
8
|
+
@passphrase = %(my pass "Word$)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "init should fail if cipher is not supported" do
|
|
12
|
+
->{Siba::Encryption::Gpg::Encryption.new @passphrase, "unknown_cipher"}.must_raise Siba::CheckError
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "init should assign default cipher if it's not supplied" do
|
|
16
|
+
encryption = Siba::Encryption::Gpg::Encryption.new @passphrase
|
|
17
|
+
encryption.cipher.wont_be_nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should encrypt and decrypt" do
|
|
21
|
+
encryption = Siba::Encryption::Gpg::Encryption.new @passphrase
|
|
22
|
+
path_to_source_file = prepare_test_file "encryption-gpg-1"
|
|
23
|
+
path_to_encrypted_file = encryption.encrypt path_to_source_file
|
|
24
|
+
path_to_encrypted_file.must_equal "#{path_to_source_file}.gpg"
|
|
25
|
+
siba_file.file_file?(path_to_encrypted_file).must_equal true
|
|
26
|
+
siba_file.file_utils_compare_file(path_to_source_file, path_to_encrypted_file).must_equal false
|
|
27
|
+
|
|
28
|
+
# decrypt
|
|
29
|
+
path_to_output_file = "#{path_to_source_file}.decrypted"
|
|
30
|
+
path_to_decrypted_file = encryption.decrypt path_to_encrypted_file, path_to_output_file
|
|
31
|
+
path_to_decrypted_file.must_equal path_to_output_file
|
|
32
|
+
siba_file.file_utils_compare_file(path_to_source_file, path_to_decrypted_file).must_equal true
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# decrypt without output file parameter
|
|
36
|
+
->{encryption.decrypt path_to_encrypted_file}.must_raise Siba::Error, "Should fail to decrypt if file already exists"
|
|
37
|
+
FileUtils.mv path_to_source_file, path_to_source_file + "new"
|
|
38
|
+
path_to_decrypted_file = encryption.decrypt path_to_encrypted_file
|
|
39
|
+
path_to_decrypted_file.must_equal path_to_source_file
|
|
40
|
+
|
|
41
|
+
# should fail to decrypt with incorrect passphrase
|
|
42
|
+
encryption.passphrase = "incorrect"
|
|
43
|
+
->{encryption.decrypt path_to_encrypted_file}.must_raise Siba::Error
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should raise error if encrypted file exists" do
|
|
47
|
+
encryption = Siba::Encryption::Gpg::Encryption.new @passphrase
|
|
48
|
+
path_to_source_file = prepare_test_file "encyptor-gpg-exists"
|
|
49
|
+
path_to_encrypted_file = path_to_source_file + ".gpg"
|
|
50
|
+
siba_file.file_utils_touch path_to_encrypted_file
|
|
51
|
+
->{encryption.encrypt path_to_source_file}.must_raise Siba::Error
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should get cipher names" do
|
|
55
|
+
names = Siba::Encryption::Gpg::Encryption.get_cipher_names
|
|
56
|
+
names.must_be_instance_of Array
|
|
57
|
+
names.wont_be_empty
|
|
58
|
+
names[0].must_equal names[0].upcase
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "must call check_cipher" do
|
|
62
|
+
names = Siba::Encryption::Gpg::Encryption.get_cipher_names
|
|
63
|
+
cipher = names.sample.upcase
|
|
64
|
+
Siba::Encryption::Gpg::Encryption.check_cipher(cipher).must_equal(cipher.upcase)
|
|
65
|
+
|
|
66
|
+
cipher = names.sample.downcase
|
|
67
|
+
Siba::Encryption::Gpg::Encryption.check_cipher(cipher).must_equal(cipher.upcase)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "check_cipher must return default cipher if none is supplied" do
|
|
71
|
+
names = Siba::Encryption::Gpg::Encryption.get_cipher_names
|
|
72
|
+
default = Siba::Encryption::Gpg::Encryption.check_cipher(nil)
|
|
73
|
+
names.must_include default
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "check_cipher must raise error if default cipher is not supported" do
|
|
77
|
+
old_cipher = Siba::Encryption::Gpg::Encryption::DEFAULT_CIPHER
|
|
78
|
+
SibaTest::RemovableConstants.redef_without_warning Siba::Encryption::Gpg::Encryption, "DEFAULT_CIPHER", "NEW_CIPHER"
|
|
79
|
+
names = Siba::Encryption::Gpg::Encryption.get_cipher_names
|
|
80
|
+
->{Siba::Encryption::Gpg::Encryption.check_cipher(nil)}.must_raise Siba::CheckError
|
|
81
|
+
SibaTest::RemovableConstants.redef_without_warning Siba::Encryption::Gpg::Encryption, "DEFAULT_CIPHER", old_cipher
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "check_cipher must fail if unknown cipher is used" do
|
|
85
|
+
->{Siba::Encryption::Gpg::Encryption.check_cipher("incorrect")}.must_raise Siba::CheckError
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
|
|
5
|
+
describe Siba::InstalledPlugins do
|
|
6
|
+
before do
|
|
7
|
+
@cls = Siba::InstalledPlugins
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should return plugin path" do
|
|
11
|
+
File.directory?(@cls.plugin_path("source", "files")).must_equal true
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
require 'siba/plugins/source/files/files'
|
|
5
|
+
|
|
6
|
+
describe Siba::Source::Files::Files do
|
|
7
|
+
before do
|
|
8
|
+
@files = Siba::Source::Files::Files
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should run copy_file" do
|
|
12
|
+
src_file = prepare_test_file "s-f"
|
|
13
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest"
|
|
14
|
+
f = @files.new [],[],true
|
|
15
|
+
f.copy_file src_file, dest_dir
|
|
16
|
+
dest_file = File.join dest_dir, File.basename(src_file)
|
|
17
|
+
src_file.wont_equal dest_file
|
|
18
|
+
siba_file.file_file?(dest_file).must_equal true
|
|
19
|
+
siba_file.file_utils_compare_file(src_file, dest_file).must_equal true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "copy_file should not copy file if it's ignored" do
|
|
23
|
+
src_file = prepare_test_file "s-f"
|
|
24
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest"
|
|
25
|
+
f = @files.new [],["*"],true
|
|
26
|
+
f.copy_file src_file, dest_dir
|
|
27
|
+
dest_file = File.join dest_dir, File.basename(src_file)
|
|
28
|
+
src_file.wont_equal dest_file
|
|
29
|
+
siba_file.file_file?(dest_file).must_equal false
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should run copy_dir" do
|
|
33
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
34
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
35
|
+
f = @files.new [],[],true
|
|
36
|
+
f.copy_dir src_dir, dest_dir, true
|
|
37
|
+
dest_sub_dir = File.join dest_dir, File.basename(src_dir)
|
|
38
|
+
siba_file.file_directory?(dest_sub_dir).must_equal true
|
|
39
|
+
dirs_same? src_dir, dest_sub_dir
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "run copy_dir wihout including subdirs" do
|
|
43
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
44
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
45
|
+
f = @files.new [],[],false
|
|
46
|
+
f.copy_dir src_dir, dest_dir, true
|
|
47
|
+
dest_sub_dir = File.join dest_dir, File.basename(src_dir)
|
|
48
|
+
Siba::FileHelper.entries(src_dir).each do |entry|
|
|
49
|
+
entry_path = File.join src_dir, entry
|
|
50
|
+
siba_file.file_utils_remove_entry_secure entry_path if siba_file.file_directory?(entry_path)
|
|
51
|
+
end
|
|
52
|
+
siba_file.file_directory?(dest_sub_dir).must_equal true
|
|
53
|
+
dirs_same? src_dir, dest_sub_dir
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "copy_dir should not copy if it's ignored" do
|
|
57
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
58
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
59
|
+
f = @files.new [],["*"],true
|
|
60
|
+
f.copy_dir src_dir, dest_dir, true
|
|
61
|
+
dest_sub_dir = File.join dest_dir, File.basename(src_dir)
|
|
62
|
+
siba_file.file_directory?(dest_sub_dir).must_equal false
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "copy_dir should not create a sub dir" do
|
|
66
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
67
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
68
|
+
f = @files.new [],[],true
|
|
69
|
+
f.copy_dir src_dir, dest_dir, false
|
|
70
|
+
dirs_same? src_dir, dest_dir
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "backup should copy dir and file" do
|
|
74
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
75
|
+
src_file = prepare_test_file "s-f-src-file"
|
|
76
|
+
f = @files.new [src_dir, src_file],[],true
|
|
77
|
+
|
|
78
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
79
|
+
f.backup dest_dir
|
|
80
|
+
|
|
81
|
+
# compare dir
|
|
82
|
+
backup_dir = @files.sub_dir_name 1, 1, false, File.basename(src_dir), dest_dir
|
|
83
|
+
dirs_same? src_dir, backup_dir
|
|
84
|
+
|
|
85
|
+
# compare file
|
|
86
|
+
backup_file_dir = @files.sub_dir_name 2, 1, true, File.basename(src_file), dest_dir
|
|
87
|
+
backup_file = File.join backup_file_dir, File.basename(src_file)
|
|
88
|
+
siba_file.file_utils_compare_file(src_file, backup_file).must_equal true
|
|
89
|
+
|
|
90
|
+
Siba::FileHelper.dirs_count(dest_dir).must_equal 2, "Should create two folders for each source"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "backup should log error message if one of the sources is not found" do
|
|
94
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
95
|
+
f = @files.new ["/non-existing-file", src_dir],[],true
|
|
96
|
+
|
|
97
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
98
|
+
f.backup dest_dir
|
|
99
|
+
|
|
100
|
+
# The existing dir must be copied
|
|
101
|
+
backup_dir = @files.sub_dir_name 2, 1, false, File.basename(src_dir), dest_dir
|
|
102
|
+
dirs_same? src_dir, backup_dir
|
|
103
|
+
|
|
104
|
+
Siba::FileHelper.dirs_count(dest_dir).must_equal 1, "Only valid source must be copies"
|
|
105
|
+
must_log "error"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "backup should NOT copy if ignored" do
|
|
109
|
+
src_dir = prepare_test_dir "s-f-src-dir"
|
|
110
|
+
src_file = prepare_test_file "s-f-src-file"
|
|
111
|
+
f = @files.new [src_dir, src_file],["*"],true
|
|
112
|
+
dest_dir = mkdir_in_tmp_dir "s-f-dest-dir"
|
|
113
|
+
f.backup dest_dir
|
|
114
|
+
Siba::FileHelper.dir_empty?(dest_dir).must_equal true
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should restore" do
|
|
118
|
+
backup_root = mkdir_in_tmp_dir "restore-backup"
|
|
119
|
+
|
|
120
|
+
sub_dir1_name = File.basename @files.sub_dir_name(1,1,false,"backup",backup_root)
|
|
121
|
+
backup_dir1 = prepare_test_dir sub_dir1_name, backup_root
|
|
122
|
+
|
|
123
|
+
sub_dir2_name = File.basename @files.sub_dir_name(2,1,true,"backup-dir",backup_root)
|
|
124
|
+
backup_dir2 = mkdir_in_tmp_dir sub_dir2_name, backup_root
|
|
125
|
+
backup_file = prepare_test_file "backup-file", backup_dir2
|
|
126
|
+
backup_file_name = File.basename backup_file
|
|
127
|
+
|
|
128
|
+
backup_source_dir = mkdir_in_tmp_dir "restore-bk-source"
|
|
129
|
+
restore_dir1 = mkdir_in_tmp_dir "restore-dir", backup_source_dir
|
|
130
|
+
restore_file = File.join(backup_source_dir, backup_file_name)
|
|
131
|
+
|
|
132
|
+
@obj = @files.new [restore_dir1, restore_file],[],true
|
|
133
|
+
@obj.restore(backup_root)
|
|
134
|
+
|
|
135
|
+
Siba::FileHelper.entries(backup_source_dir).size.must_equal 2
|
|
136
|
+
|
|
137
|
+
# Compare dirs
|
|
138
|
+
restore_dir1.wont_equal backup_dir1
|
|
139
|
+
dirs_same? restore_dir1, backup_dir1
|
|
140
|
+
|
|
141
|
+
# Compare file
|
|
142
|
+
restore_file.wont_equal backup_file
|
|
143
|
+
FileUtils.compare_file(restore_file, backup_file).must_equal true
|
|
144
|
+
wont_log_from "warn"
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'helper/require_integration'
|
|
4
|
+
|
|
5
|
+
describe Siba::SibaTasks do
|
|
6
|
+
before do
|
|
7
|
+
@yml_path = File.expand_path '../../yml', __FILE__
|
|
8
|
+
@path_to_src_yml = File.join @yml_path, "valid.yml"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should backup and testore tasks" do
|
|
12
|
+
src_dir = prepare_test_dir "b-src-dir"
|
|
13
|
+
src_file = prepare_test_file "b-src-file"
|
|
14
|
+
dest_dir = mkdir_in_tmp_dir "b-dest-dir"
|
|
15
|
+
|
|
16
|
+
path_to_test_yml = prepare_yml @path_to_src_yml,
|
|
17
|
+
{ src_dir: src_dir,
|
|
18
|
+
src_file: src_file,
|
|
19
|
+
dest_dir: dest_dir }
|
|
20
|
+
|
|
21
|
+
options = SibaTest.load_options path_to_test_yml
|
|
22
|
+
|
|
23
|
+
tasks = Siba::SibaTasks.new options, path_to_test_yml, false
|
|
24
|
+
tasks.backup
|
|
25
|
+
|
|
26
|
+
backup_file_name = Siba::FileHelper.entries(dest_dir)[0]
|
|
27
|
+
tasks = Siba::SibaTasks.new options, path_to_test_yml, true
|
|
28
|
+
tasks.restore backup_file_name
|
|
29
|
+
end
|
|
30
|
+
end
|