예제 #1
0
async def test_openalpr_process_image(alpr_events, setup_openalpr_cloud, hass,
                                      aioclient_mock):
    """Set up and scan a picture and test plates from event."""
    aioclient_mock.post(
        OPENALPR_API_URL,
        params=PARAMS,
        text=load_fixture("alpr_cloud.json"),
        status=200,
    )

    with patch(
            "homeassistant.components.camera.async_get_image",
            return_value=camera.Image("image/jpeg", b"image"),
    ):
        common.async_scan(hass, entity_id="image_processing.test_local")
        await hass.async_block_till_done()

    state = hass.states.get("image_processing.test_local")

    assert len(aioclient_mock.mock_calls) == 1
    assert len(alpr_events) == 5
    assert state.attributes.get("vehicles") == 1
    assert state.state == "H786P0J"

    event_data = [
        event.data for event in alpr_events
        if event.data.get("plate") == "H786P0J"
    ]
    assert len(event_data) == 1
    assert event_data[0]["plate"] == "H786P0J"
    assert event_data[0]["confidence"] == float(90.436699)
    assert event_data[0]["entity_id"] == "image_processing.test_local"
예제 #2
0
    def test_openalpr_process_image(self, aioclient_mock):
        """Set up and scan a picture and test plates from event."""
        aioclient_mock.post(OPENALPR_API_URL,
                            params=self.params,
                            text=load_fixture('alpr_cloud.json'),
                            status=200)

        with patch('homeassistant.components.camera.async_get_image',
                   return_value=mock_coro(camera.Image('image/jpeg',
                                                       b'image'))):
            ip.scan(self.hass, entity_id='image_processing.test_local')
            self.hass.block_till_done()

        state = self.hass.states.get('image_processing.test_local')

        assert len(aioclient_mock.mock_calls) == 1
        assert len(self.alpr_events) == 5
        assert state.attributes.get('vehicles') == 1
        assert state.state == 'H786P0J'

        event_data = [
            event.data for event in self.alpr_events
            if event.data.get('plate') == 'H786P0J'
        ]
        assert len(event_data) == 1
        assert event_data[0]['plate'] == 'H786P0J'
        assert event_data[0]['confidence'] == float(90.436699)
        assert event_data[0]['entity_id'] == \
            'image_processing.test_local'
예제 #3
0
    def test_openalpr_process_image_api_timeout(self, aioclient_mock):
        """Set up and scan a picture and test api error."""
        aioclient_mock.post(OPENALPR_API_URL,
                            params=self.params,
                            exc=asyncio.TimeoutError())

        with patch('homeassistant.components.camera.async_get_image',
                   return_value=mock_coro(camera.Image('image/jpeg',
                                                       b'image'))):
            ip.scan(self.hass, entity_id='image_processing.test_local')
            self.hass.block_till_done()

        assert len(aioclient_mock.mock_calls) == 1
        assert len(self.alpr_events) == 0
예제 #4
0
async def test_openalpr_process_image_api_timeout(alpr_events,
                                                  setup_openalpr_cloud, hass,
                                                  aioclient_mock):
    """Set up and scan a picture and test api error."""
    aioclient_mock.post(OPENALPR_API_URL,
                        params=PARAMS,
                        exc=asyncio.TimeoutError())

    with patch(
            "homeassistant.components.camera.async_get_image",
            return_value=camera.Image("image/jpeg", b"image"),
    ):
        common.async_scan(hass, entity_id="image_processing.test_local")
        await hass.async_block_till_done()

    assert len(aioclient_mock.mock_calls) == 1
    assert len(alpr_events) == 0
    def test_openalpr_process_image_api_error(self, aioclient_mock):
        """Set up and scan a picture and test api error."""
        aioclient_mock.post(
            OPENALPR_API_URL,
            params=self.params,
            text="{'error': 'error message'}",
            status=400,
        )

        with patch(
                "homeassistant.components.camera.async_get_image",
                return_value=camera.Image("image/jpeg", b"image"),
        ):
            common.scan(self.hass, entity_id="image_processing.test_local")
            self.hass.block_till_done()

        assert len(aioclient_mock.mock_calls) == 1
        assert len(self.alpr_events) == 0
예제 #6
0
파일: test_init.py 프로젝트: 2Fake/core
async def test_service_face(hass, aioclient_mock):
    """Set up component, test person face services."""
    aioclient_mock.get(
        ENDPOINT_URL.format("persongroups"),
        text=load_fixture("microsoft_face_persongroups.json"),
    )
    aioclient_mock.get(
        ENDPOINT_URL.format("persongroups/test_group1/persons"),
        text=load_fixture("microsoft_face_persons.json"),
    )
    aioclient_mock.get(
        ENDPOINT_URL.format("persongroups/test_group2/persons"),
        text=load_fixture("microsoft_face_persons.json"),
    )

    CONFIG["camera"] = {"platform": "demo"}
    with assert_setup_component(3, mf.DOMAIN):
        await async_setup_component(hass, mf.DOMAIN, CONFIG)

    assert len(aioclient_mock.mock_calls) == 3

    aioclient_mock.post(
        ENDPOINT_URL.format(
            "persongroups/test_group2/persons/"
            "2ae4935b-9659-44c3-977f-61fac20d0538/persistedFaces"),
        status=200,
        text="{}",
    )

    with patch(
            "homeassistant.components.camera.async_get_image",
            return_value=camera.Image("image/jpeg", b"Test"),
    ):
        face_person(hass, "test_group2", "David", "camera.demo_camera")
        await hass.async_block_till_done()

    assert len(aioclient_mock.mock_calls) == 4
    assert aioclient_mock.mock_calls[3][2] == b"Test"
예제 #7
0
class TestMicrosoftFaceSetup:
    """Test the microsoft face component."""

    def setup_method(self):
        """Set up things to be run when tests are started."""
        self.hass = get_test_home_assistant()

        self.config = {
            mf.DOMAIN: {
                'api_key': '12345678abcdef',
            }
        }

        self.endpoint_url = "https://westus.{0}".format(mf.FACE_API_URL)

    def teardown_method(self):
        """Stop everything that was started."""
        self.hass.stop()

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_setup_component(self, mock_update):
        """Set up component."""
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_setup_component_wrong_api_key(self, mock_update):
        """Set up component without api key."""
        with assert_setup_component(0, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, {mf.DOMAIN: {}})

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_setup_component_test_service(self, mock_update):
        """Set up component."""
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert self.hass.services.has_service(mf.DOMAIN, 'create_group')
        assert self.hass.services.has_service(mf.DOMAIN, 'delete_group')
        assert self.hass.services.has_service(mf.DOMAIN, 'train_group')
        assert self.hass.services.has_service(mf.DOMAIN, 'create_person')
        assert self.hass.services.has_service(mf.DOMAIN, 'delete_person')
        assert self.hass.services.has_service(mf.DOMAIN, 'face_person')

    def test_setup_component_test_entities(self, aioclient_mock):
        """Set up component."""
        aioclient_mock.get(
            self.endpoint_url.format("persongroups"),
            text=load_fixture('microsoft_face_persongroups.json')
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture('microsoft_face_persons.json')
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group2/persons"),
            text=load_fixture('microsoft_face_persons.json')
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert len(aioclient_mock.mock_calls) == 3

        entity_group1 = self.hass.states.get('microsoft_face.test_group1')
        entity_group2 = self.hass.states.get('microsoft_face.test_group2')

        assert entity_group1 is not None
        assert entity_group2 is not None

        assert entity_group1.attributes['Ryan'] == \
            '25985303-c537-4467-b41d-bdb45cd95ca1'
        assert entity_group1.attributes['David'] == \
            '2ae4935b-9659-44c3-977f-61fac20d0538'

        assert entity_group2.attributes['Ryan'] == \
            '25985303-c537-4467-b41d-bdb45cd95ca1'
        assert entity_group2.attributes['David'] == \
            '2ae4935b-9659-44c3-977f-61fac20d0538'

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_service_groups(self, mock_update, aioclient_mock):
        """Set up component, test groups services."""
        aioclient_mock.put(
            self.endpoint_url.format("persongroups/service_group"),
            status=200, text="{}"
        )
        aioclient_mock.delete(
            self.endpoint_url.format("persongroups/service_group"),
            status=200, text="{}"
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        create_group(self.hass, 'Service Group')
        self.hass.block_till_done()

        entity = self.hass.states.get('microsoft_face.service_group')
        assert entity is not None
        assert len(aioclient_mock.mock_calls) == 1

        delete_group(self.hass, 'Service Group')
        self.hass.block_till_done()

        entity = self.hass.states.get('microsoft_face.service_group')
        assert entity is None
        assert len(aioclient_mock.mock_calls) == 2

    def test_service_person(self, aioclient_mock):
        """Set up component, test person services."""
        aioclient_mock.get(
            self.endpoint_url.format("persongroups"),
            text=load_fixture('microsoft_face_persongroups.json')
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture('microsoft_face_persons.json')
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group2/persons"),
            text=load_fixture('microsoft_face_persons.json')
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert len(aioclient_mock.mock_calls) == 3

        aioclient_mock.post(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture('microsoft_face_create_person.json')
        )
        aioclient_mock.delete(
            self.endpoint_url.format(
                "persongroups/test_group1/persons/"
                "25985303-c537-4467-b41d-bdb45cd95ca1"),
            status=200, text="{}"
        )

        create_person(self.hass, 'test group1', 'Hans')
        self.hass.block_till_done()

        entity_group1 = self.hass.states.get('microsoft_face.test_group1')

        assert len(aioclient_mock.mock_calls) == 4
        assert entity_group1 is not None
        assert entity_group1.attributes['Hans'] == \
            '25985303-c537-4467-b41d-bdb45cd95ca1'

        delete_person(self.hass, 'test group1', 'Hans')
        self.hass.block_till_done()

        entity_group1 = self.hass.states.get('microsoft_face.test_group1')

        assert len(aioclient_mock.mock_calls) == 5
        assert entity_group1 is not None
        assert 'Hans' not in entity_group1.attributes

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_service_train(self, mock_update, aioclient_mock):
        """Set up component, test train groups services."""
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        aioclient_mock.post(
            self.endpoint_url.format("persongroups/service_group/train"),
            status=200, text="{}"
        )

        train_group(self.hass, 'Service Group')
        self.hass.block_till_done()

        assert len(aioclient_mock.mock_calls) == 1

    @patch('homeassistant.components.camera.async_get_image',
           return_value=mock_coro(camera.Image('image/jpeg', b'Test')))
    def test_service_face(self, camera_mock, aioclient_mock):
        """Set up component, test person face services."""
        aioclient_mock.get(
            self.endpoint_url.format("persongroups"),
            text=load_fixture('microsoft_face_persongroups.json')
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture('microsoft_face_persons.json')
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group2/persons"),
            text=load_fixture('microsoft_face_persons.json')
        )

        self.config['camera'] = {'platform': 'demo'}
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert len(aioclient_mock.mock_calls) == 3

        aioclient_mock.post(
            self.endpoint_url.format(
                "persongroups/test_group2/persons/"
                "2ae4935b-9659-44c3-977f-61fac20d0538/persistedFaces"),
            status=200, text="{}"
        )

        face_person(
            self.hass, 'test_group2', 'David', 'camera.demo_camera')
        self.hass.block_till_done()

        assert len(aioclient_mock.mock_calls) == 4
        assert aioclient_mock.mock_calls[3][2] == b'Test'

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_service_status_400(self, mock_update, aioclient_mock):
        """Set up component, test groups services with error."""
        aioclient_mock.put(
            self.endpoint_url.format("persongroups/service_group"),
            status=400, text="{'error': {'message': 'Error'}}"
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        create_group(self.hass, 'Service Group')
        self.hass.block_till_done()

        entity = self.hass.states.get('microsoft_face.service_group')
        assert entity is None
        assert len(aioclient_mock.mock_calls) == 1

    @patch('homeassistant.components.microsoft_face.'
           'MicrosoftFace.update_store', return_value=mock_coro())
    def test_service_status_timeout(self, mock_update, aioclient_mock):
        """Set up component, test groups services with timeout."""
        aioclient_mock.put(
            self.endpoint_url.format("persongroups/service_group"),
            status=400, exc=asyncio.TimeoutError()
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        create_group(self.hass, 'Service Group')
        self.hass.block_till_done()

        entity = self.hass.states.get('microsoft_face.service_group')
        assert entity is None
        assert len(aioclient_mock.mock_calls) == 1
예제 #8
0
class TestMicrosoftFaceSetup:
    """Test the microsoft face component."""
    def setup_method(self):
        """Set up things to be run when tests are started."""
        self.hass = get_test_home_assistant()

        self.config = {mf.DOMAIN: {"api_key": "12345678abcdef"}}

        self.endpoint_url = "https://westus.{0}".format(mf.FACE_API_URL)

    def teardown_method(self):
        """Stop everything that was started."""
        self.hass.stop()

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_setup_component(self, mock_update):
        """Set up component."""
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_setup_component_wrong_api_key(self, mock_update):
        """Set up component without api key."""
        with assert_setup_component(0, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, {mf.DOMAIN: {}})

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_setup_component_test_service(self, mock_update):
        """Set up component."""
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert self.hass.services.has_service(mf.DOMAIN, "create_group")
        assert self.hass.services.has_service(mf.DOMAIN, "delete_group")
        assert self.hass.services.has_service(mf.DOMAIN, "train_group")
        assert self.hass.services.has_service(mf.DOMAIN, "create_person")
        assert self.hass.services.has_service(mf.DOMAIN, "delete_person")
        assert self.hass.services.has_service(mf.DOMAIN, "face_person")

    def test_setup_component_test_entities(self, aioclient_mock):
        """Set up component."""
        aioclient_mock.get(
            self.endpoint_url.format("persongroups"),
            text=load_fixture("microsoft_face_persongroups.json"),
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture("microsoft_face_persons.json"),
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group2/persons"),
            text=load_fixture("microsoft_face_persons.json"),
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert len(aioclient_mock.mock_calls) == 3

        entity_group1 = self.hass.states.get("microsoft_face.test_group1")
        entity_group2 = self.hass.states.get("microsoft_face.test_group2")

        assert entity_group1 is not None
        assert entity_group2 is not None

        assert (entity_group1.attributes["Ryan"] ==
                "25985303-c537-4467-b41d-bdb45cd95ca1")
        assert (entity_group1.attributes["David"] ==
                "2ae4935b-9659-44c3-977f-61fac20d0538")

        assert (entity_group2.attributes["Ryan"] ==
                "25985303-c537-4467-b41d-bdb45cd95ca1")
        assert (entity_group2.attributes["David"] ==
                "2ae4935b-9659-44c3-977f-61fac20d0538")

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_service_groups(self, mock_update, aioclient_mock):
        """Set up component, test groups services."""
        aioclient_mock.put(
            self.endpoint_url.format("persongroups/service_group"),
            status=200,
            text="{}",
        )
        aioclient_mock.delete(
            self.endpoint_url.format("persongroups/service_group"),
            status=200,
            text="{}",
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        create_group(self.hass, "Service Group")
        self.hass.block_till_done()

        entity = self.hass.states.get("microsoft_face.service_group")
        assert entity is not None
        assert len(aioclient_mock.mock_calls) == 1

        delete_group(self.hass, "Service Group")
        self.hass.block_till_done()

        entity = self.hass.states.get("microsoft_face.service_group")
        assert entity is None
        assert len(aioclient_mock.mock_calls) == 2

    def test_service_person(self, aioclient_mock):
        """Set up component, test person services."""
        aioclient_mock.get(
            self.endpoint_url.format("persongroups"),
            text=load_fixture("microsoft_face_persongroups.json"),
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture("microsoft_face_persons.json"),
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group2/persons"),
            text=load_fixture("microsoft_face_persons.json"),
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert len(aioclient_mock.mock_calls) == 3

        aioclient_mock.post(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture("microsoft_face_create_person.json"),
        )
        aioclient_mock.delete(
            self.endpoint_url.format("persongroups/test_group1/persons/"
                                     "25985303-c537-4467-b41d-bdb45cd95ca1"),
            status=200,
            text="{}",
        )

        create_person(self.hass, "test group1", "Hans")
        self.hass.block_till_done()

        entity_group1 = self.hass.states.get("microsoft_face.test_group1")

        assert len(aioclient_mock.mock_calls) == 4
        assert entity_group1 is not None
        assert (entity_group1.attributes["Hans"] ==
                "25985303-c537-4467-b41d-bdb45cd95ca1")

        delete_person(self.hass, "test group1", "Hans")
        self.hass.block_till_done()

        entity_group1 = self.hass.states.get("microsoft_face.test_group1")

        assert len(aioclient_mock.mock_calls) == 5
        assert entity_group1 is not None
        assert "Hans" not in entity_group1.attributes

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_service_train(self, mock_update, aioclient_mock):
        """Set up component, test train groups services."""
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        aioclient_mock.post(
            self.endpoint_url.format("persongroups/service_group/train"),
            status=200,
            text="{}",
        )

        train_group(self.hass, "Service Group")
        self.hass.block_till_done()

        assert len(aioclient_mock.mock_calls) == 1

    @patch(
        "homeassistant.components.camera.async_get_image",
        return_value=mock_coro(camera.Image("image/jpeg", b"Test")),
    )
    def test_service_face(self, camera_mock, aioclient_mock):
        """Set up component, test person face services."""
        aioclient_mock.get(
            self.endpoint_url.format("persongroups"),
            text=load_fixture("microsoft_face_persongroups.json"),
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group1/persons"),
            text=load_fixture("microsoft_face_persons.json"),
        )
        aioclient_mock.get(
            self.endpoint_url.format("persongroups/test_group2/persons"),
            text=load_fixture("microsoft_face_persons.json"),
        )

        self.config["camera"] = {"platform": "demo"}
        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        assert len(aioclient_mock.mock_calls) == 3

        aioclient_mock.post(
            self.endpoint_url.format(
                "persongroups/test_group2/persons/"
                "2ae4935b-9659-44c3-977f-61fac20d0538/persistedFaces"),
            status=200,
            text="{}",
        )

        face_person(self.hass, "test_group2", "David", "camera.demo_camera")
        self.hass.block_till_done()

        assert len(aioclient_mock.mock_calls) == 4
        assert aioclient_mock.mock_calls[3][2] == b"Test"

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_service_status_400(self, mock_update, aioclient_mock):
        """Set up component, test groups services with error."""
        aioclient_mock.put(
            self.endpoint_url.format("persongroups/service_group"),
            status=400,
            text="{'error': {'message': 'Error'}}",
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        create_group(self.hass, "Service Group")
        self.hass.block_till_done()

        entity = self.hass.states.get("microsoft_face.service_group")
        assert entity is None
        assert len(aioclient_mock.mock_calls) == 1

    @patch(
        "homeassistant.components.microsoft_face.MicrosoftFace.update_store",
        return_value=mock_coro(),
    )
    def test_service_status_timeout(self, mock_update, aioclient_mock):
        """Set up component, test groups services with timeout."""
        aioclient_mock.put(
            self.endpoint_url.format("persongroups/service_group"),
            status=400,
            exc=asyncio.TimeoutError(),
        )

        with assert_setup_component(3, mf.DOMAIN):
            setup_component(self.hass, mf.DOMAIN, self.config)

        create_group(self.hass, "Service Group")
        self.hass.block_till_done()

        entity = self.hass.states.get("microsoft_face.service_group")
        assert entity is None
        assert len(aioclient_mock.mock_calls) == 1