类org.eclipse.jgit.transport.http.HttpConnection源码实例Demo

下面列出了怎么用org.eclipse.jgit.transport.http.HttpConnection的API类实例代码及写法,或者点击链接到github查看源代码。

@Nonnull
protected HttpConnection configure(@Nonnull HttpConnection input) throws IOException {
    try {
        final KeyStore keyStore = loadKeyStore();

        final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(keyStore);
        final TrustManager[] defaultTrustManagers = trustManagerFactory.getTrustManagers();

        final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keyStore, null);
        final KeyManager[] keyManagers = keyManagerFactory.getKeyManagers();

        input.configure(keyManagers, defaultTrustManagers, null);

        input.setInstanceFollowRedirects(true);

        return input;
    } catch (final GeneralSecurityException e) {
        throw new IOException(e.getMessage(), e);
    }
}
 
@Test
public void longerUrl() throws Exception {
	MultipleJGitEnvironmentProperties properties = new MultipleJGitEnvironmentProperties();
	String url = "http://localhost/test.git";
	properties.setUri(url);
	this.connectionFactory.addConfiguration(properties);

	HttpConnection actualConnection = this.connectionFactory
			.create(new URL(url + "/some/path.properties"));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.values().stream().findFirst().get();
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void urlWithPlaceholdersAtEnd() throws Exception {
	MultipleJGitEnvironmentProperties properties = new MultipleJGitEnvironmentProperties();
	properties.setUri("https://localhost/v1/repos/pvvts_configs-{application}");
	this.connectionFactory.addConfiguration(properties);

	HttpConnection actualConnection = this.connectionFactory.create(
			new URL("https://localhost/v1/repos/pvvts_configs-applicationPasswords"
					+ "/some/path.properties"));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.values().stream().findFirst().get();
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void composite_sameHost() throws Exception {
	MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties();
	properties1.setUri("http://localhost/test1.git");
	MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties();
	properties2.setUri("http://localhost/test2.git");
	this.connectionFactory.addConfiguration(properties1);
	this.connectionFactory.addConfiguration(properties2);

	HttpConnection actualConnection = this.connectionFactory
			.create(new URL(properties1.getUri()));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.get(properties1.getUri());
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void composite_differentHost() throws Exception {
	MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties();
	properties1.setUri("http://localhost1/test.git");
	MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties();
	properties2.setUri("http://localhost2/test.git");
	this.connectionFactory.addConfiguration(properties1);
	this.connectionFactory.addConfiguration(properties2);

	HttpConnection actualConnection = this.connectionFactory
			.create(new URL(properties1.getUri()));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.get(properties1.getUri());
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void multipleMatchesWithPlaceholder() throws Exception {
	MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties();
	properties1.setUri("https://github.com/user/user-{application}.git");
	MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties();
	properties2.setUri("https://github.com/user/user-MultiApps.git");
	MultipleJGitEnvironmentProperties properties3 = new MultipleJGitEnvironmentProperties();
	properties1.setUri("https://github.com/user/user-{application}");
	this.connectionFactory.addConfiguration(properties1);
	this.connectionFactory.addConfiguration(properties2);
	this.connectionFactory.addConfiguration(properties3);

	HttpConnection actualConnection = this.connectionFactory.create(new URL(
			"https://github.com/user/user-MultiApps.git/info/refs?service=git-upload-pack"));
	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.get(properties2.getUri());
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void composite_urlsWithPlaceholders() throws Exception {
	MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties();
	properties1.setUri("http://localhost/path/{placeholder3}/more/test.git");
	MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties();
	properties2
			.setUri("http://localhost/{placeholder1}/path/{placeholder2}-test.git");
	this.connectionFactory.addConfiguration(properties1);
	this.connectionFactory.addConfiguration(properties2);

	HttpConnection actualConnection = this.connectionFactory
			.create(new URL(properties2.getUri().replace("{placeholder1}", "value1")
					.replace("{placeholder2}", "value2")));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.get(properties2.getUri());
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void composite_urlsWithPlaceholders_identicalTemplatesWontBeResolvedProperly()
		throws Exception {
	MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties();
	properties1
			.setUri("http://localhost/{placeholder3}/path/{placeholder4}-test.git");
	MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties();
	properties2
			.setUri("http://localhost/{placeholder1}/path/{placeholder2}-test.git");
	this.connectionFactory.addConfiguration(properties1);
	this.connectionFactory.addConfiguration(properties2);

	HttpConnection actualConnection = this.connectionFactory
			.create(new URL(properties2.getUri().replace("{placeholder1}", "value1")
					.replace("{placeholder2}", "value2")));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.get(properties2.getUri());
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isNotSameAs(expectedHttpClientBuilder);
}
 
@Test
public void composite_longerUrlsWithPlaceholders() throws Exception {
	MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties();
	properties1
			.setUri("http://localhost/path/{placeholder3}/{placeholder4}-test.git");
	MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties();
	properties2
			.setUri("http://localhost/{placeholder1}/path/{placeholder2}-test.git");
	this.connectionFactory.addConfiguration(properties1);
	this.connectionFactory.addConfiguration(properties2);

	HttpConnection actualConnection = this.connectionFactory
			.create(new URL(properties2.getUri().replace("{placeholder1}", "value1")
					.replace("{placeholder2}", "value2") + "/some/path.properties"));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.get(properties2.getUri());
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
private HttpClientBuilder getActualHttpClientBuilder(
		HttpConnection actualConnection) {
	HttpClient actualHttpClient = getActualHttpClient(actualConnection);
	Field closeablesField = ReflectionUtils.findField(actualHttpClient.getClass(),
			"closeables");
	ReflectionUtils.makeAccessible(closeablesField);
	List<?> closables = (List<?>) ReflectionUtils.getField(closeablesField,
			actualHttpClient);
	return closables.stream().map(o -> {
		Field builderField = Arrays.stream(o.getClass().getDeclaredFields()).filter(
				field -> HttpClientBuilder.class.isAssignableFrom(field.getType()))
				.findFirst().orElse(null);
		if (builderField != null) {
			ReflectionUtils.makeAccessible(builderField);
			return ReflectionUtils.getField(builderField, o);
		}
		return null;
	}).filter(Objects::nonNull).map(HttpClientBuilder.class::cast).findFirst().get();
}
 
private HttpClient getHttpClientForUrl(String repoUrl) throws IOException {
	HttpConnectionFactory connectionFactory = HttpTransport.getConnectionFactory();
	URL url = new URL(repoUrl);
	HttpConnection httpConnection = connectionFactory.create(url);
	assertThat(httpConnection).isInstanceOf(HttpClientConnection.class);
	return (HttpClient) ReflectionTestUtils.getField(httpConnection, "client");
}
 
@Test
public void noConfigAdded() throws Exception {
	HttpConnection actual = this.connectionFactory
			.create(new URL("http://localhost/test.git"));

	assertThat(actual).isNotNull();
}
 
@Test
public void matchingUrl() throws Exception {
	String url = "http://localhost/test.git";
	MultipleJGitEnvironmentProperties properties = new MultipleJGitEnvironmentProperties();
	properties.setUri(url);
	this.connectionFactory.addConfiguration(properties);

	HttpConnection actualConnection = this.connectionFactory.create(new URL(url));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.values().stream().findFirst().get();
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
@Test
public void urlWithPlaceholders() throws Exception {
	MultipleJGitEnvironmentProperties properties = new MultipleJGitEnvironmentProperties();
	properties.setUri("http://localhost/{placeholder}-test.git");
	this.connectionFactory.addConfiguration(properties);

	HttpConnection actualConnection = this.connectionFactory.create(
			new URL("http://localhost/value-test.git" + "/some/path.properties"));

	HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri
			.values().stream().findFirst().get();
	HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(
			actualConnection);
	assertThat(actualHttpClientBuilder).isSameAs(expectedHttpClientBuilder);
}
 
protected HttpConnection innerCreate(final URL url, final Proxy proxy) {
    if (credentialsProvider == null) {
        throw new IllegalStateException(NEED_CREDENTIALS_PROVIDER);
    }

    return new PreemptiveAuthHttpClientConnection(credentialsProvider, url.toString(), proxy);
}
 
@Override
public HttpConnection create(URL url) throws IOException {
    return configure(super.create(url));
}
 
@Override
public HttpConnection create(URL url, Proxy proxy) throws IOException {
    return configure(super.create(url, proxy));
}
 
@Override
public HttpConnection create(URL url) throws IOException {
	return create(url, null);
}
 
@Override
public HttpConnection create(URL url, Proxy proxy) throws IOException {
	return new HttpClientConnection(url.toString(), null,
			lookupHttpClientBuilder(url).build());
}
 
private HttpClient getActualHttpClient(HttpConnection actualConnection) {
	Field clientField = ReflectionUtils.findField(actualConnection.getClass(),
			"client");
	ReflectionUtils.makeAccessible(clientField);
	return (HttpClient) ReflectionUtils.getField(clientField, actualConnection);
}
 
public HttpConnection create(final URL url) throws IOException {
    return innerCreate(url, null);
}
 
public HttpConnection create(final URL url, final Proxy proxy) throws IOException {
    return innerCreate(url, null);
}