def test_deactivate_non_responding_printer(self, mock_get_uri): printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15") self.assertFalse(printer.client_info.connected) printer.sniff() self.assertEqual(printer.client_info.connected, False) self.assertEqual(printer.client_info.version, {})
def test_webcam_absolute_url(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.return_value = { "webcam": { "flipH": True, "flipV": True, "rotate90": False, "streamUrl": "http://1.2.3.4/webcam/?action=stream", "snapshotUrl": "http://1.2.3.4/?action=snapshot", "webcamEnabled": True, } } printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.webcam() self.assertEqual( result, { "message": "OK", "stream": "http://1.2.3.4/webcam/?action=stream", "snapshot": "http://1.2.3.4/?action=snapshot", "flipHorizontal": True, "flipVertical": True, "rotate90": False, }, )
def test_connected_printer(self, mock_get_uri): printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15") self.assertFalse(printer.client_info.connected) self.assertTrue(printer.is_alive()) self.assertTrue(printer.client_info.connected) self.assertEqual(mock_get_uri.call_count, 2)
def test_job_ok(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.return_value = { "job": { "file": { "display": "test-pouzdro-na-iphone.gcode" } }, "progress": { "completion": 12, "printTimeLeft": 35, "printTime": 10 }, "state": "Printing", } printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.job() self.assertEqual( result, { "name": "test-pouzdro-na-iphone.gcode", "completion": 12, "printTimeLeft": 35, "printTime": 10, }, )
def test_upload_job_ok(self, mock_post_uri, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.return_value = { "state": { "text": "Operational" }, "temperature": {}, } mock_post_uri.return_value.status_code = 201 mock_post_uri.return_value.json.return_value = { "files": { "local": { "name": "20mm-umlaut-box", "origin": "local", "refs": { "resource": "http://example.com/api/files/local/whistle_v2.gcode", "download": "http://example.com/downloads/files/local/whistle_v2.gcode", }, } }, "done": True, } printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.upload_and_start_job(self.file_mock.name) self.assertTrue(result) args, kwargs = mock_post_uri.call_args self.assertEqual(kwargs["data"], {"path": "karmen", "print": True}) self.assertEqual(kwargs["files"]["file"].name, self.file_mock.name) self.assertEqual(kwargs["timeout"], 200)
def test_webcam_no_response(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.webcam() self.assertEqual(result, {"message": "Webcam not accessible"})
def test_job_no_response(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.job() self.assertEqual(result, {})
def test_modify_job_no_response(self, mock_post_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.modify_current_job("toggle") self.assertFalse(result)
def test_job_disconnected(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", ) printer.job() self.assertEqual(mock_get_uri.call_count, 0)
def test_deactivate_non_200_responding_printer(self, mock_get_uri): mock_get_uri.return_value.status_code = 404 printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15") printer.sniff() self.assertEqual(printer.client_info.connected, False) self.assertEqual(printer.client_info.version, {}) self.assertEqual(printer.client_info.access_level, PrinterClientAccessLevel.UNKNOWN)
def test_reachable_offline_printer(self, mock_get_uri, mock_post_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) self.assertFalse(printer.connect_printer()) self.assertEqual(mock_get_uri.call_count, 1) self.assertEqual(mock_post_uri.call_count, 1)
def test_access_protected_octoprint_forcelogin(self, mock_get_uri): mock_get_uri.return_value.status_code = 403 printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15") printer.sniff() self.assertEqual(printer.client_info.connected, True) self.assertEqual(printer.client_info.access_level, PrinterClientAccessLevel.PROTECTED) self.assertEqual(printer.client_info.version, {})
def test_job_disconnect(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) self.assertTrue(printer.client_info.connected) printer.job() self.assertFalse(printer.client_info.connected)
def test_modify_job_inactive_printer(self, mock_post_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", ) self.assertEqual(mock_post_uri.call_count, 0) result = printer.modify_current_job("toggle") self.assertFalse(result)
def test_unknown_actino(self): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) with self.assertRaises(Exception) as ctx: printer.modify_current_job("random") self.assertTrue("random is not allowed" in str(ctx.exception))
def test_job_no_response(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True}, ) result = printer.job() self.assertEqual(result, {})
def test_no_crash_on_different_response(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.return_value = {"random": "field"} printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15") printer.sniff() self.assertEqual(printer.client_info.connected, False) self.assertEqual(printer.client_info.version, {"random": "field"}) self.assertEqual(printer.client_info.access_level, PrinterClientAccessLevel.UNKNOWN)
def test_plugin_not_responding(self, mock_post_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True, "plugins": ["awesome_karmen_led"]}, ) r = printer.set_lights() self.assertFalse(r)
def test_karmen_sniff_update_downloading_finished( self, mock_props, mock_post, mock_get ): def mock_call(uri, **kwargs): if uri.startswith("/karmen-pill-info/"): return Response( 200, { "networking": { "mode": "client", "ssid": "Alexa", "has_passphrase": False, "country": "CZ", }, "system": { "karmen_version": "0.2.0", "karmen_version_hash": "cdcd7749e47dbaeea6482bd2b745eba4ac6c32ec 0.2.0", "hostname": "kpz-1016", "timezone": "Europe/Prague", "device_key": "206b22a3126644eb8dd73c8e276961c6", "update_status": "downloading", }, }, ) def mock_call_post(uri, data, **kwargs): if uri == "/update-system": if data == '{"action": "download-status"}': return SimpleResponse(200, "DONE") def get_props(prop): if prop == "versions": return [ {"pattern": r"""0\.2\.[01]""", "new_version_name": "0.2.3"}, ] mock_get.side_effect = mock_call mock_post.side_effect = mock_call_post mock_props.side_effect = get_props printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", ) printer.karmen_sniff() self.assertEqual( printer.client_info.pill_info, { "karmen_version": "0.2.0", "version_number": "0.2.0", "update_available": "0.2.3", "update_status": "downloaded", }, )
def test_modify_job_disconnect(self, mock_post_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True}, ) printer.modify_current_job("toggle") # testing connected = Flase self.assertFalse(printer.client_info.connected)
def test_plugin_responding_black(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True, "plugins": ["awesome_karmen_led"]}, ) r = printer.are_lights_on() self.assertFalse(r)
def test_deactivate_no_data_responding_printer(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.side_effect = json.decoder.JSONDecodeError( "msg", "aa", 123) printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15") printer.sniff() self.assertEqual(printer.client_info.connected, False) self.assertEqual(printer.client_info.version, {}) self.assertEqual(printer.client_info.access_level, PrinterClientAccessLevel.UNKNOWN)
def test_job_disconnect(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True}, ) self.assertTrue(printer.client_info.connected) printer.job() self.assertFalse(printer.client_info.connected)
def test_job_malformed_json(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.side_effect = json.decoder.JSONDecodeError( "msg", "aa", 123) printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.job() self.assertEqual(result, {})
def test_status_unreachable(self, mock_get_uri): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.status() self.assertEqual(result, { "state": "Printer is not responding", "temperature": {} })
def test_modify_job_cancel_ok(self, mock_post_uri): mock_post_uri.return_value.status_code = 204 printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", client_props={"connected": True}, ) result = printer.modify_current_job("cancel") self.assertTrue(result) args, kwargs = mock_post_uri.call_args self.assertEqual(kwargs["json"], {"command": "cancel"})
def test_upload_job_disconnected(self, mock_post_uri, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.return_value = { "state": { "text": "Operational" }, "temperature": {}, } printer = Octoprint("192.168.1.15") result = printer.upload_and_start_job(self.file_mock.name) self.assertEqual(mock_post_uri.call_count, 0) self.assertFalse(result)
def test_no_plugin(self): printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True}, ) with self.assertRaises(Exception) as ctx: printer.set_lights() self.assertTrue("awesome_karmen_led is not loaded" in str(ctx.exception))
def test_activate_responding_printer(self, mock_get_uri): mock_get_uri.return_value.status_code = 200 mock_get_uri.return_value.json.return_value = {"text": "OctoPrint"} printer = Octoprint("900c73b8-1f12-4027-941a-e4b29531e8e3", ip="192.168.1.15", protocol="https") printer.sniff() mock_get_uri.assert_called_with("https://192.168.1.15/api/version", timeout=2) self.assertEqual(printer.client_info.connected, True) self.assertEqual(printer.client_info.version, {"text": "OctoPrint"}) self.assertEqual(printer.client_info.access_level, PrinterClientAccessLevel.UNLOCKED)
def test_modify_job_toggle_ok(self, mock_post_uri): mock_post_uri.return_value.status_code = 204 printer = Octoprint( "900c73b8-1f12-4027-941a-e4b29531e8e3", "d501f4f0-48d5-468e-a137-1f3803cd836c", UUID_ORG, ip="192.168.1.15", client_props={"connected": True}, ) result = printer.modify_current_job("toggle") self.assertTrue(result) args, kwargs = mock_post_uri.call_args self.assertEqual(kwargs["json"], {"command": "pause", "action": "toggle"})