diff --git a/eventlet/green/select.py b/eventlet/green/select.py index f1bf381..53fb359 100644 --- a/eventlet/green/select.py +++ b/eventlet/green/select.py @@ -17,12 +17,12 @@ def get_fileno(obj): f = obj.fileno except AttributeError: if not isinstance(obj, six.integer_types): - raise TypeError("Expected int or long, got " + type(obj)) + raise TypeError("Expected int or long, got %s" % type(obj)) return obj else: rv = f() if not isinstance(rv, six.integer_types): - raise TypeError("Expected int or long, got " + type(rv)) + raise TypeError("Expected int or long, got %s" % type(rv)) return rv diff --git a/tests/greenio_test.py b/tests/greenio_test.py index e05a524..4b375ba 100644 --- a/tests/greenio_test.py +++ b/tests/greenio_test.py @@ -613,6 +613,38 @@ class TestGreenSocket(LimitedTestCase): assert select.select([], [s1], [], 0) == ([], [s1], []) +def test_get_fileno_of_a_socket_works(): + class DummySocket(object): + def fileno(self): + return 123 + assert select.get_fileno(DummySocket()) == 123 + + +def test_get_fileno_of_an_int_works(): + assert select.get_fileno(123) == 123 + + +def test_get_fileno_of_wrong_type_fails(): + try: + select.get_fileno('foo') + except TypeError as ex: + assert str(ex) == 'Expected int or long, got ' + else: + assert False, 'Expected TypeError not raised' + + +def test_get_fileno_of_a_socket_with_fileno_returning_wrong_type_fails(): + class DummySocket(object): + def fileno(self): + return 'foo' + try: + select.get_fileno(DummySocket()) + except TypeError as ex: + assert str(ex) == 'Expected int or long, got ' + else: + assert False, 'Expected TypeError not raised' + + class TestGreenPipe(LimitedTestCase): @skip_on_windows def setUp(self):