Beispiel #1
0
    def test_getPfcSubtree(self):
        # Subtree for port
        oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1))
        expected_oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 1, 1))
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut_port)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.COUNTER_64)
        self.assertEqual(str(value0.name), str(expected_oid))
        self.assertEqual(value0.data, 4)

        # Subtree for Priority
        oid = ObjectIdentifier(33, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2))
        expected_oid = ObjectIdentifier(33, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 2, 1, 0))
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut_prio)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.COUNTER_64)
        self.assertEqual(str(value0.name), str(expected_oid))
        self.assertEqual(value0.data, 209347219842134092490 % pow(2, 64)) # Test integer truncation
    def test_endianness(self):
        """
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    h.version   |    h.type     |    h.flags    |  <reserved>   |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        """

        one = 1
        one_little_endian = one.to_bytes(4, 'little')
        one_big_endian = one.to_bytes(4, 'big')

        # flag unset
        pdu_little_endian = PDUHeader.from_bytes(b'\x00\x00\x00\x00' + one_little_endian * 4)
        self.assertEqual(pdu_little_endian.session_id, 1)
        self.assertEqual(pdu_little_endian.transaction_id, 1)
        self.assertEqual(pdu_little_endian.packet_id, 1)
        self.assertEqual(pdu_little_endian.payload_length, 1)
        print(pdu_little_endian)

        nbo_set = struct.pack('!BBBB', 0, 0, 0 | PDUHeaderTags.MASK_NEWORK_BYTE_ORDER, 0)

        # network byte flag set
        pdu_big_endian = PDUHeader.from_bytes(nbo_set + one_big_endian * 4)
        self.assertEqual(pdu_big_endian.session_id, 1)
        self.assertEqual(pdu_big_endian.transaction_id, 1)
        self.assertEqual(pdu_big_endian.packet_id, 1)
        self.assertEqual(pdu_big_endian.payload_length, 1)
        print(pdu_big_endian)
    def test_bad_unpack(self):
        with self.assertRaises(exceptions.PDUUnpackError):
            # missing IDs
            PDUHeader.from_bytes(b'\x00\x00\x00\x00')

        with self.assertRaises(exceptions.PDUUnpackError):
            # missing payload length
            PDUHeader.from_bytes(b'\x00\x00\x00\x00' * 3)
    def test_roundtrip(self):
        """
        1.3.6.1.2.1.2.2.1.[1-22].7

        index 10
        6,2,2,0,(1,2,2,1,1,7)
        upper bound 22

        :return:
        """
        register = RegisterPDU(
            header=PDUHeader(1, PduTypes.REGISTER, 16, 0, 42, 0, 0, 0),
            timeout=40,
            priority=50,
            range_subid=6,
            subtree=ObjectIdentifier(4, 2, 0, 0, (1, 1, 1, 0)),
            upper_bound=7
        )

        encoded = register.encode()
        decoded = PDU.decode(encoded)

        self.assertEqual(decoded.header.type_, PduTypes.REGISTER)
        self.assertIsInstance(register, RegisterPDU)
        self.assertEqual(register, decoded)
        print(register)
    def test_getpdu_xcvr_info(self):
        sub_id = 1000 * 1 # sub id for Ethernet100

        expected_mib = {
            2: (ValueType.OCTET_STRING, "QSFP+ for Ethernet0"),
            5: (ValueType.INTEGER, PhysicalClass.PORT),
            7: (ValueType.OCTET_STRING, ""), # skip
            8: (ValueType.OCTET_STRING, "A1"),
            9: (ValueType.OCTET_STRING, ""), # skip
            10: (ValueType.OCTET_STRING, ""), # skip
            11: (ValueType.OCTET_STRING, "SERIAL_NUM"),
            12: (ValueType.OCTET_STRING, "VENDOR_NAME"),
            13: (ValueType.OCTET_STRING, "MODEL_NAME")
        }

        oids = [ObjectIdentifier(12, 0, 1, 0, (1, 3, 6, 1, 2, 1, 47, 1, 1, 1, 1, field_sub_id, sub_id))
                for field_sub_id in expected_mib]

        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=oids
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)

        for mib_key, value in zip(expected_mib, response.values):
            expected_oid = ObjectIdentifier(12, 0, 1, 0, (1, 3, 6, 1, 2, 1, 47, 1, 1, 1, 1, mib_key, sub_id))
            expected_type, expected_value = expected_mib[mib_key]
            self.assertEqual(str(value.name), str(expected_oid))
            self.assertEqual(value.type_, expected_type)
            self.assertEqual(str(value.data), str(expected_value))
Beispiel #6
0
    def test_getnextpdu_lag(self):
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=(ObjectIdentifier(
                20, 0, 0, 0, (1, 3, 6, 1, 2, 1, 17, 7, 1, 2, 2, 1, 2, 101)), ))

        response = get_pdu.make_response(self.lut)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.INTEGER)
        self.assertEqual(value0.data, BaseIdx.portchannel_base_idx + 101)
Beispiel #7
0
    def test_subtype_lldp_loc_man_addr_table(self):
        oid = ObjectIdentifier(13, 0, 1, 0, (1, 0, 8802, 1, 1, 2, 1, 3, 8, 1, 3, 1, 4))
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        response = get_pdu.make_response(self.lut)
        value0 = response.values[0]
        self.assertEqual(str(value0.name), str(ObjectIdentifier(13, 0, 1, 0, (1, 0, 8802, 1, 1, 2, 1, 3, 8, 1, 3, 1, 4, 10, 224, 25, 26))))
        self.assertEqual(value0.type_, ValueType.INTEGER)
        self.assertEqual(value0.data, 5)
Beispiel #8
0
    def test_getpdu_noinstance_eth0_docker0(self):
        oid = ObjectIdentifier(
            20, 0, 1, 0, (1, 3, 6, 1, 2, 1, 4, 22, 1, 2, 9, 240, 127, 1, 1))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        n = len(response.values)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE)
Beispiel #9
0
    def test_getnextpdu_empty(self):
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=(ObjectIdentifier(12, 0, 0, 0,
                                   (1, 3, 6, 1, 2, 1, 4, 24, 4, 1, 1, 255)), ))

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        n = len(response.values)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.END_OF_MIB_VIEW)
Beispiel #10
0
    def test_getPsu2Status(self):
        oid = ObjectIdentifier(2, 0, 0, 0,
                               (1, 3, 6, 1, 4, 1, 9, 9, 117, 1, 1, 2, 1, 2, 2))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.INTEGER)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, 2)
    def test_getnextpdu_local_port_identification(self):
        # oid.include = 1
        oid = ObjectIdentifier(11, 0, 1, 0,
                               (1, 0, 8802, 1, 1, 2, 1, 3, 7, 1, 3))
        get_pdu = GetNextPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0,
                                              0),
                             oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.OCTET_STRING)
        self.assertEqual(str(value0.data), "etp1")
Beispiel #12
0
    def test_getpdu_internal_noinstance(self):
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=(ObjectIdentifier(
                             20, 0, 0, 0, (1, 3, 6, 1, 2, 1, 4, 24, 4, 1, 1, 0,
                                           0, 0, 0, 0, 10, 10, 0, 5)), ))

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        n = len(response.values)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE)
Beispiel #13
0
    def test_getnextpdu_lldpRemSysCapEnabled(self):
        oid = ObjectIdentifier(12, 0, 1, 0, (1, 0, 8802, 1, 1, 2, 1, 4, 1, 1, 12, 1, 1))
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.OCTET_STRING)
        self.assertEqual(str(value0.name), str(ObjectIdentifier(12, 0, 1, 0, (1, 0, 8802, 1, 1, 2, 1, 4, 1, 1, 12, 1, 1))))
        self.assertEqual(str(value0.data), "\x28\x00")
Beispiel #14
0
    def test_getpdu_disappeared(self):
        oid = ObjectIdentifier(
            20, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 187, 1, 2, 5, 1, 3, 2, 16,
                          252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE)
    def test_getnextpdu_noeth(self):
        # oid.include = 1
        oid = ObjectIdentifier(
            12, 0, 1, 0, (1, 0, 8802, 1, 1, 2, 1, 4, 1, 1, 7, 18545, 126, 1))
        get_pdu = GetNextPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0,
                                              0),
                             oids=[oid])

        print("GetNextPDU sr=", get_pdu.sr)
        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.END_OF_MIB_VIEW)
Beispiel #16
0
    def test_getpdu(self):
        oid = ObjectIdentifier(
            20, 0, 0, 0, (1, 3, 6, 1, 2, 1, 4, 22, 1, 2, 37, 10, 0, 0, 19))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.OCTET_STRING)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data.string, b'\x52\x54\x00\x04\x52\x5d')
Beispiel #17
0
    def test_getnextpdu(self):
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=(ObjectIdentifier(
                20, 0, 0, 0, (1, 3, 6, 1, 2, 1, 17, 7, 1, 2, 2, 1, 2, 999)), ))

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        n = len(response.values)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.INTEGER)
        self.assertEqual(value0.data, 113)
Beispiel #18
0
    def test_getPduIndicationForPort(self):
        oid = ObjectIdentifier(32, 0, 0, 0,
                               (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 2, 1))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut_port)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.COUNTER_64)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, 4)
Beispiel #19
0
    def test_getPduRequestForPriority(self):
        oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 2, 9, 0))
        get_pdu = GetPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut_prio)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.COUNTER_64)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, 209347219842134092490 % pow(2, 64)) # Test integer truncation
Beispiel #20
0
    def test_getMulticastQueueCounters(self):
        oid = ObjectIdentifier(
            8, 0, 0, 0,
            (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 5, 2, 1, 9))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, None)
Beispiel #21
0
    def test_roundtrip(self):
        open_pdu = OpenPDU(
            header=PDUHeader(1, 1, 16, 0, 0, 0, 0, 0),
            timeout=42,
            oid=ObjectIdentifier(4, 2, 0, 0, (1, 1, 1, 0)),
            descr="HOWDY-HO, NEIGHBOR!"
        )

        encoded = open_pdu.encode()
        decoded = PDU.decode(encoded)

        self.assertEqual(decoded.header.type_, PduTypes.OPEN)
        self.assertIsInstance(open_pdu, OpenPDU)
        self.assertEqual(open_pdu, decoded)
        print(open_pdu)
Beispiel #22
0
    def test_getnextpdu(self):
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=(ObjectIdentifier(
                20, 0, 0, 0,
                (1, 3, 6, 1, 2, 1, 4, 22, 1, 2, 37, 10, 0, 0, 19)), ))

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        n = len(response.values)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.OCTET_STRING)
        self.assertEqual(value0.data.string, b'\x52\x54\x00\xd0\xa0\x8c')
Beispiel #23
0
    def test_getpdu(self):
        oid = ObjectIdentifier(20, 0, 0, 0,
                               (1, 3, 6, 1, 2, 1, 17, 7, 1, 2, 2, 1, 2, 1000,
                                124, 254, 144, 128, 159, 4))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.INTEGER)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, 113)
Beispiel #24
0
    def test_getpdu(self):
        oid = ObjectIdentifier(24, 0, 1, 0, (1, 3, 6, 1, 2, 1, 4, 24, 4, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 15))
        get_pdu = GetPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.IP_ADDRESS)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(str(value0.data), ipaddress.ip_address("0.0.0.0").packed.decode())
Beispiel #25
0
    def test_getpdu_established_asic2(self):
        oid = ObjectIdentifier(
            20, 0, 0, 0,
            (1, 3, 6, 1, 4, 1, 9, 9, 187, 1, 2, 5, 1, 3, 1, 4, 10, 10, 0, 5))
        get_pdu = GetPDU(header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
                         oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.INTEGER)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, 6)
Beispiel #26
0
    def test_getnextpdu(self):
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=(ObjectIdentifier(21, 0, 0, 0,
                                   (1, 3, 6, 1, 2, 1, 4, 24, 4, 1, 1, 0)), ))

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)
        print(response)

        n = len(response.values)
        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.IP_ADDRESS)
        self.assertEqual(str(value0.data),
                         ipaddress.ip_address("0.0.0.0").packed.decode())
Beispiel #27
0
    def test_getNextPsu3(self):
        oid = ObjectIdentifier(2, 0, 0, 0,
                               (1, 3, 6, 1, 4, 1, 9, 9, 117, 1, 1, 2, 1, 2, 3))
        expected_oid = None
        get_pdu = GetNextPDU(header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42,
                                              0, 0, 0),
                             oids=[oid])

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)

        value0 = response.values[0]
        self.assertEqual(value0.type_, ValueType.END_OF_MIB_VIEW)
        self.assertEqual(str(value0.name), str(oid))
        self.assertEqual(value0.data, None)
Beispiel #28
0
    def test_roundtrip(self):
        response_pdu = ResponsePDU(
            header=PDUHeader(1, 18, 16, 0, 42, 0, 0, 8),
            sys_up_time=0,
            error=0,
            index=0,
        )

        encoded = response_pdu.encode()
        decoded = PDU.decode(encoded)

        self.assertEqual(decoded.header.type_, PduTypes.RESPONSE)
        self.assertIsInstance(response_pdu, ResponsePDU)
        self.assertEqual(response_pdu, decoded)
        print(response_pdu)
    def test_getnextpdu_chassis_serial_number(self):
        oid = ObjectIdentifier(12, 0, 1, 0, (1, 3, 6, 1, 2, 1, 47, 1, 1, 1, 1, 11))
        expected_oid = ObjectIdentifier(12, 0, 1, 0, (1, 3, 6, 1, 2, 1, 47, 1, 1, 1, 1, 11, 1))
        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0),
            oids=[oid]
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)

        value0 = response.values[0]
        self.assertEqual(str(value0.name), str(expected_oid))
        self.assertEqual(value0.type_, ValueType.OCTET_STRING)
        self.assertEqual(str(value0.data), "SAMPLETESTSN")
    def test_getpdu_xcvr_dom(self):
        expected_mib = {
            1000 * 1 + 1: "DOM Temperature Sensor for Ethernet0",
            1000 * 1 + 2: "DOM Voltage Sensor for Ethernet0",
            1000 * 1 + 11: "DOM RX Power Sensor for Ethernet0/1",
            1000 * 1 + 21: "DOM RX Power Sensor for Ethernet0/2",
            1000 * 1 + 31: "DOM RX Power Sensor for Ethernet0/3",
            1000 * 1 + 41: "DOM RX Power Sensor for Ethernet0/4",
            1000 * 1 + 12: "DOM TX Bias Sensor for Ethernet0/1",
            1000 * 1 + 22: "DOM TX Bias Sensor for Ethernet0/2",
            1000 * 1 + 32: "DOM TX Bias Sensor for Ethernet0/3",
            1000 * 1 + 42: "DOM TX Bias Sensor for Ethernet0/4",
            1000 * 1 + 13: "DOM TX Power Sensor for Ethernet0/1",
            1000 * 1 + 23: "DOM TX Power Sensor for Ethernet0/2",
            1000 * 1 + 33: "DOM TX Power Sensor for Ethernet0/3",
            1000 * 1 + 43: "DOM TX Power Sensor for Ethernet0/4",
        }

        phyDescr, phyClass = 2, 5

        # check physical class value
        oids = [ObjectIdentifier(12, 0, 1, 0, (1, 3, 6, 1, 2, 1, 47, 1, 1, 1, 1, field_id, sub_id))
                for field_id in (phyDescr, phyClass)
                for sub_id in expected_mib]

        get_pdu = GetNextPDU(
            header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0),
            oids=oids
        )

        encoded = get_pdu.encode()
        response = get_pdu.make_response(self.lut)

        for mib_key, value in zip(expected_mib, response.values):
            if phyClass == value.name.subids[-2]:
                sub_id = (phyClass, mib_key)
                expected_type, expected_value = ValueType.INTEGER, PhysicalClass.SENSOR
            elif phyDescr == value.name.subids[-2]:
                sub_id = (phyDescr, mib_key)
                expected_type, expected_value = ValueType.OCTET_STRING, expected_mib[mib_key]
            else:
                # received unexpected
                self.assertTrue(False)

            expected_oid = ObjectIdentifier(12, 0, 1, 0, (1, 3, 6, 1, 2, 1, 47, 1, 1, 1, 1, *sub_id))
            self.assertEqual(str(value.name), str(expected_oid))
            self.assertEqual(value.type_, expected_type)
            self.assertEqual(str(value.data), str(expected_value))