Properly handle EOF in input (#4612)

* properly handle eof

* cleanup InputWithTimeoutTest

* add test_eof

* add comment about mimicking getpass
This commit is contained in:
Brad Warren
2017-05-03 14:44:15 -07:00
committed by GitHub
parent a5bd0cf50c
commit 13c88f1c02
2 changed files with 15 additions and 7 deletions
+9 -6
View File
@@ -2,6 +2,7 @@
import inspect
import os
import socket
import tempfile
import unittest
import six
@@ -25,15 +26,17 @@ class InputWithTimeoutTest(unittest.TestCase):
from certbot.display.util import input_with_timeout
return input_with_timeout(*args, **kwargs)
def setUp(self):
self.expected_msg = "foo bar"
self.stdin = six.StringIO(self.expected_msg + "\n")
def test_eof(self):
with tempfile.TemporaryFile("r+") as f:
with mock.patch("certbot.display.util.sys.stdin", new=f):
self.assertRaises(EOFError, self._call)
def test_input(self, prompt=None):
expected = "foo bar"
stdin = six.StringIO(expected + "\n")
with mock.patch("certbot.display.util.select.select") as mock_select:
mock_select.return_value = ([self.stdin], [], [],)
self.assertEqual(display_util.input_with_timeout(prompt),
self.expected_msg)
mock_select.return_value = ([stdin], [], [],)
self.assertEqual(self._call(prompt), expected)
@mock.patch("certbot.display.util.sys.stdout")
def test_input_with_prompt(self, mock_stdout):