##// END OF EJS Templates
Fix bug when network map is disconnected (#13925)...
Fix bug when network map is disconnected (#13925) Hi there :) I encounter a little bug with the ipython logger. When using the `%logstart` magic and writing the log to a remote path, everything works fine until the network map gets disconnected. After the network drive is disconnected you basically powerless, and you have to reopen the console. This can be easily reproduce by sharing a windows folder ![image](https://user-images.githubusercontent.com/23289491/216761685-1bbcc92a-13e4-409c-badf-513f610fef46.png) Mounting it using ![image](https://user-images.githubusercontent.com/23289491/216761695-8b413c89-b4f8-4423-b9c0-d68c2997af38.png) Start an IPython session, start a log with `%logstart Z:\log` and disconnect. Anything you will try to do from now on will not work, and you can't use the Session, and will result `OSError: [Errno 22] Invalid argument` I couldn't reproduce it in Linux environment, i guess it really depends on the `OS` here. Also weirdly this happens when the client close the connection. that's mean if the Server close the connection to the mount everything still working perfectly I added a `try except` block to allow you to stop the logger and continue using your ipython normally I Search for a way to test it but I couldn't find an easy way to reproduce it in test.

File last commit:

r27495:1a9d9554
r28082:defefe64 merge
Show More
test_tools.py
133 lines | 4.1 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""
Tests for testing.tools
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import unittest
from IPython.testing import decorators as dec
from IPython.testing import tools as tt
#-----------------------------------------------------------------------------
# Tests
#-----------------------------------------------------------------------------
@dec.skip_win32
def test_full_path_posix():
spath = "/foo/bar.py"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["/foo/a.txt" == "/foo/b.txt"]
spath = "/foo"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["/a.txt" == "/b.txt"]
result = tt.full_path(spath, "a.txt")
assert result == ["/a.txt"]
@dec.skip_if_not_win32
def test_full_path_win32():
spath = "c:\\foo\\bar.py"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["c:\\foo\\a.txt" == "c:\\foo\\b.txt"]
spath = "c:\\foo"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["c:\\a.txt" == "c:\\b.txt"]
result = tt.full_path(spath, "a.txt")
assert result == ["c:\\a.txt"]
def test_parser():
err = ("FAILED (errors=1)", 1, 0)
fail = ("FAILED (failures=1)", 0, 1)
both = ("FAILED (errors=1, failures=1)", 1, 1)
for txt, nerr, nfail in [err, fail, both]:
nerr1, nfail1 = tt.parse_test_output(txt)
assert nerr == nerr1
assert nfail == nfail1
def test_temp_pyfile():
src = 'pass\n'
fname = tt.temp_pyfile(src)
assert os.path.isfile(fname)
with open(fname, encoding="utf-8") as fh2:
src2 = fh2.read()
assert src2 == src
class TestAssertPrints(unittest.TestCase):
def test_passing(self):
with tt.AssertPrints("abc"):
print("abcd")
print("def")
print(b"ghi")
def test_failing(self):
def func():
with tt.AssertPrints("abc"):
print("acd")
print("def")
print(b"ghi")
self.assertRaises(AssertionError, func)
class Test_ipexec_validate(tt.TempFileMixin):
def test_main_path(self):
"""Test with only stdout results.
"""
self.mktmp("print('A')\n"
"print('B')\n"
)
out = "A\nB"
tt.ipexec_validate(self.fname, out)
def test_main_path2(self):
"""Test with only stdout results, expecting windows line endings.
"""
self.mktmp("print('A')\n"
"print('B')\n"
)
out = "A\r\nB"
tt.ipexec_validate(self.fname, out)
def test_exception_path(self):
"""Test exception path in exception_validate.
"""
self.mktmp("import sys\n"
"print('A')\n"
"print('B')\n"
"print('C', file=sys.stderr)\n"
"print('D', file=sys.stderr)\n"
)
out = "A\nB"
tt.ipexec_validate(self.fname, expected_out=out, expected_err="C\nD")
def test_exception_path2(self):
"""Test exception path in exception_validate, expecting windows line endings.
"""
self.mktmp("import sys\n"
"print('A')\n"
"print('B')\n"
"print('C', file=sys.stderr)\n"
"print('D', file=sys.stderr)\n"
)
out = "A\r\nB"
tt.ipexec_validate(self.fname, expected_out=out, expected_err="C\r\nD")
def tearDown(self):
# tear down correctly the mixin,
# unittest.TestCase.tearDown does nothing
tt.TempFileMixin.tearDown(self)