[harness-automation] add IpPowerSocketPduController class (#2247)

This commit is contained in:
Maciej Nycz
2017-10-16 16:51:46 +02:00
committed by Jonathan Hui
parent b1baa7da52
commit a39e1f59da
3 changed files with 48 additions and 0 deletions
@@ -33,6 +33,13 @@ import re
import telnetlib
import time
try:
# python 2
from urllib2 import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
except ImportError:
# python 3
from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
logger = logging.getLogger(__name__)
@@ -180,6 +187,38 @@ class NordicBoardPduController(PduController):
def close(self):
pass
class IpPowerSocketPduController(PduController):
def open(self, **params):
self._base_url = 'http://{}/outs.cgi?out'.format(params['ip'])
password_manager = HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, self._base_url, params['user'], params['pass'])
authentication_handler = HTTPBasicAuthHandler(password_manager)
self._opener = build_opener(authentication_handler)
def reboot(self, **params):
logger.info('Executing power cycle')
for socket in params['sockets']:
self._turn_off(socket)
time.sleep(2)
self._turn_on(socket)
time.sleep(2)
def _change_state(self, socket, state):
self._opener.open('{}{}={}'.format(self._base_url, socket, state))
def _turn_off(self, socket):
self._change_state(socket, 1)
def _turn_on(self, socket):
self._change_state(socket, 0)
def close(self):
self._base_url = None
self._opener = None
class ManualPduController(PduController):
def open(self, **kwargs):
@@ -36,6 +36,8 @@ class PduControllerFactory(object):
return pdu_controller.NordicBoardPduController()
elif _type == 'APC_PDU_CONTROLLER':
return pdu_controller.ApcPduController()
elif _type == 'IP_POWER_SOCKET_PDU_CONTROLLER':
return pdu_controller.IpPowerSocketPduController()
elif _type == 'MANUAL_PDU_CONTROLLER':
return pdu_controller.ManualPduController()
else:
@@ -95,6 +95,7 @@ Types of supported PDU controllers:
- None - when no PDU controller connected
- 'APC_PDU_CONTROLLER' - when APC PDU controller connected
- 'NORDIC_BOARD_PDU_CONTOLLER' - when Nordic boards PDU controller connected
- 'IP_POWER_SOCKET_PDU_CONTROLLER' - when IP Power Socket 5G10A connected
"""
PDU_CONTROLLER_OPEN_PARAMS = {'port': 23, 'ip': '127.0.0.1'}
@@ -105,6 +106,9 @@ Example parameters for the 'APC_PDU_CONTROLLER':
Example parameters for the 'NORDIC_BOARD_PDU_CONTOLLER':
{} - empty dictionary
Example parameters for the 'IP_POWER_SOCKET_PDU_CONTROLLER':
{'user': 'user', 'pass': 'pass', 'ip': '127.0.0.1'}
"""
PDU_CONTROLLER_REBOOT_PARAMS = {'outlet': 1}
@@ -115,6 +119,9 @@ Example parameters for the 'APC_PDU_CONTROLLER':
Example parameters for the 'NORDIC_BOARD_PDU_CONTOLLER':
{'boards_serial_numbers': ('12345123', ...)}
Example parameters for the 'IP_POWER_SOCKET_PDU_CONTROLLER':
{'sockets': [0, 1]}
"""
SHIELD_CONTROLLER_TYPE = None