CodeZoo co., ltd
/
mbed-os-example-pelion-CATM1
Mbed OS example of Pelion device management LGUPlus Client
TESTS/observation.py@0:9f917a7bf2da, 2019-12-12 (annotated)
- Committer:
- MACRUM
- Date:
- Thu Dec 12 10:26:06 2019 +0900
- Revision:
- 0:9f917a7bf2da
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MACRUM | 0:9f917a7bf2da | 1 | """ |
MACRUM | 0:9f917a7bf2da | 2 | Copyright 2019 ARM Limited |
MACRUM | 0:9f917a7bf2da | 3 | Licensed under the Apache License, Version 2.0 (the "License"); |
MACRUM | 0:9f917a7bf2da | 4 | you may not use this file except in compliance with the License. |
MACRUM | 0:9f917a7bf2da | 5 | You may obtain a copy of the License at |
MACRUM | 0:9f917a7bf2da | 6 | |
MACRUM | 0:9f917a7bf2da | 7 | http://www.apache.org/licenses/LICENSE-2.0 |
MACRUM | 0:9f917a7bf2da | 8 | |
MACRUM | 0:9f917a7bf2da | 9 | Unless required by applicable law or agreed to in writing, software |
MACRUM | 0:9f917a7bf2da | 10 | distributed under the License is distributed on an "AS IS" BASIS, |
MACRUM | 0:9f917a7bf2da | 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
MACRUM | 0:9f917a7bf2da | 12 | See the License for the specific language governing permissions and |
MACRUM | 0:9f917a7bf2da | 13 | limitations under the License. |
MACRUM | 0:9f917a7bf2da | 14 | """ |
MACRUM | 0:9f917a7bf2da | 15 | |
MACRUM | 0:9f917a7bf2da | 16 | # pylint: disable=missing-docstring,useless-super-delegation |
MACRUM | 0:9f917a7bf2da | 17 | # pylint: disable=line-too-long,method-hidden,relative-import |
MACRUM | 0:9f917a7bf2da | 18 | |
MACRUM | 0:9f917a7bf2da | 19 | import time |
MACRUM | 0:9f917a7bf2da | 20 | from icetea_lib.bench import TestStepFail |
MACRUM | 0:9f917a7bf2da | 21 | from mbed_cloud.exceptions import CloudApiException |
MACRUM | 0:9f917a7bf2da | 22 | from pelion_helper import PelionBase |
MACRUM | 0:9f917a7bf2da | 23 | |
MACRUM | 0:9f917a7bf2da | 24 | |
MACRUM | 0:9f917a7bf2da | 25 | class Testcase(PelionBase): |
MACRUM | 0:9f917a7bf2da | 26 | def __init__(self): |
MACRUM | 0:9f917a7bf2da | 27 | PelionBase.__init__(self, |
MACRUM | 0:9f917a7bf2da | 28 | name="observation", |
MACRUM | 0:9f917a7bf2da | 29 | title="Example application can respond to resource subscription)", |
MACRUM | 0:9f917a7bf2da | 30 | status="released", |
MACRUM | 0:9f917a7bf2da | 31 | type="acceptance", |
MACRUM | 0:9f917a7bf2da | 32 | component=["mbed_cloud_client_example"]) |
MACRUM | 0:9f917a7bf2da | 33 | |
MACRUM | 0:9f917a7bf2da | 34 | def setup(self): |
MACRUM | 0:9f917a7bf2da | 35 | super(Testcase, self).setup() |
MACRUM | 0:9f917a7bf2da | 36 | |
MACRUM | 0:9f917a7bf2da | 37 | def case(self): |
MACRUM | 0:9f917a7bf2da | 38 | # Test resource subscription |
MACRUM | 0:9f917a7bf2da | 39 | resource_path = '/3201/0/5853' |
MACRUM | 0:9f917a7bf2da | 40 | |
MACRUM | 0:9f917a7bf2da | 41 | # 1) Add initial resource value |
MACRUM | 0:9f917a7bf2da | 42 | self.logger.info("PUT %s with value %s", resource_path, self.pattern_value1) |
MACRUM | 0:9f917a7bf2da | 43 | try: |
MACRUM | 0:9f917a7bf2da | 44 | self.connect_api.set_resource_value(device_id=self.device_id, |
MACRUM | 0:9f917a7bf2da | 45 | resource_path=resource_path, |
MACRUM | 0:9f917a7bf2da | 46 | resource_value=self.pattern_value1, |
MACRUM | 0:9f917a7bf2da | 47 | timeout=self.restTimeout) |
MACRUM | 0:9f917a7bf2da | 48 | except CloudApiException as error: |
MACRUM | 0:9f917a7bf2da | 49 | raise TestStepFail("PUT request failed with %d and msg %s" % (error.status, error.message)) |
MACRUM | 0:9f917a7bf2da | 50 | |
MACRUM | 0:9f917a7bf2da | 51 | # Create resource subscription for custom resource (/3201/0/5853) |
MACRUM | 0:9f917a7bf2da | 52 | self.logger.info("Testing subscription for %s", resource_path) |
MACRUM | 0:9f917a7bf2da | 53 | self.connect_api.start_notifications() |
MACRUM | 0:9f917a7bf2da | 54 | |
MACRUM | 0:9f917a7bf2da | 55 | try: |
MACRUM | 0:9f917a7bf2da | 56 | self.connect_api.add_resource_subscription_async(device_id=self.device_id, |
MACRUM | 0:9f917a7bf2da | 57 | resource_path=resource_path, |
MACRUM | 0:9f917a7bf2da | 58 | callback_fn=self._callback_fn) |
MACRUM | 0:9f917a7bf2da | 59 | except CloudApiException as error: |
MACRUM | 0:9f917a7bf2da | 60 | raise TestStepFail("Subscription request failed with %d and msg %s" % (error.status, error.message)) |
MACRUM | 0:9f917a7bf2da | 61 | |
MACRUM | 0:9f917a7bf2da | 62 | # 2) Update resource value |
MACRUM | 0:9f917a7bf2da | 63 | self.logger.info("PUT %s with value %s", resource_path, self.pattern_value2) |
MACRUM | 0:9f917a7bf2da | 64 | try: |
MACRUM | 0:9f917a7bf2da | 65 | self.connect_api.set_resource_value(device_id=self.device_id, |
MACRUM | 0:9f917a7bf2da | 66 | resource_path=resource_path, |
MACRUM | 0:9f917a7bf2da | 67 | resource_value=self.pattern_value2, |
MACRUM | 0:9f917a7bf2da | 68 | timeout=self.restTimeout) |
MACRUM | 0:9f917a7bf2da | 69 | except CloudApiException as error: |
MACRUM | 0:9f917a7bf2da | 70 | raise TestStepFail("PUT request failed with %d and msg %s" % (error.status, error.message)) |
MACRUM | 0:9f917a7bf2da | 71 | |
MACRUM | 0:9f917a7bf2da | 72 | self.logger.info("Waiting for resource notification") |
MACRUM | 0:9f917a7bf2da | 73 | notif_timeout = time.time() + self.restTimeout |
MACRUM | 0:9f917a7bf2da | 74 | |
MACRUM | 0:9f917a7bf2da | 75 | # 3) Wait until we receive some value or timeout |
MACRUM | 0:9f917a7bf2da | 76 | while time.time() < notif_timeout: |
MACRUM | 0:9f917a7bf2da | 77 | if self.notified_value != "": |
MACRUM | 0:9f917a7bf2da | 78 | break |
MACRUM | 0:9f917a7bf2da | 79 | |
MACRUM | 0:9f917a7bf2da | 80 | if self.notified_value != self.pattern_value2: |
MACRUM | 0:9f917a7bf2da | 81 | self.logger.error("Web-application received %s as notification, expected %s", self.notified_value, self.pattern_value2) |
MACRUM | 0:9f917a7bf2da | 82 | raise TestStepFail("Incorrect/No notification received") |
MACRUM | 0:9f917a7bf2da | 83 | else: |
MACRUM | 0:9f917a7bf2da | 84 | self.logger.info("Web-application received %s as notification.", self.notified_value) |
MACRUM | 0:9f917a7bf2da | 85 | |
MACRUM | 0:9f917a7bf2da | 86 | # 4) Remove subscription |
MACRUM | 0:9f917a7bf2da | 87 | try: |
MACRUM | 0:9f917a7bf2da | 88 | self.connect_api.delete_resource_subscription(device_id=self.device_id) |
MACRUM | 0:9f917a7bf2da | 89 | except CloudApiException as error: |
MACRUM | 0:9f917a7bf2da | 90 | raise TestStepFail("Subscription removal failed with %d and msg %s" % (error.status, error.message)) |
MACRUM | 0:9f917a7bf2da | 91 | |
MACRUM | 0:9f917a7bf2da | 92 | # 5) Update resource value to trigger reset from server |
MACRUM | 0:9f917a7bf2da | 93 | # This is needed to clean the client subscription status for any follow-up tests |
MACRUM | 0:9f917a7bf2da | 94 | self.logger.info("PUT %s with value %s", resource_path, self.pattern_value3) |
MACRUM | 0:9f917a7bf2da | 95 | try: |
MACRUM | 0:9f917a7bf2da | 96 | self.connect_api.set_resource_value(device_id=self.device_id, |
MACRUM | 0:9f917a7bf2da | 97 | resource_path=resource_path, |
MACRUM | 0:9f917a7bf2da | 98 | resource_value=self.pattern_value3, |
MACRUM | 0:9f917a7bf2da | 99 | timeout=self.restTimeout) |
MACRUM | 0:9f917a7bf2da | 100 | except CloudApiException as error: |
MACRUM | 0:9f917a7bf2da | 101 | raise TestStepFail("PUT request failed with %d and msg %s" % (error.status, error.message)) |
MACRUM | 0:9f917a7bf2da | 102 | |
MACRUM | 0:9f917a7bf2da | 103 | def teardown(self): |
MACRUM | 0:9f917a7bf2da | 104 | # Remove subscription |
MACRUM | 0:9f917a7bf2da | 105 | try: |
MACRUM | 0:9f917a7bf2da | 106 | self.connect_api.delete_resource_subscription(device_id=self.device_id) |
MACRUM | 0:9f917a7bf2da | 107 | except CloudApiException as error: |
MACRUM | 0:9f917a7bf2da | 108 | raise TestStepFail("Subscription removal failed with %d and msg %s" % (error.status, error.message)) |
MACRUM | 0:9f917a7bf2da | 109 | |
MACRUM | 0:9f917a7bf2da | 110 | self.connect_api.stop_notifications() |