rbeapi 0.1.0 → 0.2.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.
- data/.gitignore +5 -0
- data/.rubocop.yml +21 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -1
- data/Guardfile +3 -3
- data/README.md +92 -17
- data/Rakefile +99 -4
- data/gems/README.rst +4 -0
- data/gems/inifile/.gitignore +2 -0
- data/gems/inifile/README.rst +5 -0
- data/gems/inifile/inifile.spec.tmpl +84 -0
- data/gems/net_http_unix/.gitignore +2 -0
- data/gems/net_http_unix/README.rst +5 -0
- data/gems/net_http_unix/net_http_unix.spec.tmpl +54 -0
- data/gems/netaddr/README.rst +5 -0
- data/gems/netaddr/netaddr.spec.tmpl +50 -0
- data/lib/rbeapi/api/aaa.rb +14 -17
- data/lib/rbeapi/api/acl.rb +276 -0
- data/lib/rbeapi/api/dns.rb +7 -4
- data/lib/rbeapi/api/interfaces.rb +239 -239
- data/lib/rbeapi/api/ipinterfaces.rb +5 -3
- data/lib/rbeapi/api/logging.rb +8 -5
- data/lib/rbeapi/api/mlag.rb +45 -127
- data/lib/rbeapi/api/ntp.rb +1 -4
- data/lib/rbeapi/api/ospf.rb +16 -13
- data/lib/rbeapi/api/prefixlists.rb +4 -4
- data/lib/rbeapi/api/radius.rb +34 -25
- data/lib/rbeapi/api/routemaps.rb +16 -10
- data/lib/rbeapi/api/snmp.rb +26 -13
- data/lib/rbeapi/api/staticroutes.rb +6 -5
- data/lib/rbeapi/api/stp.rb +77 -18
- data/lib/rbeapi/api/switchports.rb +20 -12
- data/lib/rbeapi/api/system.rb +6 -6
- data/lib/rbeapi/api/tacacs.rb +9 -6
- data/lib/rbeapi/api/varp.rb +15 -10
- data/lib/rbeapi/api/vlans.rb +5 -6
- data/lib/rbeapi/api.rb +56 -16
- data/lib/rbeapi/client.rb +85 -50
- data/lib/rbeapi/eapilib.rb +95 -56
- data/lib/rbeapi/netdev/snmp.rb +7 -16
- data/lib/rbeapi/utils.rb +3 -5
- data/lib/rbeapi/version.rb +1 -1
- data/rbeapi.gemspec +4 -2
- data/rbeapi.spec.tmpl +72 -0
- data/spec/support/fixtures.rb +6 -4
- data/spec/support/shared_examples_for_api_modules.rb +3 -18
- data/spec/system/api_acl_spec.rb +128 -0
- data/spec/system/api_ospf_interfaces_spec.rb +17 -14
- data/spec/system/api_ospf_spec.rb +8 -8
- data/spec/system/api_varp_interfaces_spec.rb +22 -13
- data/spec/system/api_varp_spec.rb +1 -4
- data/spec/system/rbeapi/api/interfaces_base_spec.rb +3 -4
- data/spec/system/rbeapi/api/interfaces_ethernet_spec.rb +13 -9
- data/spec/system/rbeapi/api/interfaces_portchannel_spec.rb +43 -26
- data/spec/system/rbeapi/api/interfaces_vxlan_spec.rb +7 -6
- data/spec/system/rbeapi/api/ipinterfaces_spec.rb +34 -21
- data/spec/system/rbeapi/api/mlag_interfaces_spec.rb +15 -38
- data/spec/system/rbeapi/api/mlag_spec.rb +26 -30
- data/spec/system/rbeapi/api/snmp_spec.rb +0 -3
- data/spec/system/rbeapi/api/stp_instances_spec.rb +20 -12
- data/spec/system/rbeapi/api/stp_interfaces_spec.rb +1 -3
- data/spec/system/rbeapi/api/switchports_spec.rb +14 -12
- data/spec/system/rbeapi/api/system_spec.rb +0 -3
- data/spec/system/rbeapi/api/vlans_spec.rb +19 -9
- data/spec/unit/rbeapi/api/acl/default_spec.rb +158 -0
- data/spec/unit/rbeapi/api/acl/fixture_acl_standard.text +22 -0
- data/spec/unit/rbeapi/api/interfaces/base_spec.rb +123 -0
- data/spec/unit/rbeapi/api/interfaces/ethernet_spec.rb +89 -0
- data/spec/unit/rbeapi/api/interfaces/fixture_interfaces.text +219 -0
- data/spec/unit/rbeapi/api/interfaces/portchannel_spec.rb +149 -0
- data/spec/unit/rbeapi/api/interfaces/vxlan_spec.rb +243 -0
- data/spec/unit/rbeapi/api/mlag/default_spec.rb +218 -0
- data/spec/unit/rbeapi/api/mlag/fixture_mlag.text +238 -0
- data/spec/unit/rbeapi/api/vlans/default_spec.rb +135 -0
- data/spec/unit/rbeapi/api/vlans/fixture_vlans.text +5 -0
- metadata +79 -4
- data/lib/rbeapi/api/radius.rb.old +0 -399
@@ -0,0 +1,218 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'rbeapi/api/mlag'
|
4
|
+
|
5
|
+
include FixtureHelpers
|
6
|
+
|
7
|
+
describe Rbeapi::Api::Mlag do
|
8
|
+
subject { described_class.new(node) }
|
9
|
+
|
10
|
+
let(:node) { double('node') }
|
11
|
+
|
12
|
+
def mlag
|
13
|
+
mlag = Fixtures[:mlag]
|
14
|
+
return mlag if mlag
|
15
|
+
fixture('mlag', format: :text, dir: File.dirname(__FILE__))
|
16
|
+
end
|
17
|
+
|
18
|
+
before :each do
|
19
|
+
allow(subject.node).to receive(:running_config).and_return(mlag)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#get' do
|
23
|
+
let(:keys) { [:global, :interfaces] }
|
24
|
+
|
25
|
+
let(:global_keys) do
|
26
|
+
[:domain_id, :local_interface, :peer_address, :peer_link, :shutdown]
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:interface_keys) { [:mlag_id] }
|
30
|
+
|
31
|
+
it 'returns the mlag resource hash with all keys' do
|
32
|
+
expect(subject.get.keys).to match_array(keys)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'contains the global hash with all keys' do
|
36
|
+
expect(subject.get[:global].keys).to match_array(global_keys)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'contains an entry for Port-Channel100' do
|
40
|
+
expect(subject.get[:interfaces].keys).to include('Port-Channel100')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'does not contain an entry for Port-Channel10' do
|
44
|
+
expect(subject.get[:interfaces].keys).not_to include('Port-Channel10')
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'contains all interface keys' do
|
48
|
+
interface = subject.get[:interfaces]['Port-Channel100']
|
49
|
+
expect(interface.keys).to match_array(interface_keys)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#set_domain_id' do
|
54
|
+
it 'sets the domain_id to foo' do
|
55
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
56
|
+
'domain-id foo'])
|
57
|
+
expect(subject.set_domain_id(value: 'foo')).to be_truthy
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'negates the domain_id' do
|
61
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
62
|
+
'no domain-id'])
|
63
|
+
expect(subject.set_domain_id).to be_truthy
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'defaults the domain_id' do
|
67
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
68
|
+
'default domain-id'])
|
69
|
+
expect(subject.set_domain_id(default: true)).to be_truthy
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'default option takes precedence' do
|
73
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
74
|
+
'default domain-id'])
|
75
|
+
expect(subject.set_domain_id(value: 'foo', default: true)).to be_truthy
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#set_local_interface' do
|
80
|
+
it 'sets the local_interface to foo' do
|
81
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
82
|
+
'local-interface Port-Channel1'])
|
83
|
+
expect(subject.set_local_interface(value: 'Port-Channel1')).to be_truthy
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'negates the local_interface' do
|
87
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
88
|
+
'no local-interface'])
|
89
|
+
expect(subject.set_local_interface).to be_truthy
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'defaults the local_interface' do
|
93
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
94
|
+
'default local-interface'])
|
95
|
+
expect(subject.set_local_interface(default: true)).to be_truthy
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'default option takes precedence' do
|
99
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
100
|
+
'default local-interface'])
|
101
|
+
expect(subject.set_local_interface(value: 'Port-Channel1',
|
102
|
+
default: true)).to be_truthy
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#set_peer_address' do
|
107
|
+
it 'sets the peer_address to foo' do
|
108
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
109
|
+
'peer-address 1.1.1.1'])
|
110
|
+
expect(subject.set_peer_address(value: '1.1.1.1')).to be_truthy
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'negates the peer_address' do
|
114
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
115
|
+
'no peer-address'])
|
116
|
+
expect(subject.set_peer_address).to be_truthy
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'defaults the peer_address' do
|
120
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
121
|
+
'default peer-address'])
|
122
|
+
expect(subject.set_peer_address(default: true)).to be_truthy
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'default option takes precedence' do
|
126
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
127
|
+
'default peer-address'])
|
128
|
+
expect(subject.set_peer_address(value: '1.1.1.1',
|
129
|
+
default: true)).to be_truthy
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe '#set_peer_link' do
|
134
|
+
it 'sets the peer_link to foo' do
|
135
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
136
|
+
'peer-link Vlan4094'])
|
137
|
+
expect(subject.set_peer_link(value: 'Vlan4094')).to be_truthy
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'negates the peer_link' do
|
141
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
142
|
+
'no peer-link'])
|
143
|
+
expect(subject.set_peer_link).to be_truthy
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'defaults the peer_link' do
|
147
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
148
|
+
'default peer-link'])
|
149
|
+
expect(subject.set_peer_link(default: true)).to be_truthy
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'default option takes precedence' do
|
153
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
154
|
+
'default peer-link'])
|
155
|
+
expect(subject.set_peer_link(value: 'Vlan4094', default: true))
|
156
|
+
.to be_truthy
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe '#set_mlag_id' do
|
161
|
+
it 'sets the mlag_id to 5' do
|
162
|
+
expect(node).to receive(:config).with(['interface Port-Channel1',
|
163
|
+
'mlag 5'])
|
164
|
+
expect(subject.set_mlag_id('Port-Channel1', value: 5)).to be_truthy
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'negates the mlag_id' do
|
168
|
+
expect(node).to receive(:config).with(['interface Port-Channel1',
|
169
|
+
'no mlag'])
|
170
|
+
expect(subject.set_mlag_id('Port-Channel1')).to be_truthy
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'defaults the mlag_id' do
|
174
|
+
expect(node).to receive(:config).with(['interface Port-Channel1',
|
175
|
+
'default mlag'])
|
176
|
+
expect(subject.set_mlag_id('Port-Channel1', default: true)).to be_truthy
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'default option takes precedence' do
|
180
|
+
expect(node).to receive(:config).with(['interface Port-Channel1',
|
181
|
+
'default mlag'])
|
182
|
+
expect(subject.set_mlag_id('Port-Channel1', value: 'Vlan4094',
|
183
|
+
default: true)).to be_truthy
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe '#set_shutdown' do
|
188
|
+
it 'disables the mlag configuration' do
|
189
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
190
|
+
'shutdown'])
|
191
|
+
expect(subject.set_shutdown(value: true)).to be_truthy
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'enables the mlag configuration' do
|
195
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
196
|
+
'no shutdown'])
|
197
|
+
expect(subject.set_shutdown(value: false)).to be_truthy
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'negates the shutdown value' do
|
201
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
202
|
+
'no shutdown'])
|
203
|
+
expect(subject.set_shutdown).to be_truthy
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'defaults the shutdown value' do
|
207
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
208
|
+
'default shutdown'])
|
209
|
+
expect(subject.set_shutdown(default: true)).to be_truthy
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'default option takes precedence' do
|
213
|
+
expect(node).to receive(:config).with(['mlag configuration',
|
214
|
+
'default shutdown'])
|
215
|
+
expect(subject.set_shutdown(value: true, default: true)).to be_truthy
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
@@ -0,0 +1,238 @@
|
|
1
|
+
interface Port-Channel10
|
2
|
+
no description
|
3
|
+
no shutdown
|
4
|
+
default load-interval
|
5
|
+
logging event link-status use-global
|
6
|
+
switchport access vlan 1
|
7
|
+
switchport trunk native vlan 1
|
8
|
+
switchport trunk allowed vlan 1-4094
|
9
|
+
switchport mode access
|
10
|
+
switchport mac address learning
|
11
|
+
no switchport private-vlan mapping
|
12
|
+
switchport
|
13
|
+
default encapsulation dot1q vlan
|
14
|
+
no l2-protocol encapsulation dot1q vlan 0
|
15
|
+
snmp trap link-status
|
16
|
+
no port-channel min-links
|
17
|
+
no port-channel lacp fallback
|
18
|
+
port-channel lacp fallback timeout 90
|
19
|
+
no l2 mtu
|
20
|
+
no mlag
|
21
|
+
no switchport port-security
|
22
|
+
switchport port-security maximum 1
|
23
|
+
default qos trust
|
24
|
+
qos cos 5
|
25
|
+
qos dscp 2
|
26
|
+
no shape rate
|
27
|
+
mc-tx-queue 0
|
28
|
+
priority strict
|
29
|
+
no bandwidth percent
|
30
|
+
no shape rate
|
31
|
+
no bandwidth guaranteed
|
32
|
+
!
|
33
|
+
mc-tx-queue 1
|
34
|
+
priority strict
|
35
|
+
no bandwidth percent
|
36
|
+
no shape rate
|
37
|
+
no bandwidth guaranteed
|
38
|
+
!
|
39
|
+
mc-tx-queue 2
|
40
|
+
priority strict
|
41
|
+
no bandwidth percent
|
42
|
+
no shape rate
|
43
|
+
no bandwidth guaranteed
|
44
|
+
!
|
45
|
+
mc-tx-queue 3
|
46
|
+
priority strict
|
47
|
+
no bandwidth percent
|
48
|
+
no shape rate
|
49
|
+
no bandwidth guaranteed
|
50
|
+
!
|
51
|
+
uc-tx-queue 0
|
52
|
+
priority strict
|
53
|
+
no bandwidth percent
|
54
|
+
no shape rate
|
55
|
+
no bandwidth guaranteed
|
56
|
+
!
|
57
|
+
uc-tx-queue 1
|
58
|
+
priority strict
|
59
|
+
no bandwidth percent
|
60
|
+
no shape rate
|
61
|
+
no bandwidth guaranteed
|
62
|
+
!
|
63
|
+
uc-tx-queue 2
|
64
|
+
priority strict
|
65
|
+
no bandwidth percent
|
66
|
+
no shape rate
|
67
|
+
no bandwidth guaranteed
|
68
|
+
!
|
69
|
+
uc-tx-queue 3
|
70
|
+
priority strict
|
71
|
+
no bandwidth percent
|
72
|
+
no shape rate
|
73
|
+
no bandwidth guaranteed
|
74
|
+
!
|
75
|
+
uc-tx-queue 4
|
76
|
+
priority strict
|
77
|
+
no bandwidth percent
|
78
|
+
no shape rate
|
79
|
+
no bandwidth guaranteed
|
80
|
+
!
|
81
|
+
uc-tx-queue 5
|
82
|
+
priority strict
|
83
|
+
no bandwidth percent
|
84
|
+
no shape rate
|
85
|
+
no bandwidth guaranteed
|
86
|
+
!
|
87
|
+
uc-tx-queue 6
|
88
|
+
priority strict
|
89
|
+
no bandwidth percent
|
90
|
+
no shape rate
|
91
|
+
no bandwidth guaranteed
|
92
|
+
!
|
93
|
+
uc-tx-queue 7
|
94
|
+
priority strict
|
95
|
+
no bandwidth percent
|
96
|
+
no shape rate
|
97
|
+
no bandwidth guaranteed
|
98
|
+
sflow enable
|
99
|
+
no spanning-tree portfast
|
100
|
+
spanning-tree portfast auto
|
101
|
+
no spanning-tree link-type
|
102
|
+
no spanning-tree bpduguard
|
103
|
+
no spanning-tree bpdufilter
|
104
|
+
no spanning-tree cost
|
105
|
+
spanning-tree port-priority 128
|
106
|
+
no spanning-tree guard
|
107
|
+
no spanning-tree bpduguard rate-limit
|
108
|
+
logging event spanning-tree use-global
|
109
|
+
switchport tap native vlan 1
|
110
|
+
no switchport tap identity
|
111
|
+
switchport tap allowed vlan 1-4094
|
112
|
+
switchport tool allowed vlan 1-4094
|
113
|
+
no switchport tool identity
|
114
|
+
no switchport tap truncation
|
115
|
+
no switchport tool truncation
|
116
|
+
no switchport tap default group
|
117
|
+
no switchport tool group
|
118
|
+
no switchport tool dot1q remove outer
|
119
|
+
!
|
120
|
+
interface Port-Channel100
|
121
|
+
no description
|
122
|
+
no shutdown
|
123
|
+
default load-interval
|
124
|
+
logging event link-status use-global
|
125
|
+
switchport access vlan 1
|
126
|
+
switchport trunk native vlan 1
|
127
|
+
switchport trunk allowed vlan 1-4094
|
128
|
+
switchport mode access
|
129
|
+
switchport mac address learning
|
130
|
+
no switchport private-vlan mapping
|
131
|
+
switchport
|
132
|
+
default encapsulation dot1q vlan
|
133
|
+
no l2-protocol encapsulation dot1q vlan 0
|
134
|
+
snmp trap link-status
|
135
|
+
no port-channel min-links
|
136
|
+
no port-channel lacp fallback
|
137
|
+
port-channel lacp fallback timeout 90
|
138
|
+
no l2 mtu
|
139
|
+
mlag 100
|
140
|
+
no switchport port-security
|
141
|
+
switchport port-security maximum 1
|
142
|
+
default qos trust
|
143
|
+
qos cos 5
|
144
|
+
qos dscp 2
|
145
|
+
no shape rate
|
146
|
+
mc-tx-queue 0
|
147
|
+
priority strict
|
148
|
+
no bandwidth percent
|
149
|
+
no shape rate
|
150
|
+
no bandwidth guaranteed
|
151
|
+
!
|
152
|
+
mc-tx-queue 1
|
153
|
+
priority strict
|
154
|
+
no bandwidth percent
|
155
|
+
no shape rate
|
156
|
+
no bandwidth guaranteed
|
157
|
+
!
|
158
|
+
mc-tx-queue 2
|
159
|
+
priority strict
|
160
|
+
no bandwidth percent
|
161
|
+
no shape rate
|
162
|
+
no bandwidth guaranteed
|
163
|
+
!
|
164
|
+
mc-tx-queue 3
|
165
|
+
priority strict
|
166
|
+
no bandwidth percent
|
167
|
+
no shape rate
|
168
|
+
no bandwidth guaranteed
|
169
|
+
!
|
170
|
+
uc-tx-queue 0
|
171
|
+
priority strict
|
172
|
+
no bandwidth percent
|
173
|
+
no shape rate
|
174
|
+
no bandwidth guaranteed
|
175
|
+
!
|
176
|
+
uc-tx-queue 1
|
177
|
+
priority strict
|
178
|
+
no bandwidth percent
|
179
|
+
no shape rate
|
180
|
+
no bandwidth guaranteed
|
181
|
+
!
|
182
|
+
uc-tx-queue 2
|
183
|
+
priority strict
|
184
|
+
no bandwidth percent
|
185
|
+
no shape rate
|
186
|
+
no bandwidth guaranteed
|
187
|
+
!
|
188
|
+
uc-tx-queue 3
|
189
|
+
priority strict
|
190
|
+
no bandwidth percent
|
191
|
+
no shape rate
|
192
|
+
no bandwidth guaranteed
|
193
|
+
!
|
194
|
+
uc-tx-queue 4
|
195
|
+
priority strict
|
196
|
+
no bandwidth percent
|
197
|
+
no shape rate
|
198
|
+
no bandwidth guaranteed
|
199
|
+
!
|
200
|
+
uc-tx-queue 5
|
201
|
+
priority strict
|
202
|
+
no bandwidth percent
|
203
|
+
no shape rate
|
204
|
+
no bandwidth guaranteed
|
205
|
+
!
|
206
|
+
uc-tx-queue 6
|
207
|
+
priority strict
|
208
|
+
no bandwidth percent
|
209
|
+
no shape rate
|
210
|
+
no bandwidth guaranteed
|
211
|
+
!
|
212
|
+
uc-tx-queue 7
|
213
|
+
priority strict
|
214
|
+
no bandwidth percent
|
215
|
+
no shape rate
|
216
|
+
no bandwidth guaranteed
|
217
|
+
sflow enable
|
218
|
+
no spanning-tree portfast
|
219
|
+
spanning-tree portfast auto
|
220
|
+
no spanning-tree link-type
|
221
|
+
no spanning-tree bpduguard
|
222
|
+
no spanning-tree bpdufilter
|
223
|
+
no spanning-tree cost
|
224
|
+
spanning-tree port-priority 128
|
225
|
+
no spanning-tree guard
|
226
|
+
no spanning-tree bpduguard rate-limit
|
227
|
+
logging event spanning-tree use-global
|
228
|
+
switchport tap native vlan 1
|
229
|
+
no switchport tap identity
|
230
|
+
switchport tap allowed vlan 1-4094
|
231
|
+
switchport tool allowed vlan 1-4094
|
232
|
+
no switchport tool identity
|
233
|
+
no switchport tap truncation
|
234
|
+
no switchport tool truncation
|
235
|
+
no switchport tap default group
|
236
|
+
no switchport tool group
|
237
|
+
no switchport tool dot1q remove outer
|
238
|
+
!
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'rbeapi/api/vlans'
|
4
|
+
|
5
|
+
include FixtureHelpers
|
6
|
+
|
7
|
+
describe Rbeapi::Api::Vlans do
|
8
|
+
subject { described_class.new(node) }
|
9
|
+
|
10
|
+
let(:node) { double('node') }
|
11
|
+
|
12
|
+
def vlans
|
13
|
+
vlans = Fixtures[:vlans]
|
14
|
+
return vlans if vlans
|
15
|
+
fixture('vlans', format: :text, dir: File.dirname(__FILE__))
|
16
|
+
end
|
17
|
+
|
18
|
+
before :each do
|
19
|
+
allow(subject.node).to receive(:running_config).and_return(vlans)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#get' do
|
23
|
+
let(:entity) do
|
24
|
+
{ name: 'default', state: 'active', trunk_groups: [] }
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'returns the vlan resource' do
|
28
|
+
expect(subject.get('1')).to eq(entity)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#getall' do
|
33
|
+
it 'returns the vlan collection' do
|
34
|
+
expect(subject.getall).to include('1')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns a hash collection' do
|
38
|
+
expect(subject.getall).to be_a_kind_of(Hash)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'has only one entry' do
|
42
|
+
expect(subject.getall.size).to eq(1)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#create' do
|
47
|
+
it 'creates a new vlan resource' do
|
48
|
+
expect(node).to receive(:config).with('vlan 1234')
|
49
|
+
expect(subject.create('1234')).to be_truthy
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#delete' do
|
54
|
+
it 'deletes a vlan resource' do
|
55
|
+
expect(node).to receive(:config).with('no vlan 1234')
|
56
|
+
expect(subject.delete('1234')).to be_truthy
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#default' do
|
61
|
+
it 'sets vlan 1 to default' do
|
62
|
+
expect(node).to receive(:config).with('default vlan 1234')
|
63
|
+
expect(subject.default('1234')).to be_truthy
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#set_name' do
|
68
|
+
it 'sets vlan 1 name to foo' do
|
69
|
+
expect(node).to receive(:config).with(['vlan 1', 'name foo'])
|
70
|
+
expect(subject.set_name('1', value: 'foo')).to be_truthy
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'negates vlan name' do
|
74
|
+
expect(node).to receive(:config).with(['vlan 1', 'no name'])
|
75
|
+
expect(subject.set_name('1')).to be_truthy
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'defaults the vlan name' do
|
79
|
+
expect(node).to receive(:config).with(['vlan 1', 'default name'])
|
80
|
+
expect(subject.set_name('1', default: true)).to be_truthy
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'default option takes precedence' do
|
84
|
+
expect(node).to receive(:config).with(['vlan 1', 'default name'])
|
85
|
+
expect(subject.set_name('1', value: 'foo', default: true)).to be_truthy
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#set_state' do
|
90
|
+
it 'sets vlan 1 state to suspend' do
|
91
|
+
expect(node).to receive(:config).with(['vlan 1', 'state suspend'])
|
92
|
+
expect(subject.set_state('1', value: 'suspend')).to be_truthy
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'sets vlan 1 state to active' do
|
96
|
+
expect(node).to receive(:config).with(['vlan 1', 'state active'])
|
97
|
+
expect(subject.set_state('1', value: 'active')).to be_truthy
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'negates the state' do
|
101
|
+
expect(node).to receive(:config).with(['vlan 1', 'no state'])
|
102
|
+
expect(subject.set_state('1')).to be_truthy
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'defaults the state' do
|
106
|
+
expect(node).to receive(:config).with(['vlan 1', 'default state'])
|
107
|
+
expect(subject.set_state('1', default: true)).to be_truthy
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'default option take precedence' do
|
111
|
+
expect(node).to receive(:config).with(['vlan 1', 'default state'])
|
112
|
+
expect(subject.set_state('1', value: 'active', default: true)).to \
|
113
|
+
be_truthy
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'raises ArgumentError for invalid state' do
|
117
|
+
expect { subject.set_state('1', value: 'foo') }.to \
|
118
|
+
raise_error ArgumentError
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '#add_trunk_group' do
|
123
|
+
it 'adds trunk group foo to vlan 1' do
|
124
|
+
expect(node).to receive(:config).with(['vlan 1', 'trunk group foo'])
|
125
|
+
expect(subject.add_trunk_group('1', 'foo')).to be_truthy
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe '#remove_trunk_group' do
|
130
|
+
it 'removes trunk group foo from vlan 1' do
|
131
|
+
expect(node).to receive(:config).with(['vlan 1', 'no trunk group foo'])
|
132
|
+
expect(subject.remove_trunk_group('1', 'foo')).to be_truthy
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|