Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-sdk-tools by
compliance/ioper_runner.py@32:8ea194f6145b, 2017-01-04 (annotated)
- Committer:
- The Other Jimmy
- Date:
- Wed Jan 04 11:58:24 2017 -0600
- Revision:
- 32:8ea194f6145b
- Parent:
- 0:66f3b5499f7f
Update tools to follow mbed-os tools release 5.3.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:66f3b5499f7f | 1 | #!/usr/bin/env python2 |
screamer | 0:66f3b5499f7f | 2 | """ |
screamer | 0:66f3b5499f7f | 3 | mbed SDK |
screamer | 0:66f3b5499f7f | 4 | Copyright (c) 2011-2015 ARM Limited |
screamer | 0:66f3b5499f7f | 5 | |
screamer | 0:66f3b5499f7f | 6 | Licensed under the Apache License, Version 2.0 (the "License"); |
screamer | 0:66f3b5499f7f | 7 | you may not use this file except in compliance with the License. |
screamer | 0:66f3b5499f7f | 8 | You may obtain a copy of the License at |
screamer | 0:66f3b5499f7f | 9 | |
screamer | 0:66f3b5499f7f | 10 | http://www.apache.org/licenses/LICENSE-2.0 |
screamer | 0:66f3b5499f7f | 11 | |
screamer | 0:66f3b5499f7f | 12 | Unless required by applicable law or agreed to in writing, software |
screamer | 0:66f3b5499f7f | 13 | distributed under the License is distributed on an "AS IS" BASIS, |
screamer | 0:66f3b5499f7f | 14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
screamer | 0:66f3b5499f7f | 15 | See the License for the specific language governing permissions and |
screamer | 0:66f3b5499f7f | 16 | limitations under the License. |
screamer | 0:66f3b5499f7f | 17 | |
screamer | 0:66f3b5499f7f | 18 | Author: Przemyslaw Wirkus <Przemyslaw.Wirkus@arm.com> |
screamer | 0:66f3b5499f7f | 19 | |
screamer | 0:66f3b5499f7f | 20 | """ |
screamer | 0:66f3b5499f7f | 21 | |
screamer | 0:66f3b5499f7f | 22 | import sys |
screamer | 0:66f3b5499f7f | 23 | import mbed_lstools |
screamer | 0:66f3b5499f7f | 24 | from prettytable import PrettyTable |
screamer | 0:66f3b5499f7f | 25 | |
screamer | 0:66f3b5499f7f | 26 | try: |
screamer | 0:66f3b5499f7f | 27 | from colorama import init |
screamer | 0:66f3b5499f7f | 28 | except: |
screamer | 0:66f3b5499f7f | 29 | pass |
screamer | 0:66f3b5499f7f | 30 | |
screamer | 0:66f3b5499f7f | 31 | COLORAMA = 'colorama' in sys.modules |
screamer | 0:66f3b5499f7f | 32 | |
screamer | 0:66f3b5499f7f | 33 | from ioper_base import IOperTestCaseBase |
screamer | 0:66f3b5499f7f | 34 | from ioper_test_fs import IOperTest_FileStructure_Basic |
screamer | 0:66f3b5499f7f | 35 | from ioper_test_fs import IOperTest_FileStructure_MbedEnabled |
screamer | 0:66f3b5499f7f | 36 | from ioper_test_target_id import IOperTest_TargetID_Basic |
screamer | 0:66f3b5499f7f | 37 | from ioper_test_target_id import IOperTest_TargetID_MbedEnabled |
screamer | 0:66f3b5499f7f | 38 | |
screamer | 0:66f3b5499f7f | 39 | |
screamer | 0:66f3b5499f7f | 40 | TEST_LIST = [IOperTest_TargetID_Basic('basic'), |
screamer | 0:66f3b5499f7f | 41 | IOperTest_TargetID_MbedEnabled('mbed-enabled'), |
screamer | 0:66f3b5499f7f | 42 | IOperTest_FileStructure_Basic('basic'), |
screamer | 0:66f3b5499f7f | 43 | IOperTest_FileStructure_MbedEnabled('mbed-enabled'), |
screamer | 0:66f3b5499f7f | 44 | IOperTestCaseBase('all'), # Dummy used to add 'all' option |
screamer | 0:66f3b5499f7f | 45 | ] |
screamer | 0:66f3b5499f7f | 46 | |
screamer | 0:66f3b5499f7f | 47 | |
screamer | 0:66f3b5499f7f | 48 | class IOperTestRunner(): |
screamer | 0:66f3b5499f7f | 49 | """ Calls all i/face interoperability tests |
screamer | 0:66f3b5499f7f | 50 | """ |
screamer | 0:66f3b5499f7f | 51 | |
screamer | 0:66f3b5499f7f | 52 | def __init__(self, scope=None): |
screamer | 0:66f3b5499f7f | 53 | """ Test scope: |
screamer | 0:66f3b5499f7f | 54 | 'pedantic' - all |
screamer | 0:66f3b5499f7f | 55 | 'mbed-enabled' - let's try to check if this device is mbed-enabled |
screamer | 0:66f3b5499f7f | 56 | 'basic' - just simple, passive tests (no device flashing) |
screamer | 0:66f3b5499f7f | 57 | """ |
screamer | 0:66f3b5499f7f | 58 | self.requested_scope = scope # Test scope given by user |
screamer | 0:66f3b5499f7f | 59 | self.raw_test_results = {} # Raw test results, can be used by exporters: { Platform: [test results]} |
screamer | 0:66f3b5499f7f | 60 | |
screamer | 0:66f3b5499f7f | 61 | # Test scope definitions |
screamer | 0:66f3b5499f7f | 62 | self.SCOPE_BASIC = 'basic' # Basic tests, sanity checks |
screamer | 0:66f3b5499f7f | 63 | self.SCOPE_MBED_ENABLED = 'mbed-enabled' # Let's try to check if this device is mbed-enabled |
screamer | 0:66f3b5499f7f | 64 | self.SCOPE_PEDANTIC = 'pedantic' # Extensive tests |
screamer | 0:66f3b5499f7f | 65 | self.SCOPE_ALL = 'all' # All tests, equal to highest scope level |
screamer | 0:66f3b5499f7f | 66 | |
screamer | 0:66f3b5499f7f | 67 | # This structure will help us sort test scopes so we can include them |
screamer | 0:66f3b5499f7f | 68 | # e.g. pedantic also includes basic and mbed-enabled tests |
screamer | 0:66f3b5499f7f | 69 | self.scopes = {self.SCOPE_BASIC : 0, |
screamer | 0:66f3b5499f7f | 70 | self.SCOPE_MBED_ENABLED : 1, |
screamer | 0:66f3b5499f7f | 71 | self.SCOPE_PEDANTIC : 2, |
screamer | 0:66f3b5499f7f | 72 | self.SCOPE_ALL : 99, |
screamer | 0:66f3b5499f7f | 73 | } |
screamer | 0:66f3b5499f7f | 74 | |
screamer | 0:66f3b5499f7f | 75 | if COLORAMA: |
screamer | 0:66f3b5499f7f | 76 | init() # colorama.init() |
screamer | 0:66f3b5499f7f | 77 | |
screamer | 0:66f3b5499f7f | 78 | def run(self): |
screamer | 0:66f3b5499f7f | 79 | """ Run tests, calculate overall score and print test results |
screamer | 0:66f3b5499f7f | 80 | """ |
screamer | 0:66f3b5499f7f | 81 | mbeds = mbed_lstools.create() |
screamer | 0:66f3b5499f7f | 82 | muts_list = mbeds.list_mbeds() |
screamer | 0:66f3b5499f7f | 83 | test_base = IOperTestCaseBase() |
screamer | 0:66f3b5499f7f | 84 | |
screamer | 0:66f3b5499f7f | 85 | self.raw_test_results = {} |
screamer | 0:66f3b5499f7f | 86 | for i, mut in enumerate(muts_list): |
screamer | 0:66f3b5499f7f | 87 | result = [] |
screamer | 0:66f3b5499f7f | 88 | self.raw_test_results[mut['platform_name']] = [] |
screamer | 0:66f3b5499f7f | 89 | |
screamer | 0:66f3b5499f7f | 90 | print "MBEDLS: Detected %s, port: %s, mounted: %s"% (mut['platform_name'], |
screamer | 0:66f3b5499f7f | 91 | mut['serial_port'], |
screamer | 0:66f3b5499f7f | 92 | mut['mount_point']) |
screamer | 0:66f3b5499f7f | 93 | print "Running interoperability test suite, scope '%s'" % (self.requested_scope) |
screamer | 0:66f3b5499f7f | 94 | for test_case in TEST_LIST: |
screamer | 0:66f3b5499f7f | 95 | if self.scopes[self.requested_scope] >= self.scopes[test_case.scope]: |
screamer | 0:66f3b5499f7f | 96 | res = test_case.test(param=mut) |
screamer | 0:66f3b5499f7f | 97 | result.extend(res) |
screamer | 0:66f3b5499f7f | 98 | self.raw_test_results[mut['platform_name']].extend(res) |
screamer | 0:66f3b5499f7f | 99 | |
screamer | 0:66f3b5499f7f | 100 | columns = ['Platform', 'Test Case', 'Result', 'Scope', 'Description'] |
screamer | 0:66f3b5499f7f | 101 | pt = PrettyTable(columns) |
screamer | 0:66f3b5499f7f | 102 | for col in columns: |
screamer | 0:66f3b5499f7f | 103 | pt.align[col] = 'l' |
screamer | 0:66f3b5499f7f | 104 | |
screamer | 0:66f3b5499f7f | 105 | for tr in result: |
screamer | 0:66f3b5499f7f | 106 | severity, tr_name, tr_scope, text = tr |
screamer | 0:66f3b5499f7f | 107 | tr = (test_base.COLOR(severity, mut['platform_name']), |
screamer | 0:66f3b5499f7f | 108 | test_base.COLOR(severity, tr_name), |
screamer | 0:66f3b5499f7f | 109 | test_base.COLOR(severity, severity), |
screamer | 0:66f3b5499f7f | 110 | test_base.COLOR(severity, tr_scope), |
screamer | 0:66f3b5499f7f | 111 | test_base.COLOR(severity, text)) |
screamer | 0:66f3b5499f7f | 112 | pt.add_row(list(tr)) |
screamer | 0:66f3b5499f7f | 113 | print pt.get_string(border=True, sortby='Result') |
screamer | 0:66f3b5499f7f | 114 | if i + 1 < len(muts_list): |
screamer | 0:66f3b5499f7f | 115 | |
screamer | 0:66f3b5499f7f | 116 | return self.raw_test_results |
screamer | 0:66f3b5499f7f | 117 | |
screamer | 0:66f3b5499f7f | 118 | def get_available_oper_test_scopes(): |
screamer | 0:66f3b5499f7f | 119 | """ Get list of available test scopes |
screamer | 0:66f3b5499f7f | 120 | """ |
screamer | 0:66f3b5499f7f | 121 | scopes = set() |
screamer | 0:66f3b5499f7f | 122 | for oper_test in TEST_LIST: |
screamer | 0:66f3b5499f7f | 123 | if oper_test.scope is not None: |
screamer | 0:66f3b5499f7f | 124 | scopes.add(oper_test.scope) |
screamer | 0:66f3b5499f7f | 125 | return list(scopes) |