gosnmp
/
helper_test.go
183 строки · 6.8 Кб
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//go:build all || helper
6// +build all helper
7
8package gosnmp9
10import (11"encoding/base64"12"testing"13
14"github.com/stretchr/testify/assert"15)
16
17// https://www.scadacore.com/tools/programming-calculators/online-hex-converter/ is useful
18
19func TestParseObjectIdentifier(t *testing.T) {20oid := []byte{43, 6, 1, 2, 1, 31, 1, 1, 1, 10, 143, 255, 255, 255, 127}21expected := ".1.3.6.1.2.1.31.1.1.1.10.4294967295"22
23buf, err := parseObjectIdentifier(oid)24if err != nil {25t.Errorf("parseObjectIdentifier(%v) want %s, error: %v", oid, expected, err)26}27result := string(buf)28
29if string(result) != expected {30t.Errorf("parseObjectIdentifier(%v) = %s, want %s", oid, result, expected)31}32}
33
34func TestParseObjectIdentifierWithOtherOid(t *testing.T) {35oid := []byte{43, 6, 3, 30, 11, 1, 10}36expected := ".1.3.6.3.30.11.1.10"37buf, err := parseObjectIdentifier(oid)38if err != nil {39t.Errorf("parseObjectIdentifier(%v) want %s, error: %v", oid, expected, err)40}41result := string(buf)42if string(result) != expected {43t.Errorf("parseObjectIdentifier(%v) = %s, want %s", oid, result, expected)44}45}
46
47func BenchmarkParseObjectIdentifier(b *testing.B) {48oid := []byte{43, 6, 3, 30, 11, 1, 10}49for i := 0; i < b.N; i++ {50parseObjectIdentifier(oid)51}52}
53
54func BenchmarkMarshalObjectIdentifier(b *testing.B) {55oid := ".1.3.6.3.30.11.1.10"56for i := 0; i < b.N; i++ {57marshalObjectIdentifier(oid)58}59}
60
61type testsMarshalUint32T struct {62value uint3263goodBytes []byte64}
65
66var testsMarshalUint32 = []testsMarshalUint32T{67{0, []byte{0x00}},68{2, []byte{0x02}}, // 269{128, []byte{0x00, 0x80}},70{257, []byte{0x01, 0x01}}, // FF + 271{65537, []byte{0x01, 0x00, 0x01}}, // FFFF + 272{16777217, []byte{0x01, 0x00, 0x00, 0x01}}, // FFFFFF + 273{18542501, []byte{0x01, 0x1a, 0xef, 0xa5}},74{2147483647, []byte{0x7f, 0xff, 0xff, 0xff}},75{2147483648, []byte{0x00, 0x80, 0x00, 0x0, 0x0}},76}
77
78func TestMarshalUint32(t *testing.T) {79for i, test := range testsMarshalUint32 {80result, err := marshalUint32(test.value)81if err != nil {82t.Errorf("%d: expected %0x got err %v", i, test.goodBytes, err)83}84if !checkByteEquality2(test.goodBytes, result) {85t.Errorf("%d: expected %0x got %0x", i, test.goodBytes, result)86}87}88}
89
90var testsMarshalInt32 = []struct {91value int92goodBytes []byte93}{94{0, []byte{0x00}},95{2, []byte{0x02}}, // 296{128, []byte{0x00, 0x80}},97{257, []byte{0x01, 0x01}}, // FF + 298{65537, []byte{0x01, 0x00, 0x01}}, // FFFF + 299{16777217, []byte{0x01, 0x00, 0x00, 0x01}}, // FFFFFF + 2100{2147483647, []byte{0x7f, 0xff, 0xff, 0xff}},101{-2147483648, []byte{0x80, 0x00, 0x00, 0x00}},102{-16777217, []byte{0xfe, 0xff, 0xff, 0xff}},103{-16777216, []byte{0xff, 0x00, 0x00, 0x00}},104{-65537, []byte{0xfe, 0xff, 0xff}},105{-65536, []byte{0xff, 0x00, 0x00}},106{-257, []byte{0xfe, 0xff}},107{-256, []byte{0xff, 0x00}},108{-2, []byte{0xfe}},109{-1, []byte{0xff}},110}
111
112func TestMarshalInt32(t *testing.T) {113for _, aTest := range testsMarshalInt32 {114result, err := marshalInt32(aTest.value)115assert.NoErrorf(t, err, "value %d", aTest.value)116assert.EqualValues(t, aTest.goodBytes, result, "bad marshalInt32()")117}118}
119
120func TestParseUint64(t *testing.T) {121tests := []struct {122data []byte123n uint64124}{125{[]byte{}, 0},126{[]byte{0x00}, 0},127{[]byte{0x01}, 1},128{[]byte{0x01, 0x01}, 257},129{[]byte{0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0xb3, 0xbf}, 18446744073694786495},130}131for _, test := range tests {132if ret, err := parseUint64(test.data); err != nil || ret != test.n {133t.Errorf("parseUint64(%v) = %d, %v want %d, <nil>", test.data, ret, err, test.n)134}135}136}
137
138var testsInvalidSNMPResponses = []string{139"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",140"MBoCAQEEB3ByaXZhdGWiDAIESESkywIBBQIBAA==",141"MEo=",142}
143
144func TestInvalidSNMPResponses(t *testing.T) {145
146g := &GoSNMP{147Target: "127.0.0.1",148Port: 161,149Community: "public",150Version: Version2c,151}152
153for i, test := range testsInvalidSNMPResponses {154testBytes, _ := base64.StdEncoding.DecodeString(test)155result, err := g.SnmpDecodePacket(testBytes)156if err == nil {157t.Errorf("#%d, failed to error %v", i, result)158}159}160}
161
162func checkByteEquality2(a, b []byte) bool {163
164if a == nil && b == nil {165return true166}167
168if a == nil || b == nil {169return false170}171
172if len(a) != len(b) {173return false174}175
176for i := range a {177if a[i] != b[i] {178return false179}180}181
182return true183}
184