Domanda

Sto cercando di creare test di integrazione automatizzati per questo + test software hardware soggetto che gestisce un agente SNMP come di interfaccia di comando. La nostra configurazione di prova simile a questa: Stiamo usando Fitnesse come un test runner e PyFit essere in grado di scrivere i test in Python. Abbiamo quindi utilizzare netsnmp con Python per inviare comandi SNMP. Questo funziona abbastanza bene.

Tuttavia, quando si tenta di eseguire una suite l'agente SNMP (il soggetto del test) viene riavviato (e di solito in un orario diverso simulato) che rende la struttura interna di netsnmp ottenere tutti i tipi di errori interessanti.

Si scopre che c'è un sacco di stato globale memorizzati all'interno della libreria netsnmp come contesto comunitario e nomi e problematicamente EngineTime e EngineBootCnt, che è usato per prevenire attacchi di riproduzione in SNMP v3. Questo fa sì che l'agente di respingere i miei comandi SNMP.

I miei problemi è come faccio a reinizializzare la libreria netsnmp (dai binding Python) in un modo che lo stato globale interna sono reset? L'oggetto netsnmp.Session nei binding Python fare prendere il parametro EngineTime e EngineBoots e impostandole a 0 dovrebbe ripristinare loro, ma in realtà non sembra farlo. Anche io non so se ci sia altro stato globale in là che deve essere ripristinato.

Sono ad un punto in cui penso di aver bisogno di riscrivere i test per usare il pitone puro SNMP pysnmp biblioteca, ma speravo di evitarlo.

È stato utile?

Soluzione

L'engineTime e engineBoots valori sono probabilmente ciò che è scompigliando in su perché SNMPv3 richiede non vanno all'indietro. Se si dispone di un agente che viene riavviato da zero e non incrementando contare di stivali (che è illegale, ma sotto test ho potuto vedere perché faresti questo) allora avresti bisogno di ripristinare la nozione interna di stivali e di tempo.

Tuttavia, impostandoli a 0 e 0 non sarà di aiuto perché sarà assumere quelle sono le impostazioni predefinite. Si dovrebbe, invece, il cambiamento uno di loro a '1', che dovrebbe far scattare la clausola di esclusione per utilizzare effettivamente i valori. Impostare il tempo a 1 e provare e credo che funzionerà (e se non lo fa, entrambi impostati a 1, invece, e provare che).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top