rbeapi 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGELOG.md +20 -0
  3. data/Gemfile +1 -1
  4. data/README.md +11 -11
  5. data/Rakefile +19 -0
  6. data/guide/Makefile +177 -0
  7. data/guide/_static/arista_logo_11-trans-w.png +0 -0
  8. data/guide/_static/arista_logo_jpg-11.jpg +0 -0
  9. data/guide/_static/favicon.ico +0 -0
  10. data/guide/conf.py +279 -0
  11. data/guide/cookbook.rst +4 -0
  12. data/guide/developing.rst +4 -0
  13. data/guide/faq.rst +4 -0
  14. data/guide/index.rst +23 -0
  15. data/guide/installation.rst +4 -0
  16. data/guide/license.rst +5 -0
  17. data/guide/overview.rst +20 -0
  18. data/guide/quickstart.rst +4 -0
  19. data/guide/release-notes-0.5.0.rst +60 -0
  20. data/guide/release-notes.rst +6 -0
  21. data/guide/testing.rst +4 -0
  22. data/guide/troubleshooting.rst +1 -0
  23. data/lib/rbeapi/api/aaa.rb +54 -18
  24. data/lib/rbeapi/api/acl.rb +60 -2
  25. data/lib/rbeapi/api/bgp.rb +81 -0
  26. data/lib/rbeapi/api/dns.rb +48 -2
  27. data/lib/rbeapi/api/interfaces.rb +97 -32
  28. data/lib/rbeapi/api/ipinterfaces.rb +13 -2
  29. data/lib/rbeapi/api/logging.rb +11 -2
  30. data/lib/rbeapi/api/mlag.rb +20 -10
  31. data/lib/rbeapi/api/ntp.rb +4 -3
  32. data/lib/rbeapi/api/ospf.rb +102 -10
  33. data/lib/rbeapi/api/prefixlists.rb +47 -4
  34. data/lib/rbeapi/api/radius.rb +9 -9
  35. data/lib/rbeapi/api/routemaps.rb +7 -5
  36. data/lib/rbeapi/api/snmp.rb +13 -4
  37. data/lib/rbeapi/api/staticroutes.rb +1 -1
  38. data/lib/rbeapi/api/stp.rb +39 -14
  39. data/lib/rbeapi/api/switchports.rb +126 -2
  40. data/lib/rbeapi/api/system.rb +24 -3
  41. data/lib/rbeapi/api/tacacs.rb +9 -10
  42. data/lib/rbeapi/api/users.rb +12 -3
  43. data/lib/rbeapi/api/varp.rb +40 -8
  44. data/lib/rbeapi/api/vlans.rb +15 -5
  45. data/lib/rbeapi/client.rb +19 -11
  46. data/lib/rbeapi/eapilib.rb +8 -0
  47. data/lib/rbeapi/utils.rb +10 -0
  48. data/lib/rbeapi/version.rb +1 -1
  49. data/spec/fixtures/eapi.conf.yaml +6 -0
  50. data/spec/fixtures/empty.conf +0 -0
  51. data/spec/fixtures/env_path.conf +5 -0
  52. data/spec/fixtures/test.conf +39 -0
  53. data/spec/fixtures/wildcard.conf +43 -0
  54. data/spec/system/rbeapi/api/aaa_groups_spec.rb +122 -0
  55. data/spec/system/rbeapi/api/aaa_spec.rb +90 -0
  56. data/spec/system/{api_acl_spec.rb → rbeapi/api/acl_spec.rb} +0 -0
  57. data/spec/system/rbeapi/api/bgp_neighbors_spec.rb +354 -0
  58. data/spec/system/rbeapi/api/bgp_spec.rb +275 -0
  59. data/spec/system/rbeapi/api/dns_spec.rb +17 -1
  60. data/spec/system/rbeapi/api/interfaces_base_spec.rb +46 -5
  61. data/spec/system/rbeapi/api/interfaces_ethernet_spec.rb +14 -0
  62. data/spec/system/rbeapi/api/interfaces_portchannel_spec.rb +68 -0
  63. data/spec/system/rbeapi/api/interfaces_vxlan_spec.rb +0 -1
  64. data/spec/system/{api_ospf_interfaces_spec.rb → rbeapi/api/ospf_interfaces_spec.rb} +3 -2
  65. data/spec/system/{api_ospf_spec.rb → rbeapi/api/ospf_spec.rb} +11 -2
  66. data/spec/system/rbeapi/api/routemaps_spec.rb +3 -4
  67. data/spec/system/rbeapi/api/snmp_spec.rb +65 -0
  68. data/spec/system/rbeapi/api/staticroutes_spec.rb +177 -0
  69. data/spec/system/rbeapi/api/stp_instances_spec.rb +20 -0
  70. data/spec/system/rbeapi/api/stp_interfaces_spec.rb +7 -0
  71. data/spec/system/rbeapi/api/switchports_spec.rb +86 -16
  72. data/spec/system/rbeapi/api/users_spec.rb +324 -0
  73. data/spec/system/rbeapi/api/varp_interfaces_spec.rb +34 -0
  74. data/spec/system/rbeapi/api/vrrp_spec.rb +707 -0
  75. data/spec/system/rbeapi/client_spec.rb +367 -0
  76. data/spec/unit/rbeapi/api/aaa/aaa_groups_spec.rb +111 -0
  77. data/spec/unit/rbeapi/api/aaa/aaa_spec.rb +77 -0
  78. data/spec/unit/rbeapi/api/aaa/fixture_aaa.text +3 -0
  79. data/spec/unit/rbeapi/api/switchports/default_spec.rb +249 -0
  80. data/spec/unit/rbeapi/api/switchports/fixture_switchports.text +284 -0
  81. data/spec/unit/rbeapi/api/users/default_spec.rb +1 -1
  82. data/spec/unit/rbeapi/client_spec.rb +211 -0
  83. metadata +65 -10
@@ -91,4 +91,38 @@ describe Rbeapi::Api::VarpInterfaces do
91
91
  expect { subject.set_addresses('Vlan100') }.to raise_error ArgumentError
92
92
  end
93
93
  end
94
+
95
+ describe '#add_address' do
96
+ before do
97
+ node.config(['ip virtual-router mac-address aabb.ccdd.eeff',
98
+ 'no interface Vlan99', 'no interface Vlan100',
99
+ 'default interface Vlan100', 'interface Vlan100',
100
+ 'ip address 99.99.99.99/24', 'exit'])
101
+ end
102
+
103
+ it 'adds a new address to the list of addresses' do
104
+ expect(subject.get('Vlan100')[:addresses]).not_to include('99.99.99.98')
105
+ expect(subject.add_address('Vlan100', '99.99.99.98'))
106
+ .to be_truthy
107
+ expect(subject.get('Vlan100')[:addresses]).to include('99.99.99.98')
108
+ end
109
+ end
110
+
111
+ describe '#remove_address' do
112
+ before do
113
+ node.config(['ip virtual-router mac-address aabb.ccdd.eeff',
114
+ 'no interface Vlan99', 'no interface Vlan100',
115
+ 'default interface Vlan100', 'interface Vlan100',
116
+ 'ip address 99.99.99.99/24', 'exit'])
117
+ end
118
+
119
+ it 'removes the address from the list of addresses' do
120
+ expect(subject.add_address('Vlan100', '99.99.99.98'))
121
+ .to be_truthy
122
+ expect(subject.get('Vlan100')[:addresses]).to include('99.99.99.98')
123
+ expect(subject.remove_address('Vlan100', '99.99.99.98'))
124
+ .to be_truthy
125
+ expect(subject.get('Vlan100')[:addresses]).to eq([])
126
+ end
127
+ end
94
128
  end
@@ -0,0 +1,707 @@
1
+ require 'spec_helper'
2
+
3
+ require 'rbeapi/client'
4
+ require 'rbeapi/api/vrrp'
5
+
6
+ describe Rbeapi::Api::Vrrp do
7
+ subject { described_class.new(node) }
8
+
9
+ let(:node) do
10
+ Rbeapi::Client.config.read(fixture_file('dut.conf'))
11
+ Rbeapi::Client.connect_to('dut')
12
+ end
13
+
14
+ before :all do
15
+ @sec_ips = ['1.2.3.1', '1.2.3.2', '1.2.3.3', '1.2.3.4']
16
+ @tracks = [{ name: 'Ethernet3', action: 'decrement', amount: 33 },
17
+ { name: 'Ethernet2', action: 'decrement', amount: 22 },
18
+ { name: 'Ethernet2', action: 'shutdown' }]
19
+ end
20
+
21
+ describe '#get' do
22
+ before do
23
+ node.config(['no interface Vlan150',
24
+ 'no interface Vlan100',
25
+ 'interface Vlan100',
26
+ 'interface Vlan150',
27
+ 'ip address 40.10.5.8/24',
28
+ 'vrrp 30 priority 100',
29
+ 'vrrp 30 timers advertise 1',
30
+ 'vrrp 30 mac-address advertisement-interval 30',
31
+ 'no vrrp 30 preempt',
32
+ 'vrrp 30 preempt delay reload 0',
33
+ 'vrrp 30 delay reload 0',
34
+ 'vrrp 30 ip 40.10.5.31',
35
+ 'vrrp 30 description The description',
36
+ 'vrrp 30 shutdown',
37
+ 'vrrp 30 track Ethernet1 decrement 5',
38
+ 'vrrp 30 ip version 2',
39
+ 'vrrp 40 priority 200',
40
+ 'vrrp 40 timers advertise 1',
41
+ 'vrrp 40 mac-address advertisement-interval 30',
42
+ 'vrrp 40 preempt',
43
+ 'vrrp 40 preempt delay reload 0',
44
+ 'vrrp 40 delay reload 0',
45
+ 'vrrp 40 ip 40.10.5.32',
46
+ 'vrrp 40 track Ethernet3 decrement 33',
47
+ 'vrrp 40 track Ethernet2 decrement 22',
48
+ 'vrrp 40 track Ethernet2 shutdown',
49
+ 'vrrp 40 ip version 2'])
50
+ end
51
+
52
+ let(:entity) do
53
+ { 30 => { primary_ip: '40.10.5.31', delay_reload: 0,
54
+ description: 'The description', enable: false, ip_version: 2,
55
+ mac_addr_adv_interval: 30, preempt: false, preempt_delay_min: 0,
56
+ preempt_delay_reload: 0, priority: 100, secondary_ip: [],
57
+ timers_advertise: 1,
58
+ track: [
59
+ { name: 'Ethernet1', action: 'decrement', amount: 5 }
60
+ ]
61
+ },
62
+ 40 => { primary_ip: '40.10.5.32', delay_reload: 0, description: nil,
63
+ enable: true, ip_version: 2, mac_addr_adv_interval: 30,
64
+ preempt: true, preempt_delay_min: 0, preempt_delay_reload: 0,
65
+ priority: 200, secondary_ip: [], timers_advertise: 1,
66
+ track: @tracks
67
+ }
68
+ }
69
+ end
70
+
71
+ it 'returns the virtual router resource' do
72
+ expect(subject.get('Vlan150')).to eq(entity)
73
+ end
74
+ end
75
+
76
+ describe '#getall' do
77
+ it 'returns a hash collection' do
78
+ expect(subject.getall).to be_a_kind_of(Hash)
79
+ end
80
+
81
+ it 'returns the virtual router collection' do
82
+ expect(subject.getall).to include('Vlan100')
83
+ expect(subject.getall).to include('Vlan150')
84
+ end
85
+ end
86
+
87
+ describe '#create' do
88
+ before do
89
+ node.config(['no interface Vlan100'])
90
+ end
91
+
92
+ it 'creates a new virtual router with enable true' do
93
+ expect(subject.get('Vlan100')).to eq(nil)
94
+ expect(subject.create('Vlan100', 9, enable: true)).to be_truthy
95
+ expect(subject.get('Vlan100')).to eq({})
96
+ end
97
+
98
+ it 'creates a new virtual router with enable false' do
99
+ expect(subject.get('Vlan100')).to eq(nil)
100
+ expect(subject.create('Vlan100', 9, enable: false)).to be_truthy
101
+ expect(subject.get('Vlan100')).to include(9)
102
+ end
103
+
104
+ it 'creates a new virtual router with primary ip' do
105
+ expect(subject.get('Vlan100')).to eq(nil)
106
+ expect(subject.create('Vlan100', 9, primary_ip: '1.2.3.4')).to be_truthy
107
+ expect(subject.get('Vlan100')[9][:primary_ip]).to eq('1.2.3.4')
108
+ end
109
+
110
+ it 'creates a new virtual router with priority' do
111
+ expect(subject.get('Vlan100')).to eq(nil)
112
+ expect(subject.create('Vlan100', 9, primary_ip: '1.2.3.4',
113
+ priority: 100)).to be_truthy
114
+ expect(subject.get('Vlan100')[9][:priority]).to eq(100)
115
+ end
116
+
117
+ it 'creates a new virtual router with description' do
118
+ expect(subject.get('Vlan100')).to eq(nil)
119
+ expect(subject.create('Vlan100', 9, description: 'Desc')).to be_truthy
120
+ expect(subject.get('Vlan100')[9][:description]).to eq('Desc')
121
+ end
122
+
123
+ it 'creates a new virtual router with secondary ips' do
124
+ expect(subject.get('Vlan100')).to eq(nil)
125
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
126
+ .to be_truthy
127
+ expect(subject.create('Vlan100', 9,
128
+ secondary_ip: ['100.99.98.71',
129
+ '100.99.98.70'])).to be_truthy
130
+ expect(subject.get('Vlan100')[9][:secondary_ip]).to eq(['100.99.98.70',
131
+ '100.99.98.71'])
132
+ end
133
+
134
+ it 'creates a new virtual router with ip version 2' do
135
+ expect(subject.get('Vlan100')).to eq(nil)
136
+ expect(subject.create('Vlan100',
137
+ 9,
138
+ primary_ip: '100.99.98.100',
139
+ ip_version: 2)).to be_truthy
140
+ expect(subject.get('Vlan100')[9][:ip_version]).to eq(2)
141
+ end
142
+
143
+ it 'creates a new virtual router with timers advertise' do
144
+ expect(subject.get('Vlan100')).to eq(nil)
145
+ expect(subject.create('Vlan100', 9, timers_advertise: 77)).to be_truthy
146
+ expect(subject.get('Vlan100')[9][:timers_advertise]).to eq(77)
147
+ end
148
+
149
+ it 'creates a new virtual router with mac addr adv interval' do
150
+ expect(subject.get('Vlan100')).to eq(nil)
151
+ expect(subject.create('Vlan100', 9, mac_addr_adv_interval: 77))
152
+ .to be_truthy
153
+ expect(subject.get('Vlan100')[9][:mac_addr_adv_interval]).to eq(77)
154
+ end
155
+
156
+ it 'creates a new virtual router with preemt true' do
157
+ expect(subject.get('Vlan100')).to eq(nil)
158
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
159
+ .to be_truthy
160
+ expect(subject.create('Vlan100', 9, preempt: true)).to be_truthy
161
+ expect(subject.get('Vlan100')[9][:preempt]).to eq(true)
162
+ end
163
+
164
+ it 'creates a new virtual router with preemt false' do
165
+ expect(subject.get('Vlan100')).to eq(nil)
166
+ expect(subject.create('Vlan100', 9, preempt: false)).to be_truthy
167
+ expect(subject.get('Vlan100')[9][:preempt]).to eq(false)
168
+ end
169
+
170
+ it 'creates a new virtual router with preempt delay min' do
171
+ expect(subject.get('Vlan100')).to eq(nil)
172
+ expect(subject.create('Vlan100', 9, preempt_delay_min: 100))
173
+ .to be_truthy
174
+ expect(subject.get('Vlan100')[9][:preempt_delay_min]).to eq(100)
175
+ end
176
+
177
+ it 'creates a new virtual router with preempt delay reload' do
178
+ expect(subject.get('Vlan100')).to eq(nil)
179
+ expect(subject.create('Vlan100', 9, preempt_delay_reload: 100))
180
+ .to be_truthy
181
+ expect(subject.get('Vlan100')[9][:preempt_delay_reload]).to eq(100)
182
+ end
183
+
184
+ it 'creates a new virtual router with preempt delay reload' do
185
+ expect(subject.get('Vlan100')).to eq(nil)
186
+ expect(subject.create('Vlan100', 9, delay_reload: 100)).to be_truthy
187
+ expect(subject.get('Vlan100')[9][:delay_reload]).to eq(100)
188
+ end
189
+
190
+ it 'creates a new virtual router with track values' do
191
+ expect(subject.get('Vlan100')).to eq(nil)
192
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
193
+ .to be_truthy
194
+ expect(subject.create('Vlan100',
195
+ 9,
196
+ track: [{ name: 'Ethernet3',
197
+ action: 'decrement',
198
+ amount: 33 },
199
+ { name: 'Ethernet2',
200
+ action: 'decrement',
201
+ amount: 22 },
202
+ { name: 'Ethernet2',
203
+ action: 'shutdown' }])).to be_truthy
204
+ expect(subject.get('Vlan100')[9][:track]).to eq(@tracks)
205
+ end
206
+
207
+ it 'creates a new virtual router resource with enable and primary ip' do
208
+ expect(subject.get('Vlan100')).to eq(nil)
209
+ expect(subject.create('Vlan100', 9, enable: true, primary_ip: '1.2.3.4'))
210
+ .to be_truthy
211
+ expect(subject.get('Vlan100')[9][:primary_ip]).to eq('1.2.3.4')
212
+ end
213
+
214
+ it 'creates a new virtual router resource with enable and priority' do
215
+ expect(subject.get('Vlan100')).to eq(nil)
216
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
217
+ .to be_truthy
218
+ expect(subject.create('Vlan100', 9, enable: true, priority: 100))
219
+ .to be_truthy
220
+ expect(subject.get('Vlan100')[9][:priority]).to eq(100)
221
+ end
222
+
223
+ it 'creates a new virtual router resource with enable and description' do
224
+ expect(subject.get('Vlan100')).to eq(nil)
225
+ expect(subject.create('Vlan100', 9, enable: true, description: 'Desc'))
226
+ .to be_truthy
227
+ expect(subject.get('Vlan100')[9][:description]).to eq('Desc')
228
+ end
229
+
230
+ it 'creates a new virtual router resource with enable and secondary_ip' do
231
+ expect(subject.get('Vlan100')).to eq(nil)
232
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
233
+ .to be_truthy
234
+ expect(subject.create('Vlan100',
235
+ 9,
236
+ enable: true,
237
+ secondary_ip: ['1.2.3.1',
238
+ '1.2.3.2',
239
+ '1.2.3.3', '1.2.3.4'])).to be_truthy
240
+ expect(subject.get('Vlan100')[9][:secondary_ip]).to eq(@sec_ips)
241
+ end
242
+
243
+ it 'creates a new virtual router resource with all options set' do
244
+ expect(subject.get('Vlan100')).to eq(nil)
245
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
246
+ .to be_truthy
247
+ expect(subject.create('Vlan100',
248
+ 9,
249
+ enable: true,
250
+ priority: 100,
251
+ description: 'Desc',
252
+ secondary_ip: ['100.99.98.71',
253
+ '100.99.98.70'],
254
+ ip_version: 2,
255
+ timers_advertise: 77,
256
+ mac_addr_adv_interval: 77,
257
+ preempt: true,
258
+ preempt_delay_min: 100,
259
+ preempt_delay_reload: 100,
260
+ delay_reload: 100,
261
+ track: [{ name: 'Ethernet3',
262
+ action: 'decrement',
263
+ amount: 33 },
264
+ { name: 'Ethernet2',
265
+ action: 'decrement',
266
+ amount: 22 },
267
+ { name: 'Ethernet2',
268
+ action: 'shutdown' }])).to be_truthy
269
+ end
270
+
271
+ it 'raises ArgumentError for create without options' do
272
+ expect { subject.create('Vlan100', 9) }.to \
273
+ raise_error ArgumentError
274
+ end
275
+ end
276
+
277
+ describe '#delete' do
278
+ before do
279
+ node.config(['no interface Vlan100', 'interface Vlan100',
280
+ 'vrrp 9 priority 100'])
281
+ end
282
+
283
+ it 'deletes a virtual router resource' do
284
+ expect(subject.delete('Vlan100', 9)).to be_truthy
285
+ expect(subject.get('Vlan100')).to eq({})
286
+ end
287
+ end
288
+
289
+ describe '#default' do
290
+ before do
291
+ node.config(['no interface Vlan100', 'interface Vlan100',
292
+ 'vrrp 9 priority 100'])
293
+ end
294
+
295
+ it 'sets virtual router resource to default' do
296
+ expect(subject.default('Vlan100', 9)).to be_truthy
297
+ expect(subject.get('Vlan100')).to eq({})
298
+ end
299
+ end
300
+
301
+ describe '#set_shutdown' do
302
+ before do
303
+ node.config(['no interface Vlan100', 'interface Vlan100',
304
+ 'vrrp 9 priority 100'])
305
+ end
306
+
307
+ it 'enable Vlan100 vrid 9' do
308
+ expect(subject.set_shutdown('Vlan100', 9)).to be_truthy
309
+ expect(subject.get('Vlan100')).to eq({})
310
+ end
311
+
312
+ it 'disable Vlan100 vrid 9' do
313
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
314
+ .to be_truthy
315
+ expect(subject.set_shutdown('Vlan100', 9, enable: false)).to be_truthy
316
+ expect(subject.get('Vlan100')[9][:enable]).to eq(false)
317
+ end
318
+
319
+ it 'defaults Vlan100 vrid 9' do
320
+ expect(subject.set_shutdown('Vlan100', 9, default: true)).to be_truthy
321
+ expect(subject.get('Vlan100')).to eq({})
322
+ end
323
+
324
+ it 'default option takes precedence' do
325
+ expect(subject.set_shutdown('Vlan100', 9, enable: false,
326
+ default: true)).to be_truthy
327
+ expect(subject.get('Vlan100')).to eq({})
328
+ end
329
+ end
330
+
331
+ describe '#set_primary_ip' do
332
+ before do
333
+ node.config(['no interface Vlan100', 'interface Vlan100',
334
+ 'vrrp 9 priority 100'])
335
+ end
336
+
337
+ it 'set primary IP address' do
338
+ expect(subject.set_primary_ip('Vlan100', 9,
339
+ value: '1.2.3.4')).to be_truthy
340
+ expect(subject.get('Vlan100')[9][:primary_ip]).to eq('1.2.3.4')
341
+ end
342
+
343
+ it 'disable primary IP address' do
344
+ expect(subject.set_primary_ip('Vlan100', 9, value: '1.2.3.4',
345
+ enable: false)).to be_truthy
346
+ expect(subject.get('Vlan100')).to eq({})
347
+ end
348
+
349
+ it 'defaults primary IP address' do
350
+ expect(subject.set_primary_ip('Vlan100', 9, value: '1.2.3.4',
351
+ default: true)).to be_truthy
352
+ expect(subject.get('Vlan100')).to eq({})
353
+ end
354
+
355
+ it 'default option takes precedence' do
356
+ expect(subject.set_primary_ip('Vlan100', 9, enable: false,
357
+ value: '1.2.3.4',
358
+ default: true)).to be_truthy
359
+ expect(subject.get('Vlan100')).to eq({})
360
+ end
361
+ end
362
+
363
+ describe '#set_priority' do
364
+ before do
365
+ node.config(['no interface Vlan100', 'interface Vlan100',
366
+ 'vrrp 9 priority 100'])
367
+ end
368
+
369
+ it 'set priority' do
370
+ expect(subject.set_priority('Vlan100', 9, value: 13)).to be_truthy
371
+ expect(subject.get('Vlan100')[9][:priority]).to eq(13)
372
+ end
373
+
374
+ it 'disable priority' do
375
+ expect(subject.set_priority('Vlan100', 9, enable: false)).to be_truthy
376
+ expect(subject.get('Vlan100')).to eq({})
377
+ end
378
+
379
+ it 'defaults priority' do
380
+ expect(subject.set_priority('Vlan100', 9, default: true)).to be_truthy
381
+ expect(subject.get('Vlan100')).to eq({})
382
+ end
383
+
384
+ it 'default option takes precedence' do
385
+ expect(subject.set_priority('Vlan100', 9, enable: false,
386
+ default: true)).to be_truthy
387
+ expect(subject.get('Vlan100')).to eq({})
388
+ end
389
+ end
390
+
391
+ describe '#set_description' do
392
+ before do
393
+ node.config(['no interface Vlan100', 'interface Vlan100',
394
+ 'vrrp 9 priority 100'])
395
+ end
396
+
397
+ it 'set description' do
398
+ expect(subject.set_description('Vlan100', 9,
399
+ value: 'Howdy')).to be_truthy
400
+ expect(subject.get('Vlan100')[9][:description]).to eq('Howdy')
401
+ end
402
+
403
+ it 'disable description' do
404
+ expect(subject.set_description('Vlan100', 9, enable: false)).to be_truthy
405
+ expect(subject.get('Vlan100')).to eq({})
406
+ end
407
+
408
+ it 'defaults description' do
409
+ expect(subject.set_description('Vlan100', 9, default: true)).to be_truthy
410
+ expect(subject.get('Vlan100')).to eq({})
411
+ end
412
+
413
+ it 'default option takes precedence' do
414
+ expect(subject.set_description('Vlan100', 9, enable: false,
415
+ default: true)).to be_truthy
416
+ expect(subject.get('Vlan100')).to eq({})
417
+ end
418
+ end
419
+
420
+ describe '#set_secondary_ip' do
421
+ before do
422
+ node.config(['no interface Vlan100', 'interface Vlan100',
423
+ 'vrrp 9 priority 100'])
424
+ end
425
+
426
+ it 'set secondary IP addresses' do
427
+ # Set current IP addresses
428
+ expect(subject.set_secondary_ip('Vlan100', 9, @sec_ips)).to be_truthy
429
+ expect(subject.get('Vlan100')[9][:secondary_ip]).to eq(@sec_ips)
430
+ end
431
+
432
+ it 'remove all secondary IP addresses' do
433
+ # Set current IP addresses
434
+ expect(subject.set_secondary_ip('Vlan100', 9, @sec_ips)).to be_truthy
435
+ # Delete all IP addresses
436
+ expect(subject.set_secondary_ip('Vlan100', 9, [])).to be_truthy
437
+ expect(subject.get('Vlan100')).to eq({})
438
+ end
439
+ end
440
+
441
+ describe '#set_ip_version' do
442
+ before do
443
+ node.config(['no interface Vlan100', 'interface Vlan100',
444
+ 'vrrp 9 priority 100'])
445
+ end
446
+
447
+ it 'set VRRP version' do
448
+ expect(subject.set_ip_version('Vlan100', 9, value: 3)).to be_truthy
449
+ expect(subject.get('Vlan100')[9][:ip_version]).to eq(3)
450
+ end
451
+
452
+ it 'disable VRRP version' do
453
+ expect(subject.set_ip_version('Vlan100', 9, enable: false)).to be_truthy
454
+ expect(subject.get('Vlan100')).to eq({})
455
+ end
456
+
457
+ it 'defaults VRRP version' do
458
+ expect(subject.set_ip_version('Vlan100', 9, default: true)).to be_truthy
459
+ expect(subject.get('Vlan100')).to eq({})
460
+ end
461
+
462
+ it 'default option takes precedence' do
463
+ expect(subject.set_ip_version('Vlan100', 9, enable: false,
464
+ default: true)).to be_truthy
465
+ expect(subject.get('Vlan100')).to eq({})
466
+ end
467
+ end
468
+
469
+ describe '#set_timers_advertise' do
470
+ before do
471
+ node.config(['no interface Vlan100', 'interface Vlan100',
472
+ 'vrrp 9 priority 100'])
473
+ end
474
+
475
+ it 'set advertise timer' do
476
+ expect(subject.set_timers_advertise('Vlan100', 9, value: 7)).to be_truthy
477
+ expect(subject.get('Vlan100')[9][:timers_advertise]).to eq(7)
478
+ end
479
+
480
+ it 'disable advertise timer' do
481
+ expect(subject.set_timers_advertise('Vlan100', 9,
482
+ enable: false)).to be_truthy
483
+ expect(subject.get('Vlan100')).to eq({})
484
+ end
485
+
486
+ it 'defaults advertise timer' do
487
+ expect(subject.set_timers_advertise('Vlan100', 9,
488
+ default: true)).to be_truthy
489
+ expect(subject.get('Vlan100')).to eq({})
490
+ end
491
+
492
+ it 'default option takes precedence' do
493
+ expect(subject.set_timers_advertise('Vlan100', 9,
494
+ enable: false,
495
+ default: true)).to be_truthy
496
+ expect(subject.get('Vlan100')).to eq({})
497
+ end
498
+ end
499
+
500
+ describe '#set_mac_addr_adv_interval' do
501
+ before do
502
+ node.config(['no interface Vlan100', 'interface Vlan100',
503
+ 'vrrp 9 priority 100'])
504
+ end
505
+
506
+ it 'set mac address advertisement interval' do
507
+ expect(subject.set_mac_addr_adv_interval('Vlan100', 9,
508
+ value: 12)).to be_truthy
509
+ expect(subject.get('Vlan100')[9][:mac_addr_adv_interval]).to eq(12)
510
+ end
511
+
512
+ it 'disable mac address advertisement interval' do
513
+ expect(subject.set_mac_addr_adv_interval('Vlan100', 9,
514
+ enable: false)).to be_truthy
515
+ expect(subject.get('Vlan100')).to eq({})
516
+ end
517
+
518
+ it 'defaults mac address advertisement interval' do
519
+ expect(subject.set_mac_addr_adv_interval('Vlan100', 9,
520
+ default: true)).to be_truthy
521
+ expect(subject.get('Vlan100')).to eq({})
522
+ end
523
+
524
+ it 'default option takes precedence' do
525
+ expect(subject.set_mac_addr_adv_interval('Vlan100', 9,
526
+ enable: false,
527
+ default: true)).to be_truthy
528
+ expect(subject.get('Vlan100')).to eq({})
529
+ end
530
+ end
531
+
532
+ describe '#set_preempt' do
533
+ before do
534
+ node.config(['no interface Vlan100', 'interface Vlan100',
535
+ 'vrrp 9 priority 100'])
536
+ end
537
+
538
+ it 'enable preempt mode' do
539
+ expect(subject.create('Vlan100', 9, primary_ip: '100.99.98.100'))
540
+ .to be_truthy
541
+ expect(subject.set_preempt('Vlan100', 9)).to be_truthy
542
+ expect(subject.get('Vlan100')[9][:preempt]).to eq(true)
543
+ end
544
+
545
+ it 'disable preempt mode' do
546
+ expect(subject.set_preempt('Vlan100', 9, enable: false)).to be_truthy
547
+ expect(subject.get('Vlan100')[9][:preempt]).to eq(false)
548
+ end
549
+
550
+ it 'defaults preempt mode' do
551
+ expect(subject.set_preempt('Vlan100', 9, default: true)).to be_truthy
552
+ expect(subject.get('Vlan100')[9][:preempt]).to eq(false)
553
+ end
554
+
555
+ it 'default option takes precedence' do
556
+ expect(subject.set_preempt('Vlan100', 9, enable: false,
557
+ default: true)).to be_truthy
558
+ expect(subject.get('Vlan100')[9][:preempt]).to eq(false)
559
+ end
560
+ end
561
+
562
+ describe '#set_preempt_delay_min' do
563
+ before do
564
+ node.config(['no interface Vlan100', 'interface Vlan100',
565
+ 'vrrp 9 priority 100'])
566
+ end
567
+
568
+ it 'enable preempt mode' do
569
+ expect(subject.set_preempt_delay_min('Vlan100', 9, value: 8)).to be_truthy
570
+ expect(subject.get('Vlan100')[9][:preempt_delay_min]).to eq(8)
571
+ end
572
+
573
+ it 'disable preempt mode' do
574
+ expect(subject.set_preempt_delay_min('Vlan100', 9,
575
+ enable: false)).to be_truthy
576
+ expect(subject.get('Vlan100')).to eq({})
577
+ end
578
+
579
+ it 'defaults preempt mode' do
580
+ expect(subject.set_preempt_delay_min('Vlan100', 9,
581
+ default: true)).to be_truthy
582
+ expect(subject.get('Vlan100')).to eq({})
583
+ end
584
+
585
+ it 'default option takes precedence' do
586
+ expect(subject.set_preempt_delay_min('Vlan100', 9,
587
+ enable: false,
588
+ default: true)).to be_truthy
589
+ expect(subject.get('Vlan100')).to eq({})
590
+ end
591
+ end
592
+
593
+ describe '#set_preempt_delay_reload' do
594
+ before do
595
+ node.config(['no interface Vlan100', 'interface Vlan100',
596
+ 'vrrp 9 priority 100'])
597
+ end
598
+
599
+ it 'enable preempt delay reload' do
600
+ expect(subject.set_preempt_delay_reload('Vlan100', 9,
601
+ value: 8)).to be_truthy
602
+ expect(subject.get('Vlan100')[9][:preempt_delay_reload]).to eq(8)
603
+ end
604
+
605
+ it 'disable preempt delay reload' do
606
+ expect(subject.set_preempt_delay_reload('Vlan100', 9,
607
+ enable: false)).to be_truthy
608
+ expect(subject.get('Vlan100')).to eq({})
609
+ end
610
+
611
+ it 'defaults preempt delay reload' do
612
+ expect(subject.set_preempt_delay_reload('Vlan100', 9,
613
+ default: true)).to be_truthy
614
+ expect(subject.get('Vlan100')).to eq({})
615
+ end
616
+
617
+ it 'default option takes precedence' do
618
+ expect(subject.set_preempt_delay_reload('Vlan100', 9,
619
+ enable: false,
620
+ default: true)).to be_truthy
621
+ expect(subject.get('Vlan100')).to eq({})
622
+ end
623
+ end
624
+
625
+ describe '#set_delay_reload' do
626
+ before do
627
+ node.config(['no interface Vlan100', 'interface Vlan100',
628
+ 'vrrp 9 priority 100'])
629
+ end
630
+
631
+ it 'enable delay reload' do
632
+ expect(subject.set_delay_reload('Vlan100', 9, value: 8)).to be_truthy
633
+ expect(subject.get('Vlan100')[9][:delay_reload]).to eq(8)
634
+ end
635
+
636
+ it 'disable delay reload' do
637
+ expect(subject.set_delay_reload('Vlan100', 9, enable: false)).to be_truthy
638
+ expect(subject.get('Vlan100')).to eq({})
639
+ end
640
+
641
+ it 'defaults delay reload' do
642
+ expect(subject.set_delay_reload('Vlan100', 9, default: true)).to be_truthy
643
+ expect(subject.get('Vlan100')).to eq({})
644
+ end
645
+
646
+ it 'default option takes precedence' do
647
+ expect(subject.set_delay_reload('Vlan100', 9,
648
+ enable: false,
649
+ default: true)).to be_truthy
650
+ expect(subject.get('Vlan100')).to eq({})
651
+ end
652
+ end
653
+
654
+ describe '#set_tracks' do
655
+ before do
656
+ node.config(['no interface Vlan100', 'interface Vlan100',
657
+ 'vrrp 9 priority 100'])
658
+ end
659
+
660
+ before :all do
661
+ @bad_key = [{ nombre: 'Ethernet3', action: 'decrement', amount: 33 }]
662
+ @miss_key = [{ action: 'decrement', amount: 33 }]
663
+ @bad_action = [{ name: 'Ethernet3', action: 'dec', amount: 33 }]
664
+ @sem_key = [{ name: 'Ethernet3', action: 'shutdown', amount: 33 }]
665
+ @bad_amount = [{ name: 'Ethernet3', action: 'decrement', amount: -1 }]
666
+ end
667
+
668
+ it 'set tracks' do
669
+ # Set current IP addresses
670
+ expect(subject.set_tracks('Vlan100', 9, @tracks)).to be_truthy
671
+ expect(subject.get('Vlan100')[9][:track]).to eq(@tracks)
672
+ end
673
+
674
+ it 'remove all tracks' do
675
+ # Set current IP addresses
676
+ expect(subject.set_tracks('Vlan100', 9, @tracks)).to be_truthy
677
+ # Delete all IP addresses
678
+ expect(subject.set_tracks('Vlan100', 9, [])).to be_truthy
679
+ expect(subject.get('Vlan100')).to eq({})
680
+ end
681
+
682
+ it 'raises ArgumentError for track hash with a bad key' do
683
+ expect { subject.set_tracks('Vlan100', 9, @bad_key) }.to \
684
+ raise_error ArgumentError
685
+ end
686
+
687
+ it 'raises ArgumentError for track hash with missing required key' do
688
+ expect { subject.set_tracks('Vlan100', 9, @miss_key) }.to \
689
+ raise_error ArgumentError
690
+ end
691
+
692
+ it 'raises ArgumentError for track hash with invalid action' do
693
+ expect { subject.set_tracks('Vlan100', 9, @bad_action) }.to \
694
+ raise_error ArgumentError
695
+ end
696
+
697
+ it 'raises ArgumentError for track hash with shutdown and amount' do
698
+ expect { subject.set_tracks('Vlan100', 9, @sem_key) }.to \
699
+ raise_error ArgumentError
700
+ end
701
+
702
+ it 'raises ArgumentError for track hash with negative amount' do
703
+ expect { subject.set_tracks('Vlan100', 9, @bad_amount) }.to \
704
+ raise_error ArgumentError
705
+ end
706
+ end
707
+ end