class TestCellular(unittest.TestCase): filetext = "\ lease {\n\ interface \"eth0\";\n\ fixed-address 192.168.10.26;\n\ option subnet-mask 255.255.0.0;\n\ option routers 192.168.31.115;\n\ option dhcp-lease-time 5566;\n\ option dhcp-message-type 5;\n\ option domain-name-servers 8.8.8.58,20.20.20.20,40.40.4.1;\n\ option dhcp-server-identifier 192.168.31.115;\n\ option domain-name \"MXcloud115\";\n\ renew 3 2014/10/29 12:52:19;\n\ rebind 3 2014/10/29 13:37:52;\n\ expire 3 2014/10/29 13:49:28;\n\ }\n\ " filetext_fail = " " def setUp(self): def zombiefn(): pass self.cellular = Cellular(connection=Mockup()) def tearDown(self): self.cellular = None @patch("cellular.subprocess") def test1_put(self, subprocess): subprocess.check_output.return_value = True subprocess.call.return_value = True test_msg = { "id": 12345, "method": "put", "param": {"id": "1"}, "resource": "/network/cellulars" } # case 1: no data attribute def resp1(code=200, data=None): self.assertEqual(400, code) self.assertEqual(data, {"message": "Invalid Input."}) message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp1, test=True) # case 2: data dict is empty or no enable exist def resp2(code=200, data=None): self.assertEqual(400, code) self.assertEqual(data, {"message": "No such resources."}) test_msg["data"] = dict() message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp2, test=True) # case 3: data not found def resp3(code=200, data=None): self.assertEqual(400, code) self.assertEqual(data, {"message": "No such resources."}) test_msg["data"] = {"path": "abcde"} message = Message(test_msg) self.cellular.id = 1 self.cellular.put_root_by_id(message, response=resp3, test=True) def test2_put(self): test_msg = { "id": 1, "method": "put", "param": {"id": "1"}, "resource": "/network/cellulars" } # case 1: data valid. test do not check message coming back def resp1(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "internet", "username": "******", "enable": 0, "name": "ppp", "ip": "", "gateway": "", "dns": "", "dialNumber": "9999", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"username": "******", "dialNumber": "9999"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp1, test=True) # case 2: data def resp2(code=200, data=None): self.assertEqual(200, code) self.cellular.get_root_by_id(message, response=resp2, test=True) # case 3: data def resp3(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "internet", "username": "******", "enable": 1, "name": "ppp", "ip": "", "gateway": "", "dns": "", "dialNumber": "9999", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"enable": 1} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp3, test=True) # case 4: data def resp4(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "ppp", "ip": "", "gateway": "", "dns": "", "dialNumber": "9999", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"apn": "hinet"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp4, test=True) # case 5: data def resp5(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "ppp", "ip": "", "gateway": "", "dns": "", "dialNumber": "9999", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"username": "******"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp5, test=True) # case 6: data def resp6(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "root", "ip": "", "gateway": "", "dns": "", "dialNumber": "9999", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"name": "root"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp6, test=True) # case 7: data def resp7(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "root", "ip": "", "gateway": "", "dns": "", "dialNumber": "*88#", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"dialNumber": "*88#"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp7, test=True) # case 8: data def resp8(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "root", "ip": "", "gateway": "", "dns": "", "dialNumber": "*88#", "password": "******", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"password": "******"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp8, test=True) # case 9: data def resp9(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "root", "ip": "", "gateway": "", "dns": "", "dialNumber": "*88#", "password": "******", "pinCode": "89191230", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) test_msg["data"] = {"pinCode": "89191230"} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp9, test=True) # case 10: data def resp10(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data, {"id": 1, "apn": "hinet", "username": "******", "enable": 1, "name": "root", "ip": "", "gateway": "", "dns": "", "dialNumber": "*88#", "password": "******", "pinCode": "89191230", "modemPort": "/dev/cdc-wdm1", "enableAuth": 1, "modes": "default", "delay": 40 }) test_msg["data"] = {"enableAuth": 1} message = Message(test_msg) self.cellular.put_root_by_id(message, response=resp10, test=True) # case 11: data def resp11(code=400, data=None): self.assertEqual(400, code) self.assertEqual(data, {"message": "No such id resources."}) test_msg["data"] = {"id": "5"} message = Message(test_msg) self.cellular.model.db = '' self.cellular.get_root_by_id(message, response=resp11, test=True) def test_get(self): test_msg = { "id": 1, "method": "get", "resource": "/network/cellulars" } # case 1: data def resp1(code=200, data=None): self.assertEqual(200, code) self.assertDictContainsSubset(data[1], {"id": 1, "apn": "internet", "username": "", "enable": 0, "name": "ppp", "ip": "", "gateway": "", "dns": "", "dialNumber": "*99#", "password": "", "pinCode": "", "modemPort": "/dev/cdc-wdm1", "enableAuth": 0, "modes": "default", "delay": 40 }) message = Message(test_msg) self.cellular.get_root(message, response=resp1, test=True) def test_get_signal_by_id(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.check_output.return_value = True res = self.cellular.get_signal_by_id('1') self.assertEqual(res, 99) def test_get_signal_by_id_exception(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.check_output.side_effect = Exception res = self.cellular.get_signal_by_id('1') self.assertEqual(res, 99) def test_get_status_by_id(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.call.return_value = True res = self.cellular.get_status_by_id('1') self.assertEqual(res, 'disconnected') def test_get_status_by_id_exception(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.check_output.side_effect = Exception res = self.cellular.get_status_by_id('1') self.assertEqual(res, 'disconnected') def test_set_online_by_id(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.call.return_value = True res = self.cellular.set_online_by_id('1') self.assertEqual(res, 'success') def test_set_online_by_id_exception(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.check_output.side_effect = Exception res = self.cellular.set_online_by_id('1') self.assertEqual(res, 'fail') def test_set_offline_by_id(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.call.return_value = True res = self.cellular.set_offline_by_id('1') self.assertEqual(res, 'success') def test_set_offline_by_id_exception(self): self.cellular = Cellular(connection=Mockup()) with patch("cellular.subprocess") as subprocess: subprocess.check_output.side_effect = Exception res = self.cellular.set_offline_by_id('1') self.assertEqual(res, 'fail') def test_search_name(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_name(self.filetext) self.assertEqual(res, 'eth0') def test_search_name_fail(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_name(self.filetext_fail) self.assertEqual(res, 'N/A') def test_search_router(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_router(self.filetext) self.assertEqual(res, '192.168.31.115') def test_search_router_fail(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_router(self.filetext_fail) self.assertEqual(res, 'N/A') def test_search_dns(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_dns(self.filetext) self.assertEqual(res, '8.8.8.58,20.20.20.20,40.40.4.1') def test_search_dns_fail(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_dns(self.filetext_fail) self.assertEqual(res, 'N/A') def test_search_ip(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_ip(self.filetext) self.assertEqual(res, '192.168.10.26') def test_search_ip_fail(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_ip(self.filetext_fail) self.assertEqual(res, 'N/A') def test_search_subnet(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_subnet(self.filetext) self.assertEqual(res, '255.255.0.0') def test_search_subnet_fail(self): self.cellular = Cellular(connection=Mockup()) res = self.cellular.search_subnet(self.filetext_fail) self.assertEqual(res, 'N/A') def test_reconnect_if_disconnected(self): self.cellular.model.db = [{'enable': 1, 'modemPort': '/dev/ttyS0', 'id': '0'}] self.cellular.get_signal_by_id = Mock(return_value=99) self.cellular.is_target_device_appear = Mock(return_value=False) self.cellular.get_status_by_id = Mock(return_value='disconnected') self.cellular.reconnect_if_disconnected() self.assertEqual(self.cellular.model.db[0]['signal'], 99) def test_reconnect_if_disconnected_when_disconnect_and_enable_true(self): self.cellular.model.db = [{'enable': 1, 'modemPort': '/dev/ttyS0', 'id': '0'}] self.cellular.is_target_device_appear = Mock(return_value=True) self.cellular.get_signal_by_id = Mock(return_value=78) self.cellular.get_status_by_id = Mock(return_value="'disconnected'") self.cellular.is_leases_file_appear = Mock(return_value=self.filetext) self.cellular.reconnect_if_disconnected() self.assertEqual(self.cellular.model.db[0]['signal'], 78) def test_reconnect_if_disconnected_when_disconnect_and_enable_false(self): self.cellular.model.db = [{'enable': 1, 'modemPort': '/dev/ttyS0', 'id': '0'}] self.cellular.is_target_device_appear = Mock(return_value=True) self.cellular.get_signal_by_id = Mock(return_value=78) self.cellular.get_status_by_id = Mock(return_value="'connected'") self.cellular.is_leases_file_appear = Mock(return_value=self.filetext) self.cellular.reconnect_if_disconnected() self.assertEqual(self.cellular.model.db[0]['signal'], 78) def test_is_leases_file_appear_true(self): m = mock_open() with patch("cellular.open", m, create=True): res = self.cellular.is_leases_file_appear() self.assertEqual(res, '') def test_is_leases_file_appear_false(self): res = self.cellular.is_leases_file_appear() self.assertEqual(res, '') def test_is_target_device_appear(self): res = self.cellular.is_target_device_appear('data/cellular.json') self.assertEqual(res, True) def test_is_target_device_appear_false(self): res = self.cellular.is_target_device_appear('/dev/asdfasdf') self.assertEqual(res, False) def test_init(self): with patch("cellular.ModelInitiator") as model: model.return_value.db.__getitem__.return_value = 1 self.cellular.init()