diff --git a/tests/README.md b/tests/README.md index 2fbeced..d51dc24 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,3 +1,56 @@ -# Arduino Client for MQTT Test Suite +## Arduino Client for MQTT Test Suite + +This is a regression test suite for the `PubSubClient` library. + +Without a suitable arduino plugged in, the test suite will only check the +example sketches compile cleanly against the library. + +With an arduino plugged in, each sketch that has a corresponding python +test case is built, uploaded and then the tests run. + +## Dependencies + + - Python 2.7+ + - [INO Tool](http://inotool.org/) - this provides command-line build/upload of Arduino sketches + +## Running + +Without a suitable arduino plugged in, the test suite will only check the +example sketches compile cleanly against the library. + +With an arduino plugged in, each sketch that has a corresponding python +test case is built, uploaded and then the tests run. + + $ python testsuite.py + +## What it does + +For each example sketch, `sketch.ino`, the suite looks for a matching test case +`testcases/sketch.py`. + +The test case must follow these conventions: + - sub-class `unittest.TestCase` + - provide the class methods `setUpClass` and `tearDownClass` (TODO: make this optional) + - all test method names must begin with `test_` + +The suite will call the `setUpClass` method _before_ uploading the sketch. This +allows any test setup to be performed before the the sketch runs - such as connecting +a client and subscribing to topics. + + +## Settings + +The file `testcases/settings.py` is used to config the test environment. + + - `server_ip` - the IP address of the broker the client should connect to + - `arduino_ip` - the IP address the arduino should us + +Before each sketch is compiled, these values are automatically substituted in. To +do this, the suite looks for lines that match the following: + + byte server[] = { + byte ip[] = { + + diff --git a/tests/testsuite.py b/tests/testsuite.py index c86f707..0a8e70d 100644 --- a/tests/testsuite.py +++ b/tests/testsuite.py @@ -76,9 +76,9 @@ class Sketch(object): fin.close() fout = open(os.path.join(self.w.build_dir,"src","sketch.ino"),"w") for l in lines: - if re.match(r"^byte server\[\]",l): + if re.match(r"^byte server\[\] = {",l): fout.write("byte server[] = { %s };\n"%(settings.server_ip.replace(".",", "),)) - elif re.match(r"^byte ip\[\]",l): + elif re.match(r"^byte ip\[\] = {",l): fout.write("byte ip[] = { %s };\n"%(settings.arduino_ip.replace(".",", "),)) else: fout.write(l)