Skip to content

Commit 96f6b58

Browse files
committed
Add skeleton for pytest
1 parent ece38ad commit 96f6b58

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ builds
88
lib/cryptoauth/cryptoauthlib
99
lib/cryptoauth/build48
1010
lib/cryptoauth/build64
11+
__pycache__/

test/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import os
2+
3+
def pytest_addoption(parser):
4+
5+
file_directory = os.path.dirname(os.path.realpath(__file__))
6+
7+
# TODO: fix proper pathing
8+
sketch_dir = f"{file_directory}/../examples"
9+
build_dir = f"{file_directory}/build"
10+
11+
12+
parser.addoption("--port", action="store", help="Device port (COMx, /dev/ttyACMx, etc.)", required=True)
13+
parser.addoption("--device", action="store", help="Device to test against", default="avr128db48")
14+
parser.addoption("--logging", action="store", help="Logging verbosity level (critical, error, warning, info, debug)", default="warn")
15+
parser.addoption("--sketchdir", action="store", help="Relative path to the sketch directory with the example sketches", default=sketch_dir)
16+
parser.addoption("--builddir", action="store", help="Relative path to the build directory", default=build_dir)

test/test_examples.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import pytest
2+
import logging
3+
import argparse
4+
import textwrap
5+
import glob
6+
import os
7+
import json
8+
import serial
9+
import time
10+
import subprocess
11+
import re
12+
13+
from pymcuprog.backend import SessionConfig
14+
from pymcuprog.toolconnection import ToolUsbHidConnection
15+
from pymcuprog.backend import Backend
16+
from pymcuprog.hexfileutils import read_memories_from_hex
17+
from pymcuprog.deviceinfo.memorynames import MemoryNameAliases
18+
from pymcuprog.deviceinfo.deviceinfokeys import DeviceMemoryInfoKeys
19+
20+
21+
22+
BOARD_CONFIG = "DxCore:megaavr:avrdb:appspm=no,chip=avr128db48,clock=24internal,"\
23+
"bodvoltage=1v9,bodmode=disabled,eesave=enable,resetpin=reset,"\
24+
"millis=tcb2,startuptime=8,wiremode=mors2,printf=full"
25+
26+
TIMEOUT = 30
27+
28+
def program(request):
29+
"""Builds and programs the sketch file
30+
31+
Args:
32+
request (obj): PyTest request object
33+
"""
34+
35+
36+
example_name = request.node.name[5:]
37+
38+
build_directory = request.config.getoption("--builddir")
39+
sketch_directory = request.config.getoption("--sketchdir")
40+
41+
# TODO: fix pathing
42+
sketch_path = f"{sketch_directory}/{example_name}/{example_name}.ino"
43+
44+
print(f"Buillding and programming {os.path.basename(sketch_path)}...")
45+
46+
if not os.path.exists(build_directory):
47+
os.mkdir(build_directory)
48+
49+
compilation_return_code = subprocess.run([f"arduino-cli compile {sketch_path} -b {BOARD_CONFIG} --output-dir {build_directory}"], shell=True).returncode
50+
51+
assert compilation_return_code == 0
52+
53+
54+
hex_file = build_directory + f"/{os.path.basename(sketch_path)}.hex"
55+
56+
try:
57+
memory_segments = read_memories_from_hex(hex_file, backend.device_memory_info)
58+
backend.erase(MemoryNameAliases.ALL, address=None)
59+
60+
for segment in memory_segments:
61+
memory_name = segment.memory_info[DeviceMemoryInfoKeys.NAME]
62+
backend.write_memory(segment.data, memory_name, segment.offset)
63+
verify_ok = backend.verify_memory(segment.data, memory_name, segment.offset)
64+
65+
if verify_ok:
66+
logging.info("OK")
67+
else:
68+
logging.error("Verification failed!")
69+
return False
70+
71+
except Exception as exception:
72+
logging.warning(f"Error programming: {exception}")
73+
return False
74+
75+
return True
76+
77+
def test_debug_modem(request):
78+
# TODO: backend for pymcuprog has to be defined as a prerequisite and set up before all tests
79+
80+
81+
test = program(request)
82+
83+
assert test == "debug_modem"

0 commit comments

Comments
 (0)