Merge pull request #2393 from cm-iwata/fix_device_shadow_ver_conflict

fix #2392 Add validation for device shadow version
This commit is contained in:
Steve Pulec 2019-09-11 21:46:46 -05:00 committed by GitHub
commit c81de6e381
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 0 deletions

View file

@ -21,3 +21,11 @@ class InvalidRequestException(IoTDataPlaneClientError):
super(InvalidRequestException, self).__init__(
"InvalidRequestException", message
)
class ConflictException(IoTDataPlaneClientError):
def __init__(self, message):
self.code = 409
super(ConflictException, self).__init__(
"ConflictException", message
)

View file

@ -6,6 +6,7 @@ import jsondiff
from moto.core import BaseBackend, BaseModel
from moto.iot import iot_backends
from .exceptions import (
ConflictException,
ResourceNotFoundException,
InvalidRequestException
)
@ -161,6 +162,8 @@ class IoTDataPlaneBackend(BaseBackend):
if any(_ for _ in payload['state'].keys() if _ not in ['desired', 'reported']):
raise InvalidRequestException('State contains an invalid node')
if 'version' in payload and thing.thing_shadow.version != payload['version']:
raise ConflictException('Version conflict')
new_shadow = FakeShadow.create_from_previous_version(thing.thing_shadow, payload)
thing.thing_shadow = new_shadow
return thing.thing_shadow