aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.http.test
diff options
context:
space:
mode:
authorJonathan Nieder <jrn@google.com>2018-06-04 22:22:24 -0700
committerJonathan Nieder <jrn@google.com>2018-06-04 22:22:24 -0700
commit903432ef4d6505d91eb76d09b4ded0a554f05e90 (patch)
treec1048c542fdf42053da8de7d6048d9da4b74b0d3 /org.eclipse.jgit.http.test
parent61e2414ef7f42759a9834c668f8059a098b71965 (diff)
parent7dbd2bfe7e0598097cf35aedd700d86b468bec7d (diff)
downloadjgit-903432ef4d6505d91eb76d09b4ded0a554f05e90.tar.gz
jgit-903432ef4d6505d91eb76d09b4ded0a554f05e90.zip
Merge branch 'stable-5.0'
* stable-5.0: Teach UploadPack "filter" in protocol v2 fetch Refactor test of capabilities output Refactor v2 advertisement into own function Refactor parsing of "filter" into its own method Disallow unknown args to "fetch" in protocol v2 Teach UploadPack shallow fetch in protocol v2 Refactor unshallowCommits to local variable Add protocol v2 support in http Give info/refs services more control over response Change-Id: I1683902222e076e1091795e94790a264550afb7b Signed-off-by: Jonathan Nieder <jrn@google.com>
Diffstat (limited to 'org.eclipse.jgit.http.test')
-rw-r--r--org.eclipse.jgit.http.test/META-INF/MANIFEST.MF5
-rw-r--r--org.eclipse.jgit.http.test/pom.xml7
-rw-r--r--org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java87
3 files changed, 97 insertions, 2 deletions
diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
index 446e353031..0bb8050515 100644
--- a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
@@ -9,8 +9,8 @@ Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: javax.servlet;version="[2.5.0,3.2.0)",
javax.servlet.http;version="[2.5.0,3.2.0)",
- org.apache.commons.codec;version="[1.6.0, 2.0.0)",
- org.apache.commons.codec.binary;version="[1.6.0, 2.0.0)",
+ org.apache.commons.codec;version="[1.6.0,2.0.0)",
+ org.apache.commons.codec.binary;version="[1.6.0,2.0.0)",
org.eclipse.jetty.continuation;version="[9.4.5,10.0.0)",
org.eclipse.jetty.http;version="[9.4.5,10.0.0)",
org.eclipse.jetty.io;version="[9.4.5,10.0.0)",
@@ -44,6 +44,7 @@ Import-Package: javax.servlet;version="[2.5.0,3.2.0)",
org.eclipse.jgit.transport.http.apache;version="[5.1.0,5.2.0)",
org.eclipse.jgit.transport.resolver;version="[5.1.0,5.2.0)",
org.eclipse.jgit.util;version="[5.1.0,5.2.0)",
+ org.hamcrest;version="[1.1.0,2.0.0)",
org.hamcrest.core;version="[1.1.0,2.0.0)",
org.junit;version="[4.12,5.0.0)",
org.junit.runner;version="[4.12,5.0.0)",
diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml
index ef60c47176..c4a8580b88 100644
--- a/org.eclipse.jgit.http.test/pom.xml
+++ b/org.eclipse.jgit.http.test/pom.xml
@@ -84,6 +84,13 @@
</dependency>
<dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-library</artifactId>
+ <scope>test</scope>
+ <version>[1.1.0,2.0.0)</version>
+ </dependency>
+
+ <dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit.junit.http</artifactId>
<version>${project.version}</version>
diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
index 035501ffc1..ef059bf2a3 100644
--- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
+++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
@@ -43,15 +43,20 @@
package org.eclipse.jgit.http.test;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.theInstance;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
+import java.io.OutputStream;
import java.net.URI;
+import java.net.URL;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@@ -75,9 +80,13 @@ import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.transport.FetchConnection;
+import org.eclipse.jgit.transport.PacketLineIn;
+import org.eclipse.jgit.transport.PacketLineOut;
import org.eclipse.jgit.transport.Transport;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
+import org.eclipse.jgit.transport.http.HttpConnection;
+import org.eclipse.jgit.transport.http.JDKHttpConnectionFactory;
import org.eclipse.jgit.transport.resolver.RepositoryResolver;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import org.junit.Before;
@@ -345,4 +354,82 @@ public class HttpClientTests extends HttpTestCase {
assertNotNull(head);
}
}
+
+ @Test
+ public void testHttpClientWantsV2ButServerNotConfigured() throws Exception {
+ JDKHttpConnectionFactory f = new JDKHttpConnectionFactory();
+ String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack";
+ HttpConnection c = f.create(new URL(url));
+ c.setRequestMethod("GET");
+ c.setRequestProperty("Git-Protocol", "version=2");
+ c.connect();
+ assertThat(c.getResponseCode(), is(200));
+
+ PacketLineIn pckIn = new PacketLineIn(c.getInputStream());
+
+ // Check that we get a v0 response.
+ assertThat(pckIn.readString(), is("# service=git-upload-pack"));
+ assertThat(pckIn.readString(), theInstance(PacketLineIn.END));
+ assertTrue(pckIn.readString().matches("[0-9a-f]{40} HEAD.*"));
+ }
+
+ @Test
+ public void testV2HttpFirstResponse() throws Exception {
+ remoteRepository.getRepository().getConfig().setInt(
+ "protocol", null, "version", 2);
+
+ JDKHttpConnectionFactory f = new JDKHttpConnectionFactory();
+ String url = smartAuthNoneURI.toString() + "/info/refs?service=git-upload-pack";
+ HttpConnection c = f.create(new URL(url));
+ c.setRequestMethod("GET");
+ c.setRequestProperty("Git-Protocol", "version=2");
+ c.connect();
+ assertThat(c.getResponseCode(), is(200));
+
+ PacketLineIn pckIn = new PacketLineIn(c.getInputStream());
+ assertThat(pckIn.readString(), is("version 2"));
+
+ // What remains are capabilities - ensure that all of them are
+ // non-empty strings, and that we see END at the end.
+ String s;
+ while ((s = pckIn.readString()) != PacketLineIn.END) {
+ assertTrue(!s.isEmpty());
+ }
+ }
+
+ @Test
+ public void testV2HttpSubsequentResponse() throws Exception {
+ remoteRepository.getRepository().getConfig().setInt(
+ "protocol", null, "version", 2);
+
+ JDKHttpConnectionFactory f = new JDKHttpConnectionFactory();
+ String url = smartAuthNoneURI.toString() + "/git-upload-pack";
+ HttpConnection c = f.create(new URL(url));
+ c.setRequestMethod("POST");
+ c.setRequestProperty("Content-Type", "application/x-git-upload-pack-request");
+ c.setRequestProperty("Git-Protocol", "version=2");
+ c.setDoOutput(true);
+ c.connect();
+
+ // Test ls-refs to verify that everything is connected
+ // properly. Tests for other commands go in
+ // UploadPackTest.java.
+
+ OutputStream os = c.getOutputStream();
+ PacketLineOut pckOut = new PacketLineOut(os);
+ pckOut.writeString("command=ls-refs");
+ pckOut.writeDelim();
+ pckOut.end();
+ os.close();
+
+ PacketLineIn pckIn = new PacketLineIn(c.getInputStream());
+
+ // Just check that we get what looks like a ref advertisement.
+ String s;
+ while ((s = pckIn.readString()) != PacketLineIn.END) {
+ assertTrue(s.matches("[0-9a-f]{40} [A-Za-z/]*"));
+ }
+
+ assertThat(c.getResponseCode(), is(200));
+ }
}