def test_sh_mqttErrors(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=0.5) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(2) irrigate.mqtt.processMessages("xxx/suspend/valve1/command", "asd") time.sleep(1) irrigate.mqtt.processMessages("xxx/open/valve1/command", "asd") time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/valve1/command", "") time.sleep(1) irrigate.mqtt.processMessages("xxx/suspend/valve1/command", 4) time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/valve1/command", 4) time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/asd/command", 4) time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/valve786/command", 4) time.sleep(1) irrigate.mqtt.processMessages("", "") time.sleep(1) irrigate.mqtt.processMessages("/", 4) time.sleep(30) assert valves['valve1'].secondsDaily == 30
def test_sh_mqttDisable(): irrigate, logger, cfg, valves, q = init("test_config.yaml") cfg.valves['valve1'].schedules.clear() cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.mqtt.processMessages("xxx/enabled/valve1/command", 0) time.sleep(3) irrigate.mqtt.processMessages("xxx/open/valve1/command", 1) time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) irrigate.mqtt.processMessages("xxx/enabled/valve1/command", 1) time.sleep(3) irrigate.mqtt.processMessages("xxx/open/valve1/command", 1) time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)]) assert len(q.queue) == 0
def test_schedConflict(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=3) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=1) cfg.valves['valve1'].schedules['sched2'] = cfg.schedules['sched2'] cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() cfg.valves['valve4'].schedules.clear() cfg.valves['valve5'].schedules.clear() assertValves(valves, ['valve1'], [(False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(5) assertValves(valves, ['valve1'], [(True, True)]) time.sleep(60) assertValves(valves, ['valve1'], [(True, True)]) assert len(q.queue) == 0 time.sleep(60) assertValves(valves, ['valve1'], [(True, True)]) assert len(q.queue) == 0 time.sleep(60) assertValves(valves, ['valve1'], [(True, True)]) assert len(q.queue) == 0 time.sleep(60) assert len(q.queue) == 0 assert valves['valve1'].secondsDaily == 240
def test_sh_mqttDisableAfterOpen(): irrigate, logger, cfg, valves, q = init("test_config.yaml") cfg.valves['valve1'].enabled = False time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0
def test_schedPerSeason(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=1) cfg.valves['valve2'].schedules.clear() setStartTimeToNow(cfg, 'sched2', duration=1) cfg.schedules['sched1'].seasons.clear() cfg.schedules['sched1'].seasons.append(irrigate.getSeason(cfg.latitude)) cfg.schedules['sched2'].seasons.clear() cfg.schedules['sched2'].seasons.append(irrigate.getSeason(-1 * cfg.latitude)) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)])
def test_schedSimple(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=0.1) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 0 time.sleep(6) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 assert valves['valve1'].secondsDaily >= 6
def test_schedPerDay(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=1) cfg.valves['valve2'].schedules.clear() setStartTimeToNow(cfg, 'sched2', duration=1) cfg.schedules['sched1'].days.clear() dayStr = calendar.day_abbr[datetime.datetime.today().weekday()] cfg.schedules['sched1'].days.append(dayStr) cfg.schedules['sched2'].days.clear() dayStr = calendar.day_abbr[(datetime.datetime.today() + datetime.timedelta(days=1)).weekday()] cfg.schedules['sched2'].days.append(dayStr) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)])
def test_schedDupCheck(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=3) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=0, duration=3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 1 time.sleep(60) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 1 time.sleep(60) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 1
def test_schedOverlap(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=0.1) setStartTimeToNow(cfg, 'sched2', duration=0.1) cfg.valves['valve1'].schedules["sched2"] = cfg.schedules['sched2'] cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(5) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)]) assert len(q.queue) == 0 time.sleep(10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) time.sleep(65) assert valves['valve1'].secondsDaily == 12 assert len(q.queue) == 0
def test_sh_sensorOverridesMqtt(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched4') cfg.valves['valve1'].schedules.clear() cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() cfg.schedules['sched4'].sensor.handler.disable = True irrigate.start() time.sleep(3) # Should be handled but not opened assertValves(valves, ['valve5'], [(True, False)]) irrigate.mqtt.processMessages("xxx/suspend/valve5/command", 0) time.sleep(3) # Should not open because the sensor overrides assertValves(valves, ['valve5'], [(True, False)]) cfg.schedules['sched4'].sensor.handler.disable = False time.sleep(3) # Should open because the sensor is now enabled and the MQTT command is already "lost" assertValves(valves, ['valve5'], [(True, True)])
# -*- coding:utf-8 -*- # @author xupingmao <*****@*****.**> # @since 2019/10/05 20:23:43 # @modified 2020/03/05 23:44:13 import xutils # cannot perform relative import try: import test_base except ImportError: from tests import test_base from handlers.note.dao import get_by_id from xutils import Storage app = test_base.init() json_request = test_base.json_request request_html = test_base.request_html BaseTestCase = test_base.BaseTestCase def create_note_for_test(type, name): data = dict(name=name, type=type, content="hello,world") file = json_request("/note/add", method="POST", data=data) return file["id"] def delete_note_for_test(name): json_request("/note/remove?name=%s" % name)