]> git.ipfire.org Git - thirdparty/git.git/commit - t/test-lib-functions.sh
t/lib-git-daemon: add network-protocol helpers
authorJeff King <peff@peff.net>
Thu, 25 Jan 2018 00:58:19 +0000 (19:58 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 25 Jan 2018 21:50:17 +0000 (13:50 -0800)
commit4414a150025765bdf83df81026270b0acbb8b376
tree288185514098bdadadbfbc50b6713bedc705dd8f
parent550fbcad1c464df9e32cab15a8c6a01f91b1629c
t/lib-git-daemon: add network-protocol helpers

All of our git-protocol tests rely on invoking the client
and having it make a request of a server. That gives a nice
real-world test of how the two behave together, but it
doesn't leave any room for testing how a server might react
to _other_ clients.

Let's add a few test helper functions which can be used to
manually conduct a git-protocol conversation with a remote
git-daemon:

  1. To connect to a remote git-daemon, we need something
     like "netcat". But not everybody will have netcat. And
     even if they do, the behavior with respect to
     half-duplex shutdowns is not portable (openbsd netcat
     has "-N", with others you must rely on "-q 1", which is
     racy).

     Here we provide a "fake_nc" that is capable of doing
     a client-side netcat, with sane half-duplex semantics.
     It relies on perl's IO::Socket::INET. That's been in
     the base distribution since 5.6.0, so it's probably
     available everywhere. But just to be on the safe side,
     we'll add a prereq.

  2. To help tests speak and read pktline, this patch adds
     packetize() and depacketize() functions.

I've put fake_nc() into lib-git-daemon.sh, since that's
really the only server where we'd need to use a network
socket.  Whereas the pktline helpers may be of more general
use, so I've added them to test-lib-functions.sh. Programs
like upload-pack speak pktline, but can talk directly over
stdio without a network socket.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/lib-git-daemon.sh
t/test-lib-functions.sh