kanrisuru 0.14.0 → 0.16.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|