kanrisuru 0.8.23 → 0.10.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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/CHANGELOG.md +36 -19
  4. data/README.md +1 -0
  5. data/kanrisuru.gemspec +2 -1
  6. data/lib/kanrisuru/core/archive.rb +6 -5
  7. data/lib/kanrisuru/remote/cluster.rb +33 -1
  8. data/lib/kanrisuru/remote/cpu.rb +3 -3
  9. data/lib/kanrisuru/remote/env.rb +8 -0
  10. data/lib/kanrisuru/version.rb +1 -1
  11. data/spec/functional/core/archive_spec.rb +194 -0
  12. data/spec/functional/remote/cluster_spec.rb +57 -0
  13. data/spec/functional/remote/env_spec.rb +50 -0
  14. data/spec/helper/stub_network.rb +25 -1
  15. data/spec/{functional → integration}/os_package_spec.rb +0 -0
  16. data/spec/spec_helper.rb +3 -0
  17. data/spec/unit/command_spec.rb +31 -0
  18. data/spec/unit/core/apt_spec.rb +20 -0
  19. data/spec/unit/core/archive_spec.rb +20 -0
  20. data/spec/unit/core/disk_spec.rb +23 -0
  21. data/spec/unit/core/dmi_spec.rb +20 -0
  22. data/spec/unit/core/file_spec.rb +35 -0
  23. data/spec/unit/core/find_spec.rb +20 -0
  24. data/spec/unit/core/group_spec.rb +24 -0
  25. data/spec/unit/core/ip_spec.rb +20 -0
  26. data/spec/unit/core/path_spec.rb +25 -0
  27. data/spec/unit/core/socket_spec.rb +20 -0
  28. data/spec/unit/core/stat_spec.rb +27 -0
  29. data/spec/unit/core/system_spec.rb +35 -0
  30. data/spec/unit/core/transfer_spec.rb +22 -0
  31. data/spec/unit/core/user_spec.rb +25 -0
  32. data/spec/unit/core/yum_spec.rb +20 -0
  33. data/spec/unit/core/zypper_spec.rb +20 -0
  34. data/spec/unit/mode_spec.rb +31 -0
  35. data/spec/unit/remote/cluster_spec.rb +34 -0
  36. data/spec/unit/remote/cpu_spec.rb +50 -0
  37. data/spec/unit/remote/env_spec.rb +19 -0
  38. data/spec/unit/{fstab_spec.rb → remote/fstab_spec.rb} +0 -0
  39. metadata +27 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb7aac288555c629e9eb74721c2f0c21f45812426d4ac9b6e7fb1700433d360a
4
- data.tar.gz: 16b5151fe50610ae0fe7ad4faa0eed72e49ad8aca017c7d6c609e377144c2532
3
+ metadata.gz: 40303a0de6eed7d5c10708a31ebf33ee7aed8701a21b3118e9bad5cdc751376b
4
+ data.tar.gz: 9daec56c51d0a4d6929fbcbbb585744215a61d877993e67453899ccf2db81717
5
5
  SHA512:
6
- metadata.gz: f4b592883b2f3541ae1ab7a4cbbf7ddaf626d376a39464401b428506eca21bf9546688384e0b8eb87e8f46c29a5c734356c4d407bb2f0aa47fe003d3e1e71a84
7
- data.tar.gz: 0d8d36445c59ea52b7bbe25cfbc5782f21a42548fccdbcd3ae8f34431528b76a3a7bc13059583756c9fc4ce969b966479b632818dc2dc4dd23ef573a63c569e1
6
+ metadata.gz: 11a75804f677a0b72c88ab944c475646eebe68ed64a1fed15acb349e423215f98ddfcdd626681867eee82bb9092cd349ead6f7a44da142937bf329f300a877b0
7
+ data.tar.gz: 2605bbf322b06ae28d49d25b7d65970d5e5632527b79e12c6c7d2988173602ed126eab6d263106d866bda146153513573f702e210a36b4a3ee0e812caae06c79
data/.gitignore CHANGED
@@ -14,7 +14,6 @@
14
14
  .ruby-version
15
15
 
16
16
  *.gem
17
- coverage/*
18
17
  Gemfile.lock
19
18
  *~
20
19
  .bundle
@@ -26,3 +25,6 @@ pkg/*
26
25
  .env
27
26
  spec/dummy/tmp/*
28
27
  spec/dummy/log/*.log
28
+
29
+ coverage/*
30
+ codecov
data/CHANGELOG.md CHANGED
@@ -1,57 +1,78 @@
1
- ## Kanrisuru 0.8.23 (November 19, 2021)
1
+ ## Kanrisuru 0.10.0 (December 03, 2021) ##
2
+ * Add `stub_command` and `unstub_command` to mock indvidual command results from a remote server.
3
+ * Add `count` and `delete` to `Kanrisuru::Remote::Env` class for managing environment variables.
4
+ * Add unit and functional test cases for `Kanrisuru::Remote::Env`.
5
+ * Add functional test cases for the `archive` command.
6
+ * Fix typo bugs in the `archive` command. Fix `--exclude` opt field in `archive` command.
7
+ * Add unit test cases for `Kanrisuru::Mode` class.
8
+
9
+ ## Kanrisuru 0.9.2 (November 30, 2021) ##
10
+ * Add unit test cases for all core commands.
11
+ * Add unit test cases for `cluster` class.
12
+ * Add codecov xml output for coverage badge.
13
+
14
+ ## Kanrisuru 0.9.1 (November 29, 2021) ##
15
+ * Fix type on `address_sizes` for `Kanrisuru::Remote::Cpu` class.
16
+ * Add unit test cases for the `cpu` class.
17
+
18
+ ## Kanrisuru 0.9.0 (November 23, 2021) ##
19
+ * Add `delete` to `Kanrisuru::Remote::Cluster` class to allow removal of hosts from cluster.
20
+ * Add functional test cases for remote cluster class.
21
+
22
+ ## Kanrisuru 0.8.23 (November 19, 2021) ##
2
23
  * Add functional test cases for `yum` command
3
24
  * Add stub by operating system method, with support for `ubuntu` and `centos` os types.
4
25
  * Fix `ArgumentError` typo in yum commands, `erase` and `remove`.
5
26
 
6
- ## Kanrisuru 0.8.22 (November 18, 2021)
27
+ ## Kanrisuru 0.8.22 (November 18, 2021) ##
7
28
  * Add functional test cases for `apt` command
8
29
 
9
- ## Kanrisuru 0.8.21 (November 15, 2021)
30
+ ## Kanrisuru 0.8.21 (November 15, 2021) ##
10
31
  * Fix bug with `Kanrisuru::Mode` class, lookup table had incorrect value for execute only symbolic to numeric field.
11
32
 
12
- ## Kanrisuru 0.8.20 (November 13, 2021)
33
+ ## Kanrisuru 0.8.20 (November 13, 2021) ##
13
34
  * Unstub network requests for full rspec test-suite run
14
35
 
15
- ## Kanrisuru 0.8.19 (October 31, 2021)
36
+ ## Kanrisuru 0.8.19 (October 31, 2021) ##
16
37
  * Add functional test cases for `ss` command.
17
38
  * Enforce contraints on `family` parameter for `ss` command.
18
39
  * Deprecating `string_join_array` in favor of `array_join_string`. Both methods do the same thing, and the `array_join_string` has a better nameing interface; will be removed in the next major release.
19
40
  * Replace `string_join_array` method calls in `apt`, `transfer`, `yum`, and `zypper` with `array_join_string`.
20
41
 
21
- ## Kanrisuru 0.8.18 (October 19, 2021)
42
+ ## Kanrisuru 0.8.18 (October 19, 2021) ##
22
43
  * Add functional test cases for `find` commmand.
23
44
  * Add `regex_type` option for `find` command.
24
45
  * Fix bug with `size` option when using number in a string format, regex testing has been simplified on matching correctness for size with options like `100`, `+100`, `-100M` for comparitive fields.
25
46
 
26
- ## Kanrisuru 0.8.17 (October 16, 2021)
47
+ ## Kanrisuru 0.8.17 (October 16, 2021) ##
27
48
  * Add functional test cases for `transfer` module
28
49
  * Update wget command to accept hash for `headers` opt.
29
50
 
30
- ## Kanrisuru 0.8.16 (October 14, 2021)
51
+ ## Kanrisuru 0.8.16 (October 14, 2021) ##
31
52
  * Add functional test cases for `stream` and `path` modules
32
53
  * Create `expect_command` helper for quick testing on raw command result
33
54
 
34
- ## Kanrisuru 0.8.15 (October 12, 20201)
55
+ ## Kanrisuru 0.8.15 (October 12, 20201) ##
35
56
  * Move functional specs to integration. Anything that performs an actual network request will be under the integrations test.
36
57
  * Create a `StubNetwork` to quickly monkey patch the `Kanrisuru::Remote::Host` to simulate a `Net::SSH` channel request. Will add additional functionality for different simulations later on.
37
58
  * Start with testing the `stat` command as a functional test.
38
59
 
39
- ## Kanrisuru 0.8.14 (October 8, 20201)
60
+ ## Kanrisuru 0.8.14 (October 8, 20201) ##
40
61
  * Update `Kanrisuru::Remote::Cluster` instantiation method to use array splat instead of passing array directly.
41
62
 
42
- ## Kanrisuru 0.8.13 (October 4, 20201)
63
+ ## Kanrisuru 0.8.13 (October 4, 20201) ##
43
64
  * Fix `wc` command. Ensure result parsing is cast to integer values.
44
65
 
45
- ## Kanrisuru 0.8.12 (October 4, 20201)
66
+ ## Kanrisuru 0.8.12 (October 4, 20201) ##
46
67
  * Refactor `rmdir` command to only work on empty directories.
47
68
 
48
- ## Kanrisuru 0.8.11 (October 1, 20201)
69
+ ## Kanrisuru 0.8.11 (October 1, 20201) ##
49
70
  * Allow `Kanrisuru::Mode` as mode type option in mkdir method.
50
71
 
51
- ## Kanrisuru 0.8.10 (August 24, 20201)
72
+ ## Kanrisuru 0.8.10 (August 24, 20201) ##
52
73
  * Fix bug with rspec test case.
53
74
 
54
- ## Kanrisuru 0.8.9 (August 24, 2021)
75
+ ## Kanrisuru 0.8.9 (August 24, 2021) ##
55
76
  * Fix spelling error exception `ArgumentError` in `Kanrisuru::Mode` class.
56
77
 
57
78
  ## Kanrisuru 0.8.8 (August 21, 2021) ##
@@ -121,7 +142,6 @@ cache key to avoid any namespace collisions with the same method name, namely:
121
142
  * Deprecating `cpu_info` with replacement of `lscpu`. `cpu_info` will be removed in the next major release.
122
143
 
123
144
  ## Kanrisuru 0.5.1 (July 29, 2021) ##
124
-
125
145
  * Unit test cases for core module structs, constants and types.
126
146
 
127
147
  ## Kanrisuru 0.5.0 (July 29, 2021) ##
@@ -158,15 +178,12 @@ cache key to avoid any namespace collisions with the same method name, namely:
158
178
  * Replace `cpu` module internal fetching of data from `cpu_info` to `lscpu` struct.
159
179
 
160
180
  ## Kanrisuru 0.2.9 (July 20, 2021) ##
161
-
162
181
  * Fix fstab entry from `entry` to `entry[:entry]` in the `for_each`iteration.
163
182
 
164
183
  ## Kanrisuru 0.2.8 (July 20, 2021) ##
165
-
166
184
  * Update gem development and runtime depedencies with stricter depencies.
167
185
 
168
186
  ## Kanrisuru 0.2.7 (July 18, 2021) ##
169
-
170
187
  * Set opensuse upstream to sles (Suse Enterprise Linux) in `os_family`
171
188
 
172
189
  ## Kanrisuru 0.2.6 (July 17, 2021) ##
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![Latest version](https://img.shields.io/gem/v/kanrisuru?style=flat-square)](https://rubygems.org/gems/kanrisuru) 
2
2
  [![Latest version](https://img.shields.io/github/license/avamia/kanrisuru)](https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt) 
3
3
  ![GitHub repo size](https://img.shields.io/github/repo-size/avamia/kanrisuru) 
4
+ ![Codecov](https://img.shields.io/codecov/c/gh/avamia/kanrisuru?token=2Q1BE106B2) 
4
5
 
5
6
  <p align='center'>
6
7
  <img src="https://s3.us-east-2.amazonaws.com/kanrisuru.com/kanrisuru-banner-02.png" width="600" />
data/kanrisuru.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  gem.email = 'ryan@avamia.com'
10
10
  gem.license = 'MIT'
11
11
  gem.summary = 'Manage remote servers over ssh with ruby.'
12
- gem.description = 'Manage remote servers over ssh with ruby.'
12
+ gem.description = 'Kanrisuru helps manage remote servers with objected oriented ruby. Results come back as structured data, parsed, prepared and ready .'
13
13
  gem.homepage = 'https://github.com/avamia/kanrisuru'
14
14
 
15
15
  gem.required_ruby_version = '>= 2.5.0'
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.add_development_dependency 'rubocop', '~> 1.12'
19
19
  gem.add_development_dependency 'rubocop-rspec', '~> 2.2'
20
20
  gem.add_development_dependency 'simplecov', '~> 0.21'
21
+ gem.add_development_dependency 'simplecov-cobertura', '~> 2.0'
21
22
 
22
23
  gem.add_runtime_dependency 'net-ping', '~> 2.0'
23
24
  gem.add_runtime_dependency 'net-scp', '~> 3.0'
@@ -50,7 +50,7 @@ module Kanrisuru
50
50
  command.append_flag('--same-owner', opts[:same_owners])
51
51
  command.append_flag('--multi-volume', opts[:multi_volume])
52
52
  command.append_flag('--label', opts[:label])
53
- command.append_flag('--one-file-system ', opts[:one_file_system])
53
+ command.append_flag('--one-file-system', opts[:one_file_system])
54
54
  command.append_flag('--keep-old-files', opts[:keep_old_files])
55
55
  command.append_flag('--skip-old-files', opts[:skip_old_files])
56
56
  command.append_flag('--overwrite', opts[:overwrite])
@@ -59,7 +59,7 @@ module Kanrisuru
59
59
  command.append_flag('--recursive-unlink', opts[:recursive_unlink])
60
60
 
61
61
  if Kanrisuru::Util.present?(paths)
62
- paths = paths.instance_of(String) ? [paths] : paths
62
+ paths = paths.instance_of?(String) ? [paths] : paths
63
63
  command << paths.join(' ')
64
64
  end
65
65
 
@@ -70,8 +70,10 @@ module Kanrisuru
70
70
  command.append_flag('--multi-volume', opts[:multi_volume])
71
71
 
72
72
  if Kanrisuru::Util.present?(exclude)
73
- exclude = exclude.instance_of?(String) ? [exclude] : exclude
74
- command.append_arg('--exclude', exclude.join(' '))
73
+ exclude_options = exclude.instance_of?(String) ? [exclude] : exclude
74
+ exclude_options.each do |exclude_option|
75
+ command << "--exclude=#{exclude_option}"
76
+ end
75
77
  end
76
78
 
77
79
  if Kanrisuru::Util.present?(paths)
@@ -80,7 +82,6 @@ module Kanrisuru
80
82
  end
81
83
 
82
84
  execute_shell(command)
83
-
84
85
  Kanrisuru::Result.new(command)
85
86
  when 'append', 'r'
86
87
  command.append_flag('-r')
@@ -13,6 +13,10 @@ module Kanrisuru
13
13
  end
14
14
  end
15
15
 
16
+ def hosts
17
+ @hosts.values
18
+ end
19
+
16
20
  def [](hostname)
17
21
  @hosts[hostname]
18
22
  end
@@ -21,6 +25,10 @@ module Kanrisuru
21
25
  add_host(host_opts)
22
26
  end
23
27
 
28
+ def delete(host)
29
+ remove_host(host)
30
+ end
31
+
24
32
  def execute(command)
25
33
  @hosts.map do |host_addr, host|
26
34
  ## Need to evaluate each host independently for the command.
@@ -81,13 +89,37 @@ module Kanrisuru
81
89
  end
82
90
  end
83
91
 
92
+ def remove_host(host)
93
+ if host.instance_of?(Kanrisuru::Remote::Host)
94
+ removed = false
95
+
96
+ if @hosts.key?(host.host)
97
+ removed = true
98
+ @hosts.delete(host.host)
99
+ end
100
+
101
+ removed
102
+ elsif host.instance_of?(String)
103
+ removed = false
104
+
105
+ if @hosts.key?(host)
106
+ removed = true
107
+ @hosts.delete(host)
108
+ end
109
+
110
+ removed
111
+ else
112
+ raise ArgumentError, 'Invalid host type'
113
+ end
114
+ end
115
+
84
116
  def add_host(host_opts)
85
117
  if host_opts.instance_of?(Hash)
86
118
  @hosts[host_opts[:host]] = Kanrisuru::Remote::Host.new(host_opts)
87
119
  elsif host_opts.instance_of?(Kanrisuru::Remote::Host)
88
120
  @hosts[host_opts.host] = host_opts
89
121
  else
90
- raise 'Not a valid host option'
122
+ raise ArgumentError, 'Invalid host option'
91
123
  end
92
124
  end
93
125
  end
@@ -75,8 +75,8 @@ module Kanrisuru
75
75
  @cpu_architecture.byte_order
76
76
  end
77
77
 
78
- def address_size
79
- @cpu_architecture.address_size
78
+ def address_sizes
79
+ @cpu_architecture.address_sizes
80
80
  end
81
81
 
82
82
  def cpu_mhz
@@ -103,7 +103,7 @@ module Kanrisuru
103
103
  @cpu_architecture.flags
104
104
  end
105
105
 
106
- def hyperthreading?
106
+ def hyperthreading?
107
107
  threads_per_core > 1
108
108
  end
109
109
 
@@ -25,6 +25,14 @@ module Kanrisuru
25
25
  string
26
26
  end
27
27
 
28
+ def count
29
+ @env.count
30
+ end
31
+
32
+ def delete(key)
33
+ @env.delete(key.to_s.upcase)
34
+ end
35
+
28
36
  def [](key)
29
37
  @env[key.to_s.upcase]
30
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanrisuru
4
- VERSION = '0.8.23'
4
+ VERSION = '0.10.0'
5
5
  end
@@ -0,0 +1,194 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Apt do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ StubNetwork.stub_command!(:realpath) do |args|
9
+ Kanrisuru::Core::Path::FilePath.new(directory)
10
+ end
11
+ end
12
+
13
+ after(:all) do
14
+ StubNetwork.unstub_command!(:realpath)
15
+ StubNetwork.unstub!
16
+ end
17
+
18
+ let(:host) do
19
+ Kanrisuru::Remote::Host.new(
20
+ host: 'localhost',
21
+ username: 'ubuntu',
22
+ keys: ['id_rsa']
23
+ )
24
+ end
25
+
26
+ let(:directory) { '/home/ubuntu/dir' }
27
+
28
+ it 'prepares tar list command' do
29
+ ['list', 't'].each do |action_variant|
30
+ expect_command(host.tar(action_variant, 'file.txt'),
31
+ 'tar --restrict -f file.txt -t'
32
+ )
33
+
34
+ expect_command(host.tar(action_variant, '~/file.txt',
35
+ compress: 'bzip2',
36
+ directory: directory,
37
+ occurrence: 1,
38
+ label: true,
39
+ multi_volume: true
40
+ ),
41
+ 'tar --restrict -C /home/ubuntu/dir -f ~/file.txt -j -t --occurrence 1 --label --multi-volume'
42
+ )
43
+ end
44
+ end
45
+
46
+ it 'prepares tar extract command' do
47
+ ['extract', 'get', 'x'].each do |action_variant|
48
+ expect_command(host.tar(action_variant, 'archive.tar'),
49
+ 'tar --restrict -f archive.tar -x'
50
+ )
51
+
52
+ expect_command(host.tar(action_variant, 'archive.tar',
53
+ compress: 'xz',
54
+ directory: directory,
55
+ occurrence: 2,
56
+ no_same_owner: true,
57
+ no_same_permissions: true,
58
+ no_selinux: true,
59
+ no_xattrs: true,
60
+ multi_volume: true,
61
+ label: true,
62
+ skip_old_files: true,
63
+ overwrite: true,
64
+ overwrite_dir: true,
65
+ unlink_first: true,
66
+ recursive_unlink: true,
67
+ paths: 'file.txt'
68
+ ),
69
+ 'tar --restrict -C /home/ubuntu/dir -f archive.tar -J -x --occurrence 2 --no-same-owner --no-same-permissions --no-selinux --no-xattrs --multi-volume --label --skip-old-files --overwrite --overwrite-dir --unlink-first --recursive-unlink file.txt'
70
+ )
71
+
72
+ expect_command(host.tar(action_variant, 'archive.tar',
73
+ preserve_permissions: true,
74
+ same_owners: true,
75
+ one_file_system: true,
76
+ keep_old_files: true,
77
+ paths: ['file1.txt', 'file2.txt']
78
+ ),
79
+ 'tar --restrict -f archive.tar -x --preserve-permissions --same-owner --one-file-system --keep-old-files file1.txt file2.txt'
80
+ )
81
+ end
82
+ end
83
+
84
+ it 'prepares tar create command' do
85
+ ['create', 'c'].each do |action_variant|
86
+ expect_command(host.tar(action_variant, 'archive.lzma', compress: 'lzma'), 'tar --restrict -f archive.lzma --lzma -c')
87
+ expect_command(host.tar(action_variant, 'archive.gz'), 'tar --restrict -f archive.gz -c')
88
+
89
+ expect_command(host.tar(action_variant, 'archive.gz',
90
+ directory: directory,
91
+ compress: 'gzip',
92
+ exclude: 'file2.txt',
93
+ paths: 'file1.txt'
94
+ ),
95
+ 'tar --restrict -C /home/ubuntu/dir -f archive.gz -z -c --exclude=file2.txt file1.txt'
96
+ )
97
+
98
+ expect_command(host.tar(action_variant, 'archive.gz',
99
+ compress: 'gzip',
100
+ exclude: ['file2.txt', 'file4.txt'],
101
+ paths: ['file1.txt', 'file3.txt']
102
+ ),
103
+ 'tar --restrict -f archive.gz -z -c --exclude=file2.txt --exclude=file4.txt file1.txt file3.txt'
104
+ )
105
+ end
106
+ end
107
+
108
+ it 'prepares tar append command' do
109
+ ['append', 'r'].each do |action_variant|
110
+ expect_command(host.tar(action_variant, 'archive.tar'), 'tar --restrict -f archive.tar -r')
111
+
112
+ expect_command(host.tar(action_variant, 'archive.tar',
113
+ directory: directory,
114
+ paths: 'main.conf'
115
+ ),
116
+ 'tar --restrict -C /home/ubuntu/dir -f archive.tar -r main.conf'
117
+ )
118
+
119
+ expect_command(host.tar(action_variant, 'archive.tar',
120
+ paths: ['main.conf', 'main2.conf']
121
+ ),
122
+ 'tar --restrict -f archive.tar -r main.conf main2.conf'
123
+ )
124
+ end
125
+ end
126
+
127
+ it 'prepares tar concat command' do
128
+ ['catenate', 'concat', 'A'].each do |action_variant|
129
+ expect_command(host.tar(action_variant, 'archive.tar'), 'tar --restrict -f archive.tar -A')
130
+ expect_command(host.tar(action_variant, 'archive.tar',
131
+ directory: directory,
132
+ paths: 'archive2.tar'
133
+ ),
134
+ 'tar --restrict -C /home/ubuntu/dir -f archive.tar -A archive2.tar'
135
+ )
136
+
137
+ expect_command(host.tar(action_variant, 'archive.tar',
138
+ directory: directory,
139
+ paths: ['archive2.tar', 'archive3.tar']
140
+ ),
141
+ 'tar --restrict -C /home/ubuntu/dir -f archive.tar -A archive2.tar archive3.tar'
142
+ )
143
+ end
144
+ end
145
+
146
+ it 'prepares tar update command' do
147
+ ['update', 'u'].each do |action_variant|
148
+ expect_command(host.tar(action_variant, 'archive',
149
+ paths: 'file1.txt'
150
+ ),
151
+ 'tar --restrict -f archive -u file1.txt'
152
+ )
153
+
154
+ expect_command(host.tar(action_variant, 'archive',
155
+ directory: directory,
156
+ paths: ['file1.txt', 'file2.txt']
157
+ ),
158
+ 'tar --restrict -C /home/ubuntu/dir -f archive -u file1.txt file2.txt'
159
+ )
160
+ end
161
+ end
162
+
163
+ it 'prepares tar diff command' do
164
+ ['diff', 'compare', 'd'].each do |action_variant|
165
+ expect_command(host.tar(action_variant, 'archive.tar', directory: directory), 'tar --restrict -C /home/ubuntu/dir -f archive.tar -d')
166
+ expect_command(host.tar(action_variant, 'archive.tar',
167
+ directory: directory,
168
+ occurrence: 4
169
+ ),
170
+ 'tar --restrict -C /home/ubuntu/dir -f archive.tar -d --occurrence 4'
171
+ )
172
+ end
173
+ end
174
+
175
+ it 'prepares tar delete command' do
176
+ expect_command(host.tar('delete', 'archive.tar', paths: 'file1.txt'), 'tar --restrict -f archive.tar --delete file1.txt')
177
+ expect_command(host.tar('delete', 'archive.tar',
178
+ paths: ['file1.txt', 'file2.txt'],
179
+ occurrence: 3
180
+ ),
181
+ 'tar --restrict -f archive.tar --delete --occurrence 3 file1.txt file2.txt'
182
+ )
183
+ end
184
+
185
+ it 'prepares invalid tar command' do
186
+ expect {
187
+ host.tar('abc', 'file1.txt')
188
+ }.to raise_error(ArgumentError)
189
+
190
+ expect {
191
+ host.tar('create', 'archive.tar', compress: 'xip')
192
+ }.to raise_error(ArgumentError)
193
+ end
194
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Remote::Cluster do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
14
+ let(:host1) do
15
+ Kanrisuru::Remote::Host.new(
16
+ host: 'localhost',
17
+ username: 'ubuntu',
18
+ keys: ['id_rsa']
19
+ )
20
+ end
21
+
22
+ let(:host2) do
23
+ Kanrisuru::Remote::Host.new(
24
+ host: 'ubuntu-host',
25
+ username: 'ubuntu',
26
+ keys: ['id_rsa']
27
+ )
28
+ end
29
+
30
+ it 'adds host to a cluster' do
31
+ cluster = Kanrisuru::Remote::Cluster.new(host1)
32
+ expect(cluster.hosts.length).to eq(1)
33
+ expect(cluster.count).to eq(1)
34
+ expect(cluster[host1.host]).to eq(host1)
35
+ expect(cluster.hosts).to include(host1)
36
+
37
+ cluster << host2
38
+ expect(cluster.hosts.length).to eq(2)
39
+ expect(cluster.count).to eq(2)
40
+ expect(cluster[host2.host]).to eq(host2)
41
+ expect(cluster.hosts).to include(host1)
42
+ expect(cluster.hosts).to include(host2)
43
+ end
44
+
45
+ it 'removes a host from a cluster' do
46
+ cluster = Kanrisuru::Remote::Cluster.new(host1, host2)
47
+ expect(cluster.count).to eq(2)
48
+
49
+ cluster.delete(host2)
50
+ expect(cluster.count).to eq(1)
51
+ expect(cluster.hosts).not_to include(host2)
52
+
53
+ cluster.delete(host1.host)
54
+ expect(cluster.count).to eq(0)
55
+ expect(cluster.hosts).not_to include(host1)
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Remote::Env do
6
+
7
+ let (:env) { Kanrisuru::Remote::Env.new }
8
+
9
+ it 'adds a environment variable' do
10
+ env['VAR1'] = 'hello'
11
+ expect(env.count).to eq(1)
12
+ expect(env.to_h).to eq({'VAR1' => 'hello'})
13
+ expect(env.to_s).to eq('export VAR1=hello;')
14
+ expect(env['VAR1']).to eq('hello')
15
+ end
16
+
17
+ it 'adds multiple environment variables' do
18
+ env['var1'] = 'hello'
19
+ env['var2'] = 'world'
20
+
21
+ expect(env.count).to eq(2)
22
+ expect(env.to_h).to eq({'VAR1' => 'hello', 'VAR2' => 'world'})
23
+ expect(env.to_s).to eq('export VAR1=hello; export VAR2=world;')
24
+ expect(env['VAR1']).to eq('hello')
25
+ expect(env['VAR2']).to eq('world')
26
+ end
27
+
28
+ it 'deletes a variable' do
29
+ env[:var1] = 'foo'
30
+ expect(env.count).to eq(1)
31
+ expect(env[:var1]).to eq('foo')
32
+ env.delete(:var1)
33
+ expect(env.count).to eq(0)
34
+ expect(env.to_s).to eq('')
35
+ end
36
+
37
+ it 'clears the environment' do
38
+ env['VERSION'] = 1
39
+ env['SHELL'] = '/bin/zsh'
40
+ env['USER'] = 'ubuntu'
41
+ env['HOSTNAME'] = 'ubuntu'
42
+ expect(env.to_s).to eq('export VERSION=1; export SHELL=/bin/zsh; export USER=ubuntu; export HOSTNAME=ubuntu;')
43
+
44
+ expect(env.count).to eq(4)
45
+ env.clear
46
+
47
+ expect(env.count).to eq(0)
48
+ end
49
+
50
+ end
@@ -45,6 +45,22 @@ class StubNetwork
45
45
  end
46
46
  end
47
47
 
48
+ def stub_command!(method, &block)
49
+ Kanrisuru::Remote::Host.class_eval do
50
+ alias_method "#{method}_alias", method
51
+
52
+ define_method(method) do |*args|
53
+ block.call(args)
54
+ end
55
+ end
56
+ end
57
+
58
+ def unstub_command!(method)
59
+ Kanrisuru::Remote::Host.class_eval do
60
+ alias_method method, "#{method}_alias"
61
+ end
62
+ end
63
+
48
64
  def unstub!
49
65
  Kanrisuru::Remote::Host.class_eval do
50
66
  alias_method :execute_with_retries, :execute_with_retries_alias
@@ -82,10 +98,18 @@ class StubNetwork
82
98
  processor: 'x86_64',
83
99
  release: 'centos',
84
100
  version: 7.0
101
+ },
102
+ opensuse: {
103
+ kernel_name: 'Linux',
104
+ kernel_version: '"#1 SMP Tue Jul 20 23:04:11 UTC 2021"',
105
+ operating_system: 'GNU/Linux',
106
+ hardware_platform: 'x86_64',
107
+ processor: 'x86_64',
108
+ release: 'opensuse-leap',
109
+ version:15.2
85
110
  }
86
111
  }
87
112
 
88
-
89
113
  defaults[name].key?(property) ?
90
114
  defaults[name][property] : nil
91
115
  end
File without changes
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,9 @@
3
3
  require 'simplecov'
4
4
  SimpleCov.start
5
5
 
6
+ require 'simplecov-cobertura'
7
+ SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
8
+
6
9
  require 'kanrisuru'
7
10
 
8
11
  require_relative 'helper/test_hosts'