diff options
author | Ivan Frade <ifrade@google.com> | 2018-10-17 16:52:30 -0700 |
---|---|---|
committer | Ivan Frade <ifrade@google.com> | 2018-10-19 16:55:56 -0700 |
commit | 8d4f8d55d3d14b51983f951568a2f4e4ff64b324 (patch) | |
tree | 6394f4bc0166e81f7553ba31f8274959925ef997 /org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java | |
parent | 40f5b28545989f7e200f6e0b2007459d63279103 (diff) | |
download | jgit-8d4f8d55d3d14b51983f951568a2f4e4ff64b324.tar.gz jgit-8d4f8d55d3d14b51983f951568a2f4e4ff64b324.zip |
UploadPack: Return correct peer user agent on v2 requests
UploadPack.getPeerUserAgent() doesn't produce the expected results for
protocol v2 requests. In v2, the agent reported in the request (in an
"agent=" line) is not in the clientCapabilities but in a field on its
own. This makes getPeerUserAgent default to the transport user agent.
Making "agent" a shared property between protocol v0/v1 and v2 fixes the
problem, simplifies the function and harmonizes the implementation
between protocol versions.
In a follow up commit the "agent" will be identified on parsing time,
instead of taking it from the client capabilities.
Change-Id: Idf9825ec4e0b81a1458c8e3701f3e28aafd8a32a
Signed-off-by: Ivan Frade <ifrade@google.com>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java | 70 |
1 files changed, 58 insertions, 12 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java index aaef45883a..b74dcca583 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java @@ -429,17 +429,7 @@ public class UploadPackTest { RefFilter refFilter, ProtocolV2Hook hook, String... inputLines) throws Exception { - ByteArrayOutputStream send = new ByteArrayOutputStream(); - PacketLineOut pckOut = new PacketLineOut(send); - for (String line : inputLines) { - if (line == PacketLineIn.END) { - pckOut.end(); - } else if (line == PacketLineIn.DELIM) { - pckOut.writeDelim(); - } else { - pckOut.writeString(line); - } - } + ByteArrayInputStream send = linesAsInputStream(inputLines); server.getConfig().setString("protocol", null, "version", "2"); UploadPack up = new UploadPack(server); @@ -453,11 +443,28 @@ public class UploadPackTest { } ByteArrayOutputStream recv = new ByteArrayOutputStream(); - up.upload(new ByteArrayInputStream(send.toByteArray()), recv, null); + up.upload(send, recv, null); return new ByteArrayInputStream(recv.toByteArray()); } + private static ByteArrayInputStream linesAsInputStream(String... inputLines) + throws IOException { + try (ByteArrayOutputStream send = new ByteArrayOutputStream()) { + PacketLineOut pckOut = new PacketLineOut(send); + for (String line : inputLines) { + if (line == PacketLineIn.END) { + pckOut.end(); + } else if (line == PacketLineIn.DELIM) { + pckOut.writeDelim(); + } else { + pckOut.writeString(line); + } + } + return new ByteArrayInputStream(send.toByteArray()); + } + } + /* * Invokes UploadPack with protocol v2 and sends it the given lines. * Returns UploadPack's output stream, not including the capability @@ -1552,6 +1559,45 @@ public class UploadPackTest { assertTrue(client.hasObject(three.toObjectId())); } + @Test + public void testGetPeerAgentProtocolV0() throws Exception { + RevCommit one = remote.commit().message("1").create(); + remote.update("one", one); + + UploadPack up = new UploadPack(server); + ByteArrayInputStream send = linesAsInputStream( + "want " + one.getName() + " agent=JGit-test/1.2.3\n", + PacketLineIn.END, + "have 11cedf1b796d44207da702f7d420684022fc0f09\n", "done\n"); + + ByteArrayOutputStream recv = new ByteArrayOutputStream(); + up.upload(send, recv, null); + + assertEquals(up.getPeerUserAgent(), "JGit-test/1.2.3"); + } + + @Test + public void testGetPeerAgentProtocolV2() throws Exception { + server.getConfig().setString("protocol", null, "version", "2"); + + RevCommit one = remote.commit().message("1").create(); + remote.update("one", one); + + UploadPack up = new UploadPack(server); + up.setExtraParameters(Sets.of("version=2")); + + ByteArrayInputStream send = linesAsInputStream( + "command=fetch\n", "agent=JGit-test/1.2.4\n", + PacketLineIn.DELIM, "want " + one.getName() + "\n", + "have 11cedf1b796d44207da702f7d420684022fc0f09\n", "done\n", + PacketLineIn.END); + + ByteArrayOutputStream recv = new ByteArrayOutputStream(); + up.upload(send, recv, null); + + assertEquals(up.getPeerUserAgent(), "JGit-test/1.2.4"); + } + private static class RejectAllRefFilter implements RefFilter { @Override public Map<String, Ref> filter(Map<String, Ref> refs) { |