1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
#
# Author:: Daniel DeLeo <dan@chef.io>
# Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper.rb")
describe Ohai::System, "Solaris2.X network plugin" do
before do
@solaris_arp_rn = <<-ARP_RN
Net to Media Table: IPv4
Device IP Address Mask Flags Phys Addr
------ -------------------- --------------- ----- ---------------
rtls0 172.31.4.1 255.255.255.255 00:14:69:81:0b:c0
rtls0 172.31.4.44 255.255.255.255 00:0c:29:c4:9a:11
rtls0 172.31.5.16 255.255.255.255 de:ad:be:ef:3b:ba
rtls0 172.31.4.16 255.255.255.255 d8:d3:85:65:39:40
rtls0 172.31.4.12 255.255.255.255 d8:d3:85:bb:43:b0
rtls0 172.31.4.115 255.255.255.255 52:54:00:0d:b7:5b
rtls0 172.31.4.126 255.255.255.255 52:54:00:2d:93:0c
rtls0 172.31.4.125 255.255.255.255 02:08:20:2e:29:8d
rtls0 172.31.4.121 255.255.255.255 52:54:00:25:8a:3f
rtls0 172.31.4.103 255.255.255.255 SP 52:54:00:7f:22:e7
rtls0 172.31.4.102 255.255.255.255 02:08:20:88:38:18
rtls0 172.31.4.106 255.255.255.255 02:08:20:6d:cc:aa
rtls0 172.31.4.83 255.255.255.255 02:08:20:05:8e:75
rtls0 172.31.4.82 255.255.255.255 52:54:00:2d:93:0c
rtls0 172.31.4.81 255.255.255.255 02:08:20:37:80:87
rtls0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
ARP_RN
@solaris_ifconfig = <<-ENDIFCONFIG
lo0:3: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0:3: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 index 3
inet 72.2.115.28 netmask ffffff80 broadcast 72.2.115.127
e1000g2:1: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 index 4
inet 10.2.115.28 netmask ffffff80 broadcast 10.2.115.127
inet6 2001:0db8:3c4d:55:a00:20ff:fe8e:f3ad/64
net0: flags=40201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS,L3PROTECT> mtu 1500 index 2
inet 37.153.96.148 netmask fffffe00 broadcast 37.153.97.255
ether 90:b8:d0:16:9b:97
net1:1: flags=100001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,PHYSRUNNING> mtu 1500 index 2
inet 10.16.125.36 netmask fffffe00 broadcast 10.16.125.255
ether 90:b8:d0:16:9b:97
ip.tun0: flags=2200851<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 3
inet tunnel src 109.146.85.57 tunnel dst 109.146.85.212
tunnel security settings --> use 'ipsecconf -ln -i ip.tun1'
tunnel hop limit 60
inet6 fe80::6d92:5539/10 --> fe80::6d92:55d4
ip.tun0:1: flags=2200851<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1480 index 3
inet6 2::45/128 --> 2::46
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
eri0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 \
index 2
inet 172.17.128.208 netmask ffffff00 broadcast 172.17.128.255
ip6.tun0: flags=10008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4> \
mtu 1460
index 3
inet6 tunnel src fe80::1 tunnel dst fe80::2
tunnel security settings --> use 'ipsecconf -ln -i ip.tun1'
tunnel hop limit 60 tunnel encapsulation limit 4
inet 10.0.0.208 --> 10.0.0.210 netmask ff000000
qfe1: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 3
usesrc vni0
inet6 fe80::203:baff:fe17:4be0/10
ether 0:3:ba:17:4b:e0
vni0: flags=2002210041<UP,RUNNING,NOXMIT,NONUD,IPv6,VIRTUAL> mtu 0
index 5
srcof qfe1
inet6 fe80::203:baff:fe17:4444/128
ENDIFCONFIG
@solaris_netstat_rn = <<-NETSTAT_RN
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
default 10.13.37.1 UG 1 0 e1000g0
10.13.37.0 10.13.37.157 U 1 2 e1000g0
127.0.0.1 127.0.0.1 UH 1 35 lo0
Routing Table: IPv6
Destination/Mask Gateway Flags Ref Use If
--------------------------- --------------------------- ----- --- ------- -----
fe80::/10 fe80::250:56ff:fe13:3757 U 1 0 e1000g0
::1 ::1 UH 1 0 lo0
NETSTAT_RN
@solaris_route_get = <<-ROUTE_GET
route to: default
destination: default
mask: default
gateway: 10.13.37.1
interface: e1000g0 index 3
flags: <UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,ms rttvar,ms hopcount mtu expire
0 0 0 0 0 0 1500 0
ROUTE_GET
@solaris11_route_get = <<-ROUTE_GET
route to: default
destination: default
mask: default
gateway: 10.13.37.1
interface: net1 index 2
flags: <UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,ms rttvar,ms hopcount mtu expire
0 0 0 0 0 0 1500 0
ROUTE_GET
@ifconfig_lines = @solaris_ifconfig.split("\n")
@plugin = get_plugin("solaris2/network")
allow(@plugin).to receive(:collect_os).and_return(:solaris2)
@plugin[:network] = Mash.new
allow(@plugin).to receive(:shell_out).with("ifconfig -a").and_return(mock_shell_out(0, @solaris_route_get, ""))
allow(@plugin).to receive(:shell_out).with("arp -an").and_return(mock_shell_out(0, @solaris_arp_rn, ""))
allow(@plugin).to receive(:shell_out).with("route -v -n get default").and_return(mock_shell_out(0, @solaris_route_get, ""))
end
describe "gathering IP layer address info" do
before do
@stdout = double("Pipe, stdout, cmd=`route get default`", :read => @solaris_route_get)
allow(@plugin).to receive(:shell_out).with("route -v -n get default").and_return(mock_shell_out(0, @solaris_route_get, ""))
allow(@plugin).to receive(:shell_out).with("ifconfig -a").and_return(mock_shell_out(0, @solaris_ifconfig, ""))
@plugin.run
end
it "completes the run" do
expect(@plugin["network"]).not_to be_nil
end
it "detects the interfaces" do
expect(@plugin["network"]["interfaces"].keys.sort).to eq(["e1000g0:3", "e1000g2:1", "eri0", "ip.tun0", "ip.tun0:1", "ip6.tun0", "lo0", "lo0:3", "net0", "net1:1", "qfe1", "vni0"])
end
it "detects the ip addresses of the interfaces" do
expect(@plugin["network"]["interfaces"]["e1000g0:3"]["addresses"].keys).to include("72.2.115.28")
end
it "detects the encapsulation type of the interfaces" do
expect(@plugin["network"]["interfaces"]["e1000g0:3"]["encapsulation"]).to eq("Ethernet")
end
it "detects the L3PROTECT network flag" do
expect(@plugin["network"]["interfaces"]["net0"]["flags"]).to include("L3PROTECT")
end
end
describe "gathering solaris 11 zone IP layer address info" do
before do
@stdout = double("Pipe, stdout, cmd=`route get default`", :read => @solaris11_route_get)
allow(@plugin).to receive(:shell_out).with("route -v -n get default").and_return(mock_shell_out(0, @solaris11_route_get, ""))
allow(@plugin).to receive(:shell_out).with("ifconfig -a").and_return(mock_shell_out(0, @solaris_ifconfig, ""))
@plugin.run
end
it "finds the flags for a PHYSRUNNING interface" do
expect(@plugin[:network][:interfaces]["net1:1"][:flags]).to eq(%w{ UP BROADCAST RUNNING MULTICAST IPv4 PHYSRUNNING })
end
it "finds the default interface for a solaris 11 zone" do
expect(@plugin[:network][:default_interface]).to eq("net1")
end
end
# TODO: specs for the arp -an stuff, check that it correctly adds the MAC addr to the right iface, etc.
describe "setting the node's default IP address attribute" do
before do
@stdout = double("Pipe, stdout, cmd=`route get default`", :read => @solaris_route_get)
allow(@plugin).to receive(:shell_out).with("route -v -n get default").and_return(mock_shell_out(0, @solaris_route_get, ""))
@plugin.run
end
it "finds the default interface by asking which iface has the default route" do
expect(@plugin[:network][:default_interface]).to eq("e1000g0")
end
end
end
|