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.
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