def test2_new_device_fail_invalid_product(self):
		id = str(uuid.uuid4())

		msg = json.dumps({
			"message_type" : "new_device_request",
			"id" : id,
			"device_id" : "0xa123123412349999",
			"vendor" : "Good Company",
			"product_name" : "Nice Product",
			"refresh_time" : 30,
			"module_types" : [
				{
					"type" : "pressure",
					"attributes" : [
						{"attribute" : "inner"}
					]
				}
			]
		})

		self.ws.send(msg)
		response = json.loads(self.ws.recv())

		self.assertEqual("generic_response", response["message_type"])
		self.assertEqual(id, response["id"])
		self.assertEqual(2, response["status"])
		assureNotClosed(self, self.ws)

		event = self.zmq.pop_data()
		self.assertEqual("on-refused-new-device", event["event"])
		self.assertEqual("0xa123123412349999", event["device_id"])
		self.assertEqual(config.gateway_id, event["gateway_id"])
Exemple #2
0
    def test1_register_success(self):
        ws = websocket.WebSocket()
        ws.connect(config.gws_ws_uri)

        msg = json.dumps({
            "gateway_id": config.gateway_id,
            "ip_address": "192.168.1.1",
            "message_type": "gateway_register",
            "version": "v1.0"
        })

        ws.send(msg)
        msg = json.loads(ws.recv())

        self.assertEqual("gateway_accepted", msg["message_type"])
        assureNotClosed(self, ws)

        event = self.zmq.pop_data()
        self.assertEqual("on-connected", event["event"])
        self.assertEqual(config.gateway_id, event["gateway_id"])

        ws.close()

        event = self.zmq.pop_data()
        self.assertEqual("on-disconnected", event["event"])
        self.assertEqual(config.gateway_id, event["gateway_id"])
    def test2_export_fails_due_to_unexisting_device(self):
        id = str(uuid.uuid4())

        msg = json.dumps({
            "message_type":
            "sensor_data_export",
            "id":
            id,
            "data": [{
                "device_id":
                "0xa32d275555555555",
                "timestamp":
                0,
                "values": [{
                    "module_id": "5",
                    "value": -1230.0,
                    "valid": "true"
                }, {
                    "module_id": "22",
                    "valid": "false"
                }, {
                    "module_id": "89",
                    "value": 3460.132,
                    "valid": "true"
                }]
            }]
        })

        self.ws.send(msg)
        msg = json.loads(self.ws.recv())

        self.assertEqual("sensor_data_confirm", msg["message_type"])
        self.assertEqual(id, msg["id"])
        assureNotClosed(self, self.ws)
    def test2_notice_with_custom_key(self):
        id = str(uuid.uuid4())

        req = GET(config.ui_host, config.ui_port,
                  "/gateways/" + config.gateway_id + "/messages")
        req.authorize(self.session)
        response, content = req()
        self.assertEqual(200, response.status)
        messages_count = len(json.loads(content)["data"])

        msg = json.dumps({
            "id": id,
            "message_type": "notice_request",
            "at": 1546363722909123,
            "severity": "info",
            "key": "some_message",
            "context": {
                "reason": "unknown",
                "attempt": 1,
                "valid": True
            }
        })

        self.ws.send(msg)
        response = json.loads(self.ws.recv())

        self.assertEqual("generic_response", response["message_type"])
        self.assertEqual(id, response["id"])
        assureNotClosed(self, self.ws)

        req = GET(config.ui_host, config.ui_port,
                  "/gateways/" + config.gateway_id + "/messages")
        req.authorize(self.session)
        response, content = req()

        self.assertEqual(200, response.status)
        messages = json.loads(content)["data"]
        self.assertEqual(messages_count + 1, len(messages))

        message = None
        for m in messages:
            if m["at"] == 1546363722909:
                message = m

        self.assertIsNotNone(message)
        self.assertEqual("info", message["severity"])
        self.assertEqual("gateway.some_message", message["key"])
        self.assertEqual("unknown", message["context"]["reason"])
        self.assertEqual(1, message["context"]["attempt"])
        self.assertEqual(True, message["context"]["valid"])
    def test2_last_value_fail(self):
        id = str(uuid.uuid4())

        msg = json.dumps({
            "message_type": "last_value_request",
            "id": id,
            "device_id": "0xa32d27aa5e94ecfd",
            "module_id": 1
        })

        self.ws.send(msg)
        msg = json.loads(self.ws.recv())

        self.assertEqual("last_value_response", msg["message_type"])
        self.assertEqual(id, msg["id"])
        self.assertEqual(2, msg["status"])
        assureNotClosed(self, self.ws)
Exemple #6
0
    def test1_device_list_success_3_virtual(self):
        id = str(uuid.uuid4())

        msg = json.dumps({
            "message_type": "device_list_request",
            "id": id,
            "device_prefix": "VirtualDevice"
        })

        self.ws.send(msg)
        self.ws.settimeout(
            5)  # this can take more time, suboptimal implementation
        msg = json.loads(self.ws.recv())

        self.assertEqual("device_list_response", msg["message_type"])
        self.assertEqual(id, msg["id"])
        self.assertEqual(1, msg["status"])
        self.assertEqual(3, len(msg["devices"]))
        self.assertEqual("0xa32d27aa5e94ecfd", msg["devices"][0]["device_id"])
        self.assertEqual("0xa335d00019f5234e", msg["devices"][1]["device_id"])
        self.assertEqual("0xa37e0f7f0302324d", msg["devices"][2]["device_id"])

        self.assertEqual(2, len(msg["values"]))
        self.assertIn("0xa32d27aa5e94ecfd", msg["values"])
        self.assertIn("0", msg["values"]["0xa32d27aa5e94ecfd"])
        self.assertNotIn("1", msg["values"]["0xa32d27aa5e94ecfd"])
        self.assertEqual(20, msg["values"]["0xa32d27aa5e94ecfd"]["0"])

        self.assertIn("0xa335d00019f5234e", msg["values"])
        self.assertIn("0", msg["values"]["0xa335d00019f5234e"])
        self.assertIn("1", msg["values"]["0xa335d00019f5234e"])
        self.assertIn("2", msg["values"]["0xa335d00019f5234e"])
        self.assertNotIn("3", msg["values"]["0xa335d00019f5234e"])
        self.assertEqual(19.5, msg["values"]["0xa335d00019f5234e"]["0"])
        self.assertEqual(0, msg["values"]["0xa335d00019f5234e"]["1"])
        # 0xa335d00019f5234e[2] is a random value and cannot be easily tested

        self.assertEqual("10.0.0.1",
                         msg["config"]["0xa32d27aa5e94ecfd"]["ip-address"])
        self.assertEqual("super-secret",
                         msg["config"]["0xa32d27aa5e94ecfd"]["password"])
        self.assertEqual("v1.0-6453",
                         msg["config"]["0xa335d00019f5234e"]["firmware"])

        assureNotClosed(self, self.ws)
Exemple #7
0
    def test2_device_list_success_0_jablotron(self):
        id = str(uuid.uuid4())

        msg = json.dumps({
            "message_type": "device_list_request",
            "id": id,
            "device_prefix": "Jablotron"
        })

        self.ws.send(msg)
        msg = json.loads(self.ws.recv())

        self.assertEqual("device_list_response", msg["message_type"])
        self.assertEqual(id, msg["id"])
        self.assertEqual(1, msg["status"])
        self.assertEqual(0, len(msg["devices"]))
        self.assertNotIn("values", msg)
        assureNotClosed(self, self.ws)
    def test1_export_successful(self):
        id = str(uuid.uuid4())
        timestamp = int(time.time() * 1000000)

        msg = json.dumps({
            "message_type":
            "sensor_data_export",
            "id":
            id,
            "data": [{
                "device_id":
                "0xa32d27aa5e94ecfd",
                "timestamp":
                timestamp,
                "values": [{
                    "module_id": "0",
                    "value": 30.0,
                    "valid": "true"
                }, {
                    "module_id": "1",
                    "valid": "false"
                }, {
                    "module_id": "2",
                    "value": 60.0,
                    "valid": "true"
                }]
            }]
        })

        self.ws.send(msg)
        msg = json.loads(self.ws.recv())

        self.assertEqual("sensor_data_confirm", msg["message_type"])
        self.assertEqual(id, msg["id"])
        assureNotClosed(self, self.ws)

        event = self.zmq.pop_data()
        self.assertEqual("on-sensor-data", event["event"])
        self.assertEqual(config.gateway_id, event["gateway_id"])
        self.assertEqual("0xa32d27aa5e94ecfd", event["device_id"])
        self.assertEqual(timestamp, event["timestamp"])
        self.assertEqual(30, event["data"]["0"])
        self.assertIsNone(event["data"]["1"])
        self.assertEqual(60, event["data"]["2"])
    def test1_notice_valid(self):
        id = str(uuid.uuid4())

        req = GET(config.ui_host, config.ui_port,
                  "/gateways/" + config.gateway_id + "/messages")
        req.authorize(self.session)
        response, content = req()
        self.assertEqual(200, response.status)
        messages_count = len(json.loads(content)["data"])

        msg = json.dumps({
            "id": id,
            "message_type": "notice_request",
            "at": 1546363722908213,
            "severity": "error",
            "key": "pair_device_failed",
            "context": {
                "gateway_id": config.gateway_id,
                "device_id": "0xa701020311223344"
            }
        })

        self.ws.send(msg)
        response = json.loads(self.ws.recv())

        self.assertEqual("generic_response", response["message_type"])
        self.assertEqual(id, response["id"])
        assureNotClosed(self, self.ws)

        req = GET(config.ui_host, config.ui_port,
                  "/gateways/" + config.gateway_id + "/messages")
        req.authorize(self.session)
        response, content = req()
        self.assertEqual(200, response.status)
        messages = json.loads(content)["data"]
        self.assertEqual(messages_count + 1, len(messages))
        self.assertEqual(1546363722908, messages[0]["at"])
        self.assertEqual("error", messages[0]["severity"])
        self.assertEqual("gateway.pair_device_failed", messages[0]["key"])
        self.assertEqual(config.gateway_id,
                         messages[0]["context"]["gateway_id"])
        self.assertEqual("0xa701020311223344",
                         messages[0]["context"]["device_id"])
	def test7_new_device_with_unknown_modules(self):
		id = str(uuid.uuid4())

		msg1 = json.dumps({
			"message_type" : "new_device_request",
			"id" : id,
			"device_id" : "0xa123123412355431",
			"vendor" : "Unknown sensors producer",
			"product_name" : "Device with unknown sensors",
			"refresh_time" : 30,
			"module_types" : [
				{
					"type" : "unknown",
					"attributes" : []
				},
				{
					"type" : "unknown",
					"attributes" : [
						{"attribute": "controllable"}
					]
				}
			]
		})

		self.ws.send(msg1)
		response = json.loads(self.ws.recv())

		self.assertEqual("generic_response", response["message_type"])
		self.assertEqual(id, response["id"])
		self.assertEqual(1, response["status"])
		assureNotClosed(self, self.ws)

		event = self.zmq.pop_data()
		self.assertEqual("on-new-device", event["event"])
		self.assertEqual("0xa123123412355431", event["device_id"])
		self.assertEqual("Device with unknown sensors", event["device_name"])
		self.assertEqual(2, len(event["modules"]))
		self.assertEqual("temperature", event["modules"][0]["type"])
		self.assertEqual(0, event["modules"][0]["controllable"])
		self.assertEqual("temperature", event["modules"][1]["type"])
		self.assertEqual(1, event["modules"][1]["controllable"])
		self.assertEqual(config.gateway_id, event["gateway_id"])
Exemple #11
0
    def test4_new_device_group_fail_invalid_module(self):
        id = str(uuid.uuid4())

        msg = json.dumps({
            "message_type":
            "new_device_group_request",
            "id":
            id,
            "group_name":
            "Group",
            "vendor":
            "BeeeOn",
            "devices": [{
                "device_id":
                "0xa100998877665544",
                "product_name":
                "Internal Pressure v1.0",
                "refresh_time":
                30,
                "module_types": [{
                    "type": "humidity",
                    "attributes": [{
                        "attribute": "inner"
                    }]
                }]
            }]
        })

        self.ws.send(msg)
        msg = json.loads(self.ws.recv())

        self.assertEqual("generic_response", msg["message_type"])
        self.assertEqual(id, msg["id"])
        self.assertEqual(2, msg["status"])
        assureNotClosed(self, self.ws)

        event = self.zmq.pop_data()
        self.assertEqual("on-refused-new-device", event["event"])
        self.assertEqual("0xa100998877665544", event["device_id"])
        self.assertEqual(config.gateway_id, event["gateway_id"])
Exemple #12
0
    def test4_register_success_repeatedly(self):
        ws0 = websocket.WebSocket()
        ws1 = websocket.WebSocket()

        msg = json.dumps({
            "gateway_id": config.gateway_id,
            "ip_address": "192.168.1.1",
            "message_type": "gateway_register",
            "version": "v1.0"
        })

        ws0.connect(config.gws_ws_uri)
        ws0.send(msg)
        response = json.loads(ws0.recv())

        self.assertEqual("gateway_accepted", response["message_type"])
        assureNotClosed(self, ws0)

        event = self.zmq.pop_data()
        self.assertEqual("on-connected", event["event"])
        self.assertEqual(config.gateway_id, event["gateway_id"])

        ws1.connect(config.gws_ws_uri)
        ws1.send(msg)
        response = json.loads(ws1.recv())

        self.assertEqual("gateway_accepted", response["message_type"])
        assureIsClosed(self, ws0)
        assureNotClosed(self, ws1)

        event = self.zmq.pop_data()
        self.assertEqual("on-reconnected", event["event"])
        self.assertEqual(config.gateway_id, event["gateway_id"])

        ws1.close()

        event = self.zmq.pop_data()
        self.assertEqual("on-disconnected", event["event"])
        self.assertEqual(config.gateway_id, event["gateway_id"])
	def test1_new_device_success(self):
		id = str(uuid.uuid4())

		msg = json.dumps({
			"message_type" : "new_device_request",
			"id" : id,
			"device_id" : "0xa123123412341234",
			"vendor" : "BeeeOn",
			"product_name" : "Internal Pressure v1.0",
			"refresh_time" : 30,
			"module_types" : [
				{
					"type" : "pressure",
					"attributes" : [
						{"attribute" : "inner"}
					]
				}
			],
			"ip_address" : "10.0.0.1",
			"mac_address": "00:11:22:33:44:55",
			"firmware": "v1.0"
		})

		self.ws.send(msg)
		response = json.loads(self.ws.recv())

		self.assertEqual("generic_response", response["message_type"])
		self.assertEqual(id, response["id"])
		self.assertEqual(1, response["status"])
		assureNotClosed(self, self.ws)

		event = self.zmq.pop_data()
		self.assertEqual("on-new-device", event["event"])
		self.assertEqual("0xa123123412341234", event["device_id"])
		self.assertEqual("Internal Pressure v1.0", event["device_name"])
		self.assertEqual(1, len(event["modules"]))
		self.assertEqual("pressure", event["modules"][0]["type"])
		self.assertEqual(config.gateway_id, event["gateway_id"])
	def test5_new_device_fail_too_many_modules(self):
		id = str(uuid.uuid4())

		msg = json.dumps({
			"message_type" : "new_device_request",
			"id" : id,
			"device_id" : "0xa123123412342222",
			"vendor" : "BeeeOn",
			"product_name" : "Internal Pressure v1.0",
			"refresh_time" : 30,
			"module_types" : [
				{
					"type" : "pressure",
					"attributes" : [
						{"attribute" : "inner"}
					]
				},
				{
					"type" : "humidity",
					"attributes" : []
				}
			]
		})

		self.ws.send(msg)
		response = json.loads(self.ws.recv())

		self.assertEqual("generic_response", response["message_type"])
		self.assertEqual(id, response["id"])
		self.assertEqual(2, response["status"])
		assureNotClosed(self, self.ws)

		event = self.zmq.pop_data()
		self.assertEqual("on-refused-new-device", event["event"])
		self.assertEqual("0xa123123412342222", event["device_id"])
		self.assertEqual(config.gateway_id, event["gateway_id"])
Exemple #15
0
    def test1_new_device_group_success(self):
        id = str(uuid.uuid4())

        msg = json.dumps({
            "message_type":
            "new_device_group_request",
            "id":
            id,
            "group_name":
            "BeeeOn Group",
            "vendor":
            "BeeeOn",
            "devices": [{
                "device_id":
                "0xa100998877665511",
                "product_name":
                "Internal Pressure v1.0",
                "refresh_time":
                30,
                "module_types": [{
                    "type": "pressure",
                    "attributes": [{
                        "attribute": "inner"
                    }]
                }]
            }, {
                "device_id":
                "0xa100998877665522",
                "product_name":
                "Temperature Humidity v1.0",
                "refresh_time":
                30,
                "module_types": [{
                    "type": "temperature",
                    "attributes": [{
                        "attribute": "inner"
                    }]
                }, {
                    "type": "temperature",
                    "attributes": [{
                        "attribute": "outer"
                    }]
                }, {
                    "type": "humidity",
                    "attributes": [{
                        "attribute": "inner"
                    }]
                }, {
                    "type": "battery",
                    "attributes": []
                }, {
                    "type": "rssi",
                    "attributes": []
                }]
            }]
        })

        self.ws.send(msg)
        msg = json.loads(self.ws.recv())

        self.assertEqual("generic_response", msg["message_type"])
        self.assertEqual(id, msg["id"])
        self.assertEqual(1, msg["status"])
        assureNotClosed(self, self.ws)

        event = self.zmq.pop_data()
        self.assertEqual("on-new-device", event["event"])
        self.assertEqual("0xa100998877665511", event["device_id"])
        self.assertEqual(config.gateway_id, event["gateway_id"])

        event = self.zmq.pop_data()
        self.assertEqual("on-new-device", event["event"])
        self.assertEqual("0xa100998877665522", event["device_id"])
        self.assertEqual(config.gateway_id, event["gateway_id"])
	def test6_new_device_and_update(self):
		id = str(uuid.uuid4())

		msg1 = json.dumps({
			"message_type" : "new_device_request",
			"id" : id,
			"device_id" : "0xa123123412343333",
			"vendor" : "Availability",
			"product_name" : "",
			"refresh_time" : 30,
			"module_types" : [
				{
					"type" : "availability",
					"attributes" : []
				}
			],
			"serial_number": "122342341231"
		})

		self.ws.send(msg1)
		response = json.loads(self.ws.recv())

		self.assertEqual("generic_response", response["message_type"])
		self.assertEqual(id, response["id"])
		self.assertEqual(1, response["status"])
		assureNotClosed(self, self.ws)

		notification = self.zmq.pop_data()
		self.assertEqual("on-new-device", notification["event"])
		self.assertEqual("0xa123123412343333", notification["device_id"])
		self.assertNotIn("device_name", notification)
		self.assertEqual(1, len(notification["modules"]))
		self.assertEqual("availability", notification["modules"][0]["type"])
		self.assertEqual(config.gateway_id, notification["gateway_id"])

		msg2 = json.dumps({
			"message_type" : "new_device_request",
			"id" : id,
			"device_id" : "0xa123123412343333",
			"vendor" : "Availability",
			"name": "Super device",
			"product_name" : "",
			"refresh_time" : 30,
			"module_types" : [
				{
					"type" : "availability",
					"attributes" : []
				}
			],
			"serial_number": "122342341231"
		})

		self.ws.send(msg2)
		response = json.loads(self.ws.recv())

		self.assertEqual("generic_response", response["message_type"])
		self.assertEqual(id, response["id"])
		self.assertEqual(1, response["status"])
		assureNotClosed(self, self.ws)

		notification = self.zmq.pop_data()
		self.assertEqual("on-new-device", notification["event"])
		self.assertEqual("0xa123123412343333", notification["device_id"])
		self.assertEqual("Super device", notification["device_name"])
		self.assertEqual(1, len(notification["modules"]))
		self.assertEqual("availability", notification["modules"][0]["type"])
		self.assertEqual(config.gateway_id, notification["gateway_id"])