TestNetworkedPrinterOutputDevice.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import time
  2. from unittest.mock import MagicMock
  3. from PyQt5.QtNetwork import QNetworkAccessManager
  4. from PyQt5.QtCore import QUrl
  5. from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState
  6. from cura.PrinterOutputDevice import ConnectionState
  7. def test_properties():
  8. properties = { b"firmware_version": b"12", b"printer_type": b"BHDHAHHADAD", b"address": b"ZOMG", b"name": b":(", b"testProp": b"zomg"}
  9. output_device = NetworkedPrinterOutputDevice(device_id = "test", address = "127.0.0.1", properties = properties)
  10. assert output_device.address == "ZOMG"
  11. assert output_device.firmwareVersion == "12"
  12. assert output_device.printerType == "BHDHAHHADAD"
  13. assert output_device.ipAddress == "127.0.0.1"
  14. assert output_device.name == ":("
  15. assert output_device.key == "test"
  16. assert output_device.getProperties() == properties
  17. assert output_device.getProperty("testProp") == "zomg"
  18. assert output_device.getProperty("whateverr") == ""
  19. def test_authenticationState():
  20. output_device = NetworkedPrinterOutputDevice(device_id="test", address="127.0.0.1", properties={})
  21. output_device.setAuthenticationState(AuthState.Authenticated)
  22. assert output_device.authenticationState == AuthState.Authenticated
  23. def test_post():
  24. output_device = NetworkedPrinterOutputDevice(device_id="test", address="127.0.0.1", properties={})
  25. mocked_network_manager = MagicMock()
  26. output_device._manager = mocked_network_manager
  27. # Create a fake reply (we cant use a QReply, since those are abstract C++)
  28. reply = MagicMock()
  29. reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
  30. reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
  31. mocked_network_manager.post = MagicMock(return_value = reply)
  32. mocked_callback_handler = MagicMock()
  33. output_device.post("whatever", "omgzomg", on_finished = mocked_callback_handler.onFinished)
  34. # So we now fake that the request was sucesful.
  35. output_device._handleOnFinished(reply)
  36. # We expect to get a callback regarding this.
  37. mocked_callback_handler.onFinished.assert_called_once_with(reply)
  38. def test_get():
  39. output_device = NetworkedPrinterOutputDevice(device_id="test", address="127.0.0.1", properties={})
  40. mocked_network_manager = MagicMock()
  41. output_device._manager = mocked_network_manager
  42. # Create a fake reply (we cant use a QReply, since those are abstract C++)
  43. reply = MagicMock()
  44. reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
  45. reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
  46. mocked_network_manager.get = MagicMock(return_value=reply)
  47. mocked_callback_handler = MagicMock()
  48. output_device.get("whatever", on_finished=mocked_callback_handler.onFinished)
  49. # So we now fake that the request was sucesful.
  50. output_device._handleOnFinished(reply)
  51. # We expect to get a callback regarding this.
  52. mocked_callback_handler.onFinished.assert_called_once_with(reply)
  53. def test_delete():
  54. output_device = NetworkedPrinterOutputDevice(device_id="test", address="127.0.0.1", properties={})
  55. mocked_network_manager = MagicMock()
  56. output_device._manager = mocked_network_manager
  57. # Create a fake reply (we cant use a QReply, since those are abstract C++)
  58. reply = MagicMock()
  59. reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
  60. reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
  61. mocked_network_manager.deleteResource = MagicMock(return_value=reply)
  62. mocked_callback_handler = MagicMock()
  63. output_device.delete("whatever", on_finished=mocked_callback_handler.onFinished)
  64. # So we now fake that the request was sucesful.
  65. output_device._handleOnFinished(reply)
  66. # We expect to get a callback regarding this.
  67. mocked_callback_handler.onFinished.assert_called_once_with(reply)
  68. def test_put():
  69. output_device = NetworkedPrinterOutputDevice(device_id="test", address="127.0.0.1", properties={})
  70. mocked_network_manager = MagicMock()
  71. output_device._manager = mocked_network_manager
  72. # Create a fake reply (we cant use a QReply, since those are abstract C++)
  73. reply = MagicMock()
  74. reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
  75. reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
  76. mocked_network_manager.put = MagicMock(return_value = reply)
  77. mocked_callback_handler = MagicMock()
  78. output_device.put("whatever", "omgzomg", on_finished = mocked_callback_handler.onFinished)
  79. # So we now fake that the request was sucesful.
  80. output_device._handleOnFinished(reply)
  81. # We expect to get a callback regarding this.
  82. mocked_callback_handler.onFinished.assert_called_once_with(reply)
  83. def test_timeout():
  84. output_device = NetworkedPrinterOutputDevice(device_id="test", address="127.0.0.1", properties={})
  85. output_device.setConnectionState(ConnectionState.Connected)
  86. assert output_device.connectionState == ConnectionState.Connected
  87. output_device._update()
  88. # Pretend we didn't get any response for 15 seconds
  89. output_device._last_response_time = time.time() - 15
  90. # But we did recently ask for a response!
  91. output_device._last_request_time = time.time() - 5
  92. output_device._update()
  93. # The connection should now be closed, since it went into timeout.
  94. assert output_device.connectionState == ConnectionState.Closed