Сброс всего глобального внутреннего состояния библиотеки net-snmp из привязок Python

Я пытаюсь создать автоматизированные интеграционные тесты для этого предмета тестирования аппаратного и программного обеспечения, который запускает агент SNMP в качестве командного интерфейса. Наша тестовая установка выглядит следующим образом: мы используем Fitnesse в качестве средства запуска тестов и PyFit, чтобы иметь возможность писать тесты на Python. Затем мы используем netsnmp с привязками Python для отправки команд SNMP. Это работает очень хорошо.

Однако, когда я пытаюсь запустить пакет, агент SNMP (испытуемый) перезапускается (и обычно в другое смоделированное время), из-за чего внутренние компоненты netsnmp получают всевозможные интересные ошибки.

Оказывается, в библиотеке netsnmp хранится много глобального состояния, такого как имена сообщества и контекста, а также проблемные EngineTime и EngineBootCnt, которые используются для предотвращения повторных атак в SNMP v3. Это приводит к тому, что агент отклоняет мои команды snmp.

Моя проблема заключается в том, как повторно инициализировать библиотеку netsnmp (из привязок Python) таким образом, чтобы сбрасывалось внутреннее глобальное состояние? Объект netsnmp.Session в привязках Python принимает параметры EngineTime и EngineBoots, и установка для них значения 0 должна сбросить их, но на самом деле, похоже, этого не происходит. Я также не знаю, есть ли там другое глобальное состояние, которое нужно сбросить.

Я нахожусь в такой ситуации, когда думаю, что мне нужно переписать тесты, чтобы использовать чистую библиотеку python snmp pysnmp, но я надеялся избежать этого.


person Vegar Westerlund    schedule 15.10.2010    source источник


Ответы (1)


Возможно, вас смущают значения engineTime и engineBoots, потому что SNMPv3 требует, чтобы они не возвращались назад. Если у вас есть агент, который перезапускается с нуля и не увеличивает количество загрузок (что незаконно, но при тестировании я понял, почему вы это делаете), вам нужно сбросить внутреннее понятие загрузки и времени.

Однако установка для них значений 0 и 0 не поможет, поскольку предполагается, что это значения по умолчанию. Вместо этого вы должны изменить один из них на «1», что должно активировать предложение переопределения для фактического использования значений. Установите время на 1 и попробуйте, и я думаю, что это сработает (а если это не так, установите их оба на 1 и попробуйте).

person Wes Hardaker    schedule 19.10.2010