From b4482d4533c56a7f2f80745b00b5d16ad915669e Mon Sep 17 00:00:00 2001 From: tombogle Date: Thu, 8 May 2025 18:09:46 -0400 Subject: [PATCH 1/5] SP-2359: Do not crash in constructor if config file cannot be upgraded or saved --- src/DesktopAnalytics/Analytics.cs | 52 ++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/src/DesktopAnalytics/Analytics.cs b/src/DesktopAnalytics/Analytics.cs index ad67489..adf58ad 100644 --- a/src/DesktopAnalytics/Analytics.cs +++ b/src/DesktopAnalytics/Analytics.cs @@ -10,6 +10,7 @@ using System.Net; using System.Reflection; using System.Runtime.InteropServices; +using System.Threading; using System.Xml.Linq; using System.Xml.XPath; using JetBrains.Annotations; @@ -172,9 +173,23 @@ public Analytics(string apiSecret, UserInfo userInfo, Dictionary Date: Fri, 9 May 2025 16:50:51 -0400 Subject: [PATCH 2/5] Update PR.yml to install libssl1.1 --- .github/workflows/PR.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index c0088db..233ebb3 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -1,6 +1,7 @@ on: pull_request: branches: [ master ] + jobs: build: strategy: @@ -14,6 +15,14 @@ jobs: with: fetch-depth: 0 + - name: Install libssl1.1 on Ubuntu + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get update + sudo apt-get install -y wget + wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl1.1/libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb + sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb + - name: Install .NET Core uses: actions/setup-dotnet@77a48bbb85cd3809790223e895ba4b6cbc110fe8 with: @@ -24,4 +33,3 @@ jobs: - name: Test run: dotnet test - From dc021acdd8fdbcc3fb60ff60bc522a2a78a2574e Mon Sep 17 00:00:00 2001 From: tombogle Date: Fri, 9 May 2025 17:35:46 -0400 Subject: [PATCH 3/5] Update PR.yml to install .NET 8 SDK --- .github/workflows/PR.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index 233ebb3..6500288 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -15,18 +15,10 @@ jobs: with: fetch-depth: 0 - - name: Install libssl1.1 on Ubuntu - if: matrix.os == 'ubuntu-latest' - run: | - sudo apt-get update - sudo apt-get install -y wget - wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl1.1/libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb - sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb - - - name: Install .NET Core - uses: actions/setup-dotnet@77a48bbb85cd3809790223e895ba4b6cbc110fe8 + - name: Install .NET SDK + uses: actions/setup-dotnet@v3 with: - dotnet-version: 5.0.x + dotnet-version: '8.0.x' - name: Build run: dotnet build From f4edefcedb5eb11f14ead9bcfdc16546f36cadd2 Mon Sep 17 00:00:00 2001 From: tombogle Date: Fri, 9 May 2025 18:09:39 -0400 Subject: [PATCH 4/5] Do not run unit tests on Ubuntu (requires mono) --- .github/workflows/PR.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index 6500288..c9f109b 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -24,4 +24,5 @@ jobs: run: dotnet build - name: Test + if: runner.os == 'Windows' run: dotnet test From 40fc0f026350ee51da7fabda37e737bfdac5e409 Mon Sep 17 00:00:00 2001 From: tombogle Date: Fri, 9 May 2025 18:10:46 -0400 Subject: [PATCH 5/5] Minor unit test code cleanup --- src/DesktopAnalyticsTests/UserInfoTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/DesktopAnalyticsTests/UserInfoTests.cs b/src/DesktopAnalyticsTests/UserInfoTests.cs index e882693..7263a5c 100644 --- a/src/DesktopAnalyticsTests/UserInfoTests.cs +++ b/src/DesktopAnalyticsTests/UserInfoTests.cs @@ -11,7 +11,7 @@ public class UserInfoTests [Test] public void CreateSanitized_AllFieldsNull_NoChange() { - var orig = new UserInfo() { Email = null, FirstName = null, LastName = null, OtherProperties = null }; + var orig = new UserInfo { Email = null, FirstName = null, LastName = null, OtherProperties = null }; var sanitized = orig.CreateSanitized(); Assert.IsNull(sanitized.Email); Assert.IsNull(sanitized.FirstName); @@ -22,7 +22,7 @@ public void CreateSanitized_AllFieldsNull_NoChange() [Test] public void CreateSanitized_AllFieldsWhitespace_NoChange() { - var orig = new UserInfo() { Email = " ", FirstName = "", LastName = " ", OtherProperties = new AttributeDictionary() }; + var orig = new UserInfo { Email = " ", FirstName = "", LastName = " ", OtherProperties = new AttributeDictionary() }; orig.OtherProperties.Add(" ", " \r\n "); var sanitized = orig.CreateSanitized(); Assert.AreEqual(" ", sanitized.Email); @@ -34,7 +34,7 @@ public void CreateSanitized_AllFieldsWhitespace_NoChange() [Test] public void CreateSanitized_AllFieldsSingleLetter_FirstNameAndLastNameHashed_NoChagneToOtherFields() { - var orig = new UserInfo() { Email = "e", FirstName = "f", LastName = "L", OtherProperties = new AttributeDictionary() }; + var orig = new UserInfo { Email = "e", FirstName = "f", LastName = "L", OtherProperties = new AttributeDictionary() }; orig.OtherProperties.Add("a", "b"); var sanitized = orig.CreateSanitized(); Assert.AreEqual("e", sanitized.Email); @@ -48,7 +48,7 @@ public void CreateSanitized_AllFieldsSingleLetter_FirstNameAndLastNameHashed_NoC [Test] public void CreateSanitized_NormalData_FirstNameAndLastNameHashed_EmailDomainPreserved() { - var orig = new UserInfo() { Email = "Wanda_Finkelstein@gumbyland.org", FirstName = "Wanda", LastName = "Finkelstein", OtherProperties = new AttributeDictionary() }; + var orig = new UserInfo { Email = "Wanda_Finkelstein@gumbyland.org", FirstName = "Wanda", LastName = "Finkelstein", OtherProperties = new AttributeDictionary() }; orig.OtherProperties.Add("Important", "stuff"); var sanitized = orig.CreateSanitized(); Assert.AreEqual("@gumbyland.org", sanitized.Email); @@ -64,7 +64,7 @@ public void CreateSanitized_NormalData_FirstNameAndLastNameHashed_EmailDomainPre [Test] public void CreateSanitized_InvalidEmailAddressMissingDomain_EmailIsAtSign() { - var orig = new UserInfo() { Email = "Buck@", FirstName = "Buck", LastName = "", OtherProperties = new AttributeDictionary() }; + var orig = new UserInfo { Email = "Buck@", FirstName = "Buck", LastName = "", OtherProperties = new AttributeDictionary() }; var sanitized = orig.CreateSanitized(); Assert.AreEqual("@", sanitized.Email); Assert.IsTrue(sanitized.FirstName.StartsWith("B")); @@ -77,7 +77,7 @@ public void CreateSanitized_InvalidEmailAddressMissingDomain_EmailIsAtSign() [Test] public void CreateSanitized_InvalidEmailAddressMultipleAtSigns_EmailIsEverythingAfterFirstAtSign() { - var orig = new UserInfo() { Email = "What@is@this@nonesense@.c.o.m", FirstName = "", LastName = "" }; + var orig = new UserInfo { Email = "What@is@this@nonesense@.c.o.m", FirstName = "", LastName = "" }; var sanitized = orig.CreateSanitized(); Assert.AreEqual("@is@this@nonesense@.c.o.m", sanitized.Email); Assert.AreEqual("", sanitized.FirstName);