kanrisuru 0.14.0 → 0.16.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/README.md +5 -5
- data/kanrisuru.gemspec +7 -3
- data/lib/kanrisuru/command.rb +16 -3
- data/lib/kanrisuru/core/apt/parsers/base.rb +1 -1
- data/lib/kanrisuru/core/disk/commands/lsblk.rb +6 -11
- data/lib/kanrisuru/core/disk/constants.rb +9 -0
- data/lib/kanrisuru/core/disk/parser.rb +1 -0
- data/lib/kanrisuru/core/disk/parsers/lsblk_version.rb +21 -0
- data/lib/kanrisuru/core/disk.rb +1 -0
- data/lib/kanrisuru/core/dmi/commands/dmi.rb +1 -1
- data/lib/kanrisuru/core/file/commands/chmod.rb +1 -1
- data/lib/kanrisuru/core/file/commands/copy.rb +1 -3
- data/lib/kanrisuru/core/file/commands/mkdir.rb +11 -6
- data/lib/kanrisuru/core/file/commands/rm.rb +4 -1
- data/lib/kanrisuru/core/file/commands/touch.rb +2 -1
- data/lib/kanrisuru/core/ip/commands/address.rb +64 -47
- data/lib/kanrisuru/core/ip/commands/address_label.rb +32 -16
- data/lib/kanrisuru/core/ip/commands/link.rb +96 -54
- data/lib/kanrisuru/core/ip/commands/link_set_opts.rb +61 -0
- data/lib/kanrisuru/core/ip/commands/link_type_opts.rb +313 -0
- data/lib/kanrisuru/core/ip/commands/maddress.rb +22 -13
- data/lib/kanrisuru/core/ip/commands/neighbour.rb +49 -32
- data/lib/kanrisuru/core/ip/commands/route.rb +130 -93
- data/lib/kanrisuru/core/ip/commands/rule.rb +37 -22
- data/lib/kanrisuru/core/ip/commands.rb +5 -3
- data/lib/kanrisuru/core/ip/constants.rb +12 -0
- data/lib/kanrisuru/core/ip/parser.rb +1 -0
- data/lib/kanrisuru/core/ip/parsers/version.rb +15 -0
- data/lib/kanrisuru/core/ip.rb +10 -7
- data/lib/kanrisuru/core/system/commands/kill.rb +1 -1
- data/lib/kanrisuru/core/user/commands/create_user.rb +9 -17
- data/lib/kanrisuru/core/user/commands/delete_user.rb +1 -1
- data/lib/kanrisuru/core/user/commands/update_user.rb +14 -23
- data/lib/kanrisuru/core/zypper/commands/add_repo.rb +1 -8
- data/lib/kanrisuru/core/zypper/commands/add_service.rb +4 -2
- data/lib/kanrisuru/core/zypper/commands/info.rb +1 -2
- data/lib/kanrisuru/core/zypper/commands/install.rb +2 -3
- data/lib/kanrisuru/core/zypper/commands/modify_repo.rb +1 -7
- data/lib/kanrisuru/core/zypper/commands/modify_service.rb +3 -1
- data/lib/kanrisuru/core/zypper/commands/remove.rb +1 -2
- data/lib/kanrisuru/core/zypper/commands/remove_repo.rb +3 -3
- data/lib/kanrisuru/core/zypper/commands/remove_service.rb +6 -1
- data/lib/kanrisuru/core/zypper/commands/search.rb +1 -3
- data/lib/kanrisuru/core/zypper/commands/source_install.rb +2 -0
- data/lib/kanrisuru/core/zypper/commands.rb +10 -1
- data/lib/kanrisuru/os_package.rb +2 -0
- data/lib/kanrisuru/remote/host.rb +1 -3
- data/lib/kanrisuru/result.rb +15 -0
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/archive_spec.rb +1 -1
- data/spec/functional/core/disk_spec.rb +77 -0
- data/spec/functional/core/dmi_spec.rb +78 -0
- data/spec/functional/core/file_spec.rb +284 -0
- data/spec/functional/core/group_spec.rb +62 -0
- data/spec/functional/core/ip_address_label_spec.rb +81 -0
- data/spec/functional/core/ip_address_spec.rb +95 -0
- data/spec/functional/core/ip_link_spec.rb +814 -0
- data/spec/functional/core/ip_maddress_spec.rb +78 -0
- data/spec/functional/core/ip_neighbour_spec.rb +119 -0
- data/spec/functional/core/ip_route_spec.rb +174 -0
- data/spec/functional/core/ip_rule_spec.rb +75 -0
- data/spec/functional/core/ip_spec.rb +27 -0
- data/spec/functional/core/system_spec.rb +135 -0
- data/spec/functional/core/user_spec.rb +97 -0
- data/spec/functional/core/zypper_spec.rb +708 -0
- data/spec/functional/result_spec.rb +91 -44
- data/spec/helper/stub_network.rb +7 -3
- data/spec/support/shared_examples/integration/core/transfer.rb +1 -1
- data/spec/unit/command_spec.rb +2 -0
- data/spec/unit/core/ip_spec.rb +12 -0
- metadata +25 -4
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
%w[maddress maddr m].each do |object_variant|
|
23
|
+
context "with ip #{object_variant}" do
|
24
|
+
context 'with json support' do
|
25
|
+
before(:all) do
|
26
|
+
StubNetwork.stub_command!(:ip_version) do
|
27
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:all) do
|
32
|
+
StubNetwork.unstub_command!(:ip_version)
|
33
|
+
end
|
34
|
+
|
35
|
+
%w[show list].each do |action_variant|
|
36
|
+
it "prepares #{action_variant} command" do
|
37
|
+
expect_command(host.ip(object_variant, action_variant), 'ip -json maddress show')
|
38
|
+
expect_command(host.ip(object_variant, action_variant, {
|
39
|
+
dev: 'eth0',
|
40
|
+
family: 'inet'
|
41
|
+
}), 'ip -json -family inet maddress show dev eth0')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'without json support' do
|
47
|
+
before(:all) do
|
48
|
+
StubNetwork.stub_command!(:ip_version) do
|
49
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 23
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
after(:all) do
|
54
|
+
StubNetwork.unstub_command!(:ip_version)
|
55
|
+
end
|
56
|
+
|
57
|
+
%w[show list].each do |action_variant|
|
58
|
+
it "prepares #{action_variant} command" do
|
59
|
+
expect_command(host.ip(object_variant, action_variant), 'ip maddress show')
|
60
|
+
expect_command(host.ip(object_variant, action_variant, {
|
61
|
+
dev: 'eth0',
|
62
|
+
family: 'inet'
|
63
|
+
}), 'ip -family inet maddress show dev eth0')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
%w[add delete del].each do |action_variant|
|
69
|
+
it "prepares #{action_variant} command" do
|
70
|
+
expect_command(host.ip(object_variant, action_variant, {
|
71
|
+
address: '01:80:c2:00:00:0e',
|
72
|
+
dev: 'eth0'
|
73
|
+
}), "ip maddress #{action_variant} address 01:80:c2:00:00:0e dev eth0")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
%w[neighbour neigh n].each do |object_variant|
|
23
|
+
context "with ip #{object_variant}" do
|
24
|
+
context 'with json support' do
|
25
|
+
before(:all) do
|
26
|
+
StubNetwork.stub_command!(:ip_version) do
|
27
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:all) do
|
32
|
+
StubNetwork.unstub_command!(:ip_version)
|
33
|
+
end
|
34
|
+
|
35
|
+
%w[show list].each do |action_variant|
|
36
|
+
it "prepares #{action_variant} command" do
|
37
|
+
expect_command(host.ip(object_variant), 'ip -json neighbour show')
|
38
|
+
expect_command(host.ip(object_variant, {
|
39
|
+
stats: true,
|
40
|
+
to: '10.10.10.10',
|
41
|
+
dev: 'ens3',
|
42
|
+
vrf: 'red',
|
43
|
+
proxy: true,
|
44
|
+
unused: true,
|
45
|
+
nud: 'all'
|
46
|
+
}), 'ip -json -s neighbour show to 10.10.10.10 dev ens3 nud all proxy unused')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'without json support' do
|
52
|
+
before(:all) do
|
53
|
+
StubNetwork.stub_command!(:ip_version) do
|
54
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 10
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
after(:all) do
|
59
|
+
StubNetwork.unstub_command!(:ip_version)
|
60
|
+
end
|
61
|
+
|
62
|
+
%w[show list].each do |action_variant|
|
63
|
+
it "prepares #{action_variant} command" do
|
64
|
+
expect_command(host.ip(object_variant), 'ip neighbour show')
|
65
|
+
expect_command(host.ip(object_variant, {
|
66
|
+
stats: true,
|
67
|
+
to: '10.10.10.10',
|
68
|
+
dev: 'ens3',
|
69
|
+
vrf: 'red',
|
70
|
+
proxy: true,
|
71
|
+
unused: true,
|
72
|
+
nud: 'all'
|
73
|
+
}), 'ip -s neighbour show to 10.10.10.10 dev ens3 nud all proxy unused')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
%w[add change replace].each do |action_variant|
|
79
|
+
it "prepares #{action_variant} command" do
|
80
|
+
expect_command(host.ip(object_variant, action_variant, {
|
81
|
+
to: '192.168.16.14',
|
82
|
+
dev: 'eno1',
|
83
|
+
proxy: true,
|
84
|
+
router: true,
|
85
|
+
extern_learn: true,
|
86
|
+
permanent: true,
|
87
|
+
nud: 'probe',
|
88
|
+
lladdr: '17:39:D1:24:53:CF'
|
89
|
+
}), "ip neighbour #{action_variant} to 192.168.16.14 dev eno1 lladdr 17:39:D1:24:53:CF nud probe proxy router extern_learn")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
%w[delete del].each do |action_variant|
|
94
|
+
it "prepares #{action_variant} command" do
|
95
|
+
expect_command(host.ip(object_variant, action_variant, {
|
96
|
+
to: '192.168.16.14',
|
97
|
+
dev: 'eno1',
|
98
|
+
proxy: true,
|
99
|
+
router: true,
|
100
|
+
extern_learn: true,
|
101
|
+
permanent: true
|
102
|
+
}), "ip neighbour #{action_variant} to 192.168.16.14 dev eno1 proxy router extern_learn")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'prepares flush command' do
|
107
|
+
expect_command(host.ip(object_variant, 'flush', {
|
108
|
+
stats: true,
|
109
|
+
to: '10.10.10.10',
|
110
|
+
dev: 'ens3',
|
111
|
+
vrf: 'red',
|
112
|
+
proxy: true,
|
113
|
+
unused: true,
|
114
|
+
nud: 'all'
|
115
|
+
}), 'ip -s neighbour flush to 10.10.10.10 dev ens3 nud all unused')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
%w[route r ro rou rout].each do |object_variant|
|
23
|
+
context "with ip #{object_variant}" do
|
24
|
+
context 'with json support' do
|
25
|
+
before(:all) do
|
26
|
+
StubNetwork.stub_command!(:ip_version) do
|
27
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:all) do
|
32
|
+
StubNetwork.unstub_command!(:ip_version)
|
33
|
+
end
|
34
|
+
|
35
|
+
%w[show list].each do |action_variant|
|
36
|
+
it "prepares #{action_variant} command" do
|
37
|
+
expect_command(host.ip(object_variant), 'ip -json route show')
|
38
|
+
expect_command(host.ip(object_variant, {
|
39
|
+
family: 'inet',
|
40
|
+
to: '10.0/16',
|
41
|
+
from: '10.1/16',
|
42
|
+
dev: 'eno4',
|
43
|
+
protocol: 'kernel',
|
44
|
+
dsfield: '0x30',
|
45
|
+
table: 'all',
|
46
|
+
vrf: 'blue',
|
47
|
+
cloned: true,
|
48
|
+
cached: true,
|
49
|
+
via: '10.0.0.1',
|
50
|
+
src: '10.5.5.5',
|
51
|
+
realms: '6'
|
52
|
+
}), 'ip -json -family inet route show to 10.0/16 dev eno4 protocol kernel table all dsfield 0x30 via 10.0.0.1 vrf blue src 10.5.5.5 realms 6 cloned cached')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'without json support' do
|
58
|
+
before(:all) do
|
59
|
+
StubNetwork.stub_command!(:ip_version) do
|
60
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 33
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
after(:all) do
|
65
|
+
StubNetwork.unstub_command!(:ip_version)
|
66
|
+
end
|
67
|
+
|
68
|
+
%w[show list].each do |action_variant|
|
69
|
+
it "prepares #{action_variant} command" do
|
70
|
+
expect_command(host.ip(object_variant), 'ip route show')
|
71
|
+
expect_command(host.ip(object_variant, {
|
72
|
+
family: 'inet',
|
73
|
+
to: '10.0/16',
|
74
|
+
from: '10.1/16',
|
75
|
+
dev: 'eno4',
|
76
|
+
protocol: 'kernel',
|
77
|
+
dsfield: '0x30',
|
78
|
+
table: 'all',
|
79
|
+
vrf: 'blue',
|
80
|
+
cloned: true,
|
81
|
+
cached: true,
|
82
|
+
via: '10.0.0.1',
|
83
|
+
src: '10.5.5.5',
|
84
|
+
realms: '6'
|
85
|
+
}), 'ip -family inet route show to 10.0/16 dev eno4 protocol kernel table all dsfield 0x30 via 10.0.0.1 vrf blue src 10.5.5.5 realms 6 cloned cached')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
%w[add change append del delete replace].each do |action_variant|
|
91
|
+
it "prepares #{action_variant} command" do
|
92
|
+
expect_command(host.ip(object_variant, action_variant, {
|
93
|
+
dev: 'eno2',
|
94
|
+
mtu: 1600,
|
95
|
+
congctl: 'test'
|
96
|
+
}), "ip route #{action_variant} dev eno2 mtu 1600 congctl test")
|
97
|
+
|
98
|
+
expect_command(host.ip(object_variant, action_variant, {
|
99
|
+
to: '0/0',
|
100
|
+
tos: '0x28',
|
101
|
+
dsfield: '0x98',
|
102
|
+
metric: 32,
|
103
|
+
table: 254,
|
104
|
+
vrf: 'green',
|
105
|
+
src: '172.3.3.3',
|
106
|
+
realm: '6',
|
107
|
+
mtu: 1600,
|
108
|
+
mtu_lock: true,
|
109
|
+
window: 3,
|
110
|
+
rtt: 4,
|
111
|
+
rttvar: 12,
|
112
|
+
rto_min: 1,
|
113
|
+
sshthresh: 0,
|
114
|
+
cwnd: 12,
|
115
|
+
initcwnd: 5,
|
116
|
+
initrwnd: 5,
|
117
|
+
features: 'ecn',
|
118
|
+
quickack: 'true',
|
119
|
+
fastopen_no_cookie: 'true',
|
120
|
+
congctl: 'test',
|
121
|
+
congctl_lock: true,
|
122
|
+
advmss: 7,
|
123
|
+
reordering: 3,
|
124
|
+
next_hop: {
|
125
|
+
via: '172.0.0.0',
|
126
|
+
dev: 'gateway',
|
127
|
+
weight: 100
|
128
|
+
},
|
129
|
+
scope: 0,
|
130
|
+
protocol: 'static',
|
131
|
+
onlink: true,
|
132
|
+
pref: 'high'
|
133
|
+
}), "ip route #{action_variant} to 0/0 tos 0x28 dsfield 0x98 metric 32 table 254 vrf green src 172.3.3.3 realm 6 mtu lock 1600 window 3 rtt 4 rttvar 12 rto_min 1 cwnd 12 initcwnd 5 initrwnd 5 features ecn quickack true fastopen_no_cookie true congctl lock test advmss 7 reordering 3 next_hop via 172.0.0.0 dev gateway weight 100 scope 0 protocol static onlink pref high")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'prepares flush command' do
|
138
|
+
expect_command(host.ip(object_variant, 'flush', {
|
139
|
+
family: 'inet',
|
140
|
+
to: '10.0/16',
|
141
|
+
from: '10.1/16',
|
142
|
+
dev: 'eno4',
|
143
|
+
protocol: 'kernel',
|
144
|
+
dsfield: '0x30',
|
145
|
+
table: 'all',
|
146
|
+
vrf: 'blue',
|
147
|
+
cloned: true,
|
148
|
+
cached: true,
|
149
|
+
via: '10.0.0.1',
|
150
|
+
src: '10.5.5.5',
|
151
|
+
realms: '6'
|
152
|
+
}), 'ip -family inet route flush to 10.0/16 dev eno4 protocol kernel table all dsfield 0x30 via 10.0.0.1 vrf blue src 10.5.5.5 realms 6 cloned cached')
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'prepares get command' do
|
156
|
+
expect_command(host.ip(object_variant, 'get', {
|
157
|
+
dev: 'eth1',
|
158
|
+
to: '10.0/16',
|
159
|
+
from: '10.1/16',
|
160
|
+
fibmatch: true,
|
161
|
+
tos: '0x28',
|
162
|
+
dsfield: '0x30',
|
163
|
+
iif: 'eth0',
|
164
|
+
oif: 'eth1',
|
165
|
+
mark: '0x20',
|
166
|
+
ipproto: 'tcp',
|
167
|
+
dport: 80,
|
168
|
+
sport: 80,
|
169
|
+
connected: true
|
170
|
+
}), 'ip route get fibmatch to 10.0/16 from 10.1/16 tos 0x28 dsfield 0x30 iif eth0 oif eth1 mark 0x20 ipproto tcp sport 80 dport 80 connected')
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
%w[rule ru].each do |object_variant|
|
23
|
+
context "with ip #{object_variant}" do
|
24
|
+
context 'with json support' do
|
25
|
+
before(:all) do
|
26
|
+
StubNetwork.stub_command!(:ip_version) do
|
27
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:all) do
|
32
|
+
StubNetwork.unstub_command!(:ip_version)
|
33
|
+
end
|
34
|
+
|
35
|
+
%w[show list].each do |action_variant|
|
36
|
+
it "prepares #{action_variant} command" do
|
37
|
+
expect_command(host.ip(object_variant, action_variant), 'ip -json rule show')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
%w[add delete del].each do |action_variant|
|
42
|
+
it "prepares #{action_variant} command" do
|
43
|
+
expect_command(host.ip(object_variant, action_variant, {
|
44
|
+
type: 'unicast',
|
45
|
+
from: '0/0',
|
46
|
+
to: '0/0',
|
47
|
+
iif: 'eth0',
|
48
|
+
oif: 'eth1',
|
49
|
+
tos: '0x28',
|
50
|
+
dsfield: '0x30',
|
51
|
+
fwmark: 2,
|
52
|
+
uidrange: '1-10',
|
53
|
+
ipproto: 'tcp',
|
54
|
+
sport: 80,
|
55
|
+
dport: 80,
|
56
|
+
priority: 1,
|
57
|
+
table: 5,
|
58
|
+
protocol: 'kernel',
|
59
|
+
suppress_prefixlength: 8,
|
60
|
+
suppress_ifgroup: 6,
|
61
|
+
realms: '1',
|
62
|
+
nat: '10.1.1.1'
|
63
|
+
}), "ip rule #{action_variant} type unicast from 0/0 to 0/0 iif eth0 tos 0x28 dsfield 0x30 fwmark 2 priority 1 table 5 realms 1 nat 10.1.1.1")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'prepares flush command' do
|
68
|
+
expect_command(host.ip(object_variant, 'flush', {
|
69
|
+
protocol: 'kernel'
|
70
|
+
}), 'ip rule flush protocol kernel')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'with ip version' do
|
23
|
+
it 'prepares ip_version command' do
|
24
|
+
expect_command(host.ip_version, 'ip -V')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::System do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'prepares cpu_info command' do
|
23
|
+
expect_command(host.cpu_info('sockets'), "lscpu | grep -i '^Socket' | awk '{print $NF}'")
|
24
|
+
expect_command(host.cpu_info('cores_per_socket'), "lscpu | grep -i '^Core' | awk '{print $NF}'")
|
25
|
+
expect_command(host.cpu_info('threads'), "lscpu | grep -i '^Thread' | awk '{print $NF}'")
|
26
|
+
|
27
|
+
allow(Kanrisuru.logger).to receive(:info)
|
28
|
+
expect(Kanrisuru.logger).to receive(:info) do |&block|
|
29
|
+
expect(block.call).to eq('DEPRECATION WARNING: cpu_info will be removed in the upcoming major release. Use lscpu instead.')
|
30
|
+
end
|
31
|
+
|
32
|
+
expect_command(host.cpu_info('cores'), "lscpu | grep -i '^CPU(' | awk '{print $NF}'")
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'prepares free command' do
|
36
|
+
expect_command(host.free('total'), "cat /proc/meminfo | grep -i '^MemTotal' | awk '{print $2}'")
|
37
|
+
expect_command(host.free('free'), "cat /proc/meminfo | grep -i '^MemFree' | awk '{print $2}'")
|
38
|
+
expect_command(host.free('swap'), "cat /proc/meminfo | grep -i '^SwapTotal' | awk '{print $2}'")
|
39
|
+
expect_command(host.free('swap_free'), "cat /proc/meminfo | grep -i '^SwapFree' | awk '{print $2}'")
|
40
|
+
|
41
|
+
expect do
|
42
|
+
host.free('hello')
|
43
|
+
end.to raise_error(ArgumentError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'prepares kernel_statistics command' do
|
47
|
+
expect_command(host.kernel_statistics, 'cat /proc/stat')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'prepares kill command' do
|
51
|
+
expect_command(host.kill('KILL', 1024), 'kill -KILL 1024')
|
52
|
+
expect_command(host.kill(1, 1024), 'kill -HUP 1024')
|
53
|
+
expect_command(host.kill('TERM', [1024, 1025, 1026]), 'kill -TERM 1024 1025 1026')
|
54
|
+
|
55
|
+
expect do
|
56
|
+
host.kill('all', 0)
|
57
|
+
end.to raise_error(ArgumentError)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'prepares last command' do
|
61
|
+
expect_command(host.last, "last -i -F | sed 's/ / /'")
|
62
|
+
expect_command(host.last({ file: '/var/log/login.log' }), "last -i -F -f /var/log/login.log | sed 's/ / /'")
|
63
|
+
expect_command(host.last({ failed_attempts: true }), "lastb -i -F | sed 's/ / /'")
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'prepares load_average command' do
|
67
|
+
expect_command(host.load_average, "cat /proc/loadavg | awk '{print $1,$2,$3}'")
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'prepares load_env command' do
|
71
|
+
expect_command(host.load_env, 'env')
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'prepares lscpu command' do
|
75
|
+
expect_command(host.lscpu, 'lscpu')
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'prepares lsof command' do
|
79
|
+
expect_command(host.lsof, 'lsof -F pcuftDsin')
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'prepares poweroff command' do
|
83
|
+
expect_command(host.poweroff, 'shutdown')
|
84
|
+
expect_command(host.poweroff(cancel: true), 'shutdown -c')
|
85
|
+
expect_command(host.poweroff(cancel: true, message: 'canceling...'), 'shutdown -c canceling...')
|
86
|
+
expect_command(host.poweroff(no_wall: true), 'shutdown --no-wall')
|
87
|
+
expect_command(host.poweroff(time: 10), 'shutdown +10')
|
88
|
+
expect_command(host.poweroff(time: 'now'), 'shutdown now')
|
89
|
+
expect_command(host.poweroff(time: '11:11'), 'shutdown 11:11')
|
90
|
+
expect_command(host.poweroff(time: '11:11', message: 'turning off'), 'shutdown 11:11 turning off')
|
91
|
+
|
92
|
+
expect do
|
93
|
+
host.poweroff(time: 'hsadf')
|
94
|
+
end.to raise_error(ArgumentError)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'prepares ps command' do
|
98
|
+
expect_command(host.ps,
|
99
|
+
'ps ww ax -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
|
100
|
+
expect_command(host.ps(user: '1000', group: '1000'),
|
101
|
+
'ps ww --user 1000 --group 1000 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
|
102
|
+
expect_command(host.ps(user: [0, 1000], group: [0, 1000]),
|
103
|
+
'ps ww --user 0,1000 --group 0,1000 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
|
104
|
+
expect_command(host.ps(pid: 100),
|
105
|
+
'ps ww --pid 100 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
|
106
|
+
expect_command(host.ps(pid: [100, 101, 102]),
|
107
|
+
'ps ww --pid 100,101,102 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
|
108
|
+
expect_command(host.ps(pid: [100, 101, 102], ppid: [0, 3, 5]),
|
109
|
+
'ps ww --pid 100,101,102 --ppid 0,3,5 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'prepares reboot command' do
|
113
|
+
expect_command(host.reboot, 'shutdown -r')
|
114
|
+
expect_command(host.reboot(cancel: true), 'shutdown -c')
|
115
|
+
expect_command(host.reboot(cancel: true, message: 'canceling...'), 'shutdown -c canceling...')
|
116
|
+
expect_command(host.reboot(no_wall: true), 'shutdown -r --no-wall')
|
117
|
+
expect_command(host.reboot(time: 10), 'shutdown -r +10')
|
118
|
+
expect_command(host.reboot(time: 'now'), 'shutdown -r now')
|
119
|
+
expect_command(host.reboot(time: '11:11'), 'shutdown -r 11:11')
|
120
|
+
expect_command(host.reboot(time: '11:11', message: 'turning off'), 'shutdown -r 11:11 turning off')
|
121
|
+
|
122
|
+
expect do
|
123
|
+
host.reboot(time: 'hsadf')
|
124
|
+
end.to raise_error(ArgumentError)
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'prepares uptime command' do
|
128
|
+
expect_command(host.uptime, 'cat /proc/uptime')
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'prepares w command' do
|
132
|
+
expect_command(host.w, 'w -hi')
|
133
|
+
expect_command(host.who(users: 'centos'), 'w -hi centos')
|
134
|
+
end
|
135
|
+
end
|