Refactor location for unit tests

This commit is contained in:
Magnus 2022-12-05 20:35:17 +01:00
parent 41cb3113b9
commit e29090a2a2
15 changed files with 407 additions and 772 deletions

View File

@ -103,7 +103,7 @@ lib_deps =
board = ${common_env_data.board}
build_type = release
board_build.filesystem = littlefs
build_src_filter = +<*> -<tests/tests*.cpp>
build_src_filter = +<*> -<../test/tests*.cpp>
[env:gravity-unit]
upload_speed = ${common_env_data.upload_speed}
@ -122,7 +122,7 @@ lib_deps =
board = ${common_env_data.board}
build_type = release
board_build.filesystem = littlefs
build_src_filter = +<*> -<main.cpp>
build_src_filter = +<*> -<main.cpp> +<../test/tests*.cpp>
[env:gravity32-release]
framework = ${common_env_data.framework}
@ -156,7 +156,6 @@ board_build.embed_txtfiles =
html/about.min.htm
html/index.min.htm
html/test.min.htm
build_src_filter = +<*> -<tests/tests*.cpp>
[env:gravity32c3-release]
framework = ${common_env_data.framework}
@ -190,7 +189,6 @@ board_build.embed_txtfiles =
html/about.min.htm
html/index.min.htm
html/test.min.htm
build_src_filter = +<*> -<tests/tests*.cpp>
[env:gravity32c3v1-release]
framework = ${common_env_data.framework}
@ -225,7 +223,6 @@ board_build.embed_txtfiles =
html/about.min.htm
html/index.min.htm
html/test.min.htm
build_src_filter = +<*> -<tests/tests*.cpp>
[env:gravity32s2-release]
framework = ${common_env_data.framework}
@ -258,7 +255,6 @@ board_build.embed_txtfiles =
html/about.min.htm
html/index.min.htm
html/test.min.htm
build_src_filter = +<*> -<tests/tests*.cpp>
[env:gravity32c3-debug]
framework = ${common_env_data.framework}
@ -307,7 +303,6 @@ board_build.embed_txtfiles =
html/about.min.htm
html/index.min.htm
html/test.min.htm
build_src_filter = +<*> -<tests/tests*.cpp>
# This is a version for the floaty hardware. No DSB18 sensor and no battery measurement.
[env:gravity32lite-release]
@ -342,4 +337,3 @@ board_build.embed_txtfiles =
html/about.min.htm
html/index.min.htm
html/test.min.htm
build_src_filter = +<*> -<tests/tests*.cpp>

View File

@ -1,640 +0,0 @@
import unittest, requests, json, time
# Update these to match the IP of your device (ID will be read from the device at startup)
host = "192.168.1.212"
id = ""
ver = "1.2.0"
def call_api_post( path, json ):
url = "http://" + host + path
return requests.post( url, data=json )
def call_api_get( path ):
url = "http://" + host + path
return requests.get( url )
class API(unittest.TestCase):
# Do factory reset for testing
def test_factory(self):
r = call_api_get( "/api/status" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
r = call_api_get( "/api/factory?id=" + j["id"])
time.sleep(4)
# Check that all parameters exist
def test_status(self):
r = call_api_get( "/api/status" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["wifi-ssid"], "@home")
self.assertNotEqual(j["angle"], 0)
self.assertNotEqual(j["gravity"], 2)
self.assertNotEqual(j["temp-c"], 0)
self.assertNotEqual(j["temp-f"], 0)
self.assertNotEqual(j["battery"], 0)
self.assertNotEqual(j["temp-format"], "")
self.assertNotEqual(j["gravity-format"], "")
self.assertNotEqual(j["sleep-mode"], True)
self.assertNotEqual(j["rssi"], 0)
self.assertNotEqual(j["app-ver"], "0.0.0")
self.assertNotEqual(j["app-build"], "test")
self.assertNotEqual(j["mdns"], "")
self.assertNotEqual(j["platform"], "")
self.assertNotEqual(j["runtime-average"], -1)
# Check that all parameters exist
def test_config_1(self):
j = { "id": id, "http-push": "https://push.me", "token": "mytoken", "token2": "mytoken2", "http-push2": "http://push.me", "http-push3": "http://push.me", "influxdb2-push": "http://influx.db", "influxdb2-org": "my-org",
"influxdb2-bucket": "my-bucket", "influxdb2-auth": "my-secret", "mqtt-push": "mqtt.com", "mqtt-port": 1883, "mqtt-user": "my-user",
"mqtt-pass": "my-pass", "http-push-h1": "header1", "http-push-h2": "header2", "http-push2-h1": "header1(2)", "http-push2-h2": "header2(2)" }
r = call_api_post( "/api/config/push", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["http-push-h1"], "header1")
self.assertEqual(j["http-push-h2"], "header2")
self.assertEqual(j["http-push2-h1"], "header1(2)")
self.assertEqual(j["http-push2-h2"], "header2(2)")
# Check that all parameters exist
def test_config_2(self):
j = { "id": id, "mdns": "gravmon", "temp-format": "C", "sleep-interval": 300 }
r = call_api_post( "/api/config/device", j )
self.assertEqual(r.status_code, 200)
def test_config_3(self):
j = { "id": id, "http-push": "https://push.me", "token": "mytoken", "token2": "mytoken2", "http-push2": "http://push.me", "http-push3": "http://push.me", "influxdb2-push": "http://influx.db", "influxdb2-org": "my-org",
"influxdb2-bucket": "my-bucket", "influxdb2-auth": "my-secret", "mqtt-push": "mqtt.com", "mqtt-port": 1883, "mqtt-user": "my-user",
"mqtt-pass": "my-pass" }
r = call_api_post( "/api/config/push", j )
self.assertEqual(r.status_code, 200)
def test_config_4(self):
j = { "id": id, "ota-url": "http://ota.url/path", "voltage-factor": 1.55, "temp-adjustment-value": -2, "gyro-temp": "on", "ble": "color" }
r = call_api_post( "/api/config/hardware", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["ble"], "color")
self.assertEqual(j["ota-url"], "http://ota.url/path")
self.assertEqual(j["voltage-factor"], 1.55)
self.assertEqual(j["temp-adjustment-value"], -2)
self.assertEqual(j["gyro-temp"], True)
# These are read only here, just checking them.
self.assertNotEqual(j["gyro-calibration-data"]["ax"], 0.0001)
self.assertNotEqual(j["gyro-calibration-data"]["ay"], 0.0001)
self.assertNotEqual(j["gyro-calibration-data"]["az"], 0.0001)
self.assertNotEqual(j["gyro-calibration-data"]["gx"], 0.0001)
self.assertNotEqual(j["gyro-calibration-data"]["gy"], 0.0001)
self.assertNotEqual(j["gyro-calibration-data"]["gz"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a1"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a2"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a3"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a4"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a5"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a6"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a7"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a8"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a9"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["a10"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g1"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g2"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g3"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g4"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g5"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g6"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g7"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g8"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g9"], 0.0001)
self.assertNotEqual(j["formula-calculation-data"]["g10"], 0.0001)
self.assertNotEqual(j["angle"], 0)
self.assertNotEqual(j["gravity"], -10)
self.assertNotEqual(j["battery"], 0)
def test_config_5(self):
j = { "id": id, "gravity-formula": "my-formula", "gravity-temp-adjustment": "on", "gravity-format": "G" }
r = call_api_post( "/api/config/gravity", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["gravity-format"], "G")
self.assertEqual(j["gravity-formula"], "my-formula")
self.assertEqual(j["gravity-temp-adjustment"], True)
def test_config_6(self):
j = { "id": id, "mdns": "gravmon", "temp-format": "F", "sleep-interval": 300 }
r = call_api_post( "/api/config/device", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["mdns"], "gravmon")
self.assertEqual(j["wifi-ssid"], "@home")
self.assertEqual(j["wifi-pass"], "") # Should not be displayed in API
self.assertEqual(j["temp-format"], "F")
self.assertEqual(j["sleep-interval"], 300)
def test_config_7(self):
j = { "id": id, "ota-url": "", "voltage-factor": 1.55, "temp-adjustment-value": -2, "gyro-temp": "off", "ble": "blue" }
r = call_api_post( "/api/config/hardware", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["ble"], "blue")
self.assertEqual(j["ota-url"], "")
self.assertEqual(j["voltage-factor"], 1.55)
self.assertEqual(j["temp-adjustment-value"], -2)
self.assertEqual(j["gyro-temp"], False)
def test_config_8(self):
j = { "id": id, "gravity-formula": "", "gravity-temp-adjustment": "off", "gravity-format": "P" }
r = call_api_post( "/api/config/gravity", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gravity-format"], "P")
self.assertEqual(j["gravity-temp-adjustment"], False)
self.assertEqual(j["gravity-formula"], "")
def test_config_9(self):
j = { "id": id, "gravity-temp-adjustment": "on" }
r = call_api_post( "/api/config/gravity", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gravity-temp-adjustment"], True)
j = { "id": id } # No checkbox tag should set it to false.
r = call_api_post( "/api/config/gravity", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gravity-temp-adjustment"], False)
def test_config_A(self):
j = { "id": id, "gyro-temp": "on" }
r = call_api_post( "/api/config/hardware", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gyro-temp"], True)
j = { "id": id } # No checkbox tag should set it to false.
r = call_api_post( "/api/config/hardware", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gyro-temp"], False)
# Check formula api (sg mode)
def test_formula_sg_1(self):
# Ensure we have SG defined as gravity
j = { "id": id, "gravity-formula": "", "gravity-temp-adjustment": "off", "gravity-format": "G" }
r = call_api_post("/api/config/gravity", j)
self.assertEqual(r.status_code, 200)
def test_formula_sg_2(self):
# Fails due to wrong id
j = { "id": "wrong", "g1": 0, "g2": 1, "g3": 1.02, "g4": 1.0333, "g5": 1.00011, "g6": 1, "g7": 1, "g8": 1, "g9": 1, "g10": 1, "a1": 0, "a2": 25, "a3": 25.5, "a4": 25.55, "a5": 25.555, "a6": 0, "a7": 0, "a8": 0, "a9": 0, "a10": 0, "gravity-formula": "ThisShouldChange" }
r = call_api_post("/api/formula", j)
self.assertNotEqual(r.status_code, 200)
# Fails due to to few values
j = { "id": id, "g1": 0, "g2": 1, "g3": 1.02, "g4": 1.0333, "g5": 1.00011, "g6": 1, "g7": 1, "g8": 1, "g9": 1, "g10": 1, "a1": 0, "a2": 25, "a3": 0, "a4": 0, "a5": 0, "a6": 0, "a7": 0, "a8": 0, "a9": 0, "a10": 0, "gravity-formula": "ThisShouldChange" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
# Checks that values from last call was stored
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
#print(j)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gravity-formula"], "")
self.assertEqual(j["error"], "Not enough values to create formula, need at least 3 angles.")
def test_formula_sg_3(self):
# Check a simple formula
j = { "id": id, "g1": 1.0, "g2": 1.01, "g3": 1.02, "g4": 1.03, "g5": 1.04, "g6": 1.05, "g7": 1.06, "g8": 1.07, "g9": 1.08, "g10": 1.1, "a1": 25, "a2": 30, "a3": 35, "a4": 40, "a5": 45, "a6": 50, "a7": 55, "a8": 60, "a9": 65, "a10": 70, "gravity-formula": "ThisShouldChange" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
#print( j )
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gravity-formula"], "0.00000909*tilt^2+0.00124545*tilt+0.96445455")
# Check formula api (plato mode)
def test_formula_plato_1(self):
# Ensure we have Plato defined as gravity
j = { "id": id, "gravity-formula": "", "gravity-temp-adjustment": "off", "gravity-format": "P" }
r = call_api_post("/api/config/gravity", j)
self.assertEqual(r.status_code, 200)
def test_formula_plato_2(self):
# Fails due to to few values
j = { "id": id, "g1": 0, "g2": 3, "g3": 5.3, "g4": 7.44, "g5": 8.555, "g6": 9, "g7": 9.1, "g8": 9.2, "g9": 9.3, "g10": 9.4, "a1": 0, "a2": 25, "a3": 25.5, "a4": 25.55, "a5": 25.555, "a6": 35, "a7": 36, "a8": 37, "a9": 38, "a10": 39, "gravity-formula": "ThisShouldChange" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
# Checks that values from last call was stored
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
#print(j)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["g1"], 0)
self.assertEqual(j["g2"], 3)
self.assertEqual(j["g3"], 5.3)
self.assertEqual(j["g4"], 7.4)
self.assertEqual(j["g5"], 8.6)
self.assertEqual(j["g6"], 9)
self.assertEqual(j["g7"], 9.1)
self.assertEqual(j["g8"], 9.2)
self.assertEqual(j["g9"], 9.3)
self.assertEqual(j["g10"], 9.4)
self.assertEqual(j["a1"], 0)
self.assertEqual(j["a2"], 25)
self.assertEqual(j["a3"], 25.5)
self.assertEqual(j["a4"], 25.55)
self.assertEqual(j["a5"], 25.56)
self.assertEqual(j["a6"], 35)
self.assertEqual(j["a7"], 36)
self.assertEqual(j["a8"], 37)
self.assertEqual(j["a9"], 38)
self.assertEqual(j["a10"], 39)
self.assertEqual(j["gravity-format"], "P")
self.assertEqual(j["gravity-formula"], "-0.00012155*tilt^2+0.00874785*tilt+0.88003318")
self.assertEqual(j["error"], "")
def test_formula_plato_3(self):
j = { "id": id, "g1": 0, "g2": 3, "g3": 0, "g4": 0, "g5": 0, "g6": 0, "g7": 0, "g8": 0, "g9": 0, "g10": 0, "a1": 0, "a2": 25, "a3": 0, "a4": 0, "a5": 0, "a6": 0, "a7": 0, "a8": 0, "a9": 0, "a10": 0, "gravity-formula": "ThisShouldChange" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
# Checks that values from last call was stored
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
#print(j)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["error"], "Not enough values to create formula, need at least 3 angles.")
def test_formula_plato_4(self):
# Ensure we have Plato defined as gravity
j = { "id": id, "gravity-formula": "", "gravity-temp-adjustment": "off", "gravity-format": "P" }
r = call_api_post("/api/config/gravity", j)
self.assertEqual(r.status_code, 200)
# Check a simple formula
j = { "id": id, "g1": 1.0, "g2": 1.1, "g3": 1.2, "g4": 1.3, "g5": 1.4, "g6": 1.5, "g7": 1.6, "g8": 1.7, "g9": 1.8, "g10": 1.9, "a1": 25, "a2": 30, "a3": 35, "a4": 40, "a5": 45, "a6": 50, "a7": 55, "a8": 60, "a9": 65, "a10": 70, "gravity-formula": "ThisShouldChange" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gravity-formula"], "-0.00000352*tilt^2+0.00045454*tilt+0.99231483") # 3.0 max deviation
# Check format api
def test_pushtest_1(self):
j = { "id": id, "http-push": "http://push.me", "token": "mytoken", "token2": "mytoken2", "http-push2": "http://push.me", "http-push3": "http://push.me", "brewfather-push": "http://push.me", "influxdb2-push": "http://influx.db", "influxdb2-org": "my-org",
"influxdb2-bucket": "my-bucket", "influxdb2-auth": "my-secret", "mqtt-push": "mqtt.com", "mqtt-port": 1883, "mqtt-user": "my-user",
"mqtt-pass": "my-pass", "http-push-h1": "header1", "http-push-h2": "header2", "http-push2-h1": "header1(2)", "http-push2-h2": "header2(2)" }
r = call_api_post( "/api/config/push", j )
self.assertEqual(r.status_code, 200)
def test_pushtest_2(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=http-1" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], False)
self.assertEqual(j["enabled"], True)
self.assertEqual(j["code"], -1)
def test_pushtest_3(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=http-2" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], False)
self.assertEqual(j["enabled"], True)
self.assertEqual(j["code"], -1)
def test_pushtest_4(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=http-3" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], False)
self.assertEqual(j["enabled"], True)
self.assertEqual(j["code"], -1)
def test_pushtest_5(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=influxdb" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], False)
self.assertEqual(j["enabled"], True)
self.assertEqual(j["code"], -1)
def test_pushtest_6(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=mqtt" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], False)
self.assertEqual(j["enabled"], True)
self.assertEqual(j["code"], -3)
# Check format api
def test_push_1(self):
r = call_api_get( "/api/factory?id=" + id)
time.sleep(4)
# Note: The endpoint test.php does not validate the payload, it only accepts the request and return 200.
j = { "id": id, "http-push": "http://www.allerum.net/test.php", "http-push2": "http://www.allerum.net/test.php", "http-push3": "http://www.allerum.net/test.php", "mqtt-push": "192.168.1.16", "mqtt-port": 1883, "mqtt-user": "", "mqtt-pass": "" }
r = call_api_post( "/api/config/push", j )
self.assertEqual(r.status_code, 200)
def test_push_2(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=http-1" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], True)
def test_push_3(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=http-2" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], True)
def test_push_4(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=http-3" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], True)
def test_push_5(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=mqtt" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["success"], True)
def test_push_6(self):
r = call_api_get( "/api/test/push?id=" + id + "&format=influx" )
# TODO: Figure out how to test the influx db setup. Create my own mockup ?
# Check format api
def test_format_1(self):
j = { "id": id, "http-1": "one" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_2(self):
j = { "id": id, "http-2": "two" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_3(self):
j = { "id": id, "http-3": "five" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_4(self):
j = { "id": id, "influxdb": "three" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_5(self):
j = { "id": id, "mqtt": "four" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_6(self):
r = call_api_get( "/api/config/format" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
self.assertEqual(j["http-1"], "one")
self.assertEqual(j["http-2"], "two")
self.assertEqual(j["http-3"], "five")
self.assertEqual(j["influxdb"], "three")
self.assertEqual(j["mqtt"], "four")
def test_format_7(self):
j = { "id": id, "http-1": "" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_8(self):
j = { "id": id, "http-2": "" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_9(self):
j = { "id": id, "http-3": "" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_A(self):
j = { "id": id, "influxdb": "" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_B(self):
j = { "id": id, "mqtt": "" }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
def test_format_C(self):
r = call_api_get( "/api/config/format" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["http-1"], "%7B%22name%22%20%3A%20%22%24%7Bmdns%7D%22%2C%20%22ID%22%3A%20%22%24%7Bid%7D%22%2C%20%22token%22%20%3A%20%22%24%7Btoken%7D%22%2C%20%22interval%22%3A%20%24%7Bsleep%2Dinterval%7D%2C%20%22temperature%22%3A%20%24%7Btemp%7D%2C%20%22temp%5Funits%22%3A%20%22%24%7Btemp%2Dunit%7D%22%2C%20%22gravity%22%3A%20%24%7Bgravity%7D%2C%20%22angle%22%3A%20%24%7Bangle%7D%2C%20%22battery%22%3A%20%24%7Bbattery%7D%2C%20%22RSSI%22%3A%20%24%7Brssi%7D%2C%20%22corr%2Dgravity%22%3A%20%24%7Bcorr%2Dgravity%7D%2C%20%22gravity%2Dunit%22%3A%20%22%24%7Bgravity%2Dunit%7D%22%2C%20%22run%2Dtime%22%3A%20%24%7Brun%2Dtime%7D%20%7D")
self.assertEqual(j["http-2"], "%7B%22name%22%20%3A%20%22%24%7Bmdns%7D%22%2C%20%22ID%22%3A%20%22%24%7Bid%7D%22%2C%20%22token%22%20%3A%20%22%24%7Btoken%7D%22%2C%20%22interval%22%3A%20%24%7Bsleep%2Dinterval%7D%2C%20%22temperature%22%3A%20%24%7Btemp%7D%2C%20%22temp%5Funits%22%3A%20%22%24%7Btemp%2Dunit%7D%22%2C%20%22gravity%22%3A%20%24%7Bgravity%7D%2C%20%22angle%22%3A%20%24%7Bangle%7D%2C%20%22battery%22%3A%20%24%7Bbattery%7D%2C%20%22RSSI%22%3A%20%24%7Brssi%7D%2C%20%22corr%2Dgravity%22%3A%20%24%7Bcorr%2Dgravity%7D%2C%20%22gravity%2Dunit%22%3A%20%22%24%7Bgravity%2Dunit%7D%22%2C%20%22run%2Dtime%22%3A%20%24%7Brun%2Dtime%7D%20%7D")
self.assertEqual(j["http-3"], "%3Fname%3D%24%7Bmdns%7D%26id%3D%24%7Bid%7D%26token%3D%24%7Btoken2%7D%26interval%3D%24%7Bsleep%2Dinterval%7D%26temperature%3D%24%7Btemp%7D%26temp%2Dunits%3D%24%7Btemp%2Dunit%7D%26gravity%3D%24%7Bgravity%7D%26angle%3D%24%7Bangle%7D%26battery%3D%24%7Bbattery%7D%26rssi%3D%24%7Brssi%7D%26corr%2Dgravity%3D%24%7Bcorr%2Dgravity%7D%26gravity%2Dunit%3D%24%7Bgravity%2Dunit%7D%26run%2Dtime%3D%24%7Brun%2Dtime%7D")
self.assertEqual(j["influxdb"], "measurement%2Chost%3D%24%7Bmdns%7D%2Cdevice%3D%24%7Bid%7D%2Ctemp%2Dformat%3D%24%7Btemp%2Dunit%7D%2Cgravity%2Dformat%3D%24%7Bgravity%2Dunit%7D%20gravity%3D%24%7Bgravity%7D%2Ccorr%2Dgravity%3D%24%7Bcorr%2Dgravity%7D%2Cangle%3D%24%7Bangle%7D%2Ctemp%3D%24%7Btemp%7D%2Cbattery%3D%24%7Bbattery%7D%2Crssi%3D%24%7Brssi%7D%0A")
self.assertEqual(j["mqtt"], "ispindel%2F%24%7Bmdns%7D%2Ftilt%3A%24%7Bangle%7D%7Cispindel%2F%24%7Bmdns%7D%2Ftemperature%3A%24%7Btemp%7D%7Cispindel%2F%24%7Bmdns%7D%2Ftemp%5Funits%3A%24%7Btemp%2Dunit%7D%7Cispindel%2F%24%7Bmdns%7D%2Fbattery%3A%24%7Bbattery%7D%7Cispindel%2F%24%7Bmdns%7D%2Fgravity%3A%24%7Bgravity%7D%7Cispindel%2F%24%7Bmdns%7D%2Finterval%3A%24%7Bsleep%2Dinterval%7D%7Cispindel%2F%24%7Bmdns%7D%2FRSSI%3A%24%7Brssi%7D%7C")
# Toggle sleep mode
def toggle_sleepmode_1(self):
j = { "id": id, "sleep-mode": "on" }
r = call_api_post( "/api/status/sleepmode" )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/status" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["sleep-mode"], True)
def toggle_sleepmode_2(self):
j = { "id": id, "sleep-mode": "off" }
r = call_api_post( "/api/status/sleepmode" )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/status" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["sleep-mode"], False)
# Clear setting
def default_settings_1(self):
j = { "id": id, "mdns": "gravmon", "temp-format": "C", "sleep-interval": 300 }
r = call_api_post( "/api/config/device", j )
self.assertEqual(r.status_code, 200)
def default_settings_2(self):
j = { "id": id, "token": "", "token2": "", "http-push": "", "http-push2": "", "http-push3": "", "influxdb2-push": "", "influxdb2-org": "", "influxdb2-bucket": "",
"influxdb2-auth": "", "mqtt-push": "", "mqtt-port": 1883, "mqtt-user": "", "mqtt-pass": "" }
r = call_api_post( "/api/config/push", j )
self.assertEqual(r.status_code, 200)
def default_settings_3(self):
j = { "id": id, "ota-url": "", "voltage-factor": 1.55, "temp-adjustment-value": -2, "gyro-temp": "off" }
r = call_api_post( "/api/config/hardware", j )
self.assertEqual(r.status_code, 200)
def default_settings_4(self):
j = { "id": id, "gravity-formula": "", "gravity-temp-adjustment": "off", "gravity-format": "G" }
r = call_api_post( "/api/config/gravity", j )
self.assertEqual(r.status_code, 200)
# Check advanced
def test_advanced_config_1(self):
r = call_api_get( "/api/status" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["id"], id)
r = call_api_get( "/api/factory?id=" + j["id"])
time.sleep(4)
r = call_api_get( "/api/config/advanced" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gyro-read-count"], 50)
self.assertEqual(j["tempsensor-resolution"], 9)
self.assertEqual(j["gyro-moving-threashold"], 500)
self.assertEqual(j["formula-max-deviation"], 3)
self.assertEqual(j["formula-calibration-temp"], 20)
self.assertEqual(j["wifi-portal-timeout"], 120)
self.assertEqual(j["wifi-connect-timeout"], 20)
self.assertEqual(j["ignore-low-angles"], False)
self.assertEqual(j["formula-calibration-temp"], 20)
self.assertEqual(j["int-http1"], 0)
self.assertEqual(j["int-http2"], 0)
self.assertEqual(j["int-http3"], 0)
self.assertEqual(j["int-influx"], 0)
self.assertEqual(j["int-mqtt"], 0)
def test_advanced_config_2(self):
j = { "id": id, "gyro-read-count": 51, "tempsensor-resolution": 10, "gyro-moving-threashold": 501, "formula-max-deviation": 1.7, "ignore-low-angles": "on",
"formula-calibration-temp": 21, "wifi-portal-timeout": 121, "wifi-connect-timeout": 21, "int-http1": 1, "int-http2": 2, "int-http3": 3, "int-influx": 4, "int-mqtt": 5 }
r = call_api_post( "/api/config/advanced", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config/advanced" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["gyro-read-count"], 51)
self.assertEqual(j["tempsensor-resolution"], 10)
self.assertEqual(j["gyro-moving-threashold"], 501)
self.assertEqual(j["formula-max-deviation"], 1.7)
self.assertEqual(j["formula-calibration-temp"], 21)
self.assertEqual(j["wifi-portal-timeout"], 121)
self.assertEqual(j["wifi-connect-timeout"], 21)
self.assertEqual(j["ignore-low-angles"], True)
self.assertEqual(j["int-http1"], 1)
self.assertEqual(j["int-http2"], 2)
self.assertEqual(j["int-http3"], 3)
self.assertEqual(j["int-influx"], 4)
self.assertEqual(j["int-mqtt"], 5)
def test_advanced_config_3(self):
j = { "id": id, "ignore-low-angles": "on" }
r = call_api_post( "/api/config/advanced", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config/advanced" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["ignore-low-angles"], True)
j = { "id": id } # Skipping checkbox variable should set it to false
r = call_api_post( "/api/config/advanced", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config/advanced" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["ignore-low-angles"], False)
def test_bug_71(self):
format = "gm%3A%7B%22name%22%3A%22%24%7Bmdns%7D%22%2C%20%22ID%22%3A%22%24%7Bid%7D%22%2C%20%22temperature%22%3A%20%24%7Btemp%7D%2C%20%22gravity%22%3A%24%7Bgravity%7D%2C%22angle%22%3A%20%24%7Bangle%7D%2C%20%22battery%22%3A%24%7Bbattery%7D%2C%20%22rssi%22%3A%20%24%7Brssi%7D%7D"
j = { "id": id, "mqtt": format }
r = call_api_post( "/api/config/format", j )
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/config/format" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["mqtt"], format)
def test_bug_79(self):
j = { "id": id, "formula-max-deviation": 1.7 }
r = call_api_post( "/api/config/advanced", j )
self.assertEqual(r.status_code, 200)
j = { "id": id, "g1": 1.0, "g2": 1.009, "g3": 1.014, "g4": 1.027, "g5": 1.037, "g6": 1.042, "g7": 1.051, "g8": 1.060, "g9": 1.073, "g10": 1.078, "a1": 23.52, "a2": 26.47, "a3": 29.87, "a4": 33.43, "a5": 38.16, "a6": 40.6, "a7": 45.85, "a8": 50.12, "a9": 56.55, "a10": 59.078, "gravity-formula": "" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["error"], 'Unable to find an accurate formula based on input, check error log and graph below.')
j = { "id": id, "formula-max-deviation": 4 }
r = call_api_post( "/api/config/advanced", j )
self.assertEqual(r.status_code, 200)
j = { "id": id, "g1": 1.0, "g2": 1.009, "g3": 1.014, "g4": 1.027, "g5": 1.037, "g6": 1.042, "g7": 1.051, "g8": 1.060, "g9": 1.073, "g10": 1.078, "a1": 23.52, "a2": 26.47, "a3": 29.87, "a4": 33.43, "a5": 38.16, "a6": 40.6, "a7": 45.85, "a8": 50.12, "a9": 56.55, "a10": 59.078, "gravity-formula": "" }
r = call_api_post("/api/formula", j)
self.assertEqual(r.status_code, 200)
r = call_api_get( "/api/formula" )
j = json.loads(r.text)
self.assertEqual(r.status_code, 200)
self.assertEqual(j["error"], '')
if __name__ == '__main__':
r = call_api_get( "/api/status" )
j = json.loads(r.text)
id = j["id"]
print( "ID: " + id);
unittest.main()
# EOF

View File

@ -1,72 +0,0 @@
/*
MIT License
Copyright (c) 2022 Magnus
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <config.hpp>
#include <AUnit.h>
test(config_defaultValues) {
assertEqual( myConfig.getGravityFormat(), 'G' );
assertEqual( myConfig.getTempFormat(), 'C' );
assertEqual( myConfig.getSleepInterval(), 900);
assertEqual( myConfig.getTempSensorAdjC(), 0.0);
float f = 4.15;
assertEqual( myConfig.getVoltageConfig(), f);
}
test(config_advDefaultValues) {
assertEqual( myAdvancedConfig.getDefaultCalibrationTemp(), 20.0 );
assertEqual( myAdvancedConfig.getGyroReadCount(), 50 );
assertEqual( myAdvancedConfig.getGyroReadDelay(), 3150 );
assertEqual( myAdvancedConfig.getGyroSensorMovingThreashold(), 500 );
assertEqual( myAdvancedConfig.getMaxFormulaCreationDeviation(), 3.0 );
assertEqual( myAdvancedConfig.getPushIntervalHttp1(), 0 );
assertEqual( myAdvancedConfig.getPushIntervalHttp2(), 0 );
assertEqual( myAdvancedConfig.getPushIntervalHttp3(), 0 );
assertEqual( myAdvancedConfig.getPushIntervalMqtt(), 0 );
assertEqual( myAdvancedConfig.getPushIntervalInflux(), 0 );
assertEqual( myAdvancedConfig.getPushTimeout(), 10 );
assertEqual( myAdvancedConfig.getTempSensorResolution(), 9 );
assertEqual( myAdvancedConfig.getWifiConnectTimeout(), 20 );
assertEqual( myAdvancedConfig.getWifiPortalTimeout(), 120);
assertEqual( myAdvancedConfig.isIgnoreLowAnges(), false);
}
test(config_tempFormat) {
myConfig.setTempFormat('F');
assertEqual( myConfig.getTempFormat(), 'F' );
myConfig.setTempFormat('C');
assertEqual( myConfig.getTempFormat(), 'C' );
myConfig.setTempFormat('X');
assertEqual( myConfig.getTempFormat(), 'C' );
}
test(config_gravityFormat) {
myConfig.setGravityFormat('P');
assertEqual( myConfig.getGravityFormat(), 'P' );
myConfig.setGravityFormat('G');
assertEqual( myConfig.getGravityFormat(), 'G' );
myConfig.setGravityFormat('X');
assertEqual( myConfig.getGravityFormat(), 'G' );
}
// EOF

232
test/apitests.py Normal file

File diff suppressed because one or more lines are too long

View File

@ -21,12 +21,13 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <Arduino.h>
#include <main.hpp>
#include <AUnit.h>
#include <Arduino.h>
#include <main.hpp>
using aunit::TestRunner;
using aunit::Printer;
using aunit::TestRunner;
using aunit::Verbosity;
/*
@ -70,7 +71,7 @@ void setup() {
Serial.println("Gravitymon - Unit Test Build");
delay(2000);
Printer::setPrinter(&Serial);
//TestRunner::setVerbosity(Verbosity::kAll);
// TestRunner::setVerbosity(Verbosity::kAll);
}
void loop() {
@ -78,4 +79,4 @@ void loop() {
delay(10);
}
// EOF
// EOF

View File

@ -21,10 +21,11 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <Arduino.h>
#include <main.hpp>
#include <AUnit.h>
#include <Arduino.h>
#include <main.hpp>
// No unit testing for the BLE module.
// EOF
// EOF

View File

@ -21,26 +21,32 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <calc.hpp>
#include <helper.hpp>
#include <AUnit.h>
// TODO: Add more test cases to explore formula creation error conditions when values are out of bounds
#include <calc.hpp>
#include <helper.hpp>
// TODO: Add more test cases to explore formula creation error conditions when
// values are out of bounds
// TODO: Add more test cases to check order 3 + 4 formula creation as well.
test(calc_createFormula1) {
char buffer[100];
RawFormulaData fd = { { 0.0, 25.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0.0, 1.0, 1.02, 1.033, 1.00011, 1.0, 1.0, 1.0, 1.0, 1.0} };
RawFormulaData fd = {
{0.0, 25.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 1.0, 1.02, 1.033, 1.00011, 1.0, 1.0, 1.0, 1.0, 1.0}};
int i = createFormula(fd, &buffer[0], sizeof(buffer), 2);
assertEqual( i, ERR_FORMULA_NOTENOUGHVALUES );
assertEqual(i, ERR_FORMULA_NOTENOUGHVALUES);
}
test(calc_createFormula2) {
char buffer[100];
RawFormulaData fd = { { 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0}, {1.0, 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.1} };
RawFormulaData fd = {
{25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0},
{1.0, 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.1}};
int i = createFormula(fd, &buffer[0], sizeof(buffer), 2);
assertEqual( i, 0 );
assertEqual( &buffer[0], "0.00000909*tilt^2+0.00124545*tilt+0.96445455");
assertEqual(i, 0);
assertEqual(&buffer[0], "0.00000909*tilt^2+0.00124545*tilt+0.96445455");
}
test(calc_calculateGravity) {
@ -52,10 +58,10 @@ test(calc_calculateGravity) {
}
test(calc_gravityTemperatureCorrectionC) {
double g = gravityTemperatureCorrectionC( 1.02, 45.0, 20.0);
double g = gravityTemperatureCorrectionC(1.02, 45.0, 20.0);
float v1 = reduceFloatPrecision(g, 2);
float v2 = 1.03;
assertEqual(v1, v2);
}
// EOF
// EOF

73
test/tests_config.cpp Normal file
View File

@ -0,0 +1,73 @@
/*
MIT License
Copyright (c) 2022 Magnus
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <AUnit.h>
#include <config.hpp>
test(config_defaultValues) {
assertEqual(myConfig.getGravityFormat(), 'G');
assertEqual(myConfig.getTempFormat(), 'C');
assertEqual(myConfig.getSleepInterval(), 900);
assertEqual(myConfig.getTempSensorAdjC(), 0.0);
float f = 4.15;
assertEqual(myConfig.getVoltageConfig(), f);
}
test(config_advDefaultValues) {
assertEqual(myAdvancedConfig.getDefaultCalibrationTemp(), 20.0);
assertEqual(myAdvancedConfig.getGyroReadCount(), 50);
assertEqual(myAdvancedConfig.getGyroReadDelay(), 3150);
assertEqual(myAdvancedConfig.getGyroSensorMovingThreashold(), 500);
assertEqual(myAdvancedConfig.getMaxFormulaCreationDeviation(), 3.0);
assertEqual(myAdvancedConfig.getPushIntervalHttp1(), 0);
assertEqual(myAdvancedConfig.getPushIntervalHttp2(), 0);
assertEqual(myAdvancedConfig.getPushIntervalHttp3(), 0);
assertEqual(myAdvancedConfig.getPushIntervalMqtt(), 0);
assertEqual(myAdvancedConfig.getPushIntervalInflux(), 0);
assertEqual(myAdvancedConfig.getPushTimeout(), 10);
assertEqual(myAdvancedConfig.getTempSensorResolution(), 9);
assertEqual(myAdvancedConfig.getWifiConnectTimeout(), 20);
assertEqual(myAdvancedConfig.getWifiPortalTimeout(), 120);
assertEqual(myAdvancedConfig.isIgnoreLowAnges(), false);
}
test(config_tempFormat) {
myConfig.setTempFormat('F');
assertEqual(myConfig.getTempFormat(), 'F');
myConfig.setTempFormat('C');
assertEqual(myConfig.getTempFormat(), 'C');
myConfig.setTempFormat('X');
assertEqual(myConfig.getTempFormat(), 'C');
}
test(config_gravityFormat) {
myConfig.setGravityFormat('P');
assertEqual(myConfig.getGravityFormat(), 'P');
myConfig.setGravityFormat('G');
assertEqual(myConfig.getGravityFormat(), 'G');
myConfig.setGravityFormat('X');
assertEqual(myConfig.getGravityFormat(), 'G');
}
// EOF

View File

@ -21,9 +21,10 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <gyro.hpp>
#include <AUnit.h>
#include <gyro.hpp>
test(gyro_connectGyro) {
myGyro.setup();
assertEqual(myGyro.isConnected(), true);
@ -40,4 +41,4 @@ test(gyro_readGyroTemp) {
assertNotEqual(myGyro.getSensorTempC(), -273.0);
}
// EOF
// EOF

View File

@ -21,9 +21,10 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <helper.hpp>
#include <AUnit.h>
#include <helper.hpp>
BatteryVoltage myBatteryVoltage;
test(helper_convertToPlato) {
@ -54,11 +55,11 @@ test(helper_convertFtoC) {
test(helper_urlEncode) {
String s = urlencode("Hello world");
assertEqual(s, "Hello\%20world");
assertEqual(s, "Hello%20world");
}
test(helper_urlDecode) {
String s = urldecode("Hello\%20world");
String s = urldecode("Hello%20world");
assertEqual(s, "Hello world");
}
@ -89,4 +90,4 @@ test(helper_readBatteryVoltage) {
assertMoreOrEqual(f, 2.0);
}
// EOF
// EOF

View File

@ -21,10 +21,12 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <Arduino.h>
#include <main.hpp>
#include <AUnit.h>
#include <Arduino.h>
// TODO: Build some php scripts that run on gravitymon.com for testing the push data.
#include <main.hpp>
// EOF
// TODO: Build some php scripts that run on gravitymon.com for testing the push
// data.
// EOF

View File

@ -21,10 +21,11 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <templating.hpp>
#include <config.hpp>
#include <AUnit.h>
#include <config.hpp>
#include <templating.hpp>
test(template_applyTemplate1) {
TemplatingEngine e;
char buffer[20];
@ -33,9 +34,16 @@ test(template_applyTemplate1) {
e.initialize(45.0, 1.123, 1.223, 21.2, 2.98);
String s = e.create(TemplatingEngine::TEMPLATE_HTTP1);
String id = myConfig.getID();
String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2);
String batt =
convertFloatToString(myBatteryVoltage.getVoltage(), &buffer[0], 2);
batt.trim();
String v = "{\"name\" : \"gravitymon\", \"ID\": \"" + id + "\", \"token\" : \"\", \"interval\": 900, \"temperature\": 21.2, \"temp_units\": \"C\", \"gravity\": 1.1230, \"angle\": 45.00, \"battery\": " + batt + ", \"RSSI\": 31, \"corr-gravity\": 1.2230, \"gravity-unit\": \"G\", \"run-time\": 3.0 }";
String v = "{\"name\" : \"gravitymon\", \"ID\": \"" + id +
"\", \"token\" : \"\", \"interval\": 900, \"temperature\": 21.2, "
"\"temp_units\": \"C\", \"gravity\": 1.1230, \"angle\": 45.00, "
"\"battery\": " +
batt +
", \"RSSI\": 31, \"corr-gravity\": 1.2230, \"gravity-unit\": "
"\"G\", \"run-time\": 3.0 }";
assertEqual(s, v);
}
@ -47,9 +55,16 @@ test(template_applyTemplate2) {
e.initialize(45.0, 1.123, 1.223, 21.2, 2.98);
String s = e.create(TemplatingEngine::TEMPLATE_HTTP2);
String id = myConfig.getID();
String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2);
String batt =
convertFloatToString(myBatteryVoltage.getVoltage(), &buffer[0], 2);
batt.trim();
String v = "{\"name\" : \"gravitymon\", \"ID\": \"" + id + "\", \"token\" : \"\", \"interval\": 900, \"temperature\": 21.2, \"temp_units\": \"C\", \"gravity\": 1.1230, \"angle\": 45.00, \"battery\": " + batt + ", \"RSSI\": 31, \"corr-gravity\": 1.2230, \"gravity-unit\": \"G\", \"run-time\": 3.0 }";
String v = "{\"name\" : \"gravitymon\", \"ID\": \"" + id +
"\", \"token\" : \"\", \"interval\": 900, \"temperature\": 21.2, "
"\"temp_units\": \"C\", \"gravity\": 1.1230, \"angle\": 45.00, "
"\"battery\": " +
batt +
", \"RSSI\": 31, \"corr-gravity\": 1.2230, \"gravity-unit\": "
"\"G\", \"run-time\": 3.0 }";
assertEqual(s, v);
}
@ -61,9 +76,13 @@ test(template_applyTemplate3) {
e.initialize(45.0, 1.123, 1.223, 21.2, 2.98);
String s = e.create(TemplatingEngine::TEMPLATE_HTTP3);
String id = myConfig.getID();
String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2);
String batt =
convertFloatToString(myBatteryVoltage.getVoltage(), &buffer[0], 2);
batt.trim();
String v = "?name=gravitymon&id=" + id + "&token=&interval=900&temperature=21.2&temp-units=C&gravity=1.1230&angle=45.00&battery=" + batt + "&rssi=31&corr-gravity=1.2230&gravity-unit=G&run-time=3.0";
String v = "?name=gravitymon&id=" + id +
"&token=&interval=900&temperature=21.2&temp-units=C&gravity=1."
"1230&angle=45.00&battery=" +
batt + "&rssi=31&corr-gravity=1.2230&gravity-unit=G&run-time=3.0";
assertEqual(s, v);
}
@ -75,9 +94,14 @@ test(template_applyTemplate4) {
e.initialize(45.0, 1.123, 1.223, 21.2, 2.98);
String s = e.create(TemplatingEngine::TEMPLATE_INFLUX);
String id = myConfig.getID();
String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2);
String batt =
convertFloatToString(myBatteryVoltage.getVoltage(), &buffer[0], 2);
batt.trim();
String v = "measurement,host=gravitymon,device=" + id + ",temp-format=C,gravity-format=G gravity=1.1230,corr-gravity=1.2230,angle=45.00,temp=21.2,battery=" + batt + ",rssi=31\n";
String v =
"measurement,host=gravitymon,device=" + id +
",temp-format=C,gravity-format=G "
"gravity=1.1230,corr-gravity=1.2230,angle=45.00,temp=21.2,battery=" +
batt + ",rssi=31\n";
assertEqual(s, v);
}
@ -88,10 +112,17 @@ test(template_applyTemplate5) {
e.initialize(45.0, 1.123, 1.223, 21.2, 2.98);
String s = e.create(TemplatingEngine::TEMPLATE_MQTT);
String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2);
String batt =
convertFloatToString(myBatteryVoltage.getVoltage(), &buffer[0], 2);
batt.trim();
String v = "ispindel/gravitymon/tilt:45.00|ispindel/gravitymon/temperature:21.2|ispindel/gravitymon/temp_units:C|ispindel/gravitymon/battery:" + batt + "|ispindel/gravitymon/gravity:1.1230|ispindel/gravitymon/interval:900|ispindel/gravitymon/RSSI:31|";
String v =
"ispindel/gravitymon/tilt:45.00|ispindel/gravitymon/"
"temperature:21.2|ispindel/gravitymon/temp_units:C|ispindel/gravitymon/"
"battery:" +
batt +
"|ispindel/gravitymon/gravity:1.1230|ispindel/gravitymon/"
"interval:900|ispindel/gravitymon/RSSI:31|";
assertEqual(s, v);
}
// EOF
// EOF

View File

@ -21,13 +21,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <tempsensor.hpp>
#include <AUnit.h>
#include <tempsensor.hpp>
test(temp_readSensor) {
myTempSensor.setup();
myTempSensor.getTempC();
assertEqual( myTempSensor.isSensorAttached(), true );
assertEqual(myTempSensor.isSensorAttached(), true);
}
// EOF
// EOF

View File

@ -21,10 +21,12 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <Arduino.h>
#include <main.hpp>
#include <AUnit.h>
#include <Arduino.h>
// No unit testing for the WEB module. These tests are done using python script and the API's
#include <main.hpp>
// EOF
// No unit testing for the WEB module. These tests are done using python script
// and the API's
// EOF

View File

@ -21,10 +21,12 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <Arduino.h>
#include <main.hpp>
#include <AUnit.h>
#include <Arduino.h>
// No unit testing for the WIFI module. These tests are manual when testing the installation steps.
#include <main.hpp>
// EOF
// No unit testing for the WIFI module. These tests are manual when testing the
// installation steps.
// EOF