gravitymon/test/apitests.py
2022-12-05 20:35:17 +01:00

232 lines
1.2 MiB

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