Esempio n. 1
0
        public async Task ShouldWriteUpdatedData()
        {
            var model = UsageModel.Create(Guid.NewGuid());

            //model.Dimensions.AppVersion = AssemblyVersionInformation.Version;
            model.Dimensions.Lang         = CultureInfo.InstalledUICulture.IetfLanguageTag;
            model.Dimensions.CurrentLang  = CultureInfo.CurrentCulture.IetfLanguageTag;
            model.Measures.NumberOfClones = 1;
            var service = CreateUsageService(model);

            var target = new UsageTracker(
                CreateServiceProvider(),
                service,
                CreatePackageSettings(),
                new JoinableTaskContext(),
                vsTelemetry: false);

            await target.IncrementCounter(x => x.NumberOfClones);

            await service.Received(1).WriteLocalData(Arg.Is <UsageData>(data =>
                                                                        data.Reports.Count == 1 &&
                                                                        data.Reports[0].Dimensions.Date.Date == DateTimeOffset.Now.Date &&
                                                                        //data.Reports[0].Dimensions.AppVersion == AssemblyVersionInformation.Version &&
                                                                        data.Reports[0].Dimensions.Lang == CultureInfo.InstalledUICulture.IetfLanguageTag &&
                                                                        data.Reports[0].Dimensions.CurrentLang == CultureInfo.CurrentCulture.IetfLanguageTag &&
                                                                        data.Reports[0].Measures.NumberOfClones == 2
                                                                        ));
        }
Esempio n. 2
0
        async Task <UsageModel> GetCurrentReport(UsageData data)
        {
            var current = data.Reports.FirstOrDefault(x => x.Dimensions.Date.Date == DateTimeOffset.Now.Date);

            if (current == null)
            {
                var guid = await service.GetUserGuid();

                current = UsageModel.Create(guid);
                data.Reports.Add(current);
            }

            current.Dimensions.Lang        = CultureInfo.InstalledUICulture.IetfLanguageTag;
            current.Dimensions.CurrentLang = CultureInfo.CurrentCulture.IetfLanguageTag;
            current.Dimensions.AppVersion  = AssemblyVersionInformation.Version;
            current.Dimensions.VSVersion   = vsservices.VSVersion;

            if (connectionManager.Connections.Any(x => x.HostAddress.IsGitHubDotCom()))
            {
                current.Dimensions.IsGitHubUser = true;
            }

            if (connectionManager.Connections.Any(x => !x.HostAddress.IsGitHubDotCom()))
            {
                current.Dimensions.IsEnterpriseUser = true;
            }

            return(current);
        }
Esempio n. 3
0
        public async Task FirstTickShouldIncrementLaunchCount()
        {
            var service       = CreateUsageService(UsageModel.Create(Guid.NewGuid()));
            var targetAndTick = CreateTargetAndGetTick(CreateServiceProvider(), service);

            await targetAndTick.Item2();

            await service.Received(1).WriteLocalData(Arg.Any <UsageData>());
        }
Esempio n. 4
0
        public async Task TickShouldNotSendDataIfSameDay()
        {
            var serviceProvider = CreateServiceProvider();
            var targetAndTick   = CreateTargetAndGetTick(
                serviceProvider,
                CreateUsageService(UsageModel.Create(Guid.NewGuid())));

            await targetAndTick.Item2();

            var metricsService = serviceProvider.TryGetService <IMetricsService>();
            await metricsService.DidNotReceive().PostUsage(Arg.Any <UsageModel>());
        }
Esempio n. 5
0
        public async Task SubsequentTickShouldNotIncrementLaunchCount()
        {
            var service       = CreateUsageService(UsageModel.Create(Guid.NewGuid()));
            var targetAndTick = CreateTargetAndGetTick(CreateServiceProvider(), service);

            await targetAndTick.Item2();

            service.ClearReceivedCalls();
            await targetAndTick.Item2();

            await service.DidNotReceiveWithAnyArgs().WriteLocalData(null);
        }
        public async Task UpdatesMetricsWhenRepositoryClonedAsync(string cloneUrl, int numberOfCalls, string counterName)
        {
            var vsGitServices = Substitute.For <IVSGitServices>();
            var usageTracker  = Substitute.For <IUsageTracker>();
            var cloneService  = CreateRepositoryCloneService(vsGitServices: vsGitServices, usageTracker: usageTracker);

            await cloneService.CloneRepository(cloneUrl, @"c:\dev\bar");

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }
        public async Task UpdatesMetricsWhenDefaultClonePath(string targetPath, string defaultPath, int numberOfCalls, string counterName)
        {
            var vsGitServices = Substitute.For <IVSGitServices>();

            vsGitServices.GetLocalClonePathFromGitProvider().Returns(defaultPath);
            var usageTracker = Substitute.For <IUsageTracker>();
            var cloneService = CreateRepositoryCloneService(usageTracker: usageTracker, vsGitServices: vsGitServices);

            await cloneService.CloneRepository("https://github.com/foo/bar", targetPath);

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }
Esempio n. 8
0
        public async Task TickShouldSendDataIfDifferentDay()
        {
            var model = UsageModel.Create(Guid.NewGuid());

            model.Dimensions.Date = DateTimeOffset.Now.AddDays(-2);

            var serviceProvider = CreateServiceProvider();
            var targetAndTick   = CreateTargetAndGetTick(
                serviceProvider,
                CreateUsageService(model));

            await targetAndTick.Item2();

            var metricsService = serviceProvider.TryGetService <IMetricsService>();
            await metricsService.Received(1).PostUsage(Arg.Any <UsageModel>());
        }
Esempio n. 9
0
        public async Task ShouldDisposeTimerIfMetricsServiceNotFound()
        {
            var service    = CreateUsageService(UsageModel.Create(Guid.NewGuid()));
            var disposed   = false;
            var disposable = Disposable.Create(() => disposed = true);

            service.StartTimer(null, new TimeSpan(), new TimeSpan()).ReturnsForAnyArgs(disposable);

            var targetAndTick = CreateTargetAndGetTick(
                CreateServiceProvider(hasMetricsService: false),
                service);

            await targetAndTick.Item2();

            Assert.True(disposed);
        }
Esempio n. 10
0
        public async Task UpdatesMetricsWhenRepositoryClonedAsync()
        {
            var serviceProvider = Substitutes.ServiceProvider;
            var operatingSystem = serviceProvider.GetOperatingSystem();
            var vsGitServices   = serviceProvider.GetVSGitServices();
            var usageTracker    = Substitute.For <IUsageTracker>();
            var cloneService    = new RepositoryCloneService(operatingSystem, vsGitServices, usageTracker);

            await cloneService.CloneRepository("https://github.com/foo/bar", "bar", @"c:\dev");

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received().IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == nameof(model.Measures.NumberOfClones)));
        }
        public async Task UpdatesMetricsWhenRepositoryClonedAsync(string cloneUrl, int numberOfCalls, string counterName)
        {
            var serviceProvider = Substitutes.ServiceProvider;
            var operatingSystem = serviceProvider.GetOperatingSystem();
            var vsGitServices   = serviceProvider.GetVSGitServices();
            var graphqlFactory  = Substitute.For <IGraphQLClientFactory>();
            var usageTracker    = Substitute.For <IUsageTracker>();
            var cloneService    = new RepositoryCloneService(operatingSystem, vsGitServices, graphqlFactory, usageTracker);

            await cloneService.CloneRepository(cloneUrl, @"c:\dev\bar");

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }
Esempio n. 12
0
        async Task Send()
        {
            var uri    = new Uri("http://localhost:40000");
            var server = new MetricsServer.Server(uri.Host, uri.Port);

            server.Start();

            var client = new HttpClient();

            client.DefaultRequestHeaders
            .Accept
            .Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var request = new HttpRequestMessage(HttpMethod.Post, new Uri(uri, "/api/usage/visualstudio"));

            var model = UsageModel.Create(Guid.NewGuid());

            model.Dimensions.AppVersion     = "9.9.9";
            model.Dimensions.Lang           = "en-us";
            model.Dimensions.VSVersion      = "14";
            model.Measures.NumberOfStartups = 1;

            var data = new UsageData();

            data.Reports = new List <UsageModel> {
                model
            };

            request.Content = SerializeRequest(model);

            HttpResponseMessage response = null;

            try
            {
                response = await client.SendAsync(request);
            }
            catch (Exception ex)
            {
                Debugger.Break();
            }
            var ret = await response.Content.ReadAsStringAsync();

            Console.WriteLine(response.ToString());
            Console.WriteLine(ret);

            server.Stop();
        }
Esempio n. 13
0
        public async Task ShouldIncrementCounter()
        {
            var model = UsageModel.Create(Guid.NewGuid());

            model.Measures.NumberOfClones = 4;
            var usageService = CreateUsageService(model);
            var target       = new UsageTracker(
                CreateServiceProvider(),
                usageService,
                CreatePackageSettings());

            await target.IncrementCounter(x => x.NumberOfClones);

            UsageData result = usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData;

            Assert.AreEqual(5, result.Reports[0].Measures.NumberOfClones);
        }
        public async Task UpdatesMetricsWhenDefaultClonePath(string targetPath, string defaultPath, int numberOfCalls, string counterName)
        {
            var serviceProvider      = Substitutes.ServiceProvider;
            var operatingSystem      = serviceProvider.GetOperatingSystem();
            var vsGitServices        = serviceProvider.GetVSGitServices();
            var teamExplorerServices = Substitute.For <ITeamExplorerServices>();

            vsGitServices.GetLocalClonePathFromGitProvider().Returns(defaultPath);
            var graphqlFactory = Substitute.For <IGraphQLClientFactory>();
            var usageTracker   = Substitute.For <IUsageTracker>();
            var cloneService   = new RepositoryCloneService(operatingSystem, vsGitServices, teamExplorerServices,
                                                            graphqlFactory, usageTracker);

            await cloneService.CloneRepository("https://github.com/foo/bar", targetPath);

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }
Esempio n. 15
0
        async Task <UsageModel> GetCurrentReport(UsageData data)
        {
            var current = data.Reports.FirstOrDefault(x => x.Dimensions.Date.Date == DateTimeOffset.Now.Date);

            if (current == null)
            {
                var guid = await service.GetUserGuid();

                current = UsageModel.Create(guid);
                data.Reports.Add(current);
            }

            current.Dimensions.Lang          = CultureInfo.InstalledUICulture.IetfLanguageTag;
            current.Dimensions.CurrentLang   = CultureInfo.CurrentCulture.IetfLanguageTag;
            current.Dimensions.CurrentUILang = CultureInfo.CurrentUICulture.IetfLanguageTag;
            current.Dimensions.AppVersion    = ExtensionInformation.Version;
            current.Dimensions.VSVersion     = vsservices.VSVersion;

            current.Dimensions.IsGitHubUser     = IsGitHubUser;
            current.Dimensions.IsEnterpriseUser = IsEnterpriseUser;
            return(current);
        }
Esempio n. 16
0
        public async Task InvalidAppVersion()
        {
            var request = new HttpRequestMessage(HttpMethod.Post, new Uri(uri, "/api/usage/visualstudio"));
            var data    = new UsageData();

            data.Reports = new List <UsageModel> {
                UsageModel.Create(Guid.NewGuid())
            };
            var model = data.Reports[0];

            model.Dimensions.AppVersion     = "nope";
            model.Dimensions.Lang           = "en-us";
            model.Dimensions.VSVersion      = "14";
            model.Measures.NumberOfStartups = 1;

            request.Content = GitHub.Services.MetricsService.SerializeRequest(model);

            HttpResponseMessage response = null;

            Assert.DoesNotThrowAsync(async() => response = await client.SendAsync(request));
            var ret = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.InternalServerError, response.StatusCode);
        }