func TestMessageProcessingV1(t *testing.T) { snmp, _ := snmpgo.NewSNMP(snmpgo.SNMPArguments{ Version: snmpgo.V2c, Community: "public", }) mp := snmpgo.NewMessageProcessing(snmpgo.V2c) pdu := snmpgo.NewPdu(snmpgo.V2c, snmpgo.GetRequest) msg, err := mp.PrepareOutgoingMessage(snmp, pdu) if err != nil { t.Errorf("PrepareOutgoingMessage() - has error %v", err) } if len(msg.PduBytes()) == 0 { t.Error("PrepareOutgoingMessage() - pdu bytes") } if pdu.RequestId() == 0 { t.Error("PrepareOutgoingMessage() - request id") } requestId := pdu.RequestId() _, err = mp.PrepareDataElements(snmp, msg, []byte{0x00, 0x00}) if err == nil { t.Error("PrepareDataElements() - message unmarshal error") } b, _ := msg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err == nil { t.Error("PrepareDataElements() - pdu type check") } pdu = snmpgo.NewPdu(snmpgo.V2c, snmpgo.GetResponse) rmsg := snmpgo.ToMessageV1(snmpgo.NewMessage(snmpgo.V1, pdu)) b, _ = rmsg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err == nil { t.Error("PrepareDataElements() - version check") } pdu.SetRequestId(requestId) pduBytes, _ := pdu.Marshal() rmsg = snmpgo.ToMessageV1(snmpgo.NewMessage(snmpgo.V2c, pdu)) rmsg.Community = []byte("public") rmsg.SetPduBytes(pduBytes) b, _ = rmsg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err != nil { t.Errorf("PrepareDataElements() - has error %v", err) } }
func TestMessageProcessingV3(t *testing.T) { snmp, _ := snmpgo.NewSNMP(snmpgo.SNMPArguments{ Version: snmpgo.V3, UserName: "******", SecurityLevel: snmpgo.AuthPriv, AuthPassword: "******", AuthProtocol: snmpgo.Md5, PrivPassword: "******", PrivProtocol: snmpgo.Des, }) mp := snmpgo.NewMessageProcessing(snmpgo.V3) usm := snmpgo.ToUsm(mp.Security()) usm.AuthKey = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} usm.PrivKey = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} pdu := snmpgo.NewPdu(snmpgo.V3, snmpgo.GetRequest) msg, err := mp.PrepareOutgoingMessage(snmp, pdu) if err != nil { t.Errorf("PrepareOutgoingMessage() - has error %v", err) } if len(msg.PduBytes()) == 0 { t.Error("PrepareOutgoingMessage() - pdu bytes") } if pdu.RequestId() == 0 { t.Error("PrepareOutgoingMessage() - request id") } msgv3 := snmpgo.ToMessageV3(msg) if msgv3.MessageId == 0 { t.Error("PrepareOutgoingMessage() - message id") } if !msgv3.Reportable() || !msgv3.Authentication() || !msgv3.Privacy() { t.Error("PrepareOutgoingMessage() - security flag") } msgv3.SetAuthentication(false) msgv3.SetPrivacy(false) msgv3.AuthEngineId = []byte{0, 0, 0, 0, 0} requestId := pdu.RequestId() messageId := msgv3.MessageId _, err = mp.PrepareDataElements(snmp, msg, []byte{0x00, 0x00}) if err == nil { t.Error("PrepareDataElements() - message unmarshal error") } b, _ := msg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err == nil { t.Error("PrepareDataElements() - pdu type check") } pdu = snmpgo.NewPdu(snmpgo.V3, snmpgo.GetResponse) rmsg := snmpgo.ToMessageV3(snmpgo.NewMessage(snmpgo.V3, pdu)) b, _ = rmsg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err == nil { t.Error("PrepareDataElements() - message id check") } rmsg = snmpgo.ToMessageV3(snmpgo.NewMessage(snmpgo.V3, pdu)) rmsg.AuthEngineId = []byte{0, 0, 0, 0, 0} rmsg.MessageId = messageId b, _ = rmsg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err == nil { t.Error("PrepareDataElements() - security model check") } pdu.(*snmpgo.ScopedPdu).ContextEngineId = rmsg.AuthEngineId pduBytes, _ := pdu.Marshal() rmsg.SetPduBytes(pduBytes) rmsg.SecurityModel = 3 b, _ = rmsg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err == nil { t.Error("PrepareDataElements() - request id check") } pdu.SetRequestId(requestId) pduBytes, _ = pdu.Marshal() rmsg.SetPduBytes(pduBytes) b, _ = rmsg.Marshal() _, err = mp.PrepareDataElements(snmp, msg, b) if err != nil { t.Errorf("PrepareDataElements() - has error %v", err) } }