047d6a900a
The provided APC RackPDU implementation corresponds to (a subset of) the actual APC RackPDU devices. Also provided is a PDUTestHarness test class to be able to have an actual PDU listen to SNMP requests. This was done so integration tests can actually run against the test subject in a unitary fashion. A pysnmp_handler is provided to handle converting an SNMP message to calls on an "OID store". It was mostly sourced from a pysnmp example that is not shipped with the package. Heavily modified for our purposes and code style. This approach was preferred to Twisted-SNMP (and pysnmp-se), because the latter does not support Python 3 and it allows only a single reactor per process. That is incompatible with our integration test approach. An SNMP client "wrapper" was provided to simplify SNMP requests and to raise exceptions when errors happen, so we can assert them during tests. Ideally, the SNMP wrapper could be extracted into it's own project, but it it deemed small enough to stay here, for now. While looking for alternatives to writing our own wrapper, we found snmpy and nelsnmp. The former had a limitation around the fact that you were forced to provide an MIB and do lookup by names. It was not possible (short of monkey patching) to strip the name <> OID lookup. On the other hand, nelsnmp worked for direct OID lookups, but did type validation when querying. This prevented duck typing because PDU and PDUOutlets use actual ASN.1 pysnmp objects to avoid any confusion. nelsnmp would check for "int" type and refuse to proceed. An additional mapping table could have been provided, but this was seen as more work. Finally, only generic exceptions were raised, with an error message. This was deemed as a less-than-ideal scenario, especially when trying to assert RequestTimedOut behaviors.
8 lines
285 B
Plaintext
8 lines
285 B
Plaintext
# The order of packages is significant, because pip processes them in the order
|
|
# of appearance. Changing the order has an impact on the overall integration
|
|
# process, which may cause wedges in the gate later.
|
|
|
|
pbr>=1.6 # Apache-2.0
|
|
libvirt-python>=1.2.5 # LGPLv2+
|
|
pysnmp==4.3.2 # BSD
|