Ejemplo n.º 1
0
        public void CreatePayload_ConnectedMode_ServerNotificationsAreSent()
        {
            var binding = CreateConfiguration(SonarLintMode.Connected, "https://sonarcloud.io");

            var telemetryData = new TelemetryData
            {
                ServerNotifications = new ServerNotifications
                {
                    IsDisabled = true,
                    ServerNotificationCounters = new Dictionary <string, ServerNotificationCounter>
                    {
                        { "QUALITY_GATE", new ServerNotificationCounter
                          {
                              ReceivedCount = 22,
                              ClickedCount  = 11
                          } },
                        { "NEW_ISSUES", new ServerNotificationCounter
                          {
                              ReceivedCount = 44,
                              ClickedCount  = 33
                          } }
                    }
                }
            };

            var result = TelemetryHelper.CreatePayload(telemetryData, new DateTimeOffset(), binding, null);

            result.ServerNotifications.Should().NotBeNull();
            result.ServerNotifications.IsDisabled.Should().BeTrue();
            result.ServerNotifications.ServerNotificationCounters["QUALITY_GATE"].ClickedCount.Should().Be(11);
            result.ServerNotifications.ServerNotificationCounters["QUALITY_GATE"].ReceivedCount.Should().Be(22);
            result.ServerNotifications.ServerNotificationCounters["NEW_ISSUES"].ClickedCount.Should().Be(33);
            result.ServerNotifications.ServerNotificationCounters["NEW_ISSUES"].ReceivedCount.Should().Be(44);
        }
        public void CreatePayload_Creates_Payload_Using_SonarCloud()
        {
            // Arrange
            var now = new DateTime(2017, 7, 25, 0, 0, 0, DateTimeKind.Local).AddHours(2);

            var telemetryData = new TelemetryData
            {
                InstallationDate      = now.AddDays(-10),
                IsAnonymousDataShared = true,
                NumberOfDaysOfUse     = 5
            };

            var binding = CreateConfiguration(SonarLintMode.Connected, "https://sonarcloud.io");

            VisualStudioHelpers.VisualStudioVersion = "1.2.3.4";

            // Act
            var result = TelemetryHelper.CreatePayload(
                telemetryData,
                new DateTimeOffset(now),
                binding);

            // Assert
            result.IsUsingConnectedMode.Should().BeTrue();
            result.IsUsingSonarCloud.Should().BeTrue();
            result.NumberOfDaysOfUse.Should().Be(5);
            result.NumberOfDaysSinceInstallation.Should().Be(10);
            result.SonarLintProduct.Should().Be("SonarLint Visual Studio");
            result.SonarLintVersion.Should().Be(
                typeof(TelemetryData).Assembly.GetCustomAttribute <AssemblyFileVersionAttribute>().Version);
            result.VisualStudioVersion.Should().Be("1.2.3.4");
            result.InstallDate.Should().Be(new DateTimeOffset(now.AddDays(-10)));
            result.SystemDate.Should().Be(new DateTimeOffset(now));
        }
        public void CreatePayload_Creates_Payload()
        {
            // Arrange
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate      = now.AddDays(-10),
                IsAnonymousDataShared = true,
                NumberOfDaysOfUse     = 5
            };

            VisualStudioHelpers.VisualStudioVersion = "1.2.3.4";

            // Act
            var result = TelemetryHelper.CreatePayload(
                telemetryData,
                new DateTimeOffset(now, TimeSpan.FromHours(2)),
                isConnected: true);

            // Assert
            result.IsUsingConnectedMode.Should().BeTrue();
            result.NumberOfDaysOfUse.Should().Be(5);
            result.NumberOfDaysSinceInstallation.Should().Be(10);
            result.SonarLintProduct.Should().Be("SonarLint Visual Studio");
            result.SonarLintVersion.Should().Be(
                typeof(TelemetryData).Assembly.GetCustomAttribute <AssemblyFileVersionAttribute>().Version);
            result.VisualStudioVersion.Should().Be("1.2.3.4");
            result.InstallDate.Should().Be(new DateTimeOffset(now.AddDays(-10), TimeSpan.FromHours(2)));
            result.SystemDate.Should().Be(new DateTimeOffset(now, TimeSpan.FromHours(2)));
        }
        public void CreatePayload_InvalidArg_Throws()
        {
            Action action = () => TelemetryHelper.CreatePayload(null, DateTimeOffset.Now, BindingConfiguration.Standalone);

            action.Should().ThrowExactly <ArgumentNullException>().And.ParamName.Should().Be("telemetryData");

            action = () => TelemetryHelper.CreatePayload(new TelemetryData(), DateTimeOffset.Now, null);
            action.Should().ThrowExactly <ArgumentNullException>().And.ParamName.Should().Be("bindingConfiguration");
        }
Ejemplo n.º 5
0
        public void CreatePayload_VsVersionIsNull_NullVsVersionInformation()
        {
            var binding = CreateConfiguration(SonarLintMode.Connected, "https://sonarcloud.io");

            var result = TelemetryHelper.CreatePayload(
                new TelemetryData(),
                new DateTimeOffset(),
                binding,
                null);

            result.VisualStudioVersionInformation.Should().BeNull();
        }
Ejemplo n.º 6
0
        public void CreatePayload_NumberOfDaysSinceInstallation_On_InstallationDate()
        {
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate = now.Subtract(new TimeSpan(23, 59, 59)) // Less than a day
            };

            var result = TelemetryHelper.CreatePayload(telemetryData, now, isConnected: true);

            result.NumberOfDaysSinceInstallation.Should().Be(0);
        }
Ejemplo n.º 7
0
        public void CreatePayload_NumberOfDaysSinceInstallation_Day_After_InstallationDate()
        {
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate = now.AddDays(-1)
            };

            var result = TelemetryHelper.CreatePayload(telemetryData, now, isConnected: true);

            result.NumberOfDaysSinceInstallation.Should().Be(1);
        }
Ejemplo n.º 8
0
        public void CreatePayload_StandaloneMode_ServerNotificationsAreNotSent()
        {
            var binding = BindingConfiguration.Standalone;

            var telemetryData = new TelemetryData
            {
                ServerNotifications = new ServerNotifications {
                    IsDisabled = false
                }
            };

            var result = TelemetryHelper.CreatePayload(telemetryData, new DateTimeOffset(), binding, null);

            result.ServerNotifications.Should().BeNull();
        }
        public void CreatePayload_NumberOfDaysSinceInstallation_Day_After_InstallationDate()
        {
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate = now.AddDays(-1)
            };

            var binding = CreateConfiguration(SonarLintMode.Connected, "http://localhost");

            var result = TelemetryHelper.CreatePayload(telemetryData, now, binding);

            result.NumberOfDaysSinceInstallation.Should().Be(1);
        }
        public void CreatePayload_NumberOfDaysSinceInstallation_On_InstallationDate()
        {
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate = now.Subtract(new TimeSpan(23, 59, 59)) // Less than a day
            };

            var binding = CreateConfiguration(SonarLintMode.LegacyConnected, "http://localhost");

            var result = TelemetryHelper.CreatePayload(telemetryData, now, binding);

            result.NumberOfDaysSinceInstallation.Should().Be(0);
        }
        public void CreatePayload_NotConnected()
        {
            // Arrange
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate = now.Subtract(new TimeSpan(10, 0, 0))
            };

            // Act
            var result = TelemetryHelper.CreatePayload(telemetryData, now, BindingConfiguration.Standalone);

            // Assert
            result.IsUsingConnectedMode.Should().BeFalse();
            result.IsUsingSonarCloud.Should().BeFalse();
        }
        public void CreatePayload_Connected_But_Not_Using_SonarCloud()
        {
            // Arrange
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate = now.Subtract(new TimeSpan(10, 0, 0))
            };

            var binding = CreateConfiguration(SonarLintMode.Connected, "http://localhost");

            // Act
            var result = TelemetryHelper.CreatePayload(telemetryData, now, binding);

            // Assert
            result.IsUsingConnectedMode.Should().BeTrue();
            result.IsUsingSonarCloud.Should().BeFalse();
        }
Ejemplo n.º 13
0
        public void CreatePayload_Creates_Payload_ReturnsCorrectProductAndDates()
        {
            // Arrange
            var now = new DateTime(2017, 7, 25, 0, 0, 0, DateTimeKind.Local).AddHours(2);

            var telemetryData = new TelemetryData
            {
                InstallationDate      = now.AddDays(-10),
                IsAnonymousDataShared = true,
                NumberOfDaysOfUse     = 5,
                ShowHotspot           = new ShowHotspot {
                    NumberOfRequests = 11
                },
                TaintVulnerabilities = new TaintVulnerabilities {
                    NumberOfIssuesInvestigatedRemotely = 44, NumberOfIssuesInvestigatedLocally = 55
                }
            };

            var binding = CreateConfiguration(SonarLintMode.Connected, "https://sonarcloud.io");

            VisualStudioHelpers.VisualStudioVersion = "1.2.3.4";

            // Act
            var result = TelemetryHelper.CreatePayload(
                telemetryData,
                new DateTimeOffset(now),
                binding,
                null);

            // Assert
            result.NumberOfDaysOfUse.Should().Be(5);
            result.NumberOfDaysSinceInstallation.Should().Be(10);
            result.SonarLintProduct.Should().Be("SonarLint Visual Studio");
            result.SonarLintVersion.Should().Be(
                typeof(TelemetryData).Assembly.GetCustomAttribute <AssemblyFileVersionAttribute>().Version);
            result.VisualStudioVersion.Should().Be("1.2.3.4");
            result.InstallDate.Should().Be(new DateTimeOffset(now.AddDays(-10)));
            result.SystemDate.Should().Be(new DateTimeOffset(now));
            result.ShowHotspot.NumberOfRequests.Should().Be(11);
            result.TaintVulnerabilities.NumberOfIssuesInvestigatedRemotely.Should().Be(44);
            result.TaintVulnerabilities.NumberOfIssuesInvestigatedLocally.Should().Be(55);
        }
Ejemplo n.º 14
0
        public void CreatePayload_ReturnsCorrectConnectionData(SonarLintMode mode, string serverUrl,
                                                               bool expectedIsConnected, bool expectedIsLegacyConnected, bool expectedIsSonarCloud)
        {
            // Arrange
            var now           = new DateTime(2017, 7, 25);
            var telemetryData = new TelemetryData
            {
                InstallationDate = now.Subtract(new TimeSpan(10, 0, 0))
            };

            var binding = CreateConfiguration(mode, serverUrl);

            // Act
            var result = TelemetryHelper.CreatePayload(telemetryData, now, binding, null);

            // Assert
            result.IsUsingConnectedMode.Should().Be(expectedIsConnected);
            result.IsUsingLegacyConnectedMode.Should().Be(expectedIsLegacyConnected);
            result.IsUsingSonarCloud.Should().Be(expectedIsSonarCloud);
        }
Ejemplo n.º 15
0
        public void CreatePayload_VsVersionIsNotNull_VsVersionInformation()
        {
            var vsVersion = new Mock <IVsVersion>();

            vsVersion.Setup(x => x.DisplayName).Returns("Visual Studio Enterprise 2019");
            vsVersion.Setup(x => x.InstallationVersion).Returns("16.9.30914.41");
            vsVersion.Setup(x => x.DisplayVersion).Returns("16.9.0 Preview 3.0");

            var binding = CreateConfiguration(SonarLintMode.Connected, "https://sonarcloud.io");

            // Act
            var result = TelemetryHelper.CreatePayload(
                new TelemetryData(),
                new DateTimeOffset(),
                binding,
                vsVersion.Object);

            result.VisualStudioVersionInformation.Should().NotBeNull();
            result.VisualStudioVersionInformation.DisplayName.Should().Be("Visual Studio Enterprise 2019");
            result.VisualStudioVersionInformation.InstallationVersion.Should().Be("16.9.30914.41");
            result.VisualStudioVersionInformation.DisplayVersion.Should().Be("16.9.0 Preview 3.0");
        }
Ejemplo n.º 16
0
        public void CreatePayload_Creates_Payload()
        {
            var now = new DateTime(2017, 7, 25);

            var telemetryData = new TelemetryData
            {
                InstallationDate      = now.AddDays(-10),
                IsAnonymousDataShared = true,
                NumberOfDaysOfUse     = 5
            };

            var result = TelemetryHelper.CreatePayload(telemetryData, now, isConnected: true);

            result.IsUsingConnectedMode.Should().BeTrue();
            result.NumberOfDaysOfUse.Should().Be(5);
            result.NumberOfDaysSinceInstallation.Should().Be(10);
            result.SonarLintProduct.Should().Be("SonarLint Visual Studio");
            result.SonarLintVersion.Should().Be(
                typeof(TelemetryData).Assembly.GetCustomAttribute <AssemblyFileVersionAttribute>().Version);

            // Cannot test result.VisualStudioVersion because it is string.Empty when running tests
        }
        public void CreatePayload_IncludesAnalyses()
        {
            var telemetryData = new TelemetryData
            {
                Analyses = new []
                {
                    new Analysis {
                        Language = "cs"
                    },
                    new Analysis {
                        Language = "vbnet"
                    }
                }.ToList()
            };

            var binding = CreateConfiguration(SonarLintMode.Connected, "http://localhost");

            var result = TelemetryHelper.CreatePayload(telemetryData, new DateTime(2017, 7, 25), binding);

            result.Analyses.Count.Should().Be(2);
            result.Analyses[0].Language.Should().Be("cs");
            result.Analyses[1].Language.Should().Be("vbnet");
        }