def test_check_invalid(): image = mock.Mock() with mock.patch("zigpy.ota.validators.validate_ota_image") as m: m.side_effect = [ValidationResult.VALID] assert not validators.check_invalid(image) with mock.patch("zigpy.ota.validators.validate_ota_image") as m: m.side_effect = [ValidationResult.UNKNOWN] assert not validators.check_invalid(image) with mock.patch("zigpy.ota.validators.validate_ota_image") as m: m.side_effect = [ValidationError("error")] assert validators.check_invalid(image)
async def get_ota_image(self, manufacturer_id, image_type, model=None) -> Optional[CachedImage]: if (manufacturer_id == zigpy.ota.provider.Salus.MANUFACTURER_ID ): # Salus/computime does not pass a useful image_type # in the message from the device. So construct key based on model name. key = ImageKey(manufacturer_id, model) else: key = ImageKey(manufacturer_id, image_type) if key in self._image_cache and not self._image_cache[key].expired: return self._image_cache[key] images = await self.async_event("get_image", key) valid_images = [] for image in images: if image is None or check_invalid(image): continue valid_images.append(image) if not valid_images: return None cached = CachedImage.new( max(valid_images, key=lambda img: img.header.file_version)) self._image_cache[key] = cached return cached
def test_check_invalid_special(): image = mock.Mock() # Unknown OTA image containers are not checked with mock.patch("zigpy.ota.validators.validate_ota_image") as m: assert not validators.check_invalid(image) assert m.call_count == 0
async def get_ota_image(self, manufacturer_id, image_type) -> Optional[OTAImage]: key = ImageKey(manufacturer_id, image_type) if key in self._image_cache and not self._image_cache[key].expired: return self._image_cache[key] images = await self.async_event("get_image", key) valid_images = [] for image in images: if image is None or check_invalid(image): continue valid_images.append(image) if not valid_images: return None cached = CachedImage.new(max(valid_images, key=lambda img: img.version)) self._image_cache[key] = cached return cached