2010-10-15 3 views
1

Je tente de créer des tests d'intégration automatisés pour ce sujet de test matériel + logiciel qui exécute un agent SNMP en tant qu'interface de commande. Notre configuration de test ressemble à ceci: Nous utilisons Fitnesse comme testeur et PyFit pour pouvoir écrire les tests en Python. Nous utilisons ensuite netsnmp avec des liaisons Python pour envoyer des commandes SNMP. Cela fonctionne plutôt bien.Réinitialisation de l'état interne global de la bibliothèque net-snmp à partir des liaisons Python

Cependant, lorsque j'essaie d'exécuter une suite, l'agent SNMP (le sujet de test) est redémarré (et généralement à une heure simulée différente) ce qui fait que les internes de netsnmp reçoivent toutes sortes d'erreurs intéressantes.

Il s'avère qu'il y a beaucoup d'état global stocké dans la bibliothèque netsnmp comme les noms de communauté et de contexte et problématiquement EngineTime et EngineBootCnt, qui est utilisé pour empêcher les attaques de relecture dans SNMP v3. Cela provoque l'agent à rejeter mes commandes snmp.

Mes problèmes est de savoir comment réinitialiser la bibliothèque netsnmp (à partir des liaisons Python) de manière à ce que l'état global interne soit réinitialisé? L'objet netsnmp.Session dans les liaisons Python prend le paramètre EngineTime et EngineBoots et les mettre à 0 devrait les réinitialiser, mais en réalité cela ne semble pas le faire. Je ne sais pas non plus s'il y a un autre état global qui doit être réinitialisé.

Je suis à un point où je pense que j'ai besoin de réécrire les tests pour utiliser la pure bibliothèque python snmp pysnmp, mais j'espérais l'éviter.

Répondre

1

Les valeurs engineTime et engineBoots sont probablement ce qui vous embête parce que SNMPv3 exige qu'ils ne reviennent pas en arrière. Si vous avez un agent qui redémarre à partir de rien et n'augmente pas le nombre de boots (ce qui est illégal, mais sous test je pourrais voir pourquoi vous le feriez), vous devrez réinitialiser la notion interne de boots and time. Cependant, les mettre à 0 et 0 ne va pas aider car il supposera que ce sont les valeurs par défaut. Vous devriez plutôt remplacer l'un d'entre eux par '1', ce qui devrait déclencher la clause override pour utiliser réellement les valeurs. Réglez le temps à 1 et essayez-le et je pense que ça va marcher (et si ce n'est pas le cas, placez-les tous les deux à 1 à la place et essayez cela).

+0

Merci beaucoup! Je dirais que ça a vraiment fonctionné. –

Questions connexes