test: lwm2m: Implement write_attributes()
Implement write and remove attributes command for Leshan. Remove all written attributes at the end of test, so it won't affect the next test case. Remove skip marks from testcase that is fixed on Leshan side. Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
This commit is contained in:
parent
eb127538b1
commit
92ceaab491
3 changed files with 48 additions and 29 deletions
|
@ -167,7 +167,7 @@ Tests are written from test spec;
|
||||||
|LightweightM2M-1.1-int-256 - Write Operation Failure|:white_check_mark:| |
|
|LightweightM2M-1.1-int-256 - Write Operation Failure|:white_check_mark:| |
|
||||||
|LightweightM2M-1.1-int-257 - Write-Composite Operation|:white_check_mark:| |
|
|LightweightM2M-1.1-int-257 - Write-Composite Operation|:white_check_mark:| |
|
||||||
|LightweightM2M-1.1-int-260 - Discover Command|:white_check_mark:| |
|
|LightweightM2M-1.1-int-260 - Discover Command|:white_check_mark:| |
|
||||||
|LightweightM2M-1.1-int-261 - Write-Attribute Operation on a multiple resource|:large_orange_diamond:|Leshan don't allow writing attributes to resource instance|
|
|LightweightM2M-1.1-int-261 - Write-Attribute Operation on a multiple resource|:white_check_mark:| |
|
||||||
|LightweightM2M-1.1-int-280 - Successful Read-Composite Operation|:white_check_mark:| |
|
|LightweightM2M-1.1-int-280 - Successful Read-Composite Operation|:white_check_mark:| |
|
||||||
|LightweightM2M-1.1-int-281 - Partially Successful Read-Composite Operation|:white_check_mark:| |
|
|LightweightM2M-1.1-int-281 - Partially Successful Read-Composite Operation|:white_check_mark:| |
|
||||||
|LightweightM2M-1.1-int-301 - Observation and Notification of parameter values|:white_check_mark:| |
|
|LightweightM2M-1.1-int-301 - Observation and Notification of parameter values|:white_check_mark:| |
|
||||||
|
|
|
@ -62,9 +62,9 @@ class Leshan:
|
||||||
resp = self._s.get(f'{self.api_url}{path}', params=params, timeout=self.timeout)
|
resp = self._s.get(f'{self.api_url}{path}', params=params, timeout=self.timeout)
|
||||||
return Leshan.handle_response(resp)
|
return Leshan.handle_response(resp)
|
||||||
|
|
||||||
def put_raw(self, path: str, data: str | dict | None = None, headers: dict | None = None):
|
def put_raw(self, path: str, data: str | dict | None = None, headers: dict | None = None, params: dict | None = None):
|
||||||
"""Send HTTP PUT query without any default parameters"""
|
"""Send HTTP PUT query without any default parameters"""
|
||||||
resp = self._s.put(f'{self.api_url}{path}', data=data, headers=headers, timeout=self.timeout)
|
resp = self._s.put(f'{self.api_url}{path}', data=data, headers=headers, params=params, timeout=self.timeout)
|
||||||
return Leshan.handle_response(resp)
|
return Leshan.handle_response(resp)
|
||||||
|
|
||||||
def put(self, path: str, data: str | dict, uri_options: str = ''):
|
def put(self, path: str, data: str | dict, uri_options: str = ''):
|
||||||
|
@ -108,6 +108,21 @@ class Leshan:
|
||||||
rid = path.split('/')[-1]
|
rid = path.split('/')[-1]
|
||||||
return self.put(f'/clients/{endpoint}/{path}', self._define_resource(rid, value, kind))
|
return self.put(f'/clients/{endpoint}/{path}', self._define_resource(rid, value, kind))
|
||||||
|
|
||||||
|
def write_attributes(self, endpoint: str, path: str, attributes: dict):
|
||||||
|
"""Send LwM2M Write-Attributes to given path
|
||||||
|
example:
|
||||||
|
leshan.write_attributes(endpoint, '1/2/3, {'pmin': 10, 'pmax': 40})
|
||||||
|
"""
|
||||||
|
return self.put_raw(f'/clients/{endpoint}/{path}/attributes', params=attributes)
|
||||||
|
|
||||||
|
def remove_attributes(self, endpoint: str, path: str, attributes: list):
|
||||||
|
"""Send LwM2M Write-Attributes to given path
|
||||||
|
example:
|
||||||
|
leshan.remove_attributes(endpoint, '1/2/3, ['pmin', 'pmax'])
|
||||||
|
"""
|
||||||
|
attrs = '&'.join(attributes)
|
||||||
|
return self.put_raw(f'/clients/{endpoint}/{path}/attributes?'+ attrs)
|
||||||
|
|
||||||
def update_obj_instance(self, endpoint: str, path: str, resources: dict):
|
def update_obj_instance(self, endpoint: str, path: str, resources: dict):
|
||||||
"""Update object instance"""
|
"""Update object instance"""
|
||||||
data = self._define_obj_inst(path, resources)
|
data = self._define_obj_inst(path, resources)
|
||||||
|
|
|
@ -202,7 +202,7 @@ def test_LightweightM2M_1_1_int_221(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
"""LightweightM2M-1.1-int-221 - Attempt to perform operations on Security"""
|
"""LightweightM2M-1.1-int-221 - Attempt to perform operations on Security"""
|
||||||
assert leshan.read(endpoint, '0/0')['status'] == 'UNAUTHORIZED(401)'
|
assert leshan.read(endpoint, '0/0')['status'] == 'UNAUTHORIZED(401)'
|
||||||
assert leshan.write(endpoint, '0/0/0', 'coap://localhost')['status'] == 'UNAUTHORIZED(401)'
|
assert leshan.write(endpoint, '0/0/0', 'coap://localhost')['status'] == 'UNAUTHORIZED(401)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/0/attributes?pmin=10')['status'] == 'UNAUTHORIZED(401)'
|
assert leshan.write_attributes(endpoint, '0', {'pmin':10})['status'] == 'UNAUTHORIZED(401)'
|
||||||
|
|
||||||
def test_LightweightM2M_1_1_int_222(shell: Shell, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_222(shell: Shell, leshan: Leshan, endpoint: str):
|
||||||
"""LightweightM2M-1.1-int-222 - Read on Object"""
|
"""LightweightM2M-1.1-int-222 - Read on Object"""
|
||||||
|
@ -429,15 +429,12 @@ def test_LightweightM2M_1_1_int_260(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
expected_keys = ['/3', '/3/0', '/3/0/1', '/3/0/2', '/3/0/3', '/3/0/4', '/3/0/6', '/3/0/7', '/3/0/8', '/3/0/9', '/3/0/11', '/3/0/16']
|
expected_keys = ['/3', '/3/0', '/3/0/1', '/3/0/2', '/3/0/3', '/3/0/4', '/3/0/6', '/3/0/7', '/3/0/8', '/3/0/9', '/3/0/11', '/3/0/16']
|
||||||
missing_keys = [key for key in expected_keys if key not in resp.keys()]
|
missing_keys = [key for key in expected_keys if key not in resp.keys()]
|
||||||
assert len(missing_keys) == 0
|
assert len(missing_keys) == 0
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/attributes?pmin=10')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3', {'pmin': 10, 'pmax': 200})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/attributes?pmax=200')['status'] == 'CHANGED(204)'
|
|
||||||
resp = leshan.discover(endpoint, '3/0')
|
resp = leshan.discover(endpoint, '3/0')
|
||||||
assert int(resp['/3/0/6']['dim']) == 2
|
assert int(resp['/3/0/6']['dim']) == 2
|
||||||
assert int(resp['/3/0/7']['dim']) == 2
|
assert int(resp['/3/0/7']['dim']) == 2
|
||||||
assert int(resp['/3/0/8']['dim']) == 2
|
assert int(resp['/3/0/8']['dim']) == 2
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/7/attributes?lt=1')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3/0/7', {'lt': 1, 'gt': 6, 'st': 1})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/7/attributes?gt=6')['status'] == 'CHANGED(204)'
|
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/7/attributes?st=1')['status'] == 'CHANGED(204)'
|
|
||||||
resp = leshan.discover(endpoint, '3/0')
|
resp = leshan.discover(endpoint, '3/0')
|
||||||
expected_keys = ['/3/0', '/3/0/1', '/3/0/2', '/3/0/3', '/3/0/4', '/3/0/6', '/3/0/7', '/3/0/8', '/3/0/9', '/3/0/11', '/3/0/16']
|
expected_keys = ['/3/0', '/3/0/1', '/3/0/2', '/3/0/3', '/3/0/4', '/3/0/6', '/3/0/7', '/3/0/8', '/3/0/9', '/3/0/11', '/3/0/16']
|
||||||
missing_keys = [key for key in expected_keys if key not in resp.keys()]
|
missing_keys = [key for key in expected_keys if key not in resp.keys()]
|
||||||
|
@ -451,8 +448,9 @@ def test_LightweightM2M_1_1_int_260(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
missing_keys = [key for key in expected_keys if key not in resp.keys()]
|
missing_keys = [key for key in expected_keys if key not in resp.keys()]
|
||||||
assert len(missing_keys) == 0
|
assert len(missing_keys) == 0
|
||||||
assert len(resp) == len(expected_keys)
|
assert len(resp) == len(expected_keys)
|
||||||
|
# restore
|
||||||
|
leshan.remove_attributes(endpoint, '3', ['pmin', 'pmax'])
|
||||||
|
|
||||||
@pytest.mark.skip(reason="Leshan don't allow writing attributes to resource instance")
|
|
||||||
def test_LightweightM2M_1_1_int_261(shell: Shell, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_261(shell: Shell, leshan: Leshan, endpoint: str):
|
||||||
"""LightweightM2M-1.1-int-261 - Write-Attribute Operation on a multiple resource"""
|
"""LightweightM2M-1.1-int-261 - Write-Attribute Operation on a multiple resource"""
|
||||||
resp = leshan.discover(endpoint, '3/0/11')
|
resp = leshan.discover(endpoint, '3/0/11')
|
||||||
|
@ -462,19 +460,20 @@ def test_LightweightM2M_1_1_int_261(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
assert len(missing_keys) == 0
|
assert len(missing_keys) == 0
|
||||||
assert len(resp) == len(expected_keys)
|
assert len(resp) == len(expected_keys)
|
||||||
assert int(resp['/3/0/11']['dim']) == 1
|
assert int(resp['/3/0/11']['dim']) == 1
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/attributes?pmin=10')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3', {'pmin':10, 'pmax':200})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/attributes?pmax=200')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3/0', {'pmax':320})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/attributes?pmax=320')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3/0/11/0', {'pmax':100, 'epmin':1, 'epmax':20})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/11/0/attributes?pmax=100')['status'] == 'CHANGED(204)'
|
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/11/0/attributes?epmin=1')['status'] == 'CHANGED(204)'
|
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/11/0/attributes?epmax=20')['status'] == 'CHANGED(204)'
|
|
||||||
resp = leshan.discover(endpoint, '3/0/11')
|
resp = leshan.discover(endpoint, '3/0/11')
|
||||||
logger.debug(resp)
|
logger.debug(resp)
|
||||||
assert int(resp['/3/0/11']['pmin']) == 10
|
assert int(resp['/3/0/11']['pmin']) == 10
|
||||||
assert int(resp['/3/0/11']['pmax']) == 320
|
assert int(resp['/3/0/11']['pmax']) == 320
|
||||||
assert int(resp['/3/0/11/0']['pmax']) == 100
|
assert int(resp['/3/0/11/0']['pmax']) == 100
|
||||||
assert int(resp['/3/0/11/0']['epmin']) == 1
|
# Note: Zephyr does not support epmin&epmax.
|
||||||
assert int(resp['/3/0/11/0']['epmax']) == 20
|
# Restore
|
||||||
|
leshan.remove_attributes(endpoint, '3', ['pmin', 'pmax'])
|
||||||
|
leshan.remove_attributes(endpoint, '3/0', ['pmax'])
|
||||||
|
leshan.remove_attributes(endpoint, '3/0/11/0', ['pmax'])
|
||||||
|
|
||||||
|
|
||||||
def test_LightweightM2M_1_1_int_280(shell: Shell, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_280(shell: Shell, leshan: Leshan, endpoint: str):
|
||||||
"""LightweightM2M-1.1-int-280 - Successful Read-Composite Operation"""
|
"""LightweightM2M-1.1-int-280 - Successful Read-Composite Operation"""
|
||||||
|
@ -509,8 +508,7 @@ def test_LightweightM2M_1_1_int_301(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
logger.debug(pwr_src)
|
logger.debug(pwr_src)
|
||||||
assert pwr_src[6][0] == 1
|
assert pwr_src[6][0] == 1
|
||||||
assert pwr_src[6][1] == 5
|
assert pwr_src[6][1] == 5
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/7/attributes?pmin=5')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3/0/7', {'pmin': 5, 'pmax': 10})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/0/7/attributes?pmax=10')['status'] == 'CHANGED(204)'
|
|
||||||
leshan.observe(endpoint, '3/0/7')
|
leshan.observe(endpoint, '3/0/7')
|
||||||
with leshan.get_event_stream(endpoint, timeout=30) as events:
|
with leshan.get_event_stream(endpoint, timeout=30) as events:
|
||||||
shell.exec_command('lwm2m write /3/0/7/0 -u32 3000')
|
shell.exec_command('lwm2m write /3/0/7/0 -u32 3000')
|
||||||
|
@ -529,6 +527,7 @@ def test_LightweightM2M_1_1_int_301(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
assert data[3][0][7][0] == 3500
|
assert data[3][0][7][0] == 3500
|
||||||
assert (start + 15) <= time.time() + 1 # Allow 1 second slack. (pMinx + pMax=15)
|
assert (start + 15) <= time.time() + 1 # Allow 1 second slack. (pMinx + pMax=15)
|
||||||
leshan.cancel_observe(endpoint, '3/0/7')
|
leshan.cancel_observe(endpoint, '3/0/7')
|
||||||
|
leshan.remove_attributes(endpoint, '3/0/7', ['pmin', 'pmax'])
|
||||||
|
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
def test_LightweightM2M_1_1_int_302(shell: Shell, dut: DeviceAdapter, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_302(shell: Shell, dut: DeviceAdapter, leshan: Leshan, endpoint: str):
|
||||||
|
@ -553,8 +552,10 @@ def test_LightweightM2M_1_1_int_302(shell: Shell, dut: DeviceAdapter, leshan: Le
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
def test_LightweightM2M_1_1_int_304(shell: Shell, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_304(shell: Shell, leshan: Leshan, endpoint: str):
|
||||||
"""LightweightM2M-1.1-int-304 - Observe-Composite Operation"""
|
"""LightweightM2M-1.1-int-304 - Observe-Composite Operation"""
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/1/0/1/attributes?pmin=30')['status'] == 'CHANGED(204)'
|
# Need to use Configuration C.1
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/1/0/1/attributes?pmax=45')['status'] == 'CHANGED(204)'
|
shell.exec_command('lwm2m write 1/0/2 -u32 0')
|
||||||
|
shell.exec_command('lwm2m write 1/0/3 -u32 0')
|
||||||
|
assert leshan.write_attributes(endpoint, '1/0/1', {'pmin': 30, 'pmax': 45})['status'] == 'CHANGED(204)'
|
||||||
data = leshan.composite_observe(endpoint, ['/1/0/1', '/3/0/11/0', '/3/0/16'])
|
data = leshan.composite_observe(endpoint, ['/1/0/1', '/3/0/11/0', '/3/0/16'])
|
||||||
assert data[1][0][1] is not None
|
assert data[1][0][1] is not None
|
||||||
assert data[3][0][11][0] is not None
|
assert data[3][0][11][0] is not None
|
||||||
|
@ -575,6 +576,10 @@ def test_LightweightM2M_1_1_int_304(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
assert (start + 30) < time.time()
|
assert (start + 30) < time.time()
|
||||||
assert (start + 45) > time.time() - 1
|
assert (start + 45) > time.time() - 1
|
||||||
leshan.cancel_composite_observe(endpoint, ['/1/0/1', '/3/0/11/0', '/3/0/16'])
|
leshan.cancel_composite_observe(endpoint, ['/1/0/1', '/3/0/11/0', '/3/0/16'])
|
||||||
|
# Restore configuration C.3
|
||||||
|
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
||||||
|
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
||||||
|
leshan.remove_attributes(endpoint, '1/0/1', ['pmin', 'pmax'])
|
||||||
|
|
||||||
def test_LightweightM2M_1_1_int_306(shell: Shell, dut: DeviceAdapter, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_306(shell: Shell, dut: DeviceAdapter, leshan: Leshan, endpoint: str):
|
||||||
"""LightweightM2M-1.1-int-306 - Send Operation"""
|
"""LightweightM2M-1.1-int-306 - Send Operation"""
|
||||||
|
@ -620,8 +625,7 @@ def test_LightweightM2M_1_1_int_308(shell: Shell, dut: DeviceAdapter, leshan: Le
|
||||||
content_both = {16: {0: resources_a, 1: resources_b}}
|
content_both = {16: {0: resources_a, 1: resources_b}}
|
||||||
assert leshan.create_obj_instance(endpoint, '16/0', resources_a)['status'] == 'CREATED(201)'
|
assert leshan.create_obj_instance(endpoint, '16/0', resources_a)['status'] == 'CREATED(201)'
|
||||||
dut.readlines_until(regex='.*net_lwm2m_rd_client: Update Done', timeout=5.0)
|
dut.readlines_until(regex='.*net_lwm2m_rd_client: Update Done', timeout=5.0)
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/16/0/attributes?pmin=30')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '16/0', {'pmin': 30, 'pmax': 45})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/16/0/attributes?pmax=45')['status'] == 'CHANGED(204)'
|
|
||||||
data = leshan.composite_observe(endpoint, ['/16/0', '/16/1'])
|
data = leshan.composite_observe(endpoint, ['/16/0', '/16/1'])
|
||||||
assert data == content_one
|
assert data == content_one
|
||||||
with leshan.get_event_stream(endpoint, timeout=50) as events:
|
with leshan.get_event_stream(endpoint, timeout=50) as events:
|
||||||
|
@ -637,6 +641,7 @@ def test_LightweightM2M_1_1_int_308(shell: Shell, dut: DeviceAdapter, leshan: Le
|
||||||
# Restore configuration C.3
|
# Restore configuration C.3
|
||||||
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
||||||
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
||||||
|
leshan.remove_attributes(endpoint, '16/0', ['pmin','pmax'])
|
||||||
|
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
def test_LightweightM2M_1_1_int_309(shell: Shell, dut: DeviceAdapter, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_309(shell: Shell, dut: DeviceAdapter, leshan: Leshan, endpoint: str):
|
||||||
|
@ -663,8 +668,7 @@ def test_LightweightM2M_1_1_int_309(shell: Shell, dut: DeviceAdapter, leshan: Le
|
||||||
assert leshan.create_obj_instance(endpoint, '16/0', resources_a)['status'] == 'CREATED(201)'
|
assert leshan.create_obj_instance(endpoint, '16/0', resources_a)['status'] == 'CREATED(201)'
|
||||||
assert leshan.create_obj_instance(endpoint, '16/1', resources_b)['status'] == 'CREATED(201)'
|
assert leshan.create_obj_instance(endpoint, '16/1', resources_b)['status'] == 'CREATED(201)'
|
||||||
dut.readlines_until(regex='.*net_lwm2m_rd_client: Update Done', timeout=5.0)
|
dut.readlines_until(regex='.*net_lwm2m_rd_client: Update Done', timeout=5.0)
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/16/0/attributes?pmin=30')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '16/0', {'pmin': 30, 'pmax': 45})['status'] == 'CHANGED(204)'
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/16/0/attributes?pmax=45')['status'] == 'CHANGED(204)'
|
|
||||||
data = leshan.composite_observe(endpoint, ['/16/0', '/16/1'])
|
data = leshan.composite_observe(endpoint, ['/16/0', '/16/1'])
|
||||||
assert data == content_both
|
assert data == content_both
|
||||||
with leshan.get_event_stream(endpoint, timeout=50) as events:
|
with leshan.get_event_stream(endpoint, timeout=50) as events:
|
||||||
|
@ -680,6 +684,7 @@ def test_LightweightM2M_1_1_int_309(shell: Shell, dut: DeviceAdapter, leshan: Le
|
||||||
# Restore configuration C.3
|
# Restore configuration C.3
|
||||||
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
||||||
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
||||||
|
leshan.remove_attributes(endpoint, '16/0', ['pmin', 'pmax'])
|
||||||
|
|
||||||
@pytest.mark.slow
|
@pytest.mark.slow
|
||||||
def test_LightweightM2M_1_1_int_310(shell: Shell, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_310(shell: Shell, leshan: Leshan, endpoint: str):
|
||||||
|
@ -687,11 +692,9 @@ def test_LightweightM2M_1_1_int_310(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
# Need to use Configuration C.1
|
# Need to use Configuration C.1
|
||||||
shell.exec_command('lwm2m write 1/0/2 -u32 0')
|
shell.exec_command('lwm2m write 1/0/2 -u32 0')
|
||||||
shell.exec_command('lwm2m write 1/0/3 -u32 0')
|
shell.exec_command('lwm2m write 1/0/3 -u32 0')
|
||||||
# Ensure that our previous attributes are not conflicting
|
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/attributes?pmin=0')['status'] == 'CHANGED(204)'
|
|
||||||
leshan.composite_observe(endpoint, ['/1/0/1', '/3/0'])
|
leshan.composite_observe(endpoint, ['/1/0/1', '/3/0'])
|
||||||
with leshan.get_event_stream(endpoint, timeout=50) as events:
|
with leshan.get_event_stream(endpoint, timeout=50) as events:
|
||||||
assert leshan.put_raw(f'/clients/{endpoint}/3/attributes?pmax=5')['status'] == 'CHANGED(204)'
|
assert leshan.write_attributes(endpoint, '3', {'pmax': 5})['status'] == 'CHANGED(204)'
|
||||||
start = time.time()
|
start = time.time()
|
||||||
data = events.next_event('NOTIFICATION')
|
data = events.next_event('NOTIFICATION')
|
||||||
assert data[3][0][0] == 'Zephyr'
|
assert data[3][0][0] == 'Zephyr'
|
||||||
|
@ -704,6 +707,7 @@ def test_LightweightM2M_1_1_int_310(shell: Shell, leshan: Leshan, endpoint: str)
|
||||||
# Restore configuration C.3
|
# Restore configuration C.3
|
||||||
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
shell.exec_command('lwm2m write 1/0/2 -u32 1')
|
||||||
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
shell.exec_command('lwm2m write 1/0/3 -u32 10')
|
||||||
|
leshan.remove_attributes(endpoint, '3', ['pmax'])
|
||||||
|
|
||||||
def test_LightweightM2M_1_1_int_311(shell: Shell, leshan: Leshan, endpoint: str):
|
def test_LightweightM2M_1_1_int_311(shell: Shell, leshan: Leshan, endpoint: str):
|
||||||
"""LightweightM2M-1.1-int-311 - Send command"""
|
"""LightweightM2M-1.1-int-311 - Send command"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue