From 352b4b9cecbac7d04c55b25877133bf6683b1974 Mon Sep 17 00:00:00 2001 From: ArcturusZhang Date: Sun, 4 Jul 2021 12:27:28 +0800 Subject: [PATCH 1/4] mock test base --- .../Redesign/ManagementRecordedTestBase.cs | 7 ++- .../Redesign/MockTestBase.cs | 54 +++++++++++++++++++ .../Redesign/MockTestEnvironment.cs | 35 ++++++++++++ .../src/TestEnvironment.cs | 4 +- 4 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 common/ManagementTestShared/Redesign/MockTestBase.cs create mode 100644 common/ManagementTestShared/Redesign/MockTestEnvironment.cs diff --git a/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs b/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs index 985e9297c2a0..f051b7bdd3ad 100644 --- a/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs +++ b/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs @@ -64,6 +64,7 @@ private ArmClient GetCleanupClient() { return new ArmClient( TestEnvironment.SubscriptionId, + new Uri(TestEnvironment.ResourceManagerUrl), TestEnvironment.Credential, new ArmClientOptions()); } @@ -80,6 +81,7 @@ protected ArmClient GetArmClient(ArmClientOptions clientOptions = default) return CreateClient( TestEnvironment.SubscriptionId, + new Uri(TestEnvironment.ResourceManagerUrl), TestEnvironment.Credential, options); } @@ -148,7 +150,7 @@ protected void StopSessionRecording() } [OneTimeSetUp] - public void OneTimeSetUp() + public virtual void OneTimeSetUp() { if (!HasOneTimeSetup()) return; @@ -161,6 +163,7 @@ public void OneTimeSetUp() GlobalClient = CreateClient( SessionEnvironment.SubscriptionId, + new Uri(SessionEnvironment.ResourceManagerUrl), SessionEnvironment.Credential, options); } @@ -189,7 +192,7 @@ private bool HasOneTimeSetup() } [OneTimeTearDown] - public void OneTimeCleanupResourceGroups() + public virtual void OneTimeCleanupResourceGroups() { if (Mode != RecordedTestMode.Playback) { diff --git a/common/ManagementTestShared/Redesign/MockTestBase.cs b/common/ManagementTestShared/Redesign/MockTestBase.cs new file mode 100644 index 000000000000..a57e18a36896 --- /dev/null +++ b/common/ManagementTestShared/Redesign/MockTestBase.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core.TestFramework; +using Azure.ResourceManager.Core; +using System; +using System.Net; +using System.Net.Sockets; +using System.Threading.Tasks; + +namespace Azure.ResourceManager.TestFramework +{ + public abstract class MockTestBase : ManagementRecordedTestBase + { + public MockTestBase(bool isAsync) : base(isAsync) + { + EnsureMockServerRunning(); + } + + public MockTestBase(bool isAsync, RecordedTestMode mode) : base(isAsync, mode) + { + EnsureMockServerRunning(); + } + + protected async Task GetResourceGroupContainer(ArmClientOptions clientOptions = default) + { + var client = GetArmClient(clientOptions); + var sub = await client.GetSubscriptions().GetAsync(TestEnvironment.SubscriptionId); + return sub.Value.GetResourceGroups(); + } + + private void EnsureMockServerRunning() + { + if (Mode == RecordedTestMode.Record) + TestMockServerRunning(); + } + + private void TestMockServerRunning() + { + using (var tcpClient = new TcpClient()) + { + try + { + var uri = new Uri(TestEnvironment.MockEndPoint); + tcpClient.Connect(uri.Host, uri.Port); + } + catch (SocketException) + { + throw new InvalidOperationException("The mock server is not running, please start the mock server following this guide `https://devdiv.visualstudio.com/DevDiv/_git/avs?path=%2FREADME.md` in order to record the test"); + } + } + } + } +} diff --git a/common/ManagementTestShared/Redesign/MockTestEnvironment.cs b/common/ManagementTestShared/Redesign/MockTestEnvironment.cs new file mode 100644 index 000000000000..1883bb2f053a --- /dev/null +++ b/common/ManagementTestShared/Redesign/MockTestEnvironment.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; +using Azure.Core.TestFramework; +using System; + +namespace Azure.ResourceManager.TestFramework +{ + public class MockTestEnvironment : TestEnvironment + { + public MockTestEnvironment() : base() + { + Environment.SetEnvironmentVariable("SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000"); + Environment.SetEnvironmentVariable("RESOURCE_MANAGER_URL", MockEndPoint); + } + + public virtual string MockEndPoint => $"https://localhost:8441"; + + public override TokenCredential Credential + { + get + { + if (_credential != null) + { + return _credential; + } + + _credential = new MockCredential(); + + return _credential; + } + } + } +} diff --git a/sdk/core/Azure.Core.TestFramework/src/TestEnvironment.cs b/sdk/core/Azure.Core.TestFramework/src/TestEnvironment.cs index 04b9d11a5d67..7423e49a80f2 100644 --- a/sdk/core/Azure.Core.TestFramework/src/TestEnvironment.cs +++ b/sdk/core/Azure.Core.TestFramework/src/TestEnvironment.cs @@ -28,7 +28,7 @@ public abstract class TestEnvironment private readonly string _prefix; - private TokenCredential _credential; + protected internal TokenCredential _credential; private TestRecording _recording; private readonly Dictionary _environmentFile = new Dictionary(StringComparer.OrdinalIgnoreCase); @@ -150,7 +150,7 @@ static TestEnvironment() /// public string ClientSecret => GetVariable("CLIENT_SECRET"); - public TokenCredential Credential + public virtual TokenCredential Credential { get { From 6bb7b3bdbd8e15c27155ee77a93b8d6010a637b7 Mon Sep 17 00:00:00 2001 From: ArcturusZhang Date: Fri, 9 Jul 2021 16:33:16 +0800 Subject: [PATCH 2/4] update version of armcore accordingly --- eng/Packages.Data.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props index 32768c983059..59088c1e33ac 100644 --- a/eng/Packages.Data.props +++ b/eng/Packages.Data.props @@ -116,7 +116,7 @@ - + From 314fcaeb766c0ef31f1da7840abb0f7e4567aa66 Mon Sep 17 00:00:00 2001 From: ArcturusZhang Date: Tue, 13 Jul 2021 14:13:00 +0800 Subject: [PATCH 3/4] escape the Uri constructor when argument is null --- .../Redesign/ManagementRecordedTestBase.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs b/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs index f051b7bdd3ad..36df70070903 100644 --- a/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs +++ b/common/ManagementTestShared/Redesign/ManagementRecordedTestBase.cs @@ -64,7 +64,7 @@ private ArmClient GetCleanupClient() { return new ArmClient( TestEnvironment.SubscriptionId, - new Uri(TestEnvironment.ResourceManagerUrl), + GetUri(TestEnvironment.ResourceManagerUrl), TestEnvironment.Credential, new ArmClientOptions()); } @@ -81,11 +81,16 @@ protected ArmClient GetArmClient(ArmClientOptions clientOptions = default) return CreateClient( TestEnvironment.SubscriptionId, - new Uri(TestEnvironment.ResourceManagerUrl), + GetUri(TestEnvironment.ResourceManagerUrl), TestEnvironment.Credential, options); } + private Uri GetUri(string endpoint) + { + return !string.IsNullOrEmpty(endpoint) ? new Uri(endpoint) : null; + } + [SetUp] protected void CreateCleanupClient() { @@ -163,7 +168,7 @@ public virtual void OneTimeSetUp() GlobalClient = CreateClient( SessionEnvironment.SubscriptionId, - new Uri(SessionEnvironment.ResourceManagerUrl), + GetUri(SessionEnvironment.ResourceManagerUrl), SessionEnvironment.Credential, options); } From 54d756ba79ae613bc294b776d25b918a4ad318b4 Mon Sep 17 00:00:00 2001 From: ArcturusZhang Date: Tue, 13 Jul 2021 15:18:30 +0800 Subject: [PATCH 4/4] fix compile error --- common/ManagementTestShared/Redesign/MockTestBase.cs | 4 +++- sdk/core/Azure.Core/tests/ManagementRecordedTestBaseTests.cs | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/common/ManagementTestShared/Redesign/MockTestBase.cs b/common/ManagementTestShared/Redesign/MockTestBase.cs index a57e18a36896..cc704a518852 100644 --- a/common/ManagementTestShared/Redesign/MockTestBase.cs +++ b/common/ManagementTestShared/Redesign/MockTestBase.cs @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using Azure.Core; using Azure.Core.TestFramework; using Azure.ResourceManager.Core; using System; -using System.Net; using System.Net.Sockets; using System.Threading.Tasks; @@ -12,6 +12,8 @@ namespace Azure.ResourceManager.TestFramework { public abstract class MockTestBase : ManagementRecordedTestBase { + protected override Type OperationInternalsType => typeof(OperationInternals); + public MockTestBase(bool isAsync) : base(isAsync) { EnsureMockServerRunning(); diff --git a/sdk/core/Azure.Core/tests/ManagementRecordedTestBaseTests.cs b/sdk/core/Azure.Core/tests/ManagementRecordedTestBaseTests.cs index f69cf17aaea1..f3c55788c3c8 100644 --- a/sdk/core/Azure.Core/tests/ManagementRecordedTestBaseTests.cs +++ b/sdk/core/Azure.Core/tests/ManagementRecordedTestBaseTests.cs @@ -13,6 +13,8 @@ namespace Azure.Core.Tests.Management [Parallelizable] internal class ManagementRecordedTestBaseTests : ManagementRecordedTestBase { + protected override Type OperationInternalsType => typeof(OperationInternals); + public ManagementRecordedTestBaseTests(bool isAsync) : base(isAsync) {