Skip to content

Commit 082a486

Browse files
committed
Tests update
1 parent 542b05e commit 082a486

File tree

9 files changed

+217
-108
lines changed

9 files changed

+217
-108
lines changed

Diff for: tests/device/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ ifneq ("$(NO_RUN)","1")
7171
$(RUNNER_DEBUG_FLAG) \
7272
-p $(UPLOAD_PORT) \
7373
-n $(basename $(notdir $@)) \
74-
-o $(LOCAL_BUILD_DIR)/test_result.xml
74+
-o $(LOCAL_BUILD_DIR)/test_result.xml \
75+
`test -f $(addsuffix .py, $(basename $@)) && echo "-m $(addsuffix .py, $(basename $@))" || echo ""`
7576
endif
7677

7778
$(BUILD_DIR):

Diff for: tests/device/libraries/BSTest/mock_decorators.py

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
env = dict()
3+
4+
def setup(test_name):
5+
global env
6+
if not test_name in env:
7+
env[test_name] = dict()
8+
func_env = env[test_name]
9+
def decorator(func):
10+
def func_wrapper():
11+
return func(env[test_name])
12+
func_env['setup'] = func_wrapper
13+
return func_wrapper
14+
return decorator
15+
16+
17+
18+
def teardown(test_name):
19+
global env
20+
if not test_name in env:
21+
env[test_name] = dict()
22+
func_env = env[test_name]
23+
def decorator(func):
24+
def func_wrapper():
25+
return func(env[test_name])
26+
func_env['teardown'] = func_wrapper
27+
return func_wrapper
28+
return decorator

Diff for: tests/device/libraries/BSTest/requirements.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
Flask==0.10.1
2+
itsdangerous==0.24
3+
Jinja2==2.8
14
junit-xml==1.6
5+
MarkupSafe==0.23
26
pexpect==4.0.1
37
ptyprocess==0.5.1
48
pyserial==3.0.1
9+
PyYAML==3.11
510
six==1.10.0
6-
wheel==0.24.0
11+
Werkzeug==0.11.9
12+
wheel==0.24.0

Diff for: tests/device/libraries/BSTest/runner.py

+24-8
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@
88
import argparse
99
import serial
1010
import subprocess
11+
import imp
1112
from urlparse import urlparse
1213
from junit_xml import TestSuite, TestCase
1314
try:
1415
from cStringIO import StringIO
1516
except:
1617
from StringIO import StringIO
18+
import mock_decorators
1719

1820
debug = False
1921

22+
sys.path.append(os.path.abspath(__file__))
23+
2024
def debug_print(*args, **kwargs):
2125
if not debug:
2226
return
@@ -29,17 +33,18 @@ class BSTestRunner(object):
2933
TIMEOUT = 2
3034
CRASH = 3
3135

32-
def __init__(self, spawn_obj, name):
36+
def __init__(self, spawn_obj, name, mocks):
3337
self.sp = spawn_obj
3438
self.tests = []
3539
self.reset_timeout = 2
3640
self.name = name
41+
self.mocks = mocks
3742

3843
def get_test_list(self):
3944
self.sp.sendline('-1')
4045
timeout = 10
4146
while timeout > 0:
42-
res = self.sp.expect(['>>>>>bs_test_menu_begin', EOF])
47+
res = self.sp.expect(['>>>>>bs_test_menu_begin', EOF, TIMEOUT])
4348
if res == 0:
4449
break
4550
timeout-=1
@@ -49,15 +54,15 @@ def get_test_list(self):
4954
while True:
5055
res = self.sp.expect(['>>>>>bs_test_item id\=(\d+) name\="([^\"]*?)" desc="([^"]*?)"',
5156
'>>>>>bs_test_menu_end',
52-
EOF])
57+
EOF, TIMEOUT])
5358
if res == 0:
5459
m = self.sp.match
5560
t = {'id': m.group(1), 'name': m.group(2), 'desc': m.group(3)}
5661
self.tests.append(t)
5762
debug_print('added test', t)
5863
elif res == 1:
5964
break
60-
elif res == 2:
65+
elif res >= 2:
6166
time.sleep(0.1)
6267

6368
debug_print('got {} tests'.format(len(self.tests)))
@@ -75,8 +80,14 @@ def run_tests(self):
7580
else:
7681
test_output = StringIO()
7782
self.sp.logfile = test_output
83+
if name in self.mocks:
84+
print('setting up mocks')
85+
self.mocks[name]['setup']()
7886
t_start = time.time()
7987
result = self.run_test(index)
88+
if name in self.mocks:
89+
print('tearing down mocks')
90+
self.mocks[name]['teardown']()
8091
t_stop = time.time()
8192
self.sp.logfile = None
8293
test_case.elapsed_sec = t_stop - t_start
@@ -96,7 +107,7 @@ def run_test(self, index):
96107
self.sp.sendline('{}'.format(index))
97108
timeout = 10
98109
while timeout > 0:
99-
res = self.sp.expect(['>>>>>bs_test_start', EOF])
110+
res = self.sp.expect(['>>>>>bs_test_start', EOF, TIMEOUT])
100111
if res == 0:
101112
break
102113
time.sleep(0.1)
@@ -147,8 +158,8 @@ def spawn_port(port_name, baudrate=115200):
147158
def spawn_exec(name):
148159
return pexpect.spawn(name, timeout=0)
149160

150-
def run_tests(spawn, name):
151-
tw = BSTestRunner(spawn, name)
161+
def run_tests(spawn, name, mocks):
162+
tw = BSTestRunner(spawn, name, mocks)
152163
tw.get_test_list()
153164
return tw.run_tests()
154165

@@ -159,6 +170,7 @@ def parse_args():
159170
parser.add_argument('-e', '--executable', help='Talk to the test executable')
160171
parser.add_argument('-n', '--name', help='Test run name')
161172
parser.add_argument('-o', '--output', help='Output JUnit format test report')
173+
parser.add_argument('-m', '--mock', help='Set python script to use for mocking purposes')
162174
return parser.parse_args()
163175

164176
def main():
@@ -178,8 +190,12 @@ def main():
178190
if spawn_func is None:
179191
debug_print("Please specify port or executable", file=sys.stderr)
180192
return 1
193+
mocks = {}
194+
if args.mock is not None:
195+
mocks_mod = imp.load_source('mocks', args.mock)
196+
mocks = mock_decorators.env
181197
with spawn_func(spawn_arg) as sp:
182-
ts = run_tests(sp, name)
198+
ts = run_tests(sp, name, mocks)
183199
if args.output:
184200
with open(args.output, "w") as f:
185201
TestSuite.to_file(f, [ts])

Diff for: tests/device/test_FS/test_FS.ino

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ TEST_CASE("files can be renamed", "[fs]")
9090
}
9191
}
9292

93-
TEST_CASE("FS::info works")
93+
TEST_CASE("FS::info works","[fs]")
9494
{
9595
REQUIRE(SPIFFS.begin());
9696
FSInfo info;

Diff for: tests/device/test_http_client/server.crt

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICzzCCAbcCCQCUajf39FoF8jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
3+
YS50bHMudGVzdDAeFw0xNjA0MjIxMTU1MTlaFw0xNzA0MjIxMTU1MTlaMD0xITAf
4+
BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAwwPc2VydmVy
5+
LnRscy50ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhyGSO13
6+
/ozG0rL6FxDaaxYgMyPVK3hIhTHfKOK/eRZFRDFAhYudz9NbkvUMIF1SToED9FBh
7+
MbJrkPzCU3cLC1zgnTLseoOS3FKC8xVfJVwsWD8YjMvyQUV/Uo9TAHQSA4SfOB4W
8+
JjRBMX2GCoWLK5wVzxX+XGd5DnqME4n/CG+Il1t8mB+ACeA1FKwVPTi1wGvDzuCo
9+
swSEX3J08JB9rP5dix7t+Fezgr6PkvUcnAcu4utAw6f6c0LoHk0SnyXJg1jTdKrl
10+
J8dIyWQR0cvaxbF+04hvpDepx/62CP+aRs1zcC37eEQ3BVf4phJXbwuXbT7a1CUf
11+
XQ0cWnJg8mdfcQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBV7ZiwVM8alxPN9vd/
12+
Ze8EiidSuztkbtZX3mhHfkcJ2Q5c+tZ0Oxy4/g6oISe1+NOQJDMrsARrdWVPmmsb
13+
ihSHNdS6t0DTcWR5h+i/rnGh+cGiWOJKfhNWvpCVuU6YRZWhYOztL8p6iHoG3ZBi
14+
+zo9GD71FNSRQxMois9sR9q/IgOmkm8CjQgYsv9bQ+Le4mRqfaOCOSoQvsRyLoam
15+
lNl85gzvVygHYPP9ypiia8btyOHwDSHiV8UhKaERSGKFqznPmTTwTQNXEtQylCXG
16+
C+13mMGVr49yP4cuYaM8mfL8Rg7Im8Mfa0GXq5PBwEFFYpR9xnbBouQv5erYTQdl
17+
Oxqk
18+
-----END CERTIFICATE-----

Diff for: tests/device/test_http_client/server.csr

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN CERTIFICATE REQUEST-----
2+
MIICgjCCAWoCAQAwPTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
3+
MRgwFgYDVQQDDA9zZXJ2ZXIudGxzLnRlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
4+
DwAwggEKAoIBAQDCHIZI7Xf+jMbSsvoXENprFiAzI9UreEiFMd8o4r95FkVEMUCF
5+
i53P01uS9QwgXVJOgQP0UGExsmuQ/MJTdwsLXOCdMux6g5LcUoLzFV8lXCxYPxiM
6+
y/JBRX9Sj1MAdBIDhJ84HhYmNEExfYYKhYsrnBXPFf5cZ3kOeowTif8Ib4iXW3yY
7+
H4AJ4DUUrBU9OLXAa8PO4KizBIRfcnTwkH2s/l2LHu34V7OCvo+S9RycBy7i60DD
8+
p/pzQugeTRKfJcmDWNN0quUnx0jJZBHRy9rFsX7TiG+kN6nH/rYI/5pGzXNwLft4
9+
RDcFV/imEldvC5dtPtrUJR9dDRxacmDyZ19xAgMBAAGgADANBgkqhkiG9w0BAQsF
10+
AAOCAQEAE2xZjAkmVr7/p7LkV3UV3Y0wzeVP7kDBN7VnhNmEMw8xTKwXKsc6z5pY
11+
fa4/lmMMCIJ04dUPIgPC2qiYXJ1AXevLm0A7Blpay6HJilw51NMjhF6SLUkShl6e
12+
k3zyj9LnA5TxijsTrFy/km7qIoo6l7sR7+DwTOIlO/Sj/SDNJn+GAVL153zjxYCy
13+
eBYdEz07kxkeONLUjAW2bV+TkliqTdM6meRpf9GQGQksQrkHrudl7JyyKZTf2m6Z
14+
U33AnUp2SRIXESJmst824LKwkjLMYiXgxRK8ZSSP7iiNBj71DK1vQOZQwEZ2cCjW
15+
/pQxKJnHnRvZ3rityuShtHTUF+C39w==
16+
-----END CERTIFICATE REQUEST-----

Diff for: tests/device/test_http_client/server.key

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEpAIBAAKCAQEAwhyGSO13/ozG0rL6FxDaaxYgMyPVK3hIhTHfKOK/eRZFRDFA
3+
hYudz9NbkvUMIF1SToED9FBhMbJrkPzCU3cLC1zgnTLseoOS3FKC8xVfJVwsWD8Y
4+
jMvyQUV/Uo9TAHQSA4SfOB4WJjRBMX2GCoWLK5wVzxX+XGd5DnqME4n/CG+Il1t8
5+
mB+ACeA1FKwVPTi1wGvDzuCoswSEX3J08JB9rP5dix7t+Fezgr6PkvUcnAcu4utA
6+
w6f6c0LoHk0SnyXJg1jTdKrlJ8dIyWQR0cvaxbF+04hvpDepx/62CP+aRs1zcC37
7+
eEQ3BVf4phJXbwuXbT7a1CUfXQ0cWnJg8mdfcQIDAQABAoIBAQCKfl2VFNEjbf/B
8+
fu8Om/iqpOuucSd7z2M2nSGSg02HsEsVX2qgnb+n8y4ICQxw3wSFfGl83Aiss5cp
9+
qB1h/bKEleywXA/7TXrv9XL2ys3K0xvUjpgOhMjApzwzhIz86tObbPlIybaV5XyK
10+
Ofvz79oe8EtjKFcGSNFHckoU+sValzH/gyaeIFuPFlJdsW9MOgN5lcyLDtddg2lr
11+
Z9k+OEEob9BC1dDmc5hxtnClfyiXW1ugjZovOBv79Mq2N8G/V8JZaTHxzEFdOGy3
12+
lUQ1B/s2xPDejQYGddc3N5+wF4ZuGHAYOmcv8IRaMvLdBMPmVnKdgDJeY4HheJY0
13+
z0t4BEYtAoGBAPL1exWZputT8GitBxTJcJB1crMzxvlSplS5mGxM36GgZxf2ql72
14+
8Ufa1hCAQLP7keKPWWl26Bt6Bm4uv/jsB/F8ezMloPvwwQ3nQrN8QY4ihtLLFcvK
15+
OMaErweMEVvQ6GdQHPGow5RqAkYj/X6jJjoAI88uV1yOx+TucmDneEnbAoGBAMyH
16+
04ZR3VNvzHSjDx2wo48FP7Cs/uCynOEd/bRb1I8n+fazIXIlWdWX2drFr2YRM+Uy
17+
UzAadgqFOu3Bvuk64UKwAlxX9jCIm1Ed5O1MUGPj+6OnW1oq/eYIbJ9RlFDyIEBv
18+
Ic+jV/zxojgpP38jpTzn2oC5jWWS+CjHpZNThtujAoGBAOquRB4xNRLLGcWCnPxv
19+
N9PSHuEKeoAKXbApNhomhz1P+0Uidp8UWSvXLj7yI422ysvVO8Crorgnvl5fuf9v
20+
vpx8aWSWTFIP0+riH4PP2mK45xJmKL+Yrg7Ty1225m2R9WsV719ebMzHOTsXOJ1C
21+
aoJL8EsHsEsvf9aanNENxRtRAoGAVIP34zQm2diDytqqX2FjZLENjWse8yi7bMag
22+
1ItxvSoOv2Nr+af3hCx4aE9x2CJZqGbwOxtkFZrSK/b4dZXQCWeDwjbS02FPlOhe
23+
dbQoL+7AR/La69qCCjEG+ZqTSBOVQirp9MwRisMqfjyFMXtAR3ejMbf69rMReoBt
24+
KgDE5DMCgYAkcBd7XyPjR6t09BXAcz8n5J8QCsoY4taNVeCmCCkl8rUt9y8tjQah
25+
5NtBk6i834p5/GbGhI4en/sisVUWzpOgc9G80lUAFQSR3weR6lOL1T+/cy691GqO
26+
wKAWbpOH01fJYmnbUjC7TC2idx033ZA9vJq/s9sNfG2CS2w3egcxag==
27+
-----END RSA PRIVATE KEY-----

0 commit comments

Comments
 (0)