Skip to content

Commit 6ec2db2

Browse files
committed
registry: make GetProvider method async
Make the GetProvider method on the IHostProviderRegistry interface async in preparation for introducing some network I/O to the auto-detection of providers.
1 parent b9084dd commit 6ec2db2

File tree

5 files changed

+31
-27
lines changed

5 files changed

+31
-27
lines changed

src/shared/Microsoft.Git.CredentialManager.Tests/Commands/HostProviderCommandBaseTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public async Task HostProviderCommandBase_ExecuteAsync_CallsExecuteInternalAsync
1919
var mockProvider = new Mock<IHostProvider>();
2020
var mockHostRegistry = new Mock<IHostProviderRegistry>();
2121

22-
mockHostRegistry.Setup(x => x.GetProvider(It.IsAny<InputArguments>()))
23-
.Returns(mockProvider.Object)
22+
mockHostRegistry.Setup(x => x.GetProviderAsync(It.IsAny<InputArguments>()))
23+
.ReturnsAsync(mockProvider.Object)
2424
.Verifiable();
2525

2626
mockProvider.Setup(x => x.IsSupported(It.IsAny<InputArguments>()))
@@ -58,8 +58,8 @@ public async Task HostProviderCommandBase_ExecuteAsync_ConfiguresSettingsRemoteU
5858
var mockSettings = new Mock<ISettings>();
5959
var mockHostRegistry = new Mock<IHostProviderRegistry>();
6060

61-
mockHostRegistry.Setup(x => x.GetProvider(It.IsAny<InputArguments>()))
62-
.Returns(mockProvider.Object);
61+
mockHostRegistry.Setup(x => x.GetProviderAsync(It.IsAny<InputArguments>()))
62+
.ReturnsAsync(mockProvider.Object);
6363

6464
string standardIn = "protocol=test\nhost=example.com\npath=a/b/c\n\n";
6565
TextReader standardInReader = new StringReader(standardIn);

src/shared/Microsoft.Git.CredentialManager.Tests/HostProviderRegistryTests.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33
using System;
44
using System.Collections.Generic;
5+
using System.Threading.Tasks;
56
using Microsoft.Git.CredentialManager.Tests.Objects;
67
using Moq;
78
using Xunit;
@@ -39,11 +40,11 @@ public void HostProviderRegistry_GetProvider_NoProviders_ThrowException()
3940
var registry = new HostProviderRegistry(context);
4041
var input = new InputArguments(new Dictionary<string, string>());
4142

42-
Assert.Throws<Exception>(() => registry.GetProvider(input));
43+
Assert.ThrowsAsync<Exception>(() => registry.GetProviderAsync(input));
4344
}
4445

4546
[Fact]
46-
public void HostProviderRegistry_GetProvider_Auto_HasProviders_ReturnsSupportedProvider()
47+
public async Task HostProviderRegistry_GetProvider_Auto_HasProviders_ReturnsSupportedProvider()
4748
{
4849
var context = new TestCommandContext();
4950
var registry = new HostProviderRegistry(context);
@@ -58,13 +59,13 @@ public void HostProviderRegistry_GetProvider_Auto_HasProviders_ReturnsSupportedP
5859

5960
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
6061

61-
IHostProvider result = registry.GetProvider(input);
62+
IHostProvider result = await registry.GetProviderAsync(input);
6263

6364
Assert.Same(provider2Mock.Object, result);
6465
}
6566

6667
[Fact]
67-
public void HostProviderRegistry_GetProvider_Auto_MultipleValidProviders_ReturnsFirstRegistered()
68+
public async Task HostProviderRegistry_GetProvider_Auto_MultipleValidProviders_ReturnsFirstRegistered()
6869
{
6970
var context = new TestCommandContext();
7071
var registry = new HostProviderRegistry(context);
@@ -79,13 +80,13 @@ public void HostProviderRegistry_GetProvider_Auto_MultipleValidProviders_Returns
7980

8081
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
8182

82-
IHostProvider result = registry.GetProvider(input);
83+
IHostProvider result = await registry.GetProviderAsync(input);
8384

8485
Assert.Same(provider1Mock.Object, result);
8586
}
8687

8788
[Fact]
88-
public void HostProviderRegistry_GetProvider_ProviderSpecified_ReturnsProvider()
89+
public async Task HostProviderRegistry_GetProvider_ProviderSpecified_ReturnsProvider()
8990
{
9091
var context = new TestCommandContext
9192
{
@@ -106,13 +107,13 @@ public void HostProviderRegistry_GetProvider_ProviderSpecified_ReturnsProvider()
106107

107108
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
108109

109-
IHostProvider result = registry.GetProvider(input);
110+
IHostProvider result = await registry.GetProviderAsync(input);
110111

111112
Assert.Same(provider3Mock.Object, result);
112113
}
113114

114115
[Fact]
115-
public void HostProviderRegistry_GetProvider_AutoProviderSpecified_ReturnsFirstSupportedProvider()
116+
public async Task HostProviderRegistry_GetProvider_AutoProviderSpecified_ReturnsFirstSupportedProvider()
116117
{
117118
var context = new TestCommandContext
118119
{
@@ -133,13 +134,13 @@ public void HostProviderRegistry_GetProvider_AutoProviderSpecified_ReturnsFirstS
133134

134135
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
135136

136-
IHostProvider result = registry.GetProvider(input);
137+
IHostProvider result = await registry.GetProviderAsync(input);
137138

138139
Assert.Same(provider2Mock.Object, result);
139140
}
140141

141142
[Fact]
142-
public void HostProviderRegistry_GetProvider_UnknownProviderSpecified_ReturnsFirstSupportedProvider()
143+
public async Task HostProviderRegistry_GetProvider_UnknownProviderSpecified_ReturnsFirstSupportedProvider()
143144
{
144145
var context = new TestCommandContext
145146
{
@@ -160,13 +161,13 @@ public void HostProviderRegistry_GetProvider_UnknownProviderSpecified_ReturnsFir
160161

161162
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
162163

163-
IHostProvider result = registry.GetProvider(input);
164+
IHostProvider result = await registry.GetProviderAsync(input);
164165

165166
Assert.Same(provider2Mock.Object, result);
166167
}
167168

168169
[Fact]
169-
public void HostProviderRegistry_GetProvider_LegacyAuthoritySpecified_ReturnsProvider()
170+
public async Task HostProviderRegistry_GetProvider_LegacyAuthoritySpecified_ReturnsProvider()
170171
{
171172
var context = new TestCommandContext
172173
{
@@ -187,13 +188,13 @@ public void HostProviderRegistry_GetProvider_LegacyAuthoritySpecified_ReturnsPro
187188

188189
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
189190

190-
IHostProvider result = registry.GetProvider(input);
191+
IHostProvider result = await registry.GetProviderAsync(input);
191192

192193
Assert.Same(provider2Mock.Object, result);
193194
}
194195

195196
[Fact]
196-
public void HostProviderRegistry_GetProvider_AutoLegacyAuthoritySpecified_ReturnsFirstSupportedProvider()
197+
public async Task HostProviderRegistry_GetProvider_AutoLegacyAuthoritySpecified_ReturnsFirstSupportedProvider()
197198
{
198199
var context = new TestCommandContext
199200
{
@@ -214,7 +215,7 @@ public void HostProviderRegistry_GetProvider_AutoLegacyAuthoritySpecified_Return
214215

215216
registry.Register(provider1Mock.Object, provider2Mock.Object, provider3Mock.Object);
216217

217-
IHostProvider result = registry.GetProvider(input);
218+
IHostProvider result = await registry.GetProviderAsync(input);
218219

219220
Assert.Same(provider2Mock.Object, result);
220221
}

src/shared/Microsoft.Git.CredentialManager/Commands/Command.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public override async Task ExecuteAsync(ICommandContext context, string[] args)
7373
// Determine the host provider
7474
context.Trace.WriteLine("Detecting host provider for input:");
7575
context.Trace.WriteDictionarySecrets(inputDict, new []{ "password" }, StringComparer.OrdinalIgnoreCase);
76-
IHostProvider provider = _hostProviderRegistry.GetProvider(input);
76+
IHostProvider provider = await _hostProviderRegistry.GetProviderAsync(input);
7777
context.Trace.WriteLine($"Host provider '{provider.Name}' was selected.");
7878

7979
await ExecuteInternalAsync(context, input, provider);

src/shared/Microsoft.Git.CredentialManager/HostProviderRegistry.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Linq;
6+
using System.Threading.Tasks;
67

78
namespace Microsoft.Git.CredentialManager
89
{
@@ -28,7 +29,7 @@ public interface IHostProviderRegistry : IDisposable
2829
/// </summary>
2930
/// <param name="input">Input arguments of a Git credential query.</param>
3031
/// <returns>A host provider that can service the given query.</returns>
31-
IHostProvider GetProvider(InputArguments input);
32+
Task<IHostProvider> GetProviderAsync(InputArguments input);
3233
}
3334

3435
/// <summary>
@@ -72,7 +73,7 @@ public void Register(params IHostProvider[] hostProviders)
7273
_hostProviders.AddRange(hostProviders);
7374
}
7475

75-
public IHostProvider GetProvider(InputArguments input)
76+
public Task<IHostProvider> GetProviderAsync(InputArguments input)
7677
{
7778
IHostProvider provider;
7879

@@ -94,7 +95,7 @@ public IHostProvider GetProvider(InputArguments input)
9495
}
9596
else
9697
{
97-
return provider;
98+
return Task.FromResult(provider);
9899
}
99100
}
100101
}
@@ -118,7 +119,7 @@ public IHostProvider GetProvider(InputArguments input)
118119
}
119120
else
120121
{
121-
return provider;
122+
return Task.FromResult(provider);
122123
}
123124
}
124125
}
@@ -134,7 +135,7 @@ public IHostProvider GetProvider(InputArguments input)
134135
throw new Exception("No host provider available to service this request.");
135136
}
136137

137-
return provider;
138+
return Task.FromResult(provider);
138139
}
139140

140141
public void Dispose()

src/shared/TestInfrastructure/Objects/TestHostProviderRegistry.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
3+
using System.Threading.Tasks;
4+
35
namespace Microsoft.Git.CredentialManager.Tests.Objects
46
{
57
public class TestHostProviderRegistry : IHostProviderRegistry
@@ -12,9 +14,9 @@ void IHostProviderRegistry.Register(params IHostProvider[] hostProviders)
1214
{
1315
}
1416

15-
IHostProvider IHostProviderRegistry.GetProvider(InputArguments input)
17+
Task<IHostProvider> IHostProviderRegistry.GetProviderAsync(InputArguments input)
1618
{
17-
return Provider;
19+
return Task.FromResult(Provider);
1820
}
1921

2022
#endregion

0 commit comments

Comments
 (0)