Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add possibility to configure GitHubClient timeout (#963) #1693

Merged
merged 2 commits into from
Oct 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions Octokit.Reactive/IObservableGitHubClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ public interface IObservableGitHubClient : IApiInfoProvider
{
IConnection Connection { get; }

/// <summary>
/// Set the GitHub Api request timeout.
/// Useful to set a specific timeout for lengthy operations, such as uploading release assets
/// </summary>
/// <remarks>
/// See more information here: https://technet.microsoft.com/library/system.net.http.httpclient.timeout(v=vs.110).aspx
/// </remarks>
/// <param name="timeout">The Timeout value</param>
void SetRequestTimeout(TimeSpan timeout);

IObservableAuthorizationsClient Authorization { get; }
IObservableActivitiesClient Activity { get; }
IObservableIssuesClient Issue { get; }
Expand Down
14 changes: 14 additions & 0 deletions Octokit.Reactive/ObservableGitHubClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,20 @@ public IConnection Connection
get { return _gitHubClient.Connection; }
}

/// <summary>
/// Set the GitHub Api request timeout.
/// Useful to set a specific timeout for lengthy operations, such as uploading release assets
/// </summary>
/// <remarks>
/// See more information here: https://technet.microsoft.com/library/system.net.http.httpclient.timeout(v=vs.110).aspx
/// </remarks>
/// <param name="timeout">The Timeout value</param>
public void SetRequestTimeout(TimeSpan timeout)
{

_gitHubClient.SetRequestTimeout(timeout);
}

public IObservableAuthorizationsClient Authorization { get; private set; }
public IObservableActivitiesClient Activity { get; private set; }
public IObservableIssuesClient Issue { get; private set; }
Expand Down
15 changes: 15 additions & 0 deletions Octokit.Tests/GitHubClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,5 +196,20 @@ public async Task ReturnsObjectIfNotNew()
var temp = connection.Received(1).GetLastApiInfo();
}
}

public class TheSetRequestTimeoutMethod
{
[Fact]
public void SetsTheTimeoutOnTheUnderlyingHttpClient()
{
var httpClient = Substitute.For<IHttpClient>();
var client = new GitHubClient(new Connection(new ProductHeaderValue("OctokitTests"), httpClient));

client.SetRequestTimeout(TimeSpan.FromSeconds(15));


httpClient.Received(1).SetRequestTimeout(TimeSpan.FromSeconds(15));
}
}
}
}
13 changes: 13 additions & 0 deletions Octokit/GitHubClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,19 @@ public GitHubClient(IConnection connection)
Reaction = new ReactionsClient(apiConnection);
}

/// <summary>
/// Set the GitHub Api request timeout.
/// Useful to set a specific timeout for lengthy operations, such as uploading release assets
/// </summary>
/// <remarks>
/// See more information here: https://technet.microsoft.com/library/system.net.http.httpclient.timeout(v=vs.110).aspx
/// </remarks>
/// <param name="timeout">The Timeout value</param>
public void SetRequestTimeout(TimeSpan timeout)
{
Connection.SetRequestTimeout(timeout);
}

/// <summary>
/// Gets the latest API Info - this will be null if no API calls have been made
/// </summary>
Expand Down
9 changes: 9 additions & 0 deletions Octokit/Http/Connection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -752,5 +752,14 @@ static string GetVersionInformation()

return _versionInformation;
}

/// <summary>
/// Set the GitHub Api request timeout.
/// </summary>
/// <param name="timeout">The Timeout value</param>
public void SetRequestTimeout(TimeSpan timeout)
{
_httpClient.SetRequestTimeout(timeout);
}
}
}
9 changes: 9 additions & 0 deletions Octokit/Http/HttpClientAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,15 @@ public static async Task<HttpRequestMessage> CloneHttpRequestMessageAsync(HttpRe

return newRequest;
}

/// <summary>
/// Set the GitHub Api request timeout.
/// </summary>
/// <param name="timeout">The Timeout value</param>
public void SetRequestTimeout(TimeSpan timeout)
{
_http.Timeout = timeout;
}
}

internal class RedirectHandler : DelegatingHandler
Expand Down
6 changes: 6 additions & 0 deletions Octokit/Http/IConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -292,5 +292,11 @@ public interface IConnection : IApiInfoProvider
/// the default <see cref="InMemoryCredentialStore"/> with just these credentials.
/// </remarks>
Credentials Credentials { get; set; }

/// <summary>
/// Set the GitHub Api request timeout.
/// </summary>
/// <param name="timeout">The Timeout value</param>
void SetRequestTimeout(TimeSpan timeout);
}
}
7 changes: 7 additions & 0 deletions Octokit/Http/IHttpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,12 @@ public interface IHttpClient : IDisposable
/// <param name="cancellationToken">Used to cancel the request</param>
/// <returns>A <see cref="Task" /> of <see cref="IResponse"/></returns>
Task<IResponse> Send(IRequest request, CancellationToken cancellationToken);


/// <summary>
/// Set the GitHub Api request timeout.
/// </summary>
/// <param name="timeout">The Timeout value</param>
void SetRequestTimeout(TimeSpan timeout);
}
}
10 changes: 10 additions & 0 deletions Octokit/IGitHubClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ namespace Octokit
/// </summary>
public interface IGitHubClient : IApiInfoProvider
{
/// <summary>
/// Set the GitHub Api request timeout.
/// Useful to set a specific timeout for lengthy operations, such as uploading release assets
/// </summary>
/// <remarks>
/// See more information here: https://technet.microsoft.com/library/system.net.http.httpclient.timeout(v=vs.110).aspx
/// </remarks>
/// <param name="timeout">The Timeout value</param>
void SetRequestTimeout(TimeSpan timeout);

/// <summary>
/// Provides a client connection to make rest requests to HTTP endpoints.
/// </summary>
Expand Down