#!/usr/bin/python # -*- coding: utf-8 -*- """ .. module:: tests This file is part of **python-openzwave** project https://github.com/OpenZWave/python-openzwave. :platform: Unix, Windows, MacOS X :sinopsis: openzwave Library .. moduleauthor: bibi21000 aka Sébastien GALLET License : GPL(v3) **python-openzwave** is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. **python-openzwave** is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with python-openzwave. If not, see http://www.gnu.org/licenses. """ import sys, os, shutil import time import unittest from pprint import pprint import datetime import random import socket import re import six if six.PY3: from pydispatch import dispatcher else: from louie import dispatcher from six import string_types, integer_types import libopenzwave import openzwave from openzwave.node import ZWaveNode from openzwave.value import ZWaveValue from openzwave.scene import ZWaveScene from openzwave.controller import ZWaveController from openzwave.network import ZWaveNetwork from openzwave.option import ZWaveOption from tests.common import pyozw_version from tests.api.common import SLEEP from tests.api.common import TestApi from tests.common import TestPyZWave class TestControllerCommand(TestApi): """ Parent test class for api """ @classmethod def tearDownClass(self): self.network.controller.cancel_command() super(TestControllerCommand, self).tearDownClass() def setUp(self): # ~ self.wait_for_network_state(self.network.STATE_READY, 1) # ~ self.wait_for_queue() # ~ self.ctrl_state_result = None TestApi.setUp(self) dispatcher.connect(self.ctrl_message, ZWaveNetwork.SIGNAL_CONTROLLER_COMMAND) dispatcher.connect(self.ctrl_waiting, ZWaveNetwork.SIGNAL_CONTROLLER_WAITING) time.sleep(2.0) def tearDown(self): self.wait_for_queue() try: dispatcher.disconnect(self.ctrl_message) except : pass try: dispatcher.disconnect(self.ctrl_waiting) except : pass self.network.controller.cancel_command() self.wait_for_queue() self.network.controller.kill_command() self.ctrl_state_result = None def test_005_request_controller_status(self): self.ctrl_state_result = None current = None self.ctrl_state_result = None first = True for i in range(0,SLEEP): if first: ret = self.network.controller.request_controller_status() self.assertTrue(ret) first = False #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertTrue(current in [self.network.controller.STATE_COMPLETED, self.network.controller.STATE_NORMAL]) def test_010_command_send_node_information_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: # ~ node_id = max(self.network.nodes.keys()) # ~ node_id = self.active_nodes.keys()[1] ret = self.network.controller.send_node_information(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) print(self.ctrl_command_signal) self.assertEqual(current, self.network.controller.STATE_COMPLETED) self.assertEqual(self.ctrl_command_signal['node_id'], node_id) def test_015_command_send_node_information_controller(self): self.ctrl_state_result = None node_id = self.network.controller.node_id ret = self.network.controller.send_node_information(node_id) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_020_command_request_node_neighbor_update_nodes(self): self.wipTest() self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: ret = self.network.controller.request_node_neighbor_update(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #~ print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_COMPLETED) def test_025_command_request_node_neighbor_update_controller(self): #~ self.wipTest() self.ctrl_state_result = None node_id = self.network.controller.node_id ret = self.network.controller.request_node_neighbor_update(node_id) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertTrue(current in [self.network.controller.STATE_COMPLETED, self.network.controller.STATE_FAILED]) def test_030_command_request_network_update_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.request_network_update(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_035_command_request_network_update_controller(self): self.ctrl_state_result = None node_id = self.network.controller.node_id ret = self.network.controller.request_network_update(node_id) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_040_command_delete_all_return_routes_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.delete_all_return_routes(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_COMPLETED) def test_045_command_delete_all_return_routes_controller(self): self.ctrl_state_result = None node_id = self.network.controller.node_id ret = self.network.controller.delete_all_return_routes(node_id) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_050_command_assign_return_route_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.assign_return_route(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_COMPLETED) def test_055_command_assign_return_route_controller(self): self.ctrl_state_result = None node_id = self.network.controller.node_id ret = self.network.controller.assign_return_route(node_id) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_060_command_has_node_failed_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.has_node_failed(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_NODEOK) self.assertEqual(self.ctrl_command_signal['node_id'], node_id) def test_070_command_remove_failed_node_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.remove_failed_node(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_080_command_replace_failed_node_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.active_nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.replace_failed_node(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_080_command_replace_failed_node_nodes(self): self.ctrl_state_result = None node_ids = [ k for k in self.network.nodes.keys() if k != self.network.controller.node_id ] for node_id in node_ids: node_id = max(self.network.nodes.keys()) ret = self.network.controller.replace_failed_node(node_id) self.assertTrue(ret) current = None self.ctrl_state_result = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_FAILED) def test_100_command_add_node_secure_off_and_wait_for_user(self): self.skipManualTest() nb_nodes = len(self.network.nodes) ret = self.network.controller.add_node(False) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.network.controller.cancel_command() self.assertEqual(len(self.network.nodes), nb_nodes+1) def test_110_command_add_node_secure_on_and_wait_for_user(self): self.skipManualTest() nb_nodes = len(self.network.nodes) ret = self.network.controller.add_node(True) self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.network.controller.cancel_command() self.assertEqual(len(self.network.nodes), nb_nodes-1) def test_150_command_remove_node_and_wait_for_user(self): self.skipManualTest() nb_nodes = len(self.network.nodes) ret = self.network.controller.remove_node() self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.network.controller.cancel_command() self.assertEqual(len(self.network.nodes), nb_nodes-1) def test_200_command_create_new_primary(self): self.skipManualTest() nb_nodes = len(self.network.nodes) ret = self.network.controller.create_new_primary() self.assertTrue(ret) current = None for i in range(0,SLEEP): #print("self.ctrl_state_result = %s" % self.ctrl_state_result) if self.ctrl_state_result != None and self.ctrl_state_result not in self.network.controller.STATES_LOCKED: current = self.ctrl_state_result break else: time.sleep(1.0) self.assertEqual(current, self.network.controller.STATE_COMPLETED) if __name__ == '__main__': sys.argv.append('-v') unittest.main()