class TestCaseFiwareSubscriptions(TestCase):
    url = "http://127.0.0.1:1026"

    def setUp(self):
        self.fiware_manager = OrionConnector(self.url)

    def tearDown(self):
        self._clear_subscriptions()

    def _clear_subscriptions(self):
        response = self.fiware_manager._request(
            method='get',
            url=self.url + "/v2/subscriptions",
            headers={'Accept': 'application/json'})
        if response.status // 200 != 1:
            raise Exception(response.data)
        for entity in json.loads(response.data.decode('utf-8')):
            response = self.fiware_manager._request(
                method='delete',
                url=self.url + "/v2/subscriptions/" + entity["id"],
                headers={'Accept': 'application/json'})

            if response.status // 200 != 1:
                raise Exception(response.data)

    def _get_subscription(self, url):
        response = self.fiware_manager._request(
            method='get',
            url=self.url + url,
            headers={'Accept': 'application/json'})

        if response.status // 200 != 1:
            raise Exception(response.data)
        return json.loads(response.data.decode('utf-8'))

    def _delete_subscription(self, url):
        response = self.fiware_manager._request(
            method='delete',
            url=self.url + "/" + url,
            headers={'Accept': 'application/json'})

        if response.status // 200 != 1:
            raise Exception(response.data)

    def _create_subscription(self, data):
        response = self.fiware_manager._request(method='post',
                                                url=self.url +
                                                "/v2/subscriptions",
                                                body=data,
                                                headers={
                                                    'Accept':
                                                    'application/json',
                                                    "Content-Type":
                                                    "application/json"
                                                })

        if response.status // 200 != 1:
            raise Exception(response.data)
        return response.headers["location"].split(
            '/')[-1], response.headers["location"]
Пример #2
0
def create_entity(oc: pyfiware.OrionConnector, entity_id: str,
                  element_type: str, data: Dict):
    try:
        print("Deleting entity with id: {}".format(entity_id))
        oc.delete(entity_id=entity_id)
    except pyfiware.FiException as err:
        print("Entity with id {} does not exist.".format(entity_id))
        print(err.message)

    print("Creating entity with id: {}".format(entity_id))

    oc.create(element_id=entity_id, element_type=element_type, attributes=data)
Пример #3
0
class TestFiwareManagerDeletions(TestCase):
    url = "http://127.0.0.1:1026"

    def setUp(self):
        self.fiware_manager = OrionConnector(self.url)

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=404, data='')))
    def test_delete_fails(self):
        with self.assertRaises(FiException):
            self.fiware_manager.delete(entity_id="1")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=404, data='')))
    def test_delete_fails_silent(self):
        self.fiware_manager.delete(entity_id="1", silent=True)

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=500, data='')))
    def test_delete_fails_no_silent(self):
        with self.assertRaises(FiException):
            self.fiware_manager.delete(entity_id="1", silent=True)

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=200, data='')))
    def test_delete_success(self):
        self.fiware_manager.delete(entity_id="1")
        self.fiware_manager._request.assert_called_with(
            method='DELETE',
            url=self.url + '/v2/entities/' + "1",
            headers={'Accept': 'application/json'},
        )
Пример #4
0
def post_entity_context_update(oc: pyfiware.OrionConnector, entity_id: str,
                               element_type: str, data: Dict):
    device = oc.get(entity_id=entity_id)
    if device:
        oc.patch(element_id=entity_id,
                 element_type=element_type,
                 attributes={
                     'type': 'StructuredValue',
                     'value': data,
                     "metadata": {}
                 })

        device = oc.get(entity_id=entity_id)
        print(device)
Пример #5
0
 def setUp(self):
     self.fiware_manager = OrionConnector(self.url)
Пример #6
0
class TestFiwareManagerPatch(TestCase):
    url = "http://127.0.0.1:1026"

    def setUp(self):
        self.fiware_manager = OrionConnector(self.url)

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=204, data='')))
    def test_patch_success(self):
        attributes = {
            "temperature": {
                "value": 26.5,
                "type": "Float"
            },
            "pressure": {
                "value": 763,
                "type": "Float"
            }
        }

        self.fiware_manager.patch(element_id="1",
                                  element_type="FAKE",
                                  **attributes)
        self.fiware_manager._request.assert_called_with(
            method='PATCH',
            url=self.url + '/v2/entities/' + "1" + "/attrs" + "?type=" +
            "FAKE",
            body={
                "pressure": {
                    "value": 763,
                    "type": "Float"
                },
                "temperature": {
                    "value": 26.5,
                    "type": "Float"
                }
            },
            headers={
                'Content-Type': 'application/json',
                'Accept': 'application/json'
            },
        )

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=404, data='')))
    def test_patch_fails(self):
        attributes = {
            "temperature": {
                "value": 26.5,
                "type": "Float"
            },
            "pressure": {
                "value": 763,
                "type": "Float"
            }
        }

        with self.assertRaises(FiException):
            self.fiware_manager.patch(element_id="1",
                                      element_type="FAKE",
                                      **attributes)
Пример #7
0
class TestFiwareManagerQueries(TestCase):
    url = "http://127.0.0.1:1026"

    def setUp(self):
        self.fiware_manager = OrionConnector(self.url)

    @patch.object(
        OrionConnector, "_request",
        Mock(return_value=DummyResponse(
            status=404,
            data=
            '{"error":"NotFound","description":"The requested entity has not been found. Check type and id"}'
        )))
    def test_get_by_id_empty(self):
        response = self.fiware_manager.get("wrongID")
        self.assertIsNone(response, "Not empty response")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=200, data='{"id":"CorrectID","type":"fake"}')))
    def test_get_by_id_found(self):
        correct_id = "CorrectID"
        response = self.fiware_manager.get(correct_id)
        self.assertEqual(response["id"], correct_id, "Not correct element")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=200, data='{"id":"CorrectID","type":"fake"}')))
    def test_get_by_id_request(self):
        correct_id = "CorrectID"
        self.fiware_manager.get(correct_id)
        self.fiware_manager._request.assert_called_with(
            method='GET',
            url=self.url + '/v2/entities/' + correct_id,
            headers={'Accept': 'application/json'},
            fields={})

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=500, data='{"error":"Everything Blew up"}')))
    def test_get_by_id_error(self):
        with self.assertRaises(FiException):
            self.fiware_manager.get("NOSENSE")

    @patch.object(
        OrionConnector, "_request",
        Mock(return_value=DummyResponse(
            status=404,
            data=
            '{"error":"NotFound","description":"The requested entity has not been found. Check type and id"}'
        )))
    def test_get_no_result(self):
        # No Results

        response = self.fiware_manager.search(entity_type="WrongType")
        self.assertEqual(response, [], "Not empty response")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=200,
                      data='[{"id":"CorrectID","type":"fake"}]',
                      headers={"fiware-total-count": 1})))
    def test_get_single_result(self):
        response = self.fiware_manager.search(entity_type="fake")
        self.assertEqual(type(response), list, "Not a list")
        self.assertEqual(len(response), 1, "Not unique")

    @patch.object(
        OrionConnector, "_request",
        Mock(return_value=DummyResponse(status=200,
                                        data='[{"id":"1","type":"fake"},' +
                                        '{"id":"2","type":"fake"}]',
                                        headers={"fiware-total-count": 2})))
    def test_get_multiple_result(self):
        response = self.fiware_manager.search()
        self.assertEqual(type(response), list, "Not a list")
        self.assertGreater(len(response), 1, "Unique results")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=500, data='{"error":"Everything Blew up"}')))
    def test_get_exception(self):
        # Raise exceptions

        with self.assertRaises(FiException):
            self.fiware_manager.search()

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=200,
                      data='[{"id":"CorrectID","type":"fake"}]',
                      headers={"fiware-total-count": 1})))
    def test_get_queries_id_pattern(self):
        self.fiware_manager.search(id_pattern="id*/")
        self.fiware_manager._request.assert_called_with(
            method='GET',
            url=self.url + '/v2/entities',
            headers={'Accept': 'application/json'},
            fields={
                'options': 'count',
                'limit': 1000,
                'idPattern': 'id*/'
            })

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=200,
                      data='[{"id":"CorrectID","type":"fake"}]',
                      headers={"fiware-total-count": 1})))
    def test_get_queries_type(self):
        self.fiware_manager.search(query="something > 500")
        self.fiware_manager._request.assert_called_with(
            method='GET',
            url=self.url + '/v2/entities',
            headers={'Accept': 'application/json'},
            fields={
                'options': 'count',
                'limit': 1000,
                'q': 'something > 500'
            })
Пример #8
0
class TestFiwareManagerCreations(TestCase):
    url = "http://127.0.0.1:1026"

    def setUp(self):
        self.fiware_manager = OrionConnector(self.url)

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201, data='')))
    def test_create_blank(self):
        self.fiware_manager.create(element_id="1", element_type="fake")
        self.fiware_manager._request.assert_called_with(method='POST',
                                                        url=self.url +
                                                        '/v2/entities',
                                                        headers={
                                                            'Accept':
                                                            'application/json',
                                                            "Content-Type":
                                                            "application/json"
                                                        },
                                                        body={
                                                            'id': '1',
                                                            'type': 'fake'
                                                        })

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201, data='')))
    def test_create_parameters(self):
        self.fiware_manager.create(element_id="1",
                                   element_type="fake",
                                   weight=300,
                                   size="100l")
        self.fiware_manager._request.assert_called_with(
            method='POST',
            url=self.url + '/v2/entities',
            headers={
                'Accept': 'application/json',
                "Content-Type": "application/json"
            },
            body={
                'id': '1',
                'type': 'fake',
                'weight': {
                    'value': 300,
                    'type': 'Integer'
                },
                'size': {
                    'value': "100l",
                    'type': "String"
                }
            })

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201, data='')))
    def test_create_dict(self):
        self.fiware_manager.create(element_id="1",
                                   element_type="fake",
                                   **{
                                       'weight': 300,
                                       'size': "100l"
                                   })
        self.fiware_manager._request.assert_called_with(
            method='POST',
            url=self.url + '/v2/entities',
            headers={
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body={
                'id': '1',
                'type': 'fake',
                'weight': {
                    'value': 300,
                    'type': 'Integer'
                },
                'size': {
                    'value': "100l",
                    'type': "String"
                }
            })

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=403, data='')))
    def test_create_raises(self):
        with self.assertRaises(FiException):
            self.fiware_manager.create(element_id="1",
                                       element_type="fake",
                                       **{
                                           'weight': 300,
                                           'size': "100l"
                                       })

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201, data='')))
    def test_create_no_id(self):
        with self.assertRaises(TypeError):
            self.fiware_manager.create(entity_type="fake")  # pylint: disable=no-value-for-parameter

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201, data='')))
    def test_create_no_type(self):
        with self.assertRaises(TypeError):
            self.fiware_manager.create(element_id="1")  # pylint: disable=no-value-for-parameter
Пример #9
0
class TestFiwareManagerSubscriptions(TestCase):
    url = "http://127.0.0.1:1026"

    def setUp(self):
        self.fiware_manager = OrionConnector(self.url)

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=201, data='', headers={'location': 'URL'})))
    def test_subscribe(self):
        self.fiware_manager.subscribe(
            description="One subscription to rule them all",
            entities=[{
                "idPattern": ".*",
                "type": "Room"
            }],
            condition_expression={"q": "temperature>40"},
            condition_attributes=["temperature"],
            http="http://*****:*****@patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=403,
                      data='Something goes wrong',
                  )))
    def test_subscribe_fail(self):
        with self.assertRaises(FiException):
            self.fiware_manager.subscribe(
                description="One subscription to rule them all",
                entities=[{
                    "idPattern": ".*",
                    "type": "Room"
                }],
                condition_expression={"q": "temperature>40"},
                condition_attributes=["temperature"],
                http="http://*****:*****@patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=201, data='', headers={'location': 'URL'})))
    def test_unsubscribe_url(self):
        self.fiware_manager.unsubscribe(url="v2/subscriptions/fakeURL")

        self.fiware_manager._request.assert_called_with(
            method='DELETE',
            url=self.url + '/v2/subscriptions/' + "fakeURL",
        )

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=201, data='', headers={'location': 'URL'})))
    def test_unsubscribe_id(self):
        self.fiware_manager.unsubscribe(subscription_id="fakeID")

        self.fiware_manager._request.assert_called_with(
            method='DELETE',
            url=self.url + '/v2/subscriptions/' + "fakeID",
        )

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=401,
                      data='Something goes wrong',
                  )))
    def test_unsubscribe_fails(self):
        with self.assertRaises(FiException):
            self.fiware_manager.unsubscribe(url="v2/subscriptions/fakeURL")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201,
                                                  data="""{
            "description": "One subscription to rule them all",
            "subject": {
              "entities": [
                {
                  "idPattern": ".*",
                  "type": "Room"
                }
              ],
              "condition": {
                "attrs": [
                  "temperature"
                ],
                "expression": {
                  "q": "temperature>40"
                }
              }
            },
            "notification": {
              "http": {
                "url": "http://*****:*****@patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(
                      status=403,
                      data='Something goes wrong',
                  )))
    def test_subscription_fails(self):
        with self.assertRaises(FiException):
            self.fiware_manager.subscription(subscription_id="fakeURL")

    @patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=201, data='')))
    def test_subscription_update(self):
        ID = "FAKE"

        self.fiware_manager.subscription_update(subscription_id=ID,
                                                status="active",
                                                http="http://*****:*****@patch.object(OrionConnector, "_request",
                  Mock(return_value=DummyResponse(status=401, data='')))
    def test_subscription_update_fail(self):
        ID = "WRONG"
        with self.assertRaises(FiException):
            self.fiware_manager.subscription_update(
                subscription_id=ID,
                status="active",
                http="http://localhost:1234")
 def setUp(self):
     self.fiware_manager = OrionConnector(self.url)
     self._clear_entities()