siba 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/.gitignore +7 -0
  2. data/Gemfile +4 -0
  3. data/Guardfile +18 -0
  4. data/LICENSE +22 -0
  5. data/README.md +47 -0
  6. data/Rakefile +27 -0
  7. data/bin/siba +5 -0
  8. data/lib/siba.rb +27 -0
  9. data/lib/siba/backup.rb +31 -0
  10. data/lib/siba/console.rb +196 -0
  11. data/lib/siba/errors.rb +8 -0
  12. data/lib/siba/generator.rb +115 -0
  13. data/lib/siba/globals.rb +19 -0
  14. data/lib/siba/helpers/encoding_helper.rb +38 -0
  15. data/lib/siba/helpers/file_helper.rb +89 -0
  16. data/lib/siba/helpers/gem_helper.rb +22 -0
  17. data/lib/siba/helpers/password_strength.rb +94 -0
  18. data/lib/siba/helpers/security_helper.rb +30 -0
  19. data/lib/siba/helpers/string_helper.rb +32 -0
  20. data/lib/siba/helpers/test/extend_test.rb +114 -0
  21. data/lib/siba/helpers/test/file_mock.rb +38 -0
  22. data/lib/siba/helpers/test/helper.rb +55 -0
  23. data/lib/siba/helpers/test/kernel_mock.rb +44 -0
  24. data/lib/siba/helpers/test/removable_constants.rb +18 -0
  25. data/lib/siba/helpers/test/require.rb +12 -0
  26. data/lib/siba/logger_plug.rb +36 -0
  27. data/lib/siba/options_backup.rb +37 -0
  28. data/lib/siba/options_loader.rb +38 -0
  29. data/lib/siba/plugins/archive/tar/archive.rb +117 -0
  30. data/lib/siba/plugins/archive/tar/init.rb +38 -0
  31. data/lib/siba/plugins/archive/tar/options.yml +1 -0
  32. data/lib/siba/plugins/destination/dir/dest_dir.rb +77 -0
  33. data/lib/siba/plugins/destination/dir/init.rb +31 -0
  34. data/lib/siba/plugins/destination/dir/options.yml +2 -0
  35. data/lib/siba/plugins/encryption/gpg/encryption.rb +140 -0
  36. data/lib/siba/plugins/encryption/gpg/init.rb +45 -0
  37. data/lib/siba/plugins/encryption/gpg/options.yml +2 -0
  38. data/lib/siba/plugins/installed_plugins.rb +77 -0
  39. data/lib/siba/plugins/plugin_loader.rb +100 -0
  40. data/lib/siba/plugins/plugins.rb +57 -0
  41. data/lib/siba/plugins/plugins.yml +9 -0
  42. data/lib/siba/plugins/source/files/files.rb +166 -0
  43. data/lib/siba/plugins/source/files/init.rb +33 -0
  44. data/lib/siba/plugins/source/files/options.yml +11 -0
  45. data/lib/siba/restore.rb +113 -0
  46. data/lib/siba/scaffold.rb +166 -0
  47. data/lib/siba/siba_check.rb +75 -0
  48. data/lib/siba/siba_file.rb +89 -0
  49. data/lib/siba/siba_kernel.rb +37 -0
  50. data/lib/siba/siba_logger.rb +172 -0
  51. data/lib/siba/tasks/siba_task.rb +42 -0
  52. data/lib/siba/tasks/siba_tasks.rb +120 -0
  53. data/lib/siba/test_files.rb +76 -0
  54. data/lib/siba/test_files/a_file +1 -0
  55. data/lib/siba/test_files/files_and_dirs/.hidden +1 -0
  56. data/lib/siba/test_files/files_and_dirs/.hidden_dir/file10 +1 -0
  57. data/lib/siba/test_files/files_and_dirs/File With Spaces +1 -0
  58. data/lib/siba/test_files/files_and_dirs/dir1/file10 +1 -0
  59. data/lib/siba/test_files/files_and_dirs/dir1/sub-dir/file111.txt +1 -0
  60. data/lib/siba/test_files/files_and_dirs/file1 +1 -0
  61. data/lib/siba/test_files/files_and_dirs/file2.txt +1 -0
  62. data/lib/siba/tmp_dir.rb +94 -0
  63. data/lib/siba/version.rb +5 -0
  64. data/scaffolds/archive.rb +26 -0
  65. data/scaffolds/destination.rb +20 -0
  66. data/scaffolds/encryption.rb +26 -0
  67. data/scaffolds/project/.gitignore +5 -0
  68. data/scaffolds/project/Gemfile +4 -0
  69. data/scaffolds/project/Guardfile +9 -0
  70. data/scaffolds/project/LICENSE +22 -0
  71. data/scaffolds/project/README.md +33 -0
  72. data/scaffolds/project/Rakefile +28 -0
  73. data/scaffolds/project/lib/siba-c6y-demo.rb +11 -0
  74. data/scaffolds/project/lib/siba-c6y-demo/options.yml +2 -0
  75. data/scaffolds/project/lib/siba-c6y-demo/version.rb +9 -0
  76. data/scaffolds/project/siba-c6y-demo.gemspec +26 -0
  77. data/scaffolds/project/test/helper/require_integration.rb +5 -0
  78. data/scaffolds/project/test/helper/require_unit.rb +4 -0
  79. data/scaffolds/project/test/integration/i9n_init.rb +35 -0
  80. data/scaffolds/project/test/unit/test_init.rb +43 -0
  81. data/scaffolds/project/test/unit/yml/valid.yml +8 -0
  82. data/scaffolds/shared/examples.rb +47 -0
  83. data/scaffolds/shared/init_example.rb +13 -0
  84. data/scaffolds/source.rb +25 -0
  85. data/siba.gemspec +30 -0
  86. data/test/helper/require_integration.rb +4 -0
  87. data/test/helper/require_unit.rb +4 -0
  88. data/test/integration/helpers/i9n_file_helper.rb +50 -0
  89. data/test/integration/i9n_backup.rb +53 -0
  90. data/test/integration/i9n_console.rb +16 -0
  91. data/test/integration/i9n_generator.rb +29 -0
  92. data/test/integration/i9n_options_backup.rb +22 -0
  93. data/test/integration/i9n_scaffold.rb +27 -0
  94. data/test/integration/i9n_siba_file.rb +30 -0
  95. data/test/integration/i9n_test_unicode_files.rb +40 -0
  96. data/test/integration/i9n_tmp_dir.rb +44 -0
  97. data/test/integration/plugins/archive/tar/i9n_archive.rb +18 -0
  98. data/test/integration/plugins/destination/dir/i9n_dest_dir.rb +52 -0
  99. data/test/integration/plugins/encryption/gpg/i9n_encryption.rb +87 -0
  100. data/test/integration/plugins/i9n_installed_plugins.rb +13 -0
  101. data/test/integration/plugins/source/files/i9n_files.rb +146 -0
  102. data/test/integration/tasks/i9n_siba_tasks.rb +30 -0
  103. data/test/integration/yml/valid.yml +16 -0
  104. data/test/unit/helpers/test_encoding_helper.rb +17 -0
  105. data/test/unit/helpers/test_gem_helper.rb +17 -0
  106. data/test/unit/helpers/test_security_helper.rb +21 -0
  107. data/test/unit/helpers/test_string_helper.rb +35 -0
  108. data/test/unit/plugins/archive/tar/test_archive.rb +41 -0
  109. data/test/unit/plugins/archive/tar/test_init.rb +36 -0
  110. data/test/unit/plugins/archive/tar/yml/archive/check_installed.yml +2 -0
  111. data/test/unit/plugins/archive/tar/yml/init/default_compression.yml +1 -0
  112. data/test/unit/plugins/archive/tar/yml/init/invalid_compression.yml +2 -0
  113. data/test/unit/plugins/archive/tar/yml/init/valid.yml +2 -0
  114. data/test/unit/plugins/destination/dir/test_dest_dir.rb +41 -0
  115. data/test/unit/plugins/destination/dir/test_init.rb +36 -0
  116. data/test/unit/plugins/destination/dir/yml/init/valid.yml +2 -0
  117. data/test/unit/plugins/encryption/gpg/test_encryption.rb +70 -0
  118. data/test/unit/plugins/encryption/gpg/test_init.rb +47 -0
  119. data/test/unit/plugins/source/files/test_files.rb +44 -0
  120. data/test/unit/plugins/source/files/test_init.rb +48 -0
  121. data/test/unit/plugins/source/files/test_path_match.rb +140 -0
  122. data/test/unit/plugins/source/files/yml/ignore_list.yml +8 -0
  123. data/test/unit/plugins/source/files/yml/ignore_not_array.yml +5 -0
  124. data/test/unit/plugins/source/files/yml/include_not_array.yml +3 -0
  125. data/test/unit/plugins/source/files/yml/include_subdirs_false.yml +6 -0
  126. data/test/unit/plugins/source/files/yml/include_subdirs_missing.yml +5 -0
  127. data/test/unit/plugins/source/files/yml/no_ignore.yml +4 -0
  128. data/test/unit/plugins/source/files/yml/no_include.yml +1 -0
  129. data/test/unit/plugins/source/files/yml/valid.yml +9 -0
  130. data/test/unit/plugins/test_installed_plugins.rb +32 -0
  131. data/test/unit/plugins/test_plugin_loader.rb +27 -0
  132. data/test/unit/plugins/test_plugins.rb +44 -0
  133. data/test/unit/tasks/test_siba_task.rb +30 -0
  134. data/test/unit/tasks/test_siba_tasks.rb +84 -0
  135. data/test/unit/tasks/yml/task/invalid.yml +4 -0
  136. data/test/unit/tasks/yml/task/valid.yml +7 -0
  137. data/test/unit/test_backup.rb +18 -0
  138. data/test/unit/test_console.rb +166 -0
  139. data/test/unit/test_generator.rb +21 -0
  140. data/test/unit/test_globals.rb +34 -0
  141. data/test/unit/test_log_message.rb +26 -0
  142. data/test/unit/test_logger_plug.rb +49 -0
  143. data/test/unit/test_options_backup.rb +21 -0
  144. data/test/unit/test_options_loader.rb +72 -0
  145. data/test/unit/test_password_strength.rb +76 -0
  146. data/test/unit/test_restore.rb +18 -0
  147. data/test/unit/test_scaffold.rb +26 -0
  148. data/test/unit/test_siba_check.rb +118 -0
  149. data/test/unit/test_siba_logger.rb +174 -0
  150. data/test/unit/test_tmp_dir.rb +21 -0
  151. data/test/unit/yml/options_loader/array.yml +2 -0
  152. data/test/unit/yml/options_loader/empty.yml +0 -0
  153. data/test/unit/yml/options_loader/invalid.yml +4 -0
  154. data/test/unit/yml/options_loader/string.yml +1 -0
  155. data/test/unit/yml/options_loader/utf8_with_bom.yml +2 -0
  156. data/test/unit/yml/options_loader/valid.yml +12 -0
  157. data/test/unit/yml/siba_options_backup.yml +20 -0
  158. data/test/unit/yml/valid.yml +18 -0
  159. 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
@@ -0,0 +1,16 @@
1
+ source:
2
+ type: files
3
+ include:
4
+ - #_replace_src_dir
5
+ - #_replace_src_file
6
+
7
+ archive:
8
+ type: tar
9
+
10
+ encryption:
11
+ type: gpg
12
+ passphrase: "this is a password"
13
+
14
+ destination:
15
+ type: dir
16
+ dir: #_replace_dest_dir