ayrton 0.9
Another release, but this time not (only) a bugfix one. After
playing with bool
semantics
I converted the file tests from a _X
format, which, let's face it, was not pretty,
into the more usual -X
format. This alone merits a change in the minor version
number. Also, _in
, _out
and _err
also accept a tuple (path, flags)
, so
you can specify things like os.O_APPEND
.
In other news, I had to drop support for Pyhton-3.3, because otherwise I would have to complexify the import system a lot.
But in the end, yes, this also is a bugfix release. Lost of fd leaks where
plugged, so I suggest you to upgrade if you can. Just remember the s/_X/-X/
change. I found all the leaks thanks to unitest
's warnings, even if sometimes
they were a little misleading:
testRemoteCommandStdout (tests.test_remote.RealRemoteTests) ... ayrton/parser/pyparser/parser.py:175: ResourceWarning: unclosed <socket.socket fd=5, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0, raddr=/tmp/ssh-XZxnYoIQxZX9/agent.7248> self.stack[-1] = (dfa, next_state, node)
The file and line cited in the warning have nothing to do with the warning
itself (it was not the one who raised it) or the leaked fd, so it took me a while
to find were those leaks were coming from. I hope I have some time to find why
this is so. The most frustrating thing was that unitest
closes the leaking fd,
which is nice, but in one of the test cases it was closing it seemingly before the
test finished, and the test failed because the socket was closed:
====================================================================== ERROR: testLocalVarToRemoteToLocal (tests.test_remote.RealRemoteTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/mdione/src/projects/ayrton_clean/ayrton/tests/test_remote.py", line 225, in wrapper test (self) File "/home/mdione/src/projects/ayrton_clean/ayrton/tests/test_remote.py", line 235, in testLocalVarToRemoteToLocal self.runner.run_file ('ayrton/tests/scripts/testLocalVarToRealRemoteToLocal.ay') File "/home/mdione/src/projects/ayrton_clean/ayrton/__init__.py", line 304, in run_file return self.run_script (script, file_name, argv, params) File "/home/mdione/src/projects/ayrton_clean/ayrton/__init__.py", line 323, in run_script return self.run_tree (tree, file_name, argv, params) File "/home/mdione/src/projects/ayrton_clean/ayrton/__init__.py", line 336, in run_tree return self.run_code (code, file_name, argv) File "/home/mdione/src/projects/ayrton_clean/ayrton/__init__.py", line 421, in run_code raise error File "/home/mdione/src/projects/ayrton_clean/ayrton/__init__.py", line 402, in run_code exec (code, self.globals, self.locals) File "ayrton/tests/scripts/testLocalVarToRealRemoteToLocal.ay", line 6, in <module> with remote ('127.0.0.1', _test=True): File "/home/mdione/src/projects/ayrton_clean/ayrton/remote.py", line 362, in __enter__ i, o, e= self.prepare_connections (backchannel_port, command) File "/home/mdione/src/projects/ayrton_clean/ayrton/remote.py", line 270, in prepare_connections self.client.connect (self.hostname, *self.args, **self.kwargs) File "/usr/lib/python3/dist-packages/paramiko/client.py", line 338, in connect t.start_client() File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 493, in start_client raise e File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 1757, in run self.kex_engine.parse_next(ptype, m) File "/usr/lib/python3/dist-packages/paramiko/kex_group1.py", line 75, in parse_next return self._parse_kexdh_reply(m) File "/usr/lib/python3/dist-packages/paramiko/kex_group1.py", line 112, in _parse_kexdh_reply self.transport._activate_outbound() File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 2079, in _activate_outbound self._send_message(m) File "/usr/lib/python3/dist-packages/paramiko/transport.py", line 1566, in _send_message self.packetizer.send_message(data) File "/usr/lib/python3/dist-packages/paramiko/packet.py", line 364, in send_message self.write_all(out) File "/usr/lib/python3/dist-packages/paramiko/packet.py", line 314, in write_all raise EOFError() EOFError
This probably has something to do with the fact that the test (a functional test, really) is using threads and real sockets. Again, I'll try to investigate this.
All in all, the release is an interesting one. I'll keep adding small features and releasing, let's see how it goes. Meanwhile, here's the changelog:
- The 'No Government' release.
- Test functions are no longer called
_X
but-X
, which is more scripting friendly. - Some if those tests had to be fixed.
- Dropped support for
py3.3
because the importer does not work there. -
tox
support, but not yet part of the stable test suite. - Lots and lots of more tests.
- Lots of improvements in the
remote()
tests; in particular, make sure they don't hang waiting for someone who's not gonna come. - Ignore ssh
remote()
tests if there's not password/phrase-less connection. - Fixed several fd leaks.
-
_in
,_out
and_err
also accept a tuple(path, flags)
, so you can specify things likeos.O_APPEND
. Mostly used internally.