Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit a345b94

Browse files
authored
Merge pull request #1598 from github/fixes/usagetracker-init-hang
Pass IPackageSettings to UsageTracker ctor.
2 parents 4634099 + bb7dc41 commit a345b94

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

src/GitHub.VisualStudio/GitHubPackage.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ async Task<object> CreateService(IAsyncServiceContainer container, CancellationT
254254
{
255255
var usageService = await GetServiceAsync(typeof(IUsageService)) as IUsageService;
256256
var serviceProvider = await GetServiceAsync(typeof(IGitHubServiceProvider)) as IGitHubServiceProvider;
257-
return new UsageTracker(serviceProvider, usageService);
257+
var settings = await GetServiceAsync(typeof(IPackageSettings)) as IPackageSettings;
258+
return new UsageTracker(serviceProvider, usageService, settings);
258259
}
259260
else if (serviceType == typeof(IVSGitExt))
260261
{

src/GitHub.VisualStudio/Services/UsageTracker.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ public sealed class UsageTracker : IUsageTracker, IDisposable
2828
IDisposable timer;
2929
bool firstTick = true;
3030

31-
[ImportingConstructor]
3231
public UsageTracker(
3332
IGitHubServiceProvider gitHubServiceProvider,
34-
IUsageService service)
33+
IUsageService service,
34+
IPackageSettings settings)
3535
{
3636
this.gitHubServiceProvider = gitHubServiceProvider;
3737
this.service = service;
38-
timer = StartTimer();
38+
this.userSettings = settings;
39+
timer = StartTimer();
3940
}
4041

4142
public void Dispose()
@@ -71,7 +72,6 @@ async Task Initialize()
7172

7273
client = gitHubServiceProvider.TryGetService<IMetricsService>();
7374
connectionManager = gitHubServiceProvider.GetService<IConnectionManager>();
74-
userSettings = gitHubServiceProvider.GetService<IPackageSettings>();
7575
vsservices = gitHubServiceProvider.GetService<IVSServices>();
7676
initialized = true;
7777
}

test/UnitTests/GitHub.VisualStudio/Services/MetricsTests.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class UsageTrackerTests : TestBaseClass
2323
public void ShouldStartTimer()
2424
{
2525
var service = Substitute.For<IUsageService>();
26-
var target = new UsageTracker(CreateServiceProvider(), service);
26+
var target = new UsageTracker(CreateServiceProvider(), service, CreatePackageSettings());
2727

2828
service.Received(1).StartTimer(Arg.Any<Func<Task>>(), TimeSpan.FromMinutes(3), TimeSpan.FromHours(8));
2929
}
@@ -147,7 +147,8 @@ public async Task ShouldIncrementCounter()
147147
var usageService = CreateUsageService(model);
148148
var target = new UsageTracker(
149149
CreateServiceProvider(),
150-
usageService);
150+
usageService,
151+
CreatePackageSettings());
151152

152153
await target.IncrementCounter(x => x.NumberOfClones);
153154
UsageData result = usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData;
@@ -162,7 +163,8 @@ public async Task ShouldWriteData()
162163

163164
var target = new UsageTracker(
164165
CreateServiceProvider(),
165-
service);
166+
service,
167+
CreatePackageSettings());
166168

167169
await target.IncrementCounter(x => x.NumberOfClones);
168170
await service.Received(1).WriteLocalData(Arg.Is<UsageData>(data =>
@@ -196,7 +198,8 @@ public async Task ShouldWriteUpdatedData()
196198

197199
var target = new UsageTracker(
198200
CreateServiceProvider(),
199-
service);
201+
service,
202+
CreatePackageSettings());
200203

201204
await target.IncrementCounter(x => x.NumberOfClones);
202205
await service.Received(1).WriteLocalData(Arg.Is<UsageData>(data =>
@@ -218,7 +221,7 @@ static Tuple<UsageTracker, Func<Task>> CreateTargetAndGetTick(
218221
service.WhenForAnyArgs(x => x.StartTimer(null, new TimeSpan(), new TimeSpan()))
219222
.Do(x => tick = x.ArgAt<Func<Task>>(0));
220223

221-
var target = new UsageTracker(serviceProvider, service);
224+
var target = new UsageTracker(serviceProvider, service, CreatePackageSettings());
222225

223226
return Tuple.Create(target, tick);
224227
}
@@ -228,20 +231,24 @@ static IGitHubServiceProvider CreateServiceProvider(bool hasMetricsService = tru
228231
var result = Substitute.For<IGitHubServiceProvider>();
229232
var connectionManager = Substitute.For<IConnectionManager>();
230233
var metricsService = Substitute.For<IMetricsService>();
231-
var packageSettings = Substitute.For<IPackageSettings>();
232234
var vsservices = Substitute.For<IVSServices>();
233235

234236
connectionManager.Connections.Returns(new ObservableCollectionEx<IConnection>());
235-
packageSettings.CollectMetrics.Returns(true);
236237

237238
result.GetService<IConnectionManager>().Returns(connectionManager);
238-
result.GetService<IPackageSettings>().Returns(packageSettings);
239239
result.GetService<IVSServices>().Returns(vsservices);
240240
result.TryGetService<IMetricsService>().Returns(hasMetricsService ? metricsService : null);
241241

242242
return result;
243243
}
244244

245+
static IPackageSettings CreatePackageSettings()
246+
{
247+
var result = Substitute.For<IPackageSettings>();
248+
result.CollectMetrics.Returns(true);
249+
return result;
250+
}
251+
245252
static IUsageService CreateUsageService(
246253
UsageModel model = null)
247254
{

0 commit comments

Comments
 (0)