gosnmp

Форк
0
/
generic_e2e_test.go 
862 строки · 25.4 Кб
1
// Copyright 2012 The GoSNMP Authors. All rights reserved.  Use of this
2
// source code is governed by a BSD-style license that can be found in the
3
// LICENSE file.
4

5
// This set of end-to-end integration tests execute gosnmp against a real
6
// SNMP MIB-2 host. Potential test systems could include a router, NAS box, printer,
7
// or a linux box running snmpd, snmpsimd.py, etc.
8
//
9
// Ensure "gosnmp-test-host" is defined in your hosts file, and points to your
10
// generic test system.
11

12
//go:build all || end2end
13
// +build all end2end
14

15
package gosnmp
16

17
import (
18
	"fmt"
19
	"os"
20
	"strconv"
21
	"strings"
22
	"testing"
23
	"time"
24
)
25

26
func getTarget(t *testing.T) (string, uint16) {
27
	var envTarget string
28
	var envPort string
29

30
	// set this flag to true in v3_testing_credentials.go if you want to use the
31
	// public SNMP demo service for tests
32
	if isUsingSnmpLabs() {
33
		envTarget = "demo.snmplabs.com"
34
		envPort = "161"
35
	} else {
36
		envTarget = os.Getenv("GOSNMP_TARGET")
37
		envPort = os.Getenv("GOSNMP_PORT")
38
	}
39

40
	if len(envTarget) <= 0 {
41
		t.Skip("environment variable not set: GOSNMP_TARGET")
42
	}
43

44
	if len(envPort) <= 0 {
45
		t.Skip("environment variable not set: GOSNMP_PORT")
46
	}
47
	port, _ := strconv.ParseUint(envPort, 10, 16)
48

49
	if port > 65535 {
50
		t.Skipf("invalid port number %d", port)
51
	}
52

53
	return envTarget, uint16(port)
54
}
55

56
func setupConnection(t *testing.T) {
57
	target, port := getTarget(t)
58

59
	Default.Target = target
60
	Default.Port = port
61

62
	err := Default.Connect()
63
	if err != nil {
64
		if len(target) > 0 {
65
			t.Fatalf("Connection failed. Is snmpd reachable on %s:%d?\n(err: %v)",
66
				target, port, err)
67
		}
68
	}
69
}
70

71
func setupConnectionInstance(gs *GoSNMP, t *testing.T) {
72
	target, port := getTarget(t)
73

74
	gs.Target = target
75
	gs.Port = port
76

77
	err := gs.Connect()
78
	if err != nil {
79
		if len(target) > 0 {
80
			t.Fatalf("Connection failed. Is snmpd reachable on %s:%d?\n(err: %v)",
81
				target, port, err)
82
		}
83
	}
84
}
85

86
func setupConnectionIPv4(t *testing.T) {
87
	target, port := getTarget(t)
88

89
	Default.Target = target
90
	Default.Port = port
91

92
	err := Default.ConnectIPv4()
93
	if err != nil {
94
		if len(target) > 0 {
95
			t.Fatalf("Connection failed. Is snmpd reachable on %s:%d?\n(err: %v)",
96
				target, port, err)
97
		}
98
	}
99
}
100

101
/*
102
TODO work out ipv6 networking, etc
103

104
func setupConnectionIPv6(t *testing.T) {
105
	envTarget := os.Getenv("GOSNMP_TARGET_IPV6")
106
	envPort := os.Getenv("GOSNMP_PORT_IPV6")
107

108
	if len(envTarget) <= 0 {
109
		t.Error("environment variable not set: GOSNMP_TARGET_IPV6")
110
	}
111
	Default.Target = envTarget
112

113
	if len(envPort) <= 0 {
114
		t.Error("environment variable not set: GOSNMP_PORT_IPV6")
115
	}
116
	port, _ := strconv.ParseUint(envPort, 10, 16)
117
	Default.Port = uint16(port)
118

119
	err := Default.ConnectIPv6()
120
	if err != nil {
121
		if len(envTarget) > 0 {
122
			t.Fatalf("Connection failed. Is snmpd reachable on %s:%s?\n(err: %v)",
123
				envTarget, envPort, err)
124
		}
125
	}
126
}
127
*/
128

129
func TestGenericBasicGet(t *testing.T) {
130
	setupConnection(t)
131
	defer Default.Conn.Close()
132

133
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
134
	if err != nil {
135
		t.Fatalf("Get() failed with error => %v", err)
136
	}
137
	if len(result.Variables) != 1 {
138
		t.Fatalf("Expected result of size 1")
139
	}
140
	if result.Variables[0].Type != OctetString {
141
		t.Fatalf("Expected sysDescr to be OctetString")
142
	}
143
	sysDescr := result.Variables[0].Value.([]byte)
144
	if len(sysDescr) == 0 {
145
		t.Fatalf("Got a zero length sysDescr")
146
	}
147
}
148

149
func TestGenericBasicGetIPv4Only(t *testing.T) {
150
	setupConnectionIPv4(t)
151
	defer Default.Conn.Close()
152

153
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
154
	if err != nil {
155
		t.Fatalf("Get() failed with error => %v", err)
156
	}
157
	if len(result.Variables) != 1 {
158
		t.Fatalf("Expected result of size 1")
159
	}
160
	if result.Variables[0].Type != OctetString {
161
		t.Fatalf("Expected sysDescr to be OctetString")
162
	}
163
	sysDescr := result.Variables[0].Value.([]byte)
164
	if len(sysDescr) == 0 {
165
		t.Fatalf("Got a zero length sysDescr")
166
	}
167
}
168

169
/*
170
func TestGenericBasicGetIPv6Only(t *testing.T) {
171
	setupConnectionIPv6(t)
172
	defer Default.Conn.Close()
173

174
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
175
	if err != nil {
176
		t.Fatalf("Get() failed with error => %v", err)
177
	}
178
	if len(result.Variables) != 1 {
179
		t.Fatalf("Expected result of size 1")
180
	}
181
	if result.Variables[0].Type != OctetString {
182
		t.Fatalf("Expected sysDescr to be OctetString")
183
	}
184
	sysDescr := result.Variables[0].Value.([]byte)
185
	if len(sysDescr) == 0 {
186
		t.Fatalf("Got a zero length sysDescr")
187
	}
188
}
189
*/
190

191
func TestGenericMultiGet(t *testing.T) {
192
	setupConnection(t)
193
	defer Default.Conn.Close()
194

195
	oids := []string{
196
		".1.3.6.1.2.1.1.1.0", // SNMP MIB-2 sysDescr
197
		".1.3.6.1.2.1.1.5.0", // SNMP MIB-2 sysName
198
	}
199
	result, err := Default.Get(oids)
200
	if err != nil {
201
		t.Fatalf("Get() failed with error => %v", err)
202
	}
203
	if len(result.Variables) != 2 {
204
		t.Fatalf("Expected result of size 2")
205
	}
206
	for _, v := range result.Variables {
207
		if v.Type != OctetString {
208
			t.Fatalf("Expected OctetString")
209
		}
210
	}
211
}
212

213
func TestGenericGetNext(t *testing.T) {
214
	setupConnection(t)
215
	defer Default.Conn.Close()
216

217
	sysDescrOid := ".1.3.6.1.2.1.1.1.0" // SNMP MIB-2 sysDescr
218
	result, err := Default.GetNext([]string{sysDescrOid})
219
	if err != nil {
220
		t.Fatalf("GetNext() failed with error => %v", err)
221
	}
222
	if len(result.Variables) != 1 {
223
		t.Fatalf("Expected result of size 1")
224
	}
225
	if result.Variables[0].Name == sysDescrOid {
226
		t.Fatalf("Expected next OID")
227
	}
228
}
229

230
func TestGenericWalk(t *testing.T) {
231
	setupConnection(t)
232
	defer Default.Conn.Close()
233

234
	result, err := Default.WalkAll("")
235
	if err != nil {
236
		t.Fatalf("WalkAll() Failed with error => %v", err)
237
	}
238
	if len(result) <= 1 {
239
		t.Fatalf("Expected multiple values, got %d", len(result))
240
	}
241
}
242

243
func TestGenericBulkWalk(t *testing.T) {
244
	setupConnection(t)
245
	defer Default.Conn.Close()
246

247
	result, err := Default.BulkWalkAll("")
248
	if err != nil {
249
		t.Fatalf("BulkWalkAll() Failed with error => %v", err)
250
	}
251
	if len(result) <= 1 {
252
		t.Fatalf("Expected multiple values, got %d", len(result))
253
	}
254
}
255

256
func TestV1BulkWalkError(t *testing.T) {
257
	g := &GoSNMP{
258
		Version: Version1,
259
	}
260
	setupConnectionInstance(g, t)
261

262
	g.Conn.Close()
263

264
	_, err := g.BulkWalkAll("")
265
	if err == nil {
266
		t.Fatalf("BulkWalkAll() should fail in SNMPv1 but returned nil")
267
	}
268
}
269

270
// Standard exception/error tests
271

272
func TestMaxOids(t *testing.T) {
273
	setupConnection(t)
274
	defer Default.Conn.Close()
275

276
	Default.MaxOids = 1
277

278
	var err error
279
	oids := []string{".1.3.6.1.2.1.1.7.0",
280
		".1.3.6.1.2.1.2.2.1.10.1"} // 2 arbitrary Oids
281
	errString := "oid count (2) is greater than MaxOids (1)"
282

283
	_, err = Default.Get(oids)
284
	if err == nil {
285
		t.Fatalf("Expected too many oids failure. Got nil")
286
	} else if err.Error() != errString {
287
		t.Fatalf("Expected too many oids failure. Got => %v", err)
288
	}
289

290
	_, err = Default.GetNext(oids)
291
	if err == nil {
292
		t.Fatalf("Expected too many oids failure. Got nil")
293
	} else if err.Error() != errString {
294
		t.Fatalf("Expected too many oids failure. Got => %v", err)
295
	}
296

297
	_, err = Default.GetBulk(oids, 0, 0)
298
	if err == nil {
299
		t.Fatalf("Expected too many oids failure. Got nil")
300
	} else if err.Error() != errString {
301
		t.Fatalf("Expected too many oids failure. Got => %v", err)
302
	}
303
}
304

305
func TestGenericFailureUnknownHost(t *testing.T) {
306
	unknownHost := fmt.Sprintf("gosnmp-test-unknown-host-%d", time.Now().UTC().UnixNano())
307
	Default.Target = unknownHost
308
	err := Default.Connect()
309
	if err == nil {
310
		t.Fatalf("Expected connection failure due to unknown host")
311
	}
312
	if !strings.Contains(strings.ToLower(err.Error()), "no such host") {
313
		t.Fatalf("Expected connection error of type 'no such host'! Got => %v", err)
314
	}
315
	_, err = Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
316
	if err == nil {
317
		t.Fatalf("Expected get to fail due to missing connection")
318
	}
319
}
320

321
func TestGenericFailureConnectionTimeout(t *testing.T) {
322
	t.Skip("local testing - skipping this slow one") // TODO test tag, or something
323
	envTarget := os.Getenv("GOSNMP_TARGET")
324
	if len(envTarget) <= 0 {
325
		t.Skip("local testing - skipping this slow one")
326
	}
327

328
	Default.Target = "198.51.100.1" // Black hole
329
	err := Default.Connect()
330
	if err != nil {
331
		t.Fatalf("Did not expect connection error with IP address")
332
	}
333
	_, err = Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
334
	if err == nil {
335
		t.Fatalf("Expected Get() to fail due to invalid IP")
336
	}
337
	if !strings.Contains(err.Error(), "timeout") {
338
		t.Fatalf("Expected timeout error. Got => %v", err)
339
	}
340
}
341

342
func TestGenericFailureConnectionRefused(t *testing.T) {
343
	Default.Target = "127.0.0.1"
344
	Default.Port = 1 // Don't expect SNMP to be running here!
345
	err := Default.Connect()
346
	if err != nil {
347
		t.Fatalf("Did not expect connection error with IP address")
348
	}
349
	_, err = Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
350
	if err == nil {
351
		t.Fatalf("Expected Get() to fail due to invalid port")
352
	}
353
	if !(strings.Contains(err.Error(), "connection refused") || strings.Contains(err.Error(), "forcibly closed")) {
354
		t.Fatalf("Expected connection refused error. Got => %v", err)
355
	}
356
}
357

358
func TestSnmpV3NoAuthNoPrivBasicGet(t *testing.T) {
359
	Default.Version = Version3
360
	Default.MsgFlags = NoAuthNoPriv
361
	Default.SecurityModel = UserSecurityModel
362
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, NoAuth, NoPriv)}
363
	setupConnection(t)
364
	defer Default.Conn.Close()
365

366
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
367
	if err != nil {
368
		t.Fatalf("Get() failed with error => %v", err)
369
	}
370
	if len(result.Variables) != 1 {
371
		t.Fatalf("Expected result of size 1")
372
	}
373
	sysDescr := result.Variables[0].Value.([]byte)
374
	if len(sysDescr) == 0 {
375
		t.Fatalf("Got a zero length sysDescr")
376
	}
377
}
378

379
func TestSnmpV3AuthMD5NoPrivGet(t *testing.T) {
380
	if !isUsingSnmpLabs() {
381
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
382
	}
383
	Default.Version = Version3
384
	Default.MsgFlags = AuthNoPriv
385
	Default.SecurityModel = UserSecurityModel
386
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, MD5, NoPriv), AuthenticationProtocol: MD5, AuthenticationPassphrase: getAuthKey(t, MD5, NoPriv)}
387
	setupConnection(t)
388
	defer Default.Conn.Close()
389

390
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
391
	if err != nil {
392
		t.Fatalf("Get() failed with error => %v", err)
393
	}
394
	if len(result.Variables) != 1 {
395
		t.Fatalf("Expected result of size 1")
396
	}
397
	if result.Variables[0].Type != OctetString {
398
		t.Fatalf("Expected sysDescr to be OctetString")
399
	}
400
	sysDescr := result.Variables[0].Value.([]byte)
401
	if len(sysDescr) == 0 {
402
		t.Fatalf("Got a zero length sysDescr")
403
	}
404
}
405

406
func TestSnmpV3AuthMD5PrivAES256CGet(t *testing.T) {
407
	if !isUsingSnmpLabs() {
408
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
409
	}
410
	Default.Version = Version3
411
	Default.MsgFlags = AuthPriv
412
	Default.SecurityModel = UserSecurityModel
413
	Default.SecurityParameters = &UsmSecurityParameters{
414
		UserName:               getUserName(t, MD5, AES256C),
415
		AuthenticationProtocol: MD5, AuthenticationPassphrase: getAuthKey(t, MD5, AES256C),
416
		PrivacyProtocol: AES256C, PrivacyPassphrase: getPrivKey(t, MD5, AES256C),
417
	}
418
	setupConnection(t)
419
	defer Default.Conn.Close()
420

421
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
422
	if err != nil {
423
		t.Fatalf("Get() failed with error => %v", err)
424
	}
425
	if len(result.Variables) != 1 {
426
		t.Fatalf("Expected result of size 1")
427
	}
428
	if result.Variables[0].Type != OctetString {
429
		t.Fatalf("Expected sysDescr to be OctetString")
430
	}
431
	sysDescr := result.Variables[0].Value.([]byte)
432
	if len(sysDescr) == 0 {
433
		t.Fatalf("Got a zero length sysDescr")
434
	}
435
}
436

437
func TestSnmpV3AuthSHANoPrivGet(t *testing.T) {
438
	if !isUsingSnmpLabs() {
439
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
440
	}
441
	Default.Version = Version3
442
	Default.MsgFlags = AuthNoPriv
443
	Default.SecurityModel = UserSecurityModel
444
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA, NoPriv), AuthenticationProtocol: SHA, AuthenticationPassphrase: getAuthKey(t, SHA, NoPriv)}
445
	setupConnection(t)
446
	defer Default.Conn.Close()
447

448
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
449
	if err != nil {
450
		t.Fatalf("Get() failed with error => %v", err)
451
	}
452
	if len(result.Variables) != 1 {
453
		t.Fatalf("Expected result of size 1")
454
	}
455
	if result.Variables[0].Type != OctetString {
456
		t.Fatalf("Expected sysDescr to be OctetString")
457
	}
458
	sysDescr := result.Variables[0].Value.([]byte)
459
	if len(sysDescr) == 0 {
460
		t.Fatalf("Got a zero length sysDescr")
461
	}
462
}
463

464
func TestSnmpV3AuthSHAPrivAESGet(t *testing.T) {
465
	if !isUsingSnmpLabs() {
466
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
467
	}
468
	Default.Version = Version3
469
	Default.MsgFlags = AuthPriv
470
	Default.SecurityModel = UserSecurityModel
471
	Default.SecurityParameters = &UsmSecurityParameters{
472
		UserName:               getUserName(t, SHA, AES),
473
		AuthenticationProtocol: SHA, AuthenticationPassphrase: getAuthKey(t, SHA, AES),
474
		PrivacyProtocol: AES, PrivacyPassphrase: getPrivKey(t, SHA, AES),
475
	}
476
	setupConnection(t)
477
	defer Default.Conn.Close()
478

479
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
480
	if err != nil {
481
		t.Fatalf("Get() failed with error => %v", err)
482
	}
483
	if len(result.Variables) != 1 {
484
		t.Fatalf("Expected result of size 1")
485
	}
486
	if result.Variables[0].Type != OctetString {
487
		t.Fatalf("Expected sysDescr to be OctetString")
488
	}
489
	sysDescr := result.Variables[0].Value.([]byte)
490
	if len(sysDescr) == 0 {
491
		t.Fatalf("Got a zero length sysDescr")
492
	}
493
}
494

495
func TestSnmpV3AuthSHAPrivAES256CGet(t *testing.T) {
496
	if !isUsingSnmpLabs() {
497
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
498
	}
499
	Default.Version = Version3
500
	Default.MsgFlags = AuthPriv
501
	Default.SecurityModel = UserSecurityModel
502
	Default.SecurityParameters = &UsmSecurityParameters{
503
		UserName:               getUserName(t, SHA, AES256C),
504
		AuthenticationProtocol: SHA, AuthenticationPassphrase: getAuthKey(t, SHA, AES256C),
505
		PrivacyProtocol: AES256C, PrivacyPassphrase: getPrivKey(t, SHA, AES256C),
506
	}
507
	setupConnection(t)
508
	defer Default.Conn.Close()
509

510
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
511
	if err != nil {
512
		t.Fatalf("Get() failed with error => %v", err)
513
	}
514
	if len(result.Variables) != 1 {
515
		t.Fatalf("Expected result of size 1")
516
	}
517
	if result.Variables[0].Type != OctetString {
518
		t.Fatalf("Expected sysDescr to be OctetString")
519
	}
520
	sysDescr := result.Variables[0].Value.([]byte)
521
	if len(sysDescr) == 0 {
522
		t.Fatalf("Got a zero length sysDescr")
523
	}
524
}
525

526
func TestSnmpV3AuthSHA224NoPrivGet(t *testing.T) {
527
	if !isUsingSnmpLabs() {
528
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
529
	}
530
	Default.Version = Version3
531
	Default.MsgFlags = AuthNoPriv
532
	Default.SecurityModel = UserSecurityModel
533
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA224, NoPriv), AuthenticationProtocol: SHA224, AuthenticationPassphrase: getAuthKey(t, SHA224, NoPriv)}
534
	setupConnection(t)
535
	defer Default.Conn.Close()
536

537
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
538
	if err != nil {
539
		t.Fatalf("Get() failed with error => %v", err)
540
	}
541
	if len(result.Variables) != 1 {
542
		t.Fatalf("Expected result of size 1")
543
	}
544
	if result.Variables[0].Type != OctetString {
545
		t.Fatalf("Expected sysDescr to be OctetString")
546
	}
547
	sysDescr := result.Variables[0].Value.([]byte)
548
	if len(sysDescr) == 0 {
549
		t.Fatalf("Got a zero length sysDescr")
550
	}
551
}
552

553
func TestSnmpV3AuthSHA256NoPrivGet(t *testing.T) {
554
	if !isUsingSnmpLabs() {
555
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
556
	}
557
	Default.Version = Version3
558
	Default.MsgFlags = AuthNoPriv
559
	Default.SecurityModel = UserSecurityModel
560
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA256, NoPriv), AuthenticationProtocol: SHA256, AuthenticationPassphrase: getAuthKey(t, SHA256, NoPriv)}
561
	setupConnection(t)
562
	defer Default.Conn.Close()
563

564
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
565
	if err != nil {
566
		t.Fatalf("Get() failed with error => %v", err)
567
	}
568
	if len(result.Variables) != 1 {
569
		t.Fatalf("Expected result of size 1")
570
	}
571
	if result.Variables[0].Type != OctetString {
572
		t.Fatalf("Expected sysDescr to be OctetString")
573
	}
574
	sysDescr := result.Variables[0].Value.([]byte)
575
	if len(sysDescr) == 0 {
576
		t.Fatalf("Got a zero length sysDescr")
577
	}
578
}
579

580
func TestSnmpV3AuthSHA384NoPrivGet(t *testing.T) {
581
	if !isUsingSnmpLabs() {
582
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
583
	}
584
	Default.Version = Version3
585
	Default.MsgFlags = AuthNoPriv
586
	Default.SecurityModel = UserSecurityModel
587
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA384, NoPriv), AuthenticationProtocol: SHA384, AuthenticationPassphrase: getAuthKey(t, SHA384, NoPriv)}
588
	setupConnection(t)
589
	defer Default.Conn.Close()
590

591
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
592
	if err != nil {
593
		t.Fatalf("Get() failed with error => %v", err)
594
	}
595
	if len(result.Variables) != 1 {
596
		t.Fatalf("Expected result of size 1")
597
	}
598
	if result.Variables[0].Type != OctetString {
599
		t.Fatalf("Expected sysDescr to be OctetString")
600
	}
601
	sysDescr := result.Variables[0].Value.([]byte)
602
	if len(sysDescr) == 0 {
603
		t.Fatalf("Got a zero length sysDescr")
604
	}
605
}
606

607
func TestSnmpV3AuthSHA512NoPrivGet(t *testing.T) {
608
	if !isUsingSnmpLabs() {
609
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
610
	}
611
	Default.Version = Version3
612
	Default.MsgFlags = AuthNoPriv
613
	Default.SecurityModel = UserSecurityModel
614
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA512, NoPriv), AuthenticationProtocol: SHA512, AuthenticationPassphrase: getAuthKey(t, SHA512, NoPriv)}
615
	setupConnection(t)
616
	defer Default.Conn.Close()
617

618
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
619
	if err != nil {
620
		t.Fatalf("Get() failed with error => %v", err)
621
	}
622
	if len(result.Variables) != 1 {
623
		t.Fatalf("Expected result of size 1")
624
	}
625
	if result.Variables[0].Type != OctetString {
626
		t.Fatalf("Expected sysDescr to be OctetString")
627
	}
628
	sysDescr := result.Variables[0].Value.([]byte)
629
	if len(sysDescr) == 0 {
630
		t.Fatalf("Got a zero length sysDescr")
631
	}
632
}
633

634
func TestSnmpV3AuthSHA512PrivAES192Get(t *testing.T) {
635
	t.Skip("AES-192 Blumenthal is currently known to have issues.")
636
	Default.Version = Version3
637
	Default.MsgFlags = AuthPriv
638
	Default.SecurityModel = UserSecurityModel
639
	Default.SecurityParameters = &UsmSecurityParameters{
640
		UserName:               getUserName(t, SHA512, AES192),
641
		AuthenticationProtocol: SHA512, AuthenticationPassphrase: getAuthKey(t, SHA512, AES192),
642
		PrivacyProtocol: AES192, PrivacyPassphrase: getPrivKey(t, SHA512, AES192),
643
	}
644

645
	setupConnection(t)
646
	defer Default.Conn.Close()
647

648
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
649
	if err != nil {
650
		t.Fatalf("Get() failed with error => %v", err)
651
	}
652
	if len(result.Variables) != 1 {
653
		t.Fatalf("Expected result of size 1")
654
	}
655
	if result.Variables[0].Type != OctetString {
656
		t.Fatalf("Expected sysDescr to be OctetString")
657
	}
658
	sysDescr := result.Variables[0].Value.([]byte)
659
	if len(sysDescr) == 0 {
660
		t.Fatalf("Got a zero length sysDescr")
661
	}
662
}
663

664
func TestSnmpV3AuthSHA512PrivAES192CGet(t *testing.T) {
665
	if !isUsingSnmpLabs() {
666
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
667
	}
668
	Default.Version = Version3
669
	Default.MsgFlags = AuthPriv
670
	Default.SecurityModel = UserSecurityModel
671
	Default.SecurityParameters = &UsmSecurityParameters{
672
		UserName:               getUserName(t, SHA512, AES192C),
673
		AuthenticationProtocol: SHA512, AuthenticationPassphrase: getAuthKey(t, SHA512, AES192C),
674
		PrivacyProtocol: AES192C, PrivacyPassphrase: getPrivKey(t, SHA512, AES192C),
675
	}
676

677
	setupConnection(t)
678
	defer Default.Conn.Close()
679

680
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
681
	if err != nil {
682
		t.Fatalf("Get() failed with error => %v", err)
683
	}
684
	if len(result.Variables) != 1 {
685
		t.Fatalf("Expected result of size 1")
686
	}
687
	if result.Variables[0].Type != OctetString {
688
		t.Fatalf("Expected sysDescr to be OctetString")
689
	}
690
	sysDescr := result.Variables[0].Value.([]byte)
691
	if len(sysDescr) == 0 {
692
		t.Fatalf("Got a zero length sysDescr")
693
	}
694
}
695

696
// SHA 512 + AES256C (Reeder)
697
func TestSnmpV3AuthSHA512PrivAES256CGet(t *testing.T) {
698
	if !isUsingSnmpLabs() {
699
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
700
	}
701
	Default.Version = Version3
702
	Default.MsgFlags = AuthPriv
703
	Default.SecurityModel = UserSecurityModel
704
	Default.SecurityParameters = &UsmSecurityParameters{
705
		UserName:               getUserName(t, SHA512, AES256C),
706
		AuthenticationProtocol: SHA512, AuthenticationPassphrase: getAuthKey(t, SHA512, AES256C),
707
		PrivacyProtocol: AES256C, PrivacyPassphrase: getPrivKey(t, SHA512, AES256C),
708
	}
709
	setupConnection(t)
710
	defer Default.Conn.Close()
711

712
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
713
	if err != nil {
714
		t.Fatalf("Get() failed with error => %v", err)
715
	}
716
	if len(result.Variables) != 1 {
717
		t.Fatalf("Expected result of size 1")
718
	}
719
	if result.Variables[0].Type != OctetString {
720
		t.Fatalf("Expected sysDescr to be OctetString")
721
	}
722
	sysDescr := result.Variables[0].Value.([]byte)
723
	if len(sysDescr) == 0 {
724
		t.Fatalf("Got a zero length sysDescr")
725
	}
726
}
727

728
func TestSnmpV3AuthMD5PrivDESGet(t *testing.T) {
729
	if !isUsingSnmpLabs() {
730
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
731
	}
732
	Default.Version = Version3
733
	Default.MsgFlags = AuthPriv
734
	Default.SecurityModel = UserSecurityModel
735

736
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, MD5, DES),
737
		AuthenticationProtocol:   MD5,
738
		AuthenticationPassphrase: getAuthKey(t, MD5, DES),
739
		PrivacyProtocol:          DES,
740
		PrivacyPassphrase:        getPrivKey(t, MD5, DES)}
741

742
	setupConnection(t)
743
	defer Default.Conn.Close()
744

745
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
746
	if err != nil {
747
		t.Fatalf("Get() failed with error => %v", err)
748
	}
749
	if len(result.Variables) != 1 {
750
		t.Fatalf("Expected result of size 1")
751
	}
752
	if result.Variables[0].Type != OctetString {
753
		t.Fatalf("Expected sysDescr to be OctetString")
754
	}
755
	sysDescr := result.Variables[0].Value.([]byte)
756
	if len(sysDescr) == 0 {
757
		t.Fatalf("Got a zero length sysDescr")
758
	}
759
}
760

761
func TestSnmpV3AuthSHAPrivDESGet(t *testing.T) {
762
	if !isUsingSnmpLabs() {
763
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
764
	}
765
	Default.Version = Version3
766
	Default.MsgFlags = AuthPriv
767
	Default.SecurityModel = UserSecurityModel
768
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA, DES),
769
		AuthenticationProtocol:   SHA,
770
		AuthenticationPassphrase: getAuthKey(t, SHA, DES),
771
		PrivacyProtocol:          DES,
772
		PrivacyPassphrase:        getPrivKey(t, SHA, DES)}
773

774
	setupConnection(t)
775
	defer Default.Conn.Close()
776

777
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
778
	if err != nil {
779
		t.Fatalf("Get() failed with error => %v", err)
780
	}
781
	if len(result.Variables) != 1 {
782
		t.Fatalf("Expected result of size 1")
783
	}
784
	if result.Variables[0].Type != OctetString {
785
		t.Fatalf("Expected sysDescr to be OctetString")
786
	}
787
	sysDescr := result.Variables[0].Value.([]byte)
788
	if len(sysDescr) == 0 {
789
		t.Fatalf("Got a zero length sysDescr")
790
	}
791
}
792

793
func TestSnmpV3AuthMD5PrivAESGet(t *testing.T) {
794
	if !isUsingSnmpLabs() {
795
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
796
	}
797
	Default.Version = Version3
798
	Default.MsgFlags = AuthPriv
799
	Default.SecurityModel = UserSecurityModel
800

801
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, MD5, AES),
802
		AuthenticationProtocol:   MD5,
803
		AuthenticationPassphrase: getAuthKey(t, MD5, AES),
804
		PrivacyProtocol:          AES,
805
		PrivacyPassphrase:        getPrivKey(t, MD5, AES)}
806

807
	setupConnection(t)
808
	defer Default.Conn.Close()
809

810
	result, err := Default.Get([]string{".1.3.6.1.2.1.1.1.0"}) // SNMP MIB-2 sysDescr
811
	if err != nil {
812
		t.Fatalf("Get() failed with error => %v", err)
813
	}
814
	if len(result.Variables) != 1 {
815
		t.Fatalf("Expected result of size 1")
816
	}
817
	if result.Variables[0].Type != OctetString {
818
		t.Fatalf("Expected sysDescr to be OctetString")
819
	}
820
	sysDescr := result.Variables[0].Value.([]byte)
821
	if len(sysDescr) == 0 {
822
		t.Fatalf("Got a zero length sysDescr")
823
	}
824
}
825

826
func TestSnmpV3PrivEmptyPrivatePassword(t *testing.T) {
827
	if !isUsingSnmpLabs() {
828
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
829
	}
830
	Default.Version = Version3
831
	Default.MsgFlags = AuthPriv
832
	Default.SecurityModel = UserSecurityModel
833
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA, AES),
834
		AuthenticationProtocol:   SHA,
835
		AuthenticationPassphrase: getAuthKey(t, SHA, AES),
836
		PrivacyProtocol:          AES,
837
		PrivacyPassphrase:        ""}
838

839
	err := Default.Connect()
840
	if err == nil {
841
		t.Fatalf("Expected validation error for empty PrivacyPassphrase")
842
	}
843
}
844

845
func TestSnmpV3AuthNoPrivEmptyPrivatePassword(t *testing.T) {
846
	if !isUsingSnmpLabs() {
847
		t.Skip("This test is currently only working when using demo.snmplabs.com as test device.")
848
	}
849
	Default.Version = Version3
850
	Default.MsgFlags = AuthNoPriv
851
	Default.SecurityModel = UserSecurityModel
852
	Default.SecurityParameters = &UsmSecurityParameters{UserName: getUserName(t, SHA, NoPriv),
853
		AuthenticationProtocol:   SHA,
854
		AuthenticationPassphrase: getAuthKey(t, SHA, NoPriv),
855
		PrivacyProtocol:          AES,
856
		PrivacyPassphrase:        getPrivKey(t, SHA, NoPriv)}
857

858
	err := Default.Connect()
859
	if err == nil {
860
		t.Fatalf("Expected validation error for empty PrivacyPassphrase")
861
	}
862
}
863

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.