From a786f5d8815e6af81080056b0c5404ad08a58d33 Mon Sep 17 00:00:00 2001 From: Siddharth Singha Roy Date: Tue, 12 Nov 2024 20:21:24 +0530 Subject: [PATCH 1/3] fix(playwrighttesting): use runsetting defaults in GetConnectOptionsAsync --- .../src/PlaywrightServiceNUnit.cs | 4 +- .../src/Constants.cs | 11 +- .../src/Implementation/BlobService.cs | 1 - .../src/Implementation/ServiceClient.cs | 1 + .../src/PlaywrightReporter.cs | 2 - .../src/PlaywrightService.cs | 66 ++++++----- .../src/Processor/TestProcessor.cs | 4 - .../src/Utility/CiInfoProvider.cs | 1 - .../src/Utility/ReporterUtils.cs | 1 - .../tests/Implementation/BlobServiceTests.cs | 2 - .../CloudRunErrorParserTests.cs | 2 - .../tests/Model/CloudRunMetadataTests.cs | 1 - .../tests/PlaywrightServiceTests.cs | 103 +++++++++++++++++- 13 files changed, 149 insertions(+), 50 deletions(-) diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/src/PlaywrightServiceNUnit.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/src/PlaywrightServiceNUnit.cs index 4212181a9245..ddcee9697806 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/src/PlaywrightServiceNUnit.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/src/PlaywrightServiceNUnit.cs @@ -67,11 +67,11 @@ public void Teardown() { return null; } - else if (os!.Equals("Windows", System.StringComparison.OrdinalIgnoreCase)) + else if (os!.Equals("Windows", StringComparison.OrdinalIgnoreCase)) { return OSPlatform.Windows; } - else if (os.Equals("Linux", System.StringComparison.OrdinalIgnoreCase)) + else if (os.Equals("Linux", StringComparison.OrdinalIgnoreCase)) { return OSPlatform.Linux; } diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs index 6eee7b7d13f3..e946aafa955c 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Utility; using System.Collections.Generic; using System.Text.RegularExpressions; @@ -212,9 +211,9 @@ internal class Constants internal static readonly string s_workspace_mismatch_error = "The provided access token does not match the specified workspace URL. Please verify that both values are correct."; internal static readonly string s_invalid_service_endpoint_error_message = "The service endpoint provided is invalid. Please verify the endpoint URL and try again."; - internal static readonly string s_playwright_service_disable_scalable_execution_environment_variable = "PLAYWRIGHT_SERVICE_DISABLE_SCALABLE_EXECUTION"; - internal static readonly string s_playwright_service_reporting_url_environment_variable = "PLAYWRIGHT_SERVICE_REPORTING_URL"; - internal static readonly string s_playwright_service_workspace_id_environment_variable = "PLAYWRIGHT_SERVICE_WORKSPACE_ID"; + internal static readonly string s_playwright_service_disable_scalable_execution_environment_variable = "_MPT_DISABLE_SCALABLE_EXECUTION"; + internal static readonly string s_playwright_service_reporting_url_environment_variable = "_MPT_REPORTING_URL"; + internal static readonly string s_playwright_service_workspace_id_environment_variable = "_MPT_WORKSPACE_ID"; } internal class OSConstants @@ -234,8 +233,8 @@ internal class ReporterConstants internal static readonly string s_reportingRoute = "/runs/"; internal static readonly string s_reportingAPIVersion_2024_04_30_preview = "2024-04-30-preview"; internal static readonly string s_reportingAPIVersion_2024_05_20_preview = "2024-05-20-preview"; - internal static readonly string s_pLAYWRIGHT_SERVICE_REPORTING_URL = "PLAYWRIGHT_SERVICE_REPORTING_URL"; - internal static readonly string s_pLAYWRIGHT_SERVICE_WORKSPACE_ID = "PLAYWRIGHT_SERVICE_WORKSPACE_ID"; + internal static readonly string s_pLAYWRIGHT_SERVICE_REPORTING_URL = "_MPT_REPORTING_URL"; + internal static readonly string s_pLAYWRIGHT_SERVICE_WORKSPACE_ID = "_MPT_WORKSPACE_ID"; internal static readonly string s_aPPLICATION_JSON = "application/json"; internal static readonly string s_cONFLICT_409_ERROR_MESSAGE = "Test run with id {runId} already exists. Provide a unique run id."; internal static readonly string s_cONFLICT_409_ERROR_MESSAGE_KEY = "DuplicateRunId"; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/BlobService.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/BlobService.cs index 6c0613f15d26..84fca07cda2d 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/BlobService.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/BlobService.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System; -using System.Collections.Generic; using System.Text; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Interface; using Azure.Storage.Blobs; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/ServiceClient.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/ServiceClient.cs index 1d4f423da5f4..a2aef1df8196 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/ServiceClient.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Implementation/ServiceClient.cs @@ -1,5 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + using System; using Azure.Core.Serialization; using Azure.Core; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs index 670b5a5aa1bf..30b4441965fa 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs @@ -6,14 +6,12 @@ using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; -using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities; using System; using System.Collections.Generic; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Interface; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Implementation; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Processor; using Microsoft.IdentityModel.JsonWebTokens; -using Microsoft.IdentityModel.Tokens; namespace Azure.Developer.MicrosoftPlaywrightTesting.TestLogger; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs index 76633de822ba..70d68bdfbb1b 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs @@ -37,6 +37,10 @@ public class PlaywrightService /// public static string? ServiceEndpoint => Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceUri); + internal string? Os { get; set; } + internal string? RunId { get; set; } + internal string? ExposeNetwork { get; set; } + private readonly EntraLifecycle? _entraLifecycle; private readonly JsonWebTokenHandler? _jsonWebTokenHandler; @@ -99,9 +103,9 @@ internal PlaywrightService(OSPlatform? os = null, string? runId = null, string? throw new Exception(Constants.s_service_endpoint_removed_since_scalable_execution_disabled_error_message); if (string.IsNullOrEmpty(ServiceEndpoint)) throw new Exception(Constants.s_no_service_endpoint_error_message); - string _serviceOs = Uri.EscapeDataString(getServiceCompatibleOs(os) ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs) ?? Constants.s_default_os); - string _runId = Uri.EscapeDataString(runId ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId) ?? GetDefaultRunId()); - string _exposeNetwork = exposeNetwork ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork) ?? Constants.s_default_expose_network; + string _serviceOs = Uri.EscapeDataString(getServiceCompatibleOs(os) ?? Os ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs) ?? Constants.s_default_os); + string _runId = Uri.EscapeDataString(runId ?? RunId ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId) ?? GetDefaultRunId()); + string _exposeNetwork = exposeNetwork ?? ExposeNetwork ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork) ?? Constants.s_default_expose_network; string wsEndpoint = $"{ServiceEndpoint}?os={_serviceOs}&runId={_runId}&api-version={Constants.s_api_version}"; @@ -153,9 +157,9 @@ public async Task InitializeAsync(CancellationToken cancellationToken = default) ValidateMptPAT(); return; } - await _entraLifecycle!.FetchEntraIdAccessTokenAsync(cancellationToken).ConfigureAwait(false); - RotationTimer = new Timer(RotationHandlerAsync, null, TimeSpan.FromMinutes(Constants.s_entra_access_token_rotation_interval_period_in_minutes), TimeSpan.FromMinutes(Constants.s_entra_access_token_rotation_interval_period_in_minutes)); - } + await _entraLifecycle!.FetchEntraIdAccessTokenAsync(cancellationToken).ConfigureAwait(false); + RotationTimer = new Timer(RotationHandlerAsync, null, TimeSpan.FromMinutes(Constants.s_entra_access_token_rotation_interval_period_in_minutes), TimeSpan.FromMinutes(Constants.s_entra_access_token_rotation_interval_period_in_minutes)); + } /// /// Cleans up the resources used to setup entra id authentication. @@ -187,15 +191,23 @@ private void InitializePlaywrightServiceEnvironmentVariables(string? os = null, } if (!string.IsNullOrEmpty(os)) { - Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, os); + Os = os; + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs))) + { + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, os); + } } - else + else if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs))) { Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, Constants.s_default_os); } if (!string.IsNullOrEmpty(runId)) { - Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId, runId); + RunId = runId; + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId))) + { + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId, runId); + } } else { @@ -203,9 +215,13 @@ private void InitializePlaywrightServiceEnvironmentVariables(string? os = null, } if (!string.IsNullOrEmpty(exposeNetwork)) { - Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, exposeNetwork); + ExposeNetwork = exposeNetwork; + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork))) + { + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, exposeNetwork); + } } - else + else if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork))) { Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, Constants.s_default_expose_network); } @@ -244,20 +260,20 @@ internal static void SetReportingUrlAndWorkspaceId() private void ValidateMptPAT() { - string authToken = GetAuthToken()!; - if (string.IsNullOrEmpty(authToken)) - throw new Exception(Constants.s_no_auth_error); - JsonWebToken jsonWebToken = _jsonWebTokenHandler!.ReadJsonWebToken(authToken) ?? throw new Exception(Constants.s_invalid_mpt_pat_error); - var tokenWorkspaceId = jsonWebToken.Claims.FirstOrDefault(c => c.Type == "aid")?.Value; - Match match = Regex.Match(ServiceEndpoint, @"wss://(?[\w-]+)\.api\.(?playwright(?:-test|-int)?\.io|playwright\.microsoft\.com)/accounts/(?[\w-]+)/"); - if (!match.Success) - throw new Exception(Constants.s_invalid_service_endpoint_error_message); - var serviceEndpointWorkspaceId = match.Groups["workspaceId"].Value; - if (tokenWorkspaceId != serviceEndpointWorkspaceId) - throw new Exception(Constants.s_workspace_mismatch_error); - var expiry = (long)(jsonWebToken.ValidTo - new DateTime(1970, 1, 1)).TotalSeconds; - if (expiry <= DateTimeOffset.UtcNow.ToUnixTimeSeconds()) - throw new Exception(Constants.s_expired_mpt_pat_error); + string authToken = GetAuthToken()!; + if (string.IsNullOrEmpty(authToken)) + throw new Exception(Constants.s_no_auth_error); + JsonWebToken jsonWebToken = _jsonWebTokenHandler!.ReadJsonWebToken(authToken) ?? throw new Exception(Constants.s_invalid_mpt_pat_error); + var tokenWorkspaceId = jsonWebToken.Claims.FirstOrDefault(c => c.Type == "aid")?.Value; + Match match = Regex.Match(ServiceEndpoint, @"wss://(?[\w-]+)\.api\.(?playwright(?:-test|-int)?\.io|playwright\.microsoft\.com)/accounts/(?[\w-]+)/"); + if (!match.Success) + throw new Exception(Constants.s_invalid_service_endpoint_error_message); + var serviceEndpointWorkspaceId = match.Groups["workspaceId"].Value; + if (tokenWorkspaceId != serviceEndpointWorkspaceId) + throw new Exception(Constants.s_workspace_mismatch_error); + var expiry = (long)(jsonWebToken.ValidTo - new DateTime(1970, 1, 1)).TotalSeconds; + if (expiry <= DateTimeOffset.UtcNow.ToUnixTimeSeconds()) + throw new Exception(Constants.s_expired_mpt_pat_error); } private string? getServiceCompatibleOs(OSPlatform? oSPlatform) diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Processor/TestProcessor.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Processor/TestProcessor.cs index 06af415402f6..1265393dd061 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Processor/TestProcessor.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Processor/TestProcessor.cs @@ -5,15 +5,11 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; -using System.Text; using System.Text.Json; -using System.Threading.Tasks; -using Azure.Core.Pipeline; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Implementation; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Interface; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Model; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Utility; -using Azure.Storage.Blobs; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/CiInfoProvider.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/CiInfoProvider.cs index 39cd836f0264..7987c5829947 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/CiInfoProvider.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/CiInfoProvider.cs @@ -4,7 +4,6 @@ using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Implementation; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Interface; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Model; -using System; namespace Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Utility; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/ReporterUtils.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/ReporterUtils.cs index 40390871d682..5d7e3f4fc7af 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/ReporterUtils.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Utility/ReporterUtils.cs @@ -3,7 +3,6 @@ using System; using System.Diagnostics; -using System.IO; using System.Linq; using System.Security.Cryptography; using System.Threading.Tasks; diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/BlobServiceTests.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/BlobServiceTests.cs index b3c0de7e2f3a..37df3b698c40 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/BlobServiceTests.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/BlobServiceTests.cs @@ -1,12 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System.Text; using System.Threading.Tasks; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Implementation; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Interface; using Moq; -using NUnit.Framework; namespace Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Tests.Implementation { diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/CloudRunErrorParserTests.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/CloudRunErrorParserTests.cs index f9235f972283..261b28ee17d8 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/CloudRunErrorParserTests.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Implementation/CloudRunErrorParserTests.cs @@ -1,10 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System.Text.RegularExpressions; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Implementation; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Interface; -using Microsoft.Extensions.FileSystemGlobbing.Internal; using Moq; namespace Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Tests.Implementation diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Model/CloudRunMetadataTests.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Model/CloudRunMetadataTests.cs index dfd7b5481853..844bdbcb8930 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Model/CloudRunMetadataTests.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/Model/CloudRunMetadataTests.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System; using Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Model; namespace Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.Tests.Model diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs index e226edb132ba..66c5bca3cca3 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs @@ -65,28 +65,34 @@ public void Constructor_NoServiceParams_SetsDefaultValues() Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId), Is.Not.Null); Assert.That(playwrightService.ServiceAuth, Is.EqualTo(ServiceAuthType.EntraId)); Assert.That(playwrightService.UseCloudHostedBrowsers, Is.True); + Assert.IsNull(playwrightService.Os); + Assert.IsNull(playwrightService.ExposeNetwork); + Assert.IsNull(playwrightService.RunId); }); } [Test] public void Constructor_PassServiceOS_SetsServiceOS() { - _ = new PlaywrightService(os: OSPlatform.Windows, entraLifecycle: null); + var playwrightService = new PlaywrightService(os: OSPlatform.Windows, entraLifecycle: null); Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs), Is.EqualTo(ServiceOs.Windows)); + Assert.That(playwrightService.Os, Is.EqualTo(ServiceOs.Windows)); } [Test] public void Constructor_PassExposeNetwork_SetsExposeNetwork() { - _ = new PlaywrightService(exposeNetwork: "new-expose", entraLifecycle: null); + var playwrightService = new PlaywrightService(exposeNetwork: "new-expose", entraLifecycle: null); Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork), Is.EqualTo("new-expose")); + Assert.That(playwrightService.ExposeNetwork, Is.EqualTo("new-expose")); } [Test] public void Constructor_PassRunId_SetsRunId() { - _ = new PlaywrightService(runId: "new-run-id", entraLifecycle: null); + var playwrightService = new PlaywrightService(runId: "new-run-id", entraLifecycle: null); Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId), Is.EqualTo("new-run-id")); + Assert.That(playwrightService.RunId, Is.EqualTo("new-run-id")); } [Test] @@ -118,6 +124,22 @@ public void Constructor_PassUseCloudHostedBrowsersAsTrue_SetsDisableScalableExec }); } + [Test] + public void Constructor_PlaywrightServiceOSEnvironmentVariableIsSet_DoesNotUpdateTheEnvironmentVariableWithDefault() + { + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, ServiceOs.Windows); + _ = new PlaywrightService(entraLifecycle: null); + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs), Is.EqualTo(ServiceOs.Windows)); + } + + [Test] + public void Constructor_PlaywrightServiceExposeNetworkEnvironmentVariableIsSet_DoesNotUpdateTheEnvironmentVariableWithDefault() + { + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, "new-expose"); + _ = new PlaywrightService(entraLifecycle: null); + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork), Is.EqualTo("new-expose")); + } + [Test] public void Initialize_WhenServiceEnpointIsNotSet_NoOP() { @@ -506,6 +528,81 @@ public async Task GetConnectOptionsAsync_WhenDefaultParametersAreNotProvided_Set }); } + [Test] + public async Task GetConnectOptionsAsync_WhenParametersAreSetInTheObject_UsesObjectParameters() + { + var defaultAzureCredentialMock = new Mock(); + var jsonWebTokenHandlerMock = new Mock(); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceAccessToken, "valid_token"); + var entraLifecycleMock = new Mock(defaultAzureCredentialMock.Object, jsonWebTokenHandlerMock.Object); + entraLifecycleMock.Object + ._entraIdAccessToken = "valid_token"; + entraLifecycleMock.Object + ._entraIdAccessTokenExpiry = (int)DateTimeOffset.UtcNow.AddMinutes(22).ToUnixTimeSeconds(); + var runId = "run-id"; + + var service = new PlaywrightService(os: OSPlatform.Windows, runId: runId, exposeNetwork: "expose-network", entraLifecycle: entraLifecycleMock.Object); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, ServiceOs.Linux); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, "expose"); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId, "invalid-run-id"); + ConnectOptions connectOptions = await service.GetConnectOptionsAsync(); + + Assert.Multiple(() => + { + Assert.That(connectOptions.WsEndpoint, Is.EqualTo($"https://playwright.microsoft.com?os={ServiceOs.Windows}&runId={runId}&api-version={Constants.s_api_version}")); + Assert.That(connectOptions.Options!.ExposeNetwork, Is.EqualTo("expose-network")); + }); + } + + [Test] + public async Task GetConnectOptionsAsync_WhenParametersAreSetInTheObjectButAlsoPassedInMethod_UsesMethodParameters() + { + var defaultAzureCredentialMock = new Mock(); + var jsonWebTokenHandlerMock = new Mock(); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceAccessToken, "valid_token"); + var entraLifecycleMock = new Mock(defaultAzureCredentialMock.Object, jsonWebTokenHandlerMock.Object); + entraLifecycleMock.Object + ._entraIdAccessToken = "valid_token"; + entraLifecycleMock.Object + ._entraIdAccessTokenExpiry = (int)DateTimeOffset.UtcNow.AddMinutes(22).ToUnixTimeSeconds(); + var runId = "run-id"; + + var service = new PlaywrightService(os: OSPlatform.Linux, runId: "invalid-runid", exposeNetwork: "expose", entraLifecycle: entraLifecycleMock.Object); + ConnectOptions connectOptions = await service.GetConnectOptionsAsync(os: OSPlatform.Windows, runId: runId, exposeNetwork: "expose-network"); + + Assert.Multiple(() => + { + Assert.That(connectOptions.WsEndpoint, Is.EqualTo($"https://playwright.microsoft.com?os={ServiceOs.Windows}&runId={runId}&api-version={Constants.s_api_version}")); + Assert.That(connectOptions.Options!.ExposeNetwork, Is.EqualTo("expose-network")); + }); + } + + [Test] + public async Task GetConnectOptionsAsync_WhenParametersAreSetViaEnvironmentButAlsoPassedInMethod_UsesMethodParameters() + { + var defaultAzureCredentialMock = new Mock(); + var jsonWebTokenHandlerMock = new Mock(); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceAccessToken, "valid_token"); + var entraLifecycleMock = new Mock(defaultAzureCredentialMock.Object, jsonWebTokenHandlerMock.Object); + entraLifecycleMock.Object + ._entraIdAccessToken = "valid_token"; + entraLifecycleMock.Object + ._entraIdAccessTokenExpiry = (int)DateTimeOffset.UtcNow.AddMinutes(22).ToUnixTimeSeconds(); + var runId = "run-id"; + + var service = new PlaywrightService(entraLifecycle: entraLifecycleMock.Object); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, ServiceOs.Linux); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, "expose"); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId, "invalid-run-id"); + ConnectOptions connectOptions = await service.GetConnectOptionsAsync(os: OSPlatform.Windows, runId: runId, exposeNetwork: "expose-network"); + + Assert.Multiple(() => + { + Assert.That(connectOptions.WsEndpoint, Is.EqualTo($"https://playwright.microsoft.com?os={ServiceOs.Windows}&runId={runId}&api-version={Constants.s_api_version}")); + Assert.That(connectOptions.Options!.ExposeNetwork, Is.EqualTo("expose-network")); + }); + } + [Test] public async Task GetConnectOptionsAsync_WhenServiceParametersAreSetViaEnvironment_SetsServiceParameters() { From f6f730d101598058732d659cbbd4d057123f3259 Mon Sep 17 00:00:00 2001 From: Siddharth Singha Roy Date: Wed, 13 Nov 2024 14:59:55 +0530 Subject: [PATCH 2/3] fix(): set environment variable defaults in class members --- ...wrightTesting.TestLogger.netstandard2.0.cs | 3 + .../src/Constants.cs | 1 + .../src/PlaywrightReporter.cs | 4 +- .../src/PlaywrightService.cs | 143 ++++++++++++++++-- .../tests/PlaywrightServiceTests.cs | 20 ++- 5 files changed, 150 insertions(+), 21 deletions(-) diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/api/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.netstandard2.0.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/api/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.netstandard2.0.cs index 4c4c2fb4de3f..785d95b07863 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/api/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.netstandard2.0.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/api/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.netstandard2.0.cs @@ -10,7 +10,10 @@ public partial class PlaywrightService { public PlaywrightService(Azure.Developer.MicrosoftPlaywrightTesting.TestLogger.PlaywrightServiceOptions playwrightServiceOptions, Azure.Core.TokenCredential? credential = null) { } public PlaywrightService(System.Runtime.InteropServices.OSPlatform? os = default(System.Runtime.InteropServices.OSPlatform?), string? runId = null, string? exposeNetwork = null, string? serviceAuth = null, bool? useCloudHostedBrowsers = default(bool?), Azure.Core.TokenCredential? credential = null) { } + public string? ExposeNetwork { get { throw null; } set { } } + public System.Runtime.InteropServices.OSPlatform? Os { get { throw null; } set { } } public System.Threading.Timer? RotationTimer { get { throw null; } set { } } + public string? RunId { get { throw null; } set { } } public string ServiceAuth { get { throw null; } set { } } public static string? ServiceEndpoint { get { throw null; } } public bool UseCloudHostedBrowsers { get { throw null; } set { } } diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs index e946aafa955c..a32c201ec649 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/Constants.cs @@ -214,6 +214,7 @@ internal class Constants internal static readonly string s_playwright_service_disable_scalable_execution_environment_variable = "_MPT_DISABLE_SCALABLE_EXECUTION"; internal static readonly string s_playwright_service_reporting_url_environment_variable = "_MPT_REPORTING_URL"; internal static readonly string s_playwright_service_workspace_id_environment_variable = "_MPT_WORKSPACE_ID"; + internal static readonly string s_playwright_service_auth_type_environment_variable = "_MPT_AUTH_TYPE"; } internal class OSConstants diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs index 30b4441965fa..cddc8e9b2bfc 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightReporter.cs @@ -98,6 +98,8 @@ internal void InitializePlaywrightReporter(string xmlSettings) runParameters.TryGetValue(RunSettingKey.ManagedIdentityClientId, out var managedIdentityClientId); runParameters.TryGetValue(RunSettingKey.EnableGitHubSummary, out var enableGithubSummary); runParameters.TryGetValue(RunSettingKey.EnableResultPublish, out var enableResultPublish); + runParameters.TryGetValue(RunSettingKey.Os, out var osType); + runParameters.TryGetValue(RunSettingKey.ExposeNetwork, out var exposeNetwork); nunitParameters.TryGetValue(RunSettingKey.NumberOfTestWorkers, out var numberOfTestWorkers); string? enableGithubSummaryString = enableGithubSummary?.ToString(); string? enableResultPublishString = enableResultPublish?.ToString(); @@ -108,7 +110,7 @@ internal void InitializePlaywrightReporter(string xmlSettings) PlaywrightServiceOptions? playwrightServiceSettings; try { - playwrightServiceSettings = new(runId: runId?.ToString(), serviceAuth: serviceAuth?.ToString(), azureTokenCredentialType: azureTokenCredential?.ToString(), managedIdentityClientId: managedIdentityClientId?.ToString()); + playwrightServiceSettings = new(runId: runId?.ToString(), serviceAuth: serviceAuth?.ToString(), azureTokenCredentialType: azureTokenCredential?.ToString(), managedIdentityClientId: managedIdentityClientId?.ToString(), os: PlaywrightService.GetOSPlatform(osType?.ToString()), exposeNetwork: exposeNetwork?.ToString()); } catch (Exception ex) { diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs index 70d68bdfbb1b..d87082998823 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/src/PlaywrightService.cs @@ -20,26 +20,119 @@ namespace Azure.Developer.MicrosoftPlaywrightTesting.TestLogger; /// public class PlaywrightService { + private string? _serviceAuth; /// /// Gets or sets the default authentication mechanism. /// - public string ServiceAuth { get; set; } = ServiceAuthType.EntraId; + public string ServiceAuth + { + // fetch class level variable if set -> fetch environment variable -> default to EntraId + get + { + if (!string.IsNullOrEmpty(_serviceAuth)) + return _serviceAuth!; + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable))) + return Environment.GetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable)!; + return ServiceAuthType.EntraId; + } + set + { + _serviceAuth = value; + } + } + + /// + /// Gets or sets the rotation timer for Playwright service. + /// + public Timer? RotationTimer { get; set; } + /// + /// Gets the service endpoint for Playwright service. + /// + public static string? ServiceEndpoint => Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceUri); + + private bool? _useCloudHostedBrowsers; /// /// Gets or sets a flag indicating whether to use cloud-hosted browsers. /// - public bool UseCloudHostedBrowsers { get; set; } = true; + public bool UseCloudHostedBrowsers + { + // fetch class level variable if set -> fetch environment variable -> default to true + get + { + if (_useCloudHostedBrowsers != null) + return (bool)_useCloudHostedBrowsers; + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable))) + return !bool.Parse(Environment.GetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable)); + return true; + } + set + { + _useCloudHostedBrowsers = value; + } + } + + private OSPlatform? _os; /// - /// Gets or sets the rotation timer for the Playwright service. + /// Gets or sets the operating system for Playwright service. /// - public Timer? RotationTimer { get; set; } + public OSPlatform? Os + { + // fetch class level variable if set -> fetch environment variable -> default to null + get + { + if (_os != null) + return _os; + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs))) + return GetOSPlatform(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs)); + return null; + } + set + { + _os = value; + } + } + + private string? _runId; /// - /// Gets the service endpoint for the Playwright service. + /// Gets or sets the run ID. /// - public static string? ServiceEndpoint => Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceUri); + public string? RunId + { + // fetch class level variable if set -> fetch environment variable -> default to null + get + { + if (!string.IsNullOrEmpty(_runId)) + return _runId; + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId))) + return Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId); + return null; + } + set + { + _runId = value; + } + } - internal string? Os { get; set; } - internal string? RunId { get; set; } - internal string? ExposeNetwork { get; set; } + private string? _exposeNetwork; + /// + /// Gets or sets the expose network field for remote browsers. + /// + public string? ExposeNetwork + { + // fetch class level variable if set -> fetch environment variable -> default to null + get + { + if (!string.IsNullOrEmpty(_exposeNetwork)) + return _exposeNetwork; + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork))) + return Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork); + return null; + } + set + { + _exposeNetwork = value; + } + } private readonly EntraLifecycle? _entraLifecycle; private readonly JsonWebTokenHandler? _jsonWebTokenHandler; @@ -76,7 +169,7 @@ public PlaywrightService(OSPlatform? os = null, string? runId = null, string? ex return; _entraLifecycle = new EntraLifecycle(tokenCredential: credential); _jsonWebTokenHandler = new JsonWebTokenHandler(); - InitializePlaywrightServiceEnvironmentVariables(getServiceCompatibleOs(os), runId, exposeNetwork, serviceAuth, useCloudHostedBrowsers); + InitializePlaywrightServiceEnvironmentVariables(GetServiceCompatibleOs(os), runId, exposeNetwork, serviceAuth, useCloudHostedBrowsers); } internal PlaywrightService(OSPlatform? os = null, string? runId = null, string? exposeNetwork = null, string? serviceAuth = null, bool? useCloudHostedBrowsers = null, EntraLifecycle? entraLifecycle = null, JsonWebTokenHandler? jsonWebTokenHandler = null, TokenCredential? credential = null) @@ -85,7 +178,7 @@ internal PlaywrightService(OSPlatform? os = null, string? runId = null, string? return; _jsonWebTokenHandler = jsonWebTokenHandler ?? new JsonWebTokenHandler(); _entraLifecycle = entraLifecycle ?? new EntraLifecycle(credential, _jsonWebTokenHandler); - InitializePlaywrightServiceEnvironmentVariables(getServiceCompatibleOs(os), runId, exposeNetwork, serviceAuth, useCloudHostedBrowsers); + InitializePlaywrightServiceEnvironmentVariables(GetServiceCompatibleOs(os), runId, exposeNetwork, serviceAuth, useCloudHostedBrowsers); } /// @@ -103,9 +196,9 @@ internal PlaywrightService(OSPlatform? os = null, string? runId = null, string? throw new Exception(Constants.s_service_endpoint_removed_since_scalable_execution_disabled_error_message); if (string.IsNullOrEmpty(ServiceEndpoint)) throw new Exception(Constants.s_no_service_endpoint_error_message); - string _serviceOs = Uri.EscapeDataString(getServiceCompatibleOs(os) ?? Os ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs) ?? Constants.s_default_os); - string _runId = Uri.EscapeDataString(runId ?? RunId ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId) ?? GetDefaultRunId()); - string _exposeNetwork = exposeNetwork ?? ExposeNetwork ?? Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork) ?? Constants.s_default_expose_network; + string _serviceOs = Uri.EscapeDataString(GetServiceCompatibleOs(os) ?? GetServiceCompatibleOs(Os)!); + string _runId = Uri.EscapeDataString(runId ?? RunId!); + string _exposeNetwork = exposeNetwork ?? ExposeNetwork!; string wsEndpoint = $"{ServiceEndpoint}?os={_serviceOs}&runId={_runId}&api-version={Constants.s_api_version}"; @@ -179,10 +272,16 @@ internal async void RotationHandlerAsync(object? _) private void InitializePlaywrightServiceEnvironmentVariables(string? os = null, string? runId = null, string? exposeNetwork = null, string? serviceAuth = null, bool? useCloudHostedBrowsers = null) { + // environment variables are set only if they are not already set + // If method parameters are set, environment variables are set to those values only if they are not already set if (!string.IsNullOrEmpty(serviceAuth)) { ServiceAuth = serviceAuth!; } + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable))) + { + Environment.SetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable, ServiceAuth); + } if (useCloudHostedBrowsers != null) { UseCloudHostedBrowsers = (bool)useCloudHostedBrowsers; @@ -191,12 +290,13 @@ private void InitializePlaywrightServiceEnvironmentVariables(string? os = null, } if (!string.IsNullOrEmpty(os)) { - Os = os; + Os = GetOSPlatform(os); if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs))) { Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, os); } } + // If OS is not provided, set it to default else if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs))) { Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, Constants.s_default_os); @@ -276,7 +376,7 @@ private void ValidateMptPAT() throw new Exception(Constants.s_expired_mpt_pat_error); } - private string? getServiceCompatibleOs(OSPlatform? oSPlatform) + internal static string? GetServiceCompatibleOs(OSPlatform? oSPlatform) { if (oSPlatform == null) return null; @@ -286,4 +386,15 @@ private void ValidateMptPAT() return ServiceOs.Windows; throw new ArgumentException(Constants.s_invalid_os_error); } + + internal static OSPlatform? GetOSPlatform(string? os) + { + if (string.IsNullOrEmpty(os)) + return null; + if (os == ServiceOs.Linux) + return OSPlatform.Linux; + if (os == ServiceOs.Windows) + return OSPlatform.Windows; + throw new ArgumentException(Constants.s_invalid_os_error); + } } diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs index 66c5bca3cca3..eaaa5e410f2a 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs @@ -32,7 +32,17 @@ private static string GetToken(Dictionary claims, DateTime? expi [SetUp] public void Setup() { + // Temporary - Switch to IEnvironment Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceUri, "https://playwright.microsoft.com"); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceAccessToken, null); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs, null); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId, null); + Environment.SetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_reporting_url_environment_variable, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_workspace_id_environment_variable, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable, null); } [TearDown] public void TearDown() @@ -45,6 +55,8 @@ public void TearDown() Environment.SetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable, null); Environment.SetEnvironmentVariable(Constants.s_playwright_service_reporting_url_environment_variable, null); Environment.SetEnvironmentVariable(Constants.s_playwright_service_workspace_id_environment_variable, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable, null); + Environment.SetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable, null); } [Test] @@ -65,9 +77,9 @@ public void Constructor_NoServiceParams_SetsDefaultValues() Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId), Is.Not.Null); Assert.That(playwrightService.ServiceAuth, Is.EqualTo(ServiceAuthType.EntraId)); Assert.That(playwrightService.UseCloudHostedBrowsers, Is.True); - Assert.IsNull(playwrightService.Os); - Assert.IsNull(playwrightService.ExposeNetwork); - Assert.IsNull(playwrightService.RunId); + Assert.AreEqual(playwrightService.Os!, OSPlatform.Linux); + Assert.AreEqual(playwrightService.ExposeNetwork!, Constants.s_default_expose_network); + Assert.That(playwrightService.RunId, Is.Not.Null); }); } @@ -76,7 +88,7 @@ public void Constructor_PassServiceOS_SetsServiceOS() { var playwrightService = new PlaywrightService(os: OSPlatform.Windows, entraLifecycle: null); Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs), Is.EqualTo(ServiceOs.Windows)); - Assert.That(playwrightService.Os, Is.EqualTo(ServiceOs.Windows)); + Assert.That(playwrightService.Os, Is.EqualTo(OSPlatform.Windows)); } [Test] From ba8fa2c2cb6f5ecdef4ba9c9aa255c3420bddac1 Mon Sep 17 00:00:00 2001 From: Siddharth Singha Roy Date: Wed, 13 Nov 2024 15:12:38 +0530 Subject: [PATCH 3/3] chore(): add tests for multiple initialization scenario --- .../tests/PlaywrightServiceTests.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs index eaaa5e410f2a..6f6cfbf88916 100644 --- a/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs +++ b/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/tests/PlaywrightServiceTests.cs @@ -152,6 +152,46 @@ public void Constructor_PlaywrightServiceExposeNetworkEnvironmentVariableIsSet_D Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork), Is.EqualTo("new-expose")); } + [Test] + public void Constructor_MultipleInitialization_DoesNotUpdateTheEnvironmentVariablesOnceSet() + { + _ = new PlaywrightService(entraLifecycle: null, os: OSPlatform.Linux, exposeNetwork: "old-expose", runId: "old-run-id", useCloudHostedBrowsers: false, serviceAuth: ServiceAuthType.EntraId); + var newPlaywrightService = new PlaywrightService(entraLifecycle: null, os: OSPlatform.Windows, exposeNetwork: "new-expose", runId: "new-run-id", useCloudHostedBrowsers: true, serviceAuth: ServiceAuthType.AccessToken); + Assert.Multiple(() => + { + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs), Is.EqualTo(ServiceOs.Linux)); + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork), Is.EqualTo("old-expose")); + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId), Is.EqualTo("old-run-id")); + Assert.That(Environment.GetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable), Is.EqualTo("true")); + Assert.That(Environment.GetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable), Is.EqualTo(ServiceAuthType.EntraId)); + Assert.That(newPlaywrightService.Os, Is.EqualTo(OSPlatform.Windows)); + Assert.That(newPlaywrightService.ExposeNetwork, Is.EqualTo("new-expose")); + Assert.That(newPlaywrightService.RunId, Is.EqualTo("new-run-id")); + Assert.That(newPlaywrightService.UseCloudHostedBrowsers, Is.True); + Assert.That(newPlaywrightService.ServiceAuth, Is.EqualTo(ServiceAuthType.AccessToken)); + }); + } + + [Test] + public void Constructor_MultipleInitialization_ReadsOlderEnvironmentVariables() + { + _ = new PlaywrightService(entraLifecycle: null, os: OSPlatform.Linux, exposeNetwork: "old-expose", runId: "old-run-id", useCloudHostedBrowsers: false, serviceAuth: ServiceAuthType.EntraId); + var newPlaywrightService = new PlaywrightService(entraLifecycle: null); + Assert.Multiple(() => + { + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceOs), Is.EqualTo(ServiceOs.Linux)); + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceExposeNetwork), Is.EqualTo("old-expose")); + Assert.That(Environment.GetEnvironmentVariable(ServiceEnvironmentVariable.PlaywrightServiceRunId), Is.EqualTo("old-run-id")); + Assert.That(Environment.GetEnvironmentVariable(Constants.s_playwright_service_disable_scalable_execution_environment_variable), Is.EqualTo("true")); + Assert.That(Environment.GetEnvironmentVariable(Constants.s_playwright_service_auth_type_environment_variable), Is.EqualTo(ServiceAuthType.EntraId)); + Assert.That(newPlaywrightService.Os, Is.EqualTo(OSPlatform.Linux)); + Assert.That(newPlaywrightService.ExposeNetwork, Is.EqualTo("old-expose")); + Assert.That(newPlaywrightService.RunId, Is.EqualTo("old-run-id")); + Assert.That(newPlaywrightService.UseCloudHostedBrowsers, Is.False); + Assert.That(newPlaywrightService.ServiceAuth, Is.EqualTo(ServiceAuthType.EntraId)); + }); + } + [Test] public void Initialize_WhenServiceEnpointIsNotSet_NoOP() {