def test_bytes2str():
    testString = "This is my special string to test the encoding"
    assert bytes2str(testString.encode("utf-8")) == testString
    assert bytes2str(testString.encode("utf-8-sig")) == testString
    assert bytes2str(testString.encode("utf-16")) == testString
    assert bytes2str(testString.encode("utf-32")) == testString
    assert bytes2str(testString.encode("utf-16-be")) == testString
    assert bytes2str(testString.encode("utf-32-be")) == testString
    assert bytes2str(testString.encode("utf-16-le")) == testString
    assert bytes2str(testString.encode("utf-32-le")) == testString
    assert bytes2str(testString) == testString
    with pytest.raises(TypeError):
        assert bytes2str(44) == testString
def test_bytes2str():
    testString = 'This is my special string to test the encoding'
    assert bytes2str(testString.encode('utf-8')) == testString
    assert bytes2str(testString.encode('utf-8-sig')) == testString
    assert bytes2str(testString.encode('utf-16')) == testString
    assert bytes2str(testString.encode('utf-32')) == testString
    assert bytes2str(testString.encode('utf-16-be')) == testString
    assert bytes2str(testString.encode('utf-32-be')) == testString
    assert bytes2str(testString.encode('utf-16-le')) == testString
    assert bytes2str(testString.encode('utf-32-le')) == testString
    assert bytes2str(testString) == testString
    with pytest.raises(TypeError):
        assert bytes2str(44) == testString
def test_bytes2str():
    testString = 'This is my special string to test the encoding'
    assert bytes2str(testString.encode('utf-8')) == testString
    assert bytes2str(testString.encode('utf-8-sig')) == testString
    assert bytes2str(testString.encode('utf-16')) == testString
    assert bytes2str(testString.encode('utf-32')) == testString
    assert bytes2str(testString.encode('utf-16-be')) == testString
    assert bytes2str(testString.encode('utf-32-be')) == testString
    assert bytes2str(testString.encode('utf-16-le')) == testString
    assert bytes2str(testString.encode('utf-32-le')) == testString
    def _ws_on_message(self, ws, message):
        #json.loads doesn't support bytes as parameter before python 3.6
        js = json.loads(bytes2str(message))
        # LOGGER.debug(js)
        eventList = []
        try:
            for event in js["events"].values():
                pushEventType = event["pushEventType"]
                LOGGER.debug(pushEventType)
                obj = None
                if pushEventType == EVENT_GROUP_CHANGED:
                    data = event["group"]
                    obj = self.search_group_by_id(data["id"])
                    if type(obj) is MetaGroup:
                        obj.from_json(data, self.devices, self.groups)
                    else:
                        obj.from_json(data, self.devices)
                    obj.fire_update_event(data, event_type=pushEventType, obj=obj)
                elif pushEventType == EVENT_HOME_CHANGED:
                    data = event["home"]
                    obj = self
                    obj.from_json(data)
                    obj.fire_update_event(data, event_type=pushEventType, obj=obj)
                elif pushEventType == EVENT_CLIENT_ADDED:
                    data = event["client"]
                    obj = Client(self._connection)
                    obj.from_json(data)
                    self.clients.append(obj)
                elif pushEventType == EVENT_CLIENT_CHANGED:
                    data = event["client"]
                    obj = self.search_client_by_id(data["id"])
                    obj.from_json(data)
                elif pushEventType == EVENT_CLIENT_REMOVED:
                    obj = self.search_client_by_id(event["id"])
                    self.clients.remove(obj)
                elif pushEventType == EVENT_DEVICE_ADDED:
                    data = event["device"]
                    obj = self._parse_device(data)
                    self.devices.append(obj)
                elif pushEventType == EVENT_DEVICE_CHANGED:
                    data = event["device"]
                    obj = self.search_device_by_id(data["id"])
                    if obj is None:  # no DEVICE_ADDED Event?
                        obj = self._parse_device(data)
                        self.devices.append(obj)
                    else:
                        obj.from_json(data)
                    obj.fire_update_event(data, event_type=pushEventType, obj=obj)
                elif pushEventType == EVENT_DEVICE_REMOVED:
                    obj = self.search_device_by_id(event["id"])
                    self.devices.remove(obj)
                elif pushEventType == EVENT_GROUP_REMOVED:
                    obj = self.search_group_by_id(event["id"])
                    self.groups.remove(obj)
                elif pushEventType == EVENT_GROUP_ADDED:
                    group = event["group"]
                    obj = self._parse_group(group)
                    self.groups.append(obj)
                elif pushEventType == EVENT_SECURITY_JOURNAL_CHANGED:
                    pass  # data is just none so nothing to do here

                # TODO: implement INCLUSION_REQUESTED, NONE
                else:
                    LOGGER.warning("Uknown EventType '%s' Data: %s", pushEventType, event)
                eventList.append({"eventType": pushEventType, "data": obj})
        except Exception as err:
            LOGGER.exception(err)
        self.onEvent.fire(eventList)
 def _ws_on_error(self, ws, message):
     LOGGER.error("Websocket error: %s", bytes2str(message))