Exemplo n.º 1
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
     # pylint: disable=protected-access
     self.blink._auth_header = {
         'Host': 'test.url.tld',
         'TOKEN_AUTH': 'foobar123'
     }
     self.blink.urls = blinkpy.BlinkURLHandler('test')
     self.config = {
         'device_id': 1111,
         'name': 'foobar',
         'armed': False,
         'active': 'disabled',
         'thumbnail': '/test',
         'video': '/test.mp4',
         'temp': 80,
         'battery': 3,
         'notifications': 2,
         'region_id': 'test',
         'device_type': 'camera'
     }
     self.blink.sync = MockSyncModule(self.blink, self.blink._auth_header)
     self.blink.session = create_session()
     self.camera = BlinkCamera(self.config, self.blink.sync)
Exemplo n.º 2
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = Blink()
     self.blink.urls = BlinkURLHandler("test")
     self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, [])
     self.camera = BlinkCamera(self.blink.sync["test"])
     self.camera.name = "foobar"
     self.blink.sync["test"].cameras["foobar"] = self.camera
Exemplo n.º 3
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
     header = {
         'Host': 'abc.zxc',
         'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken']
     }
     # pylint: disable=protected-access
     self.blink._auth_header = header
     self.blink.session = create_session()
     self.blink.urls = BlinkURLHandler('test')
     self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234, [])
     self.camera = BlinkCamera(self.blink.sync['test'])
     self.camera.name = 'foobar'
     self.blink.sync['test'].cameras['foobar'] = self.camera
Exemplo n.º 4
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
     header = {
         "Host": "abc.zxc",
         "TOKEN_AUTH": mresp.LOGIN_RESPONSE["authtoken"]["authtoken"],
     }
     # pylint: disable=protected-access
     self.blink._auth_header = header
     self.blink.session = create_session()
     self.blink.urls = BlinkURLHandler("test")
     self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, [])
     self.camera = BlinkCamera(self.blink.sync["test"])
     self.camera.name = "foobar"
     self.blink.sync["test"].cameras["foobar"] = self.camera
Exemplo n.º 5
0
    def test_camera_attributes(self, mock_cfg, mock_sess):
        """Tests camera attributes."""
        self.blink.urls = BlinkURLHandler('test')

        self.sync.cameras = {
            'foobar': BlinkCamera(self.camera_config, self.sync)
        }

        for name in self.sync.cameras:
            camera = self.sync.cameras[name]
            camera.update(self.camera_config, skip_cache=True)
            camera_attr = camera.attributes
            self.assertEqual(camera_attr['device_id'], '1111')
            self.assertEqual(camera_attr['name'], 'foobar')
            self.assertEqual(camera_attr['armed'], False)
            self.assertEqual(
                camera_attr['thumbnail'],
                "https://rest.test.{}/test/image.jpg".format(BLINK_URL))
            self.assertEqual(
                camera_attr['video'],
                "https://rest.test.{}/test/clip/clip.mp4".format(BLINK_URL))
            self.assertEqual(camera_attr['temperature'], 68)
            self.assertEqual(camera_attr['temperature_c'], 20.0)
            self.assertEqual(camera_attr['battery'], 50)
            self.assertEqual(camera_attr['notifications'], 2)
            self.assertEqual(camera_attr['network_id'], '0000')
            self.assertEqual(camera_attr['motion_enabled'], True)
            self.assertEqual(camera_attr['wifi_strength'], -30)
Exemplo n.º 6
0
    def start(self):
        """Initialize the system."""
        response = api.request_syncmodule(self.blink, self.network_id)
        self.summary = response['syncmodule']
        self.sync_id = self.summary['id']
        self.network_id = self.summary['network_id']
        self.serial = self.summary['serial']
        self.status = self.summary['status']

        self.events = self.get_events()

        self.homescreen = api.request_homescreen(self.blink)

        self.network_info = api.request_network_status(self.blink,
                                                       self.network_id)

        camera_info = self.get_camera_info()
        for camera_config in camera_info:
            name = camera_config['name']
            self.cameras[name] = BlinkCamera(self)

        self.videos = self.get_videos()
        for camera_config in camera_info:
            name = camera_config['name']
            if name in self.cameras:
                self.cameras[name].update(camera_config, force_cache=True)
Exemplo n.º 7
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
     # pylint: disable=protected-access
     self.blink._auth_header = {
         'Host': 'test.url.tld',
         'TOKEN_AUTH': 'foobar123'
     }
     self.blink.urls = blinkpy.BlinkURLHandler('test')
     self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', '1234',
                                               [])
     self.camera = BlinkCamera(self.blink.sync)
     self.mock_start = [
         {
             'syncmodule': {
                 'id': 1234,
                 'network_id': 5678,
                 'serial': '12345678',
                 'status': 'foobar'
             }
         },
         {
             'event': True
         },
         {},
         {},
         None,
         {
             'devicestatus': {}
         },
     ]
Exemplo n.º 8
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = Blink(motion_interval=0)
     self.blink.last_refresh = 0
     self.blink.urls = BlinkURLHandler("test")
     self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", "1234",
                                               [])
     self.camera = BlinkCamera(self.blink.sync)
     self.mock_start = [
         {
             "syncmodule": {
                 "id": 1234,
                 "network_id": 5678,
                 "serial": "12345678",
                 "status": "foobar",
             }
         },
         {
             "event": True
         },
         {},
         {},
         None,
         {
             "devicestatus": {}
         },
     ]
     self.blink.sync["test"].network_info = {"network": {"armed": True}}
Exemplo n.º 9
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = blinkpy.Blink(username=USERNAME,
                                password=PASSWORD,
                                motion_interval=0)
     # pylint: disable=protected-access
     self.blink._auth_header = {
         "Host": "test.url.tld",
         "TOKEN_AUTH": "foobar123"
     }
     self.blink.last_refresh = 0
     self.blink.urls = blinkpy.BlinkURLHandler("test")
     self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", "1234",
                                               [])
     self.camera = BlinkCamera(self.blink.sync)
     self.mock_start = [
         {
             "syncmodule": {
                 "id": 1234,
                 "network_id": 5678,
                 "serial": "12345678",
                 "status": "foobar",
             }
         },
         {
             "event": True
         },
         {},
         {},
         None,
         {
             "devicestatus": {}
         },
     ]
     self.blink.sync["test"].network_info = {"network": {"armed": True}}
Exemplo n.º 10
0
    def test_camera_properties(self, mock_cfg, mock_sess):
        """Tests all property set/recall."""
        self.blink.urls = BlinkURLHandler('test')

        self.sync.cameras = {
            'foobar': BlinkCamera(self.camera_config, self.sync)
        }

        for name in self.sync.cameras:
            camera = self.sync.cameras[name]
            camera.update(self.camera_config, skip_cache=True)
            self.assertEqual(camera.id, '1111')
            self.assertEqual(camera.name, 'foobar')
            self.assertEqual(camera.armed, False)
            self.assertEqual(
                camera.thumbnail,
                "https://rest.test.{}/test/image.jpg".format(BLINK_URL))
            self.assertEqual(
                camera.clip,
                "https://rest.test.{}/test/clip/clip.mp4".format(BLINK_URL))
            self.assertEqual(camera.temperature, 68)
            self.assertEqual(camera.temperature_c, 20.0)
            self.assertEqual(camera.battery, 50)
            self.assertEqual(camera.battery_string, "OK")
            self.assertEqual(camera.notifications, 2)
            self.assertEqual(camera.region_id, 'test')
            self.assertEqual(camera.motion_enabled, True)
            self.assertEqual(camera.wifi_strength, -30)

        camera_config = self.camera_config
        camera_config['active'] = 'armed'
        camera_config['thumbnail'] = '/test2/image'
        camera_config['video'] = '/test2/clip.mp4'
        camera_config['temp'] = 60
        camera_config['battery'] = 0
        camera_config['notifications'] = 4
        for name in self.sync.cameras:
            camera = self.sync.cameras[name]
            camera.update(camera_config, skip_cache=True)
            self.assertEqual(camera.armed, True)
            self.assertEqual(
                camera.thumbnail,
                "https://rest.test.{}/test2/image.jpg".format(BLINK_URL))
            self.assertEqual(
                camera.clip,
                "https://rest.test.{}/test2/clip.mp4".format(BLINK_URL))
            self.assertEqual(camera.temperature, 68)
            self.assertEqual(camera.battery, 50)
            self.assertEqual(camera.battery_string, "Low")
            self.assertEqual(camera.notifications, 4)
            camera_config['battery'] = -10
            camera.update(camera_config, skip_cache=True)
            self.assertEqual(camera.battery_string, "Unknown")
Exemplo n.º 11
0
 def setUp(self):
     """Set up Blink module."""
     self.blink = blinkpy.Blink(username=USERNAME,
                                password=PASSWORD)
     # pylint: disable=protected-access
     self.blink._auth_header = {
         'Host': 'test.url.tld',
         'TOKEN_AUTH': 'foobar123'
     }
     self.blink.urls = blinkpy.BlinkURLHandler('test')
     self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', '1234')
     self.camera = BlinkCamera(self.blink.sync)
Exemplo n.º 12
0
    def test_camera_cache(self, img_refresh, mock_sess):
        """Tests camera cache."""
        update_vals = {
            'name': 'foobar',
            'active': 'disabled',
            'video': '/clip.mp4',
            'thumbnail': '/image',
            'battery': 3,
            'notifications': 1,
        }
        self.sync.cameras = {
            'foobar': BlinkCamera(self.camera_config, self.sync)
        }

        test_image = 'https://rest.test.immedia-semi.com/image.jpg'
        test_clip = 'https://rest.test.immedia-semi.com/clip.mp4'

        for name, camera in self.sync.cameras.items():
            # Check that no cache returns None
            self.assertEqual(camera.name, name)
            self.assertEqual(camera.image_from_cache, None)
            self.assertEqual(camera.video_from_cache, None)

            # Now, call an update with a new thumbnail to see if we update
            self.sync.records = []
            # pylint: disable=protected-access
            camera.update(update_vals)
            self.assertEqual(camera.thumbnail, test_image)
            self.assertEqual(camera.image_from_cache.status_code, 200)

            # Now update the clip
            self.sync.record_dates = {camera.name: ['7', '1', '4', '3']}
            self.assertEqual(camera.last_record, list())
            camera.update(update_vals)
            self.assertEqual(camera.clip, test_clip)
            self.assertEqual(camera.last_record, list('7'))
            # First update should be false
            self.assertEqual(camera.motion_detected, False)
            self.sync.record_dates[camera.name].append('88')
            camera.update(update_vals)
            self.assertEqual(camera.last_record, ['88', '7'])
            self.assertEqual(camera.motion_detected, True)
            self.assertEqual(camera.video_from_cache.status_code, 200)
            # Next update shouldn't change records, and motion_dected=False
            camera.update(update_vals)
            self.assertEqual(camera.motion_detected, False)
            self.assertEqual(camera.video_from_cache.status_code, 200)
Exemplo n.º 13
0
    def start(self):
        """Initialize the system."""
        response = api.request_syncmodule(self.blink,
                                          self.network_id,
                                          force=True)
        try:
            self.summary = response['syncmodule']
            self.network_id = self.summary['network_id']
        except (TypeError, KeyError):
            _LOGGER.error(("Could not retrieve sync module information "
                           "with response: %s"),
                          response,
                          exc_info=True)
            return False

        try:
            self.sync_id = self.summary['id']
            self.serial = self.summary['serial']
            self.status = self.summary['status']
        except KeyError:
            _LOGGER.error("Could not extract some sync module info: %s",
                          response,
                          exc_info=True)

        self.network_info = api.request_network_status(self.blink,
                                                       self.network_id)

        self.check_new_videos()
        try:
            for camera_config in self.camera_list:
                if 'name' not in camera_config:
                    break
                name = camera_config['name']
                self.cameras[name] = BlinkCamera(self)
                self.motion[name] = False
                camera_info = self.get_camera_info(camera_config['id'])
                self.cameras[name].update(camera_info,
                                          force_cache=True,
                                          force=True)
        except KeyError:
            _LOGGER.error("Could not create cameras instances for %s",
                          self.name,
                          exc_info=True)
            return False

        return True
Exemplo n.º 14
0
 def get_cameras(self):
     """Find and creates cameras."""
     self._summary = self._summary_request()
     response = self._summary['devices']
     for element in response:
         if ('device_type' in element and
                 element['device_type'] == 'camera'):
             # Add region to config
             element['region_id'] = self.region_id
             try:
                 name = element['name']
                 element['video'] = self.videos[name][0]['clip']
                 element['thumbnail'] = self.videos[name][0]['thumb']
             except KeyError:
                 element['video'] = None
                 element['thumbnail'] = None
             device = BlinkCamera(element, self)
             self.cameras[device.name] = device
             self._idlookup[device.id] = device.name
     self.blink.refresh(force_cache=self.first_init)
     self.first_init = False
Exemplo n.º 15
0
class TestBlinkCameraSetup(unittest.TestCase):
    """Test the Blink class in blinkpy."""
    def setUp(self):
        """Set up Blink module."""
        self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
        header = {
            "Host": "abc.zxc",
            "TOKEN_AUTH": mresp.LOGIN_RESPONSE["authtoken"]["authtoken"],
        }
        # pylint: disable=protected-access
        self.blink._auth_header = header
        self.blink.session = create_session()
        self.blink.urls = BlinkURLHandler("test")
        self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, [])
        self.camera = BlinkCamera(self.blink.sync["test"])
        self.camera.name = "foobar"
        self.blink.sync["test"].cameras["foobar"] = self.camera

    def tearDown(self):
        """Clean up after test."""
        self.blink = None

    def test_camera_update(self, mock_sess):
        """Test that we can properly update camera properties."""
        config = {
            "name": "new",
            "id": 1234,
            "network_id": 5678,
            "serial": "12345678",
            "enabled": False,
            "battery_voltage": 90,
            "battery_state": "ok",
            "temperature": 68,
            "wifi_strength": 4,
            "thumbnail": "/thumb",
        }
        self.camera.last_record = ["1"]
        self.camera.sync.last_record = {
            "new": {
                "clip": "/test.mp4",
                "time": "1970-01-01T00:00:00"
            }
        }
        mock_sess.side_effect = [
            mresp.MockResponse({"temp": 71}, 200),
            "test",
            "foobar",
        ]
        self.camera.update(config)
        self.assertEqual(self.camera.name, "new")
        self.assertEqual(self.camera.camera_id, "1234")
        self.assertEqual(self.camera.network_id, "5678")
        self.assertEqual(self.camera.serial, "12345678")
        self.assertEqual(self.camera.motion_enabled, False)
        self.assertEqual(self.camera.battery, "ok")
        self.assertEqual(self.camera.temperature, 68)
        self.assertEqual(self.camera.temperature_c, 20)
        self.assertEqual(self.camera.temperature_calibrated, 71)
        self.assertEqual(self.camera.wifi_strength, 4)
        self.assertEqual(self.camera.thumbnail,
                         "https://rest-test.immedia-semi.com/thumb.jpg")
        self.assertEqual(self.camera.clip,
                         "https://rest-test.immedia-semi.com/test.mp4")
        self.assertEqual(self.camera.image_from_cache, "test")
        self.assertEqual(self.camera.video_from_cache, "foobar")

    def test_no_thumbnails(self, mock_sess):
        """Tests that thumbnail is 'None' if none found."""
        mock_sess.return_value = "foobar"
        self.camera.last_record = ["1"]
        config = {
            "name": "new",
            "id": 1234,
            "network_id": 5678,
            "serial": "12345678",
            "enabled": False,
            "battery_voltage": 90,
            "battery_state": "ok",
            "temperature": 68,
            "wifi_strength": 4,
            "thumbnail": "",
        }
        self.camera.sync.homescreen = {"devices": []}
        self.assertEqual(self.camera.temperature_calibrated, None)
        with self.assertLogs() as logrecord:
            self.camera.update(config, force=True)
        self.assertEqual(self.camera.thumbnail, None)
        self.assertEqual(self.camera.last_record, ["1"])
        self.assertEqual(self.camera.temperature_calibrated, 68)
        self.assertEqual(
            logrecord.output,
            [
                ("WARNING:blinkpy.camera:Could not retrieve calibrated "
                 "temperature."),
                ("WARNING:blinkpy.camera:Could not find thumbnail for camera new"
                 "\nNoneType: None"),
            ],
        )

    def test_no_video_clips(self, mock_sess):
        """Tests that we still proceed with camera setup with no videos."""
        mock_sess.return_value = "foobar"
        config = {
            "name": "new",
            "id": 1234,
            "network_id": 5678,
            "serial": "12345678",
            "enabled": False,
            "battery_voltage": 90,
            "battery_state": "ok",
            "temperature": 68,
            "wifi_strength": 4,
            "thumbnail": "/foobar",
        }
        self.camera.sync.homescreen = {"devices": []}
        self.camera.update(config, force_cache=True)
        self.assertEqual(self.camera.clip, None)
        self.assertEqual(self.camera.video_from_cache, None)
Exemplo n.º 16
0
class TestBlinkCameraSetup(unittest.TestCase):
    """Test the Blink class in blinkpy."""
    def setUp(self):
        """Set up Blink module."""
        self.blink = Blink()
        self.blink.urls = BlinkURLHandler("test")
        self.blink.sync["test"] = BlinkSyncModule(self.blink, "test", 1234, [])
        self.camera = BlinkCamera(self.blink.sync["test"])
        self.camera.name = "foobar"
        self.blink.sync["test"].cameras["foobar"] = self.camera

    def tearDown(self):
        """Clean up after test."""
        self.blink = None
        self.camera = None

    def test_camera_update(self, mock_resp):
        """Test that we can properly update camera properties."""
        config = {
            "name": "new",
            "id": 1234,
            "network_id": 5678,
            "serial": "12345678",
            "enabled": False,
            "battery_voltage": 90,
            "battery_state": "ok",
            "temperature": 68,
            "wifi_strength": 4,
            "thumbnail": "/thumb",
        }
        self.camera.last_record = ["1"]
        self.camera.sync.last_record = {
            "new": {
                "clip": "/test.mp4",
                "time": "1970-01-01T00:00:00"
            }
        }
        mock_resp.side_effect = [
            {
                "temp": 71
            },
            "test",
            "foobar",
        ]
        self.camera.update(config)
        self.assertEqual(self.camera.name, "new")
        self.assertEqual(self.camera.camera_id, "1234")
        self.assertEqual(self.camera.network_id, "5678")
        self.assertEqual(self.camera.serial, "12345678")
        self.assertEqual(self.camera.motion_enabled, False)
        self.assertEqual(self.camera.battery, "ok")
        self.assertEqual(self.camera.temperature, 68)
        self.assertEqual(self.camera.temperature_c, 20)
        self.assertEqual(self.camera.temperature_calibrated, 71)
        self.assertEqual(self.camera.wifi_strength, 4)
        self.assertEqual(self.camera.thumbnail,
                         "https://rest-test.immedia-semi.com/thumb.jpg")
        self.assertEqual(self.camera.clip,
                         "https://rest-test.immedia-semi.com/test.mp4")
        self.assertEqual(self.camera.image_from_cache, "test")
        self.assertEqual(self.camera.video_from_cache, "foobar")

    def test_no_thumbnails(self, mock_resp):
        """Tests that thumbnail is 'None' if none found."""
        mock_resp.return_value = "foobar"
        self.camera.last_record = ["1"]
        config = {
            "name": "new",
            "id": 1234,
            "network_id": 5678,
            "serial": "12345678",
            "enabled": False,
            "battery_voltage": 90,
            "battery_state": "ok",
            "temperature": 68,
            "wifi_strength": 4,
            "thumbnail": "",
        }
        self.camera.sync.homescreen = {"devices": []}
        self.assertEqual(self.camera.temperature_calibrated, None)
        with self.assertLogs() as logrecord:
            self.camera.update(config, force=True)
        self.assertEqual(self.camera.thumbnail, None)
        self.assertEqual(self.camera.last_record, ["1"])
        self.assertEqual(self.camera.temperature_calibrated, 68)
        self.assertEqual(
            logrecord.output,
            [
                ("WARNING:blinkpy.camera:Could not retrieve calibrated "
                 "temperature."),
                ("WARNING:blinkpy.camera:Could not find thumbnail for camera new"
                 ),
            ],
        )

    def test_no_video_clips(self, mock_resp):
        """Tests that we still proceed with camera setup with no videos."""
        mock_resp.return_value = "foobar"
        config = {
            "name": "new",
            "id": 1234,
            "network_id": 5678,
            "serial": "12345678",
            "enabled": False,
            "battery_voltage": 90,
            "battery_state": "ok",
            "temperature": 68,
            "wifi_strength": 4,
            "thumbnail": "/foobar",
        }
        self.camera.sync.homescreen = {"devices": []}
        self.camera.update(config, force_cache=True)
        self.assertEqual(self.camera.clip, None)
        self.assertEqual(self.camera.video_from_cache, None)

    def test_camera_arm_status(self, mock_resp):
        """Test arming and disarming camera."""
        self.camera.motion_enabled = None
        self.assertFalse(self.camera.arm)
        self.camera.motion_enabled = False
        self.assertFalse(self.camera.arm)
        self.camera.motion_enabled = True
        self.assertTrue(self.camera.arm)

    @mock.patch("blinkpy.camera.api.request_motion_detection_enable")
    @mock.patch("blinkpy.camera.api.request_motion_detection_disable")
    def test_motion_detection_enable_disable(self, mock_dis, mock_en,
                                             mock_rep):
        """Test setting motion detection enable properly."""
        mock_dis.return_value = "disable"
        mock_en.return_value = "enable"
        self.assertEqual(self.camera.set_motion_detect(True), "enable")
        self.assertEqual(self.camera.set_motion_detect(False), "disable")

    def test_missing_attributes(self, mock_resp):
        """Test that attributes return None if missing."""
        self.camera.temperature = None
        self.camera.serial = None
        attr = self.camera.attributes
        self.assertEqual(attr["serial"], None)
        self.assertEqual(attr["temperature"], None)
        self.assertEqual(attr["temperature_c"], None)

    def test_mini_missing_attributes(self, mock_resp):
        """Test that attributes return None if missing."""
        camera = BlinkCameraMini(self.blink.sync)
        self.blink.sync.network_id = None
        self.blink.sync.name = None
        attr = camera.attributes
        for key in attr:
            self.assertEqual(attr[key], None)
Exemplo n.º 17
0
class TestBlinkFunctions(unittest.TestCase):
    """Test Blink and BlinkCamera functions in blinkpy."""
    def setUp(self):
        """Set up Blink module."""
        self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
        # pylint: disable=protected-access
        self.blink._auth_header = {
            'Host': 'test.url.tld',
            'TOKEN_AUTH': 'foobar123'
        }
        self.blink.urls = blinkpy.BlinkURLHandler('test')
        self.config = {
            'device_id': 1111,
            'name': 'foobar',
            'armed': False,
            'active': 'disabled',
            'thumbnail': '/test',
            'video': '/test.mp4',
            'temp': 80,
            'battery': 3,
            'notifications': 2,
            'region_id': 'test',
            'device_type': 'camera'
        }
        self.blink.sync = MockSyncModule(self.blink, self.blink._auth_header)
        self.blink.session = create_session()
        self.camera = BlinkCamera(self.config, self.blink.sync)

    def tearDown(self):
        """Clean up after test."""
        self.blink = None
        self.config = {}
        self.camera = None

    def test_image_refresh(self, mock_sess):
        """Test image refresh function."""
        self.blink.sync.return_value = {'devices': [self.config]}
        image = self.camera.image_refresh()
        self.assertEqual(image,
                         'https://rest.test.{}/test.jpg'.format(BLINK_URL))

    @mock.patch('blinkpy.sync_module.BlinkSyncModule.camera_config_request')
    @mock.patch('blinkpy.sync_module.BlinkSyncModule._video_request')
    def test_refresh(self, vid_req, req, mock_sess):
        """Test blinkpy refresh function."""
        req.return_value = {'foo': 'bar'}
        self.blink.sync.cameras = {'foobar': self.camera}
        self.blink.sync.return_value = {'devices': [{'foo': 'bar'}]}
        # pylint: disable=protected-access
        summary = {'devices': [self.config]}
        # pylint: disable=protected-access
        events = {'foo': 'bar'}
        vid_req.return_value = [{
            'camera_name': 'foobar',
            'address': '/new.mp4',
            'thumbnail': '/new',
        }]
        with mock.patch('blinkpy.blinkpy.Blink.summary_request',
                        return_value=summary):
            with mock.patch('blinkpy.blinkpy.Blink.events_request',
                            return_value=events):
                self.blink.refresh_rate = 0
                self.blink.refresh()
        test_camera = self.blink.sync.cameras['foobar']
        self.assertEqual(test_camera.clip,
                         'https://rest.test.{}/new.mp4'.format(BLINK_URL))
        self.assertEqual(test_camera.thumbnail,
                         'https://rest.test.{}/new.jpg'.format(BLINK_URL))

    def test_set_links(self, mock_sess):
        """Test the link set method."""
        self.blink.sync.cameras = {'foobar': self.camera}
        self.blink.network_id = 9999
        self.blink.sync.set_links()
        net_url = "{}/{}".format(self.blink.urls.network_url, 9999)
        self.assertEqual(self.camera.image_link,
                         "{}/camera/1111/thumbnail".format(net_url))
        self.assertEqual(self.camera.arm_link,
                         "{}/camera/1111/".format(net_url))

    @mock.patch('blinkpy.blinkpy.http_req')
    def test_backup_url(self, req, mock_sess):
        """Test backup login method."""
        fake_req = Request('POST', 'http://wrong.url').prepare()
        req.side_effect = [
            mresp.mocked_session_send(fake_req), {
                'authtoken': {
                    'authtoken': 'foobar123'
                }
            }
        ]
        self.blink.get_auth_token()
        self.assertEqual(self.blink.region_id, 'piri')
        self.assertEqual(self.blink.region, 'UNKNOWN')
        # pylint: disable=protected-access
        self.assertEqual(self.blink._token, 'foobar123')
Exemplo n.º 18
0
class TestBlinkCameraSetup(unittest.TestCase):
    """Test the Blink class in blinkpy."""

    def setUp(self):
        """Set up Blink module."""
        self.blink = blinkpy.Blink(username=USERNAME,
                                   password=PASSWORD)
        header = {
            'Host': 'abc.zxc',
            'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken']
        }
        # pylint: disable=protected-access
        self.blink._auth_header = header
        self.blink.session = create_session()
        self.blink.urls = BlinkURLHandler('test')
        self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234)
        self.camera = BlinkCamera(self.blink.sync['test'])
        self.camera.name = 'foobar'
        self.blink.sync['test'].cameras['foobar'] = self.camera

    def tearDown(self):
        """Clean up after test."""
        self.blink = None

    def test_check_for_motion(self, mock_sess):
        """Test check for motion function."""
        self.assertEqual(self.camera.last_record, [])
        self.assertEqual(self.camera.motion_detected, None)
        self.camera.sync.record_dates = {'foobar': [1, 3, 2, 4]}
        self.camera.check_for_motion()
        self.assertEqual(self.camera.last_record, [4])
        self.assertEqual(self.camera.motion_detected, False)
        self.camera.sync.record_dates = {'foobar': [7, 1, 3, 4]}
        self.camera.check_for_motion()
        self.assertEqual(self.camera.last_record, [7, 4])
        self.assertEqual(self.camera.motion_detected, True)
        self.camera.check_for_motion()
        self.assertEqual(self.camera.last_record, [7, 4])
        self.assertEqual(self.camera.motion_detected, False)

    def test_max_motion_clips(self, mock_sess):
        """Test that we only maintain certain number of records."""
        for i in range(0, MAX_CLIPS):
            self.camera.last_record.append(i)
        self.camera.sync.record_dates['foobar'] = [MAX_CLIPS+2]
        self.assertEqual(len(self.camera.last_record), MAX_CLIPS)
        self.camera.check_for_motion()
        self.assertEqual(self.camera.motion_detected, True)
        self.assertEqual(len(self.camera.last_record), MAX_CLIPS)

    def test_camera_update(self, mock_sess):
        """Test that we can properly update camera properties."""
        config = {
            'name': 'new',
            'camera_id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '/thumb',
        }
        self.camera.last_record = ['1']
        self.camera.sync.all_clips = {'new': {'1': '/test.mp4'}}
        mock_sess.side_effect = [
            'test',
            'foobar'
        ]
        self.camera.update(config)
        self.assertEqual(self.camera.name, 'new')
        self.assertEqual(self.camera.camera_id, '1234')
        self.assertEqual(self.camera.network_id, '5678')
        self.assertEqual(self.camera.serial, '12345678')
        self.assertEqual(self.camera.motion_enabled, False)
        self.assertEqual(self.camera.battery, 50)
        self.assertEqual(self.camera.temperature, 68)
        self.assertEqual(self.camera.temperature_c, 20)
        self.assertEqual(self.camera.wifi_strength, 4)
        self.assertEqual(self.camera.thumbnail,
                         'https://rest.test.immedia-semi.com/thumb.jpg')
        self.assertEqual(self.camera.clip,
                         'https://rest.test.immedia-semi.com/test.mp4')
        self.assertEqual(self.camera.image_from_cache, 'test')
        self.assertEqual(self.camera.video_from_cache, 'foobar')

    def test_thumbnail_not_in_info(self, mock_sess):
        """Test that we grab thumbanil if not in camera_info."""
        mock_sess.side_effect = ['foobar', 'barfoo']
        self.camera.last_record = ['1']
        self.camera.sync.record_dates['new'] = ['1']
        self.camera.sync.all_clips = {'new': {'1': '/test.mp4'}}
        config = {
            'name': 'new',
            'camera_id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '',
        }
        self.camera.sync.homescreen = {
            'devices': [
                {'foo': 'bar'},
                {'device_type': 'foobar'},
                {'device_type': 'camera',
                 'name': 'new',
                 'thumbnail': '/new/thumb'}
            ]
        }
        self.camera.update(config)
        self.assertEqual(self.camera.thumbnail,
                         'https://rest.test.immedia-semi.com/new/thumb.jpg')

    def test_no_thumbnails(self, mock_sess):
        """Tests that thumbnail is 'None' if none found."""
        mock_sess.return_value = 'foobar'
        self.camera.last_record = ['1']
        self.camera.sync.record_dates['new'] = ['1']
        self.camera.sync.all_clips = {'new': {'1': '/test.mp4'}}
        config = {
            'name': 'new',
            'camera_id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '',
        }
        self.camera.sync.homescreen = {
            'devices': []
        }
        with self.assertLogs() as logrecord:
            self.camera.update(config)
        self.assertEqual(self.camera.thumbnail, None)
        self.assertEqual(
            logrecord.output,
            ["ERROR:blinkpy.camera:Could not find thumbnail for camera new"]
        )

    def test_no_video_clips(self, mock_sess):
        """Tests that we still proceed with camera setup with no videos."""
        mock_sess.return_value = 'foobar'
        config = {
            'name': 'new',
            'camera_id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '/foobar',
        }
        self.camera.sync.homescreen = {
            'devices': []
        }
        self.camera.update(config, force_cache=True)
        self.assertEqual(self.camera.clip, None)
        self.assertEqual(self.camera.video_from_cache, None)
Exemplo n.º 19
0
 def test_camera_case(self, mock_sess):
     """Tests camera case sensitivity."""
     camera_object = BlinkCamera(self.camera_config, self.sync)
     self.sync.cameras['foobar'] = camera_object
     self.assertEqual(camera_object, self.sync.cameras['fOoBaR'])
Exemplo n.º 20
0
class TestBlinkCameraSetup(unittest.TestCase):
    """Test the Blink class in blinkpy."""
    def setUp(self):
        """Set up Blink module."""
        self.blink = blinkpy.Blink(username=USERNAME, password=PASSWORD)
        header = {
            'Host': 'abc.zxc',
            'TOKEN_AUTH': mresp.LOGIN_RESPONSE['authtoken']['authtoken']
        }
        # pylint: disable=protected-access
        self.blink._auth_header = header
        self.blink.session = create_session()
        self.blink.urls = BlinkURLHandler('test')
        self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234, [])
        self.camera = BlinkCamera(self.blink.sync['test'])
        self.camera.name = 'foobar'
        self.blink.sync['test'].cameras['foobar'] = self.camera

    def tearDown(self):
        """Clean up after test."""
        self.blink = None

    def test_camera_update(self, mock_sess):
        """Test that we can properly update camera properties."""
        config = {
            'name': 'new',
            'id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '/thumb',
        }
        self.camera.last_record = ['1']
        self.camera.sync.last_record = {
            'new': {
                'clip': '/test.mp4',
                'time': '1970-01-01T00:00:00'
            }
        }
        mock_sess.side_effect = [
            mresp.MockResponse({'temp': 71}, 200), 'test', 'foobar'
        ]
        self.camera.update(config)
        self.assertEqual(self.camera.name, 'new')
        self.assertEqual(self.camera.camera_id, '1234')
        self.assertEqual(self.camera.network_id, '5678')
        self.assertEqual(self.camera.serial, '12345678')
        self.assertEqual(self.camera.motion_enabled, False)
        self.assertEqual(self.camera.battery, 'ok')
        self.assertEqual(self.camera.temperature, 68)
        self.assertEqual(self.camera.temperature_c, 20)
        self.assertEqual(self.camera.temperature_calibrated, 71)
        self.assertEqual(self.camera.wifi_strength, 4)
        self.assertEqual(self.camera.thumbnail,
                         'https://rest-test.immedia-semi.com/thumb.jpg')
        self.assertEqual(self.camera.clip,
                         'https://rest-test.immedia-semi.com/test.mp4')
        self.assertEqual(self.camera.image_from_cache, 'test')
        self.assertEqual(self.camera.video_from_cache, 'foobar')

    def test_no_thumbnails(self, mock_sess):
        """Tests that thumbnail is 'None' if none found."""
        mock_sess.return_value = 'foobar'
        self.camera.last_record = ['1']
        config = {
            'name': 'new',
            'id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '',
        }
        self.camera.sync.homescreen = {'devices': []}
        self.assertEqual(self.camera.temperature_calibrated, None)
        with self.assertLogs() as logrecord:
            self.camera.update(config, force=True)
        self.assertEqual(self.camera.thumbnail, None)
        self.assertEqual(self.camera.last_record, ['1'])
        self.assertEqual(self.camera.temperature_calibrated, 68)
        self.assertEqual(
            logrecord.output,
            [("WARNING:blinkpy.camera:Could not retrieve calibrated "
              "temperature."),
             ("WARNING:blinkpy.camera:Could not find thumbnail for camera new"
              "\nNoneType: None")])

    def test_no_video_clips(self, mock_sess):
        """Tests that we still proceed with camera setup with no videos."""
        mock_sess.return_value = 'foobar'
        config = {
            'name': 'new',
            'id': 1234,
            'network_id': 5678,
            'serial': '12345678',
            'enabled': False,
            'battery_voltage': 90,
            'battery_state': 'ok',
            'temperature': 68,
            'wifi_strength': 4,
            'thumbnail': '/foobar',
        }
        self.camera.sync.homescreen = {'devices': []}
        self.camera.update(config, force_cache=True)
        self.assertEqual(self.camera.clip, None)
        self.assertEqual(self.camera.video_from_cache, None)