From 1777bec77b4de5bd351729d163c806f530bea92d Mon Sep 17 00:00:00 2001 From: Flynn Date: Fri, 17 Jun 2022 19:16:42 +0800 Subject: [PATCH 1/3] add TestRunner and remove TestBase in RecoveryServices --- .../AzureFiles/ContainerTests.cs | 20 +- .../ScenarioTests/AzureFiles/ItemTests.cs | 41 +- .../ScenarioTests/AzureFiles/JobTests.cs | 27 +- .../ScenarioTests/AzureFiles/PolicyTests.cs | 20 +- .../AzureFiles/ProtectionCheckTests.cs | 13 +- .../ScenarioTests/AzureSql/ContainerTests.cs | 25 +- .../ScenarioTests/AzureSql/ItemTests.cs | 32 +- .../ScenarioTests/AzureSql/PolicyTests.cs | 14 +- .../AzureWorkload/ContainerTests.cs | 20 +- .../ScenarioTests/AzureWorkload/ItemTests.cs | 76 ++-- .../ScenarioTests/AzureWorkload/JobTests.cs | 27 +- .../AzureWorkload/PolicyTests.cs | 13 +- .../ScenarioTests/Dpm/ContainerTests.cs | 21 +- .../ScenarioTests/IaasVm/ContainerTests.cs | 13 +- .../ScenarioTests/IaasVm/ItemTests.cs | 139 +++++-- .../ScenarioTests/IaasVm/JobTests.cs | 39 +- .../ScenarioTests/IaasVm/PolicyTests.cs | 24 +- .../IaasVm/ProtectionCheckTests.cs | 17 +- .../ScenarioTests/Mab/ContainerTests.cs | 19 +- .../RecoveryServicesBackupTestRunner.cs | 61 +++ .../ScenarioTests/TestsBase.cs | 214 ----------- .../ScenarioTests/A2A/AsrA2ATests.cs | 84 +++-- .../ScenarioTests/A2A/AsrA2ATestsBase.cs | 207 ----------- .../ScenarioTests/AsrTestsBase.cs | 196 ---------- .../ScenarioTests/B2A/AsrB2ATests.cs | 165 +++------ .../ScenarioTests/Common/AsrTests.cs | 78 ++-- .../ScenarioTests/E2A/AsrE2ATests.cs | 116 ++---- .../ScenarioTests/E2E/AsrE2ETests.cs | 229 ++++-------- .../RecoveryServicesSiteRecoveryTestRunner.cs | 47 +++ .../ScenarioTests/V2A/AsrV2ATests.cs | 350 ++++++------------ .../ScenarioTests/V2ARCM/AsrV2ARcmTests.cs | 79 ++-- .../V2ARCM/AsrV2ARcmTestsBase.cs | 208 ----------- .../RecoveryServicesTestRunner.cs | 56 +++ .../ScenarioTests/RecoveryServicesTests.cs | 14 +- .../ScenarioTests/TestsBase.cs | 144 ------- src/RecoveryServices/ScenarioTests.zip | Bin 0 -> 60804 bytes src/RecoveryServices/ScenarioTestsorigin.zip | Bin 0 -> 3787 bytes tools/TestFx/TestManager.cs | 7 +- 38 files changed, 1006 insertions(+), 1849 deletions(-) create mode 100644 src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/RecoveryServicesBackupTestRunner.cs delete mode 100644 src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/TestsBase.cs delete mode 100644 src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATestsBase.cs delete mode 100644 src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/AsrTestsBase.cs create mode 100644 src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs delete mode 100644 src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTestsBase.cs create mode 100644 src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTestRunner.cs delete mode 100644 src/RecoveryServices/RecoveryServices.Test/ScenarioTests/TestsBase.cs create mode 100644 src/RecoveryServices/ScenarioTests.zip create mode 100644 src/RecoveryServices/ScenarioTestsorigin.zip diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs index 6a621cfd77d1..5f6b0a313292 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ContainerTests : RMTestBase + public partial class ContainerTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ContainerTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSContainer" + ); } [Fact] @@ -35,8 +42,11 @@ public void TestAzureFSContainer() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSUnregisterContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSUnregisterContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSUnregisterContainer" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs index 183358db0bc5..7f43e7512330 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ItemTests : RMTestBase + public partial class ItemTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ItemTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSItem() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSItem"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSItem" + ); } [Fact] @@ -35,8 +42,11 @@ public void TestAzureFSItem() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSBackup() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSBackup"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSBackup" + ); } [Fact] @@ -44,8 +54,11 @@ public void TestAzureFSBackup() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSGetRPs() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSGetRPs"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSGetRPs" + ); } [Fact] @@ -53,8 +66,11 @@ public void TestAzureFSGetRPs() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSProtection() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSProtection"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSProtection" + ); } [Fact] @@ -62,8 +78,11 @@ public void TestAzureFSProtection() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSFullRestore() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSFullRestore"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSFullRestore" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs index 94c5acec46c2..dfc9215037ad 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class JobTests : RMTestBase + public partial class JobTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/JobTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSGetJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSGetJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSGetJob" + ); } [Fact(Skip = "Job not cancellable everytime")] @@ -35,8 +42,11 @@ public void TestAzureFSGetJob() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSCancelJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSCancelJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSCancelJob" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -44,8 +54,11 @@ public void TestAzureFSCancelJob() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSWaitJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSWaitJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSWaitJob" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs index bf4e26328a60..8383d797f8f8 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class PolicyTests : RMTestBase + public partial class PolicyTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/PolicyTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSPolicy() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSPolicy" + ); } [Fact] @@ -35,8 +42,11 @@ public void TestAzureFSPolicy() [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSHourlyPolicy() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSHourlyPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSHourlyPolicy" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs index 51628a5e539f..5354c8c19035 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ProtectionCheckTests : RMTestBase + public partial class ProtectionCheckTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ProtectionCheckTests.ps1"; + [Fact(Skip = "To un-skip in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureFS)] public void TestAzureFSProtectionCheck() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureFiles, "Test-AzureFSProtectionCheck"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-AzureFSProtectionCheck" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs index fdcb6b7197fc..51a827f17a00 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs @@ -13,21 +13,20 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ContainerTests : RMTestBase + public partial class ContainerTests : RecoveryServicesBackupTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _commonModule1 = $"ScenarioTests/Common.ps1"; + private readonly string _testModule1 = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/ContainerTests.ps1"; - public ContainerTests(Xunit.Abstractions.ITestOutputHelper output) + public ContainerTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); } [Fact(Skip = "This workload is not supported anymore")] @@ -35,8 +34,11 @@ public ContainerTests(Xunit.Abstractions.ITestOutputHelper output) [Trait(TestConstants.Workload, TestConstants.AzureSql)] public void TestAzureSqlGetContainers() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureSql, "Test-AzureSqlGetContainers"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule1.AsAbsoluteLocation()}", + $"Import-Module {_testModule1.AsAbsoluteLocation()}", + "Test-AzureSqlGetContainers" + ); } [Fact(Skip = "This workload is not supported anymore")] @@ -44,8 +46,11 @@ public void TestAzureSqlGetContainers() [Trait(TestConstants.Workload, TestConstants.AzureSql)] public void TestAzureSqlUnregisterContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureSql, "Test-AzureSqlUnregisterContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule1.AsAbsoluteLocation()}", + $"Import-Module {_testModule1.AsAbsoluteLocation()}", + "Test-AzureSqlUnregisterContainer" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs index 7b226dc21aab..6928b86669a8 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs @@ -13,21 +13,20 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ItemTests : RMTestBase + public partial class ItemTests : RecoveryServicesBackupTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _commonModule1 = $"ScenarioTests/Common.ps1"; + private readonly string _testModule1 = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/ItemTests.ps1"; - public ItemTests(Xunit.Abstractions.ITestOutputHelper output) + public ItemTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); } [Fact(Skip = "This workload is not supported anymore")] @@ -35,8 +34,11 @@ public ItemTests(Xunit.Abstractions.ITestOutputHelper output) [Trait(TestConstants.Workload, TestConstants.AzureSql)] public void TestAzureSqlGetItems() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureSql, "Test-AzureSqlGetItems"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule1.AsAbsoluteLocation()}", + $"Import-Module {_testModule1.AsAbsoluteLocation()}", + "Test-AzureSqlGetItems" + ); } [Fact(Skip = "This workload is not supported anymore")] @@ -44,8 +46,11 @@ public void TestAzureSqlGetItems() [Trait(TestConstants.Workload, TestConstants.AzureSql)] public void TestAzureSqlDisableProtection() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureSql, "Test-AzureSqlDisableProtection"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule1.AsAbsoluteLocation()}", + $"Import-Module {_testModule1.AsAbsoluteLocation()}", + "Test-AzureSqlDisableProtection" + ); } [Fact(Skip = "This workload is not supported anymore")] @@ -53,8 +58,11 @@ public void TestAzureSqlDisableProtection() [Trait(TestConstants.Workload, TestConstants.AzureSql)] public void TestAzureSqlGetRPs() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureSql, "Test-AzureSqlGetRPs"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule1.AsAbsoluteLocation()}", + $"Import-Module {_testModule1.AsAbsoluteLocation()}", + "Test-AzureSqlGetRPs" + ); } } } \ No newline at end of file diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs index 2b2ee17e99fc..60d0f2264073 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs @@ -13,22 +13,28 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class PolicyTests : RMTestBase + public partial class PolicyTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule1 = $"ScenarioTests/Common.ps1"; + private readonly string _testModule1 = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/PolicyTests.ps1"; + [Fact(Skip = "This workload is not supported anymore")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureSql)] public void TestAzureSqlPolicy() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureSql, "Test-AzureSqlPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule1.AsAbsoluteLocation()}", + $"Import-Module {_testModule1.AsAbsoluteLocation()}", + "Test-AzureSqlPolicy" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs index e2c900de101d..fdeed336a6fb 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ContainerTests : RMTestBase + public partial class ContainerTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/ContainerTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void GetAzureVmWorkloadContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Get-AzureVmWorkloadContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Get-AzureVmWorkloadContainer" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -35,8 +42,11 @@ public void GetAzureVmWorkloadContainer() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void UnregisterAzureWorkloadContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Unregister-AzureWorkloadContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Unregister-AzureWorkloadContainer" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs index 55291277a7c5..bde3b00eb7fb 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs @@ -16,19 +16,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ItemTests : RMTestBase + public partial class ItemTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/ItemTests.ps1"; + [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadProtectableItem() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadProtectableItem"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadProtectableItem" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -36,8 +43,11 @@ public void TestAzureVmWorkloadProtectableItem() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadInitializeProtectableItem() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadInitializeProtectableItem"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadInitializeProtectableItem" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -45,8 +55,11 @@ public void TestAzureVmWorkloadInitializeProtectableItem() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadEnableProtectableItem() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadEnableProtectableItem"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadEnableProtectableItem" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -55,8 +68,11 @@ public void TestAzureVmWorkloadEnableProtectableItem() public void TestAzureVmWorkloadEnableAutoProtectableItem() { AzureSession.Instance.RegisterComponent("GetGuidComponent", () => "29e3f4dc-6407-4a9a-99cf-ea910639ba19", true); - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadEnableAutoProtectableItem"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadEnableAutoProtectableItem" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -64,8 +80,11 @@ public void TestAzureVmWorkloadEnableAutoProtectableItem() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadBackupProtectionItem() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadBackupProtectionItem"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadBackupProtectionItem" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -73,8 +92,11 @@ public void TestAzureVmWorkloadBackupProtectionItem() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadGetRPs() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadGetRPs"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadGetRPs" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -82,8 +104,11 @@ public void TestAzureVmWorkloadGetRPs() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadGetLogChains() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadGetLogChains"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadGetLogChains" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -91,8 +116,11 @@ public void TestAzureVmWorkloadGetLogChains() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadFullRestore() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadFullRestore"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadFullRestore" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -100,8 +128,11 @@ public void TestAzureVmWorkloadFullRestore() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadFullRestoreWithFiles() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadFullRestoreWithFiles"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadFullRestoreWithFiles" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -109,8 +140,11 @@ public void TestAzureVmWorkloadFullRestoreWithFiles() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadRestoreAsFiles() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadRestoreAsFiles"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadRestoreAsFiles" + ); } } } \ No newline at end of file diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs index 5679723322bd..170656b76bb8 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class JobTests : RMTestBase + public partial class JobTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/JobTests.ps1"; + [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadGetJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadGetJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadGetJob" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -35,8 +42,11 @@ public void TestAzureVmWorkloadGetJob() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadCancelJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadCancelJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadCancelJob" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -44,8 +54,11 @@ public void TestAzureVmWorkloadCancelJob() [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadWaitJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadWaitJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadWaitJob" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs index 7d396f0344b6..c322eb9e114e 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class PolicyTests : RMTestBase + public partial class PolicyTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/PolicyTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVmWorkload)] public void TestAzureVmWorkloadPolicy() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.AzureWorkload, "Test-AzureVmWorkloadPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule2.AsAbsoluteLocation()}", + $"Import-Module {_testModule2.AsAbsoluteLocation()}", + "Test-AzureVmWorkloadPolicy" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs index d861d03e05a2..75172f719e5a 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs @@ -13,23 +13,29 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ContainerTests : RMTestBase + public partial class ContainerTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule3 = $"ScenarioTests/Common.ps1"; + private readonly string _testModule3 = $"ScenarioTests/{PsBackupProviderTypes.Dpm}/ContainerTests.ps1"; + [Fact(Skip ="To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.DPM)] public void TestBmsGetContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.Dpm, "Test-BmsGetContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule3.AsAbsoluteLocation()}", + $"Import-Module {_testModule3.AsAbsoluteLocation()}", + "Test-BmsGetContainer" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -37,8 +43,11 @@ public void TestBmsGetContainer() [Trait(TestConstants.Workload, TestConstants.DPM)] public void TestBmsUnregisterContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.Dpm, "Test-BmsUnregisterContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule3.AsAbsoluteLocation()}", + $"Import-Module {_testModule3.AsAbsoluteLocation()}", + "Test-BmsUnregisterContainer" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs index 183da915663b..792ae494946e 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ContainerTests : RMTestBase + public partial class ContainerTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ContainerTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMGetContainers() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMGetContainers"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMGetContainers" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs index fc1cf4680dc9..d6ade45c3fb5 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs @@ -20,18 +20,25 @@ using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Xunit; using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; +using Microsoft.WindowsAzure.Commands.Utilities.Common; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ItemTests : RMTestBase + public partial class ItemTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ItemTests.ps1"; + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMGetItems() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMGetItems"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMGetItems" + ); } [Fact] @@ -39,8 +46,11 @@ public void TestAzureVMGetItems() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMProtection() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMProtection"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMProtection" + ); } [Fact] @@ -48,8 +58,11 @@ public void TestAzureVMProtection() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMBackup() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMBackup"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMBackup" + ); } [Fact] @@ -57,8 +70,11 @@ public void TestAzureVMBackup() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMGetRPs() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMGetRPs"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMGetRPs" + ); } @@ -68,8 +84,11 @@ public void TestAzureVMGetRPs() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMFullRestore() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMFullRestore"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMFullRestore" + ); } [Fact(Skip = "To re-record in next release")] @@ -77,8 +96,11 @@ public void TestAzureVMFullRestore() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureUnmanagedVMFullRestore() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureUnmanagedVMFullRestore"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureUnmanagedVMFullRestore" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -86,22 +108,27 @@ public void TestAzureUnmanagedVMFullRestore() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMSoftDelete() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMSoftDelete"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMSoftDelete" + ); } - [Fact(Skip = "To re-record in next release")] + [Fact(Skip = "To re-record in next release. Need to move assertion to ps1 file if possible.")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMRPMountScript() { - Collection psObjects = TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMRPMountScript"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMRPMountScript"); - AzureVmRPMountScriptDetails mountScriptDetails = (AzureVmRPMountScriptDetails)psObjects.First( - psObject => psObject.BaseObject.GetType() == typeof(AzureVmRPMountScriptDetails)).BaseObject; + //AzureVmRPMountScriptDetails mountScriptDetails = (AzureVmRPMountScriptDetails)psObjects.First( + // psObject => psObject.BaseObject.GetType() == typeof(AzureVmRPMountScriptDetails)).BaseObject; - Assert.True(AzureSession.Instance.DataStore.FileExists(mountScriptDetails.FilePath)); + //Assert.True(AzureSession.Instance.DataStore.FileExists(mountScriptDetails.FilePath)); } [Fact] @@ -109,8 +136,11 @@ public void TestAzureVMRPMountScript() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMSetVaultContext() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMSetVaultContext"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMSetVaultContext" + ); } [Fact(Skip = "To be fixed in upcoming release")] @@ -118,8 +148,11 @@ public void TestAzureVMSetVaultContext() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMSetVaultProperty() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMSetVaultProperty"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMSetVaultProperty" + ); } [Fact(Skip = "To re-record in next release")] @@ -127,8 +160,11 @@ public void TestAzureVMSetVaultProperty() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMDiskExclusion() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMDiskExclusion"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMDiskExclusion" + ); } [Fact(Skip = "CCY region is down and the testing for DS Move is restricted")] @@ -136,8 +172,11 @@ public void TestAzureVMDiskExclusion() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureBackupDataMove() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureBackupDataMove"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureBackupDataMove" + ); } [Fact] @@ -145,8 +184,11 @@ public void TestAzureBackupDataMove() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureRSVaultMSI() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureRSVaultMSI"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureRSVaultMSI" + ); } [Fact] @@ -154,8 +196,11 @@ public void TestAzureRSVaultMSI() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMCrossRegionRestore() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMCrossRegionRestore"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMCrossRegionRestore" + ); } [Fact] @@ -163,8 +208,11 @@ public void TestAzureVMCrossRegionRestore() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMRestoreWithMSI() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMRestoreWithMSI"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMRestoreWithMSI" + ); } [Fact] @@ -172,8 +220,11 @@ public void TestAzureVMRestoreWithMSI() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureRSVaultCMK() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureRSVaultCMK"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureRSVaultCMK" + ); } [Fact] @@ -181,8 +232,11 @@ public void TestAzureRSVaultCMK() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureManagedVMRestore() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureManagedVMRestore"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureManagedVMRestore" + ); } [Fact] @@ -190,8 +244,11 @@ public void TestAzureManagedVMRestore() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMMUA() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMMUA"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMMUA" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs index 332316332ad5..94d332640f1b 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs @@ -13,22 +13,21 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class JobTests : RMTestBase + public partial class JobTests : RecoveryServicesBackupTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/JobTests.ps1"; - public JobTests(Xunit.Abstractions.ITestOutputHelper output) + public JobTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); } [Fact] @@ -36,8 +35,11 @@ public JobTests(Xunit.Abstractions.ITestOutputHelper output) [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMGetJobs() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMGetJobs"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMGetJobs" + ); } [Fact] @@ -45,8 +47,11 @@ public void TestAzureVMGetJobs() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMGetJobsTimeFilter() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMGetJobsTimeFilter"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMGetJobsTimeFilter" + ); } [Fact] @@ -54,8 +59,11 @@ public void TestAzureVMGetJobsTimeFilter() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMWaitJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMWaitJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMWaitJob" + ); } [Fact] @@ -63,8 +71,11 @@ public void TestAzureVMWaitJob() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMCancelJob() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMCancelJob"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMCancelJob" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs index 369c37e9d6db..d8dc9de5975e 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs @@ -16,19 +16,19 @@ using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class PolicyTests : RMTestBase + public partial class PolicyTests : RecoveryServicesBackupTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/PolicyTests.ps1"; - public PolicyTests(Xunit.Abstractions.ITestOutputHelper output) + public PolicyTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); } [Fact] @@ -36,8 +36,11 @@ public PolicyTests(Xunit.Abstractions.ITestOutputHelper output) [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMPolicy() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMPolicy" + ); } [Fact] @@ -45,8 +48,11 @@ public void TestAzureVMPolicy() [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMEnhancedPolicy() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMEnhancedPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMEnhancedPolicy" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs index 35a01a1097eb..a81e208ab58b 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs @@ -16,19 +16,19 @@ using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ProtectionCheckTests : RMTestBase + public partial class ProtectionCheckTests : RecoveryServicesBackupTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ProtectionCheckTests.ps1"; - public ProtectionCheckTests(Xunit.Abstractions.ITestOutputHelper output) + public ProtectionCheckTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); } #if NETSTANDARD @@ -40,8 +40,11 @@ public ProtectionCheckTests(Xunit.Abstractions.ITestOutputHelper output) [Trait(TestConstants.Workload, TestConstants.AzureVM)] public void TestAzureVMProtectionCheck() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.IaasVm, "Test-AzureVMProtectionCheck"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-AzureVMProtectionCheck" + ); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs index 1e4eccf53100..69356c36bf9b 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs @@ -15,19 +15,26 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { - public partial class ContainerTests : RMTestBase + public partial class ContainerTests : RecoveryServicesBackupTestRunner { + private readonly string _commonModule5 = $"ScenarioTests/Common.ps1"; + private readonly string _testModule5 = $"ScenarioTests/{PsBackupProviderTypes.Mab}/ContainerTests.ps1"; + [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] [Trait(TestConstants.Workload, TestConstants.MAB)] public void TestMabGetContainers() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.Mab, "Test-MabGetContainers"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule5.AsAbsoluteLocation()}", + $"Import-Module {_testModule5.AsAbsoluteLocation()}", + "Test-MabGetContainers" + ); } @@ -36,8 +43,10 @@ public void TestMabGetContainers() [Trait(TestConstants.Workload, TestConstants.MAB)] public void TestMabUnregisterContainer() { - TestController.NewInstance.RunPsTest( - _logger, PsBackupProviderTypes.Mab, "Test-MabUnregisterContainer"); + TestRunner.RunTestScript( + $"Import-Module {_commonModule4.AsAbsoluteLocation()}", + $"Import-Module {_testModule4.AsAbsoluteLocation()}", + "Test-MabUnregisterContainer"); } } } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/RecoveryServicesBackupTestRunner.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/RecoveryServicesBackupTestRunner.cs new file mode 100644 index 000000000000..f07f5a96135d --- /dev/null +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/RecoveryServicesBackupTestRunner.cs @@ -0,0 +1,61 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System.Collections.Generic; +using Microsoft.Azure.Commands.TestFx; +using Xunit.Abstractions; + +namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests +{ + public class RecoveryServicesBackupTestRunner + { + protected readonly ITestRunner TestRunner; + + protected RecoveryServicesBackupTestRunner(ITestOutputHelper output) + { + TestRunner = TestManager.CreateInstance(output) + .WithProjectSubfolderForTests("ScenarioTests") + .WithCommonPsScripts(new[] + { + @"Common.ps1", + @"../AzureRM.Resources.ps1", + @"../AzureRM.Storage.ps1" + }) + .WithNewRmModules(helper => new[] + { + helper.RMProfileModule, + helper.GetRMModulePath("Az.RecoveryServices.psd1"), + helper.GetRMModulePath("Az.Compute.psd1"), + helper.GetRMModulePath("Az.Network.psd1") + }) + .WithNewRecordMatcherArguments( + userAgentsToIgnore: new Dictionary + { + {"Microsoft.Azure.Management.Resources.ResourceManagementClient", "2016-02-01"}, + {"Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient", "2016-02-01"} + }, + resourceProviders: new Dictionary + { + {"Microsoft.Resources", null}, + {"Microsoft.Features", null}, + {"Microsoft.Authorization", null}, + {"Microsoft.Compute", null}, + {"Microsoft.Network", null}, + {"Microsoft.Storage", null} + } + ) + .Build(); + } + } +} \ No newline at end of file diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/TestsBase.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/TestsBase.cs deleted file mode 100644 index b1c7c7f51ebb..000000000000 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/TestsBase.cs +++ /dev/null @@ -1,214 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Microsoft.Azure.Commands.Common.Authentication; -using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.Management.RecoveryServices.Backup; -using Microsoft.Azure.Test.HttpRecorder; -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.Rest.ClientRuntime.Azure.TestFramework; -using System.Collections.ObjectModel; -using System.Diagnostics; -using System.Management.Automation; -using Microsoft.Azure.Management.Compute; -using Microsoft.Azure.Management.Internal.Resources; -using Microsoft.Azure.Management.Network; -using Microsoft.Azure.Management.RecoveryServices; -using Microsoft.Azure.Management.Storage.Version2017_10_01; -using Microsoft.Azure.ServiceManagement.Common.Models; -using ComputeHelpers = Microsoft.Azure.PowerShell.Cmdlets.Compute.Helpers; - -namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests -{ - public class TestController - { - private readonly EnvironmentSetupHelper _helper; - - public RecoveryServicesBackupClient RsBackupClient { get; private set; } - - public RecoveryServicesClient RsClient { get; private set; } - - public ResourceManagementClient RmRestClient { get; private set; } - - public StorageManagementClient StorageClient { get; private set; } - - public NetworkManagementClient NetworkManagementClient { get; private set; } - - public ComputeManagementClient ComputeManagementClient { get; private set; } - - public ComputeHelpers.Storage.StorageManagementClient ComputeStorageClient { get; set; } - - protected string ResourceNamespace { get; private set; } - - public static TestController NewInstance => new TestController(); - - public TestController() - { - _helper = new EnvironmentSetupHelper(); - ResourceNamespace = "Microsoft.RecoveryServices"; - } - - protected void SetResourceNamespace(string resourceNamespace) - { - ResourceNamespace = resourceNamespace; - } - - protected void SetupManagementClients(MockContext context) - { - RsBackupClient = GetRsBackupClient(context); - RsClient = GetRsClient(context); - RmRestClient = GetRmRestClient(context); - - StorageClient = GetStorageManagementClient(context); - ComputeStorageClient = GetComputeStorageManagementClient(context); - NetworkManagementClient = GetNetworkManagementClient(context); - ComputeManagementClient = GetComputeManagementClient(context); - - _helper.SetupManagementClients( - RsBackupClient, - RsClient, - RmRestClient, - StorageClient, - ComputeStorageClient, - NetworkManagementClient, - ComputeManagementClient); - } - - public Collection RunPsTest(XunitTracingInterceptor logger, PsBackupProviderTypes providerType, params string[] scripts) - { - var sf = new StackTrace().GetFrame(1); - var callingClassType = sf.GetMethod().ReflectedType?.ToString(); - var mockName = sf.GetMethod().Name; - - _helper.TracingInterceptor = logger; - - return RunPsTestWorkflow( - providerType, - () => scripts, - // no custom cleanup - null, - callingClassType, - mockName); - } - - public Collection RunPsTestWorkflow( - PsBackupProviderTypes providerType, - Func scriptBuilder, - Action cleanup, - string callingClassType, - string mockName) - { - var providers = new Dictionary - { - {"Microsoft.Resources", null}, - {"Microsoft.Features", null}, - {"Microsoft.Authorization", null}, - {"Microsoft.Compute", null}, - {"Microsoft.Network", null}, - {"Microsoft.Storage", null} - }; - var providersToIgnore = new Dictionary - { - {"Microsoft.Azure.Management.Resources.ResourceManagementClient", "2016-02-01"}, - {"Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient", "2016-02-01"} - }; - - HttpMockServer.Matcher = new PermissiveRecordMatcherWithApiExclusion(true, providers, providersToIgnore); - HttpMockServer.RecordsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionRecords"); - - using (var context = MockContext.Start(callingClassType, mockName)) - { - SetupManagementClients(context); - - _helper.SetupEnvironment(AzureModule.AzureResourceManager); - - var testFolderName = providerType.ToString(); - var callingClassName = callingClassType.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries).Last(); - var modules = new List - { - "ScenarioTests\\Common.ps1", - "ScenarioTests\\" + testFolderName + "\\" + callingClassName + ".ps1", - _helper.RMProfileModule, - _helper.GetRMModulePath("AzureRM.RecoveryServices.psd1"), - _helper.GetRMModulePath("AzureRM.Compute.psd1"), - _helper.GetRMModulePath("AzureRM.Network.psd1"), - "AzureRM.Storage.ps1", - "AzureRM.Resources.ps1" - }; - - var workloadCommonPsFile = Path.Combine("ScenarioTests", testFolderName, "Common.ps1"); - if (File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, workloadCommonPsFile))) - { - modules.Add(workloadCommonPsFile); - } - - _helper.SetupModules(AzureModule.AzureResourceManager, modules.ToArray()); - - try - { - var psScripts = scriptBuilder?.Invoke(); - if (psScripts != null) - { - return _helper.RunPowerShellTest(psScripts); - } - } - finally - { - cleanup?.Invoke(); - } - } - - return null; - } - - private static RecoveryServicesClient GetRsClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static RecoveryServicesBackupClient GetRsBackupClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static StorageManagementClient GetStorageManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ComputeHelpers.Storage.StorageManagementClient GetComputeStorageManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static NetworkManagementClient GetNetworkManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ComputeManagementClient GetComputeManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ResourceManagementClient GetRmRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - } -} \ No newline at end of file diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATests.cs index 372bcb593dfb..be2d03534229 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATests.cs @@ -12,53 +12,52 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; -using Microsoft.Azure.ServiceManagement.Common.Models; -using Microsoft.WindowsAzure.Commands.ScenarioTest; - namespace RecoveryServices.SiteRecovery.Test { - public class AsrA2ATests : AsrA2ATestsBase + public class AsrA2ATests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _helperModule = $"ScenarioTests/A2A/A2ATestsHelper.ps1"; + private readonly string _testModule = $"ScenarioTests/A2A/AsrA2ATests.ps1"; - public AsrA2ATests( - ITestOutputHelper output) + public AsrA2ATests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - - this.PowershellHelperFile = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests\\A2A\\A2ATestsHelper.ps1"); - this.PowershellFile = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests\\A2A\\AsrA2ATests.ps1"); - this.Initialize(); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestNewA2ADiskReplicationConfig() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-NewA2ADiskReplicationConfiguration"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-NewA2ADiskReplicationConfiguration"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestNewA2AManagedDiskReplicationConfig() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-NewA2AManagedDiskReplicationConfiguration"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-NewA2AManagedDiskReplicationConfiguration"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestNewA2AManagedDiskReplicationConfigWithCmk() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-NewA2AManagedDiskReplicationConfigurationWithCmk"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-NewA2AManagedDiskReplicationConfigurationWithCmk"); } //#if NETSTANDARD @@ -69,7 +68,10 @@ public void TestNewA2AManagedDiskReplicationConfigWithCmk() [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2ANewAsrFabric() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-NewAsrFabric"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-NewAsrFabric"); } //#if NETSTANDARD @@ -80,56 +82,80 @@ public void A2ANewAsrFabric() [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2ATestNewContainer() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-NewContainer"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-NewContainer"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2ARemoveReplicationProtectedItemDisk() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-RemoveReplicationProtectedItemDisk"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-RemoveReplicationProtectedItemDisk"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2AReplicateProximityPlacementGroupVm() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-ReplicateProximityPlacementGroupVm"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-ReplicateProximityPlacementGroupVm"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2AVMNicConfig() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-VMNicConfig"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-VMNicConfig"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2AZoneToZoneRecoveryPlanReplication() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-ZoneToZoneRecoveryPlanReplication"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-ZoneToZoneRecoveryPlanReplication"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2ARecoveryPlanReplication() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-RecoveryPlanReplication"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-RecoveryPlanReplication"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2AVMSSReplication() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-VMSSReplication"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-VMSSReplication"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void A2ACRGReplication() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-CRGReplication"); + TestRunner.RunTestScript( + $"Import-Module {_helperModule.AsAbsoluteLocation()}", + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-CRGReplication"); } } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATestsBase.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATestsBase.cs deleted file mode 100644 index 10210fb9d4eb..000000000000 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATestsBase.cs +++ /dev/null @@ -1,207 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using Microsoft.Azure.Commands.Common.Authentication; -using Microsoft.Azure.Management.Internal.Resources; -using Microsoft.Azure.Management.Compute; -using Microsoft.Azure.Management.Network; -using InternalNetwork = Microsoft.Azure.Management.Internal.Network.Version2017_10_01; -using Microsoft.Azure.Management.Storage.Version2017_10_01; -using Microsoft.Azure.Management.RecoveryServices; -using Microsoft.Azure.Management.RecoveryServices.SiteRecovery; -using Microsoft.Azure.Test.HttpRecorder; -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; -using Microsoft.Azure.ServiceManagement.Common.Models; -using Microsoft.Rest.ClientRuntime.Azure.TestFramework; -using Microsoft.Azure.Management.RecoveryServices.Backup; -using ComputeHelpers = Microsoft.Azure.PowerShell.Cmdlets.Compute.Helpers; - -namespace RecoveryServices.SiteRecovery.Test -{ - public abstract class AsrA2ATestsBase : RMTestBase - { - protected string VaultSettingsFilePath; - protected string PowershellFile; - protected string PowershellHelperFile; - private EnvironmentSetupHelper _helper; - - protected void Initialize() - { - _helper = new EnvironmentSetupHelper(); - } - - public RecoveryServicesClient RecoveryServicesMgmtClient { get; private set; } - public SiteRecoveryManagementClient SiteRecoveryMgmtClient { get; private set; } - public ResourceManagementClient ResourceManagementRestClient { get; private set; } - public StorageManagementClient StorageClient { get; private set; } - public ComputeHelpers.Storage.StorageManagementClient ComputeStorageClient { get; set; } - public ComputeManagementClient ComputeManagementRestClient { get; private set; } - public RecoveryServicesBackupClient RecoveryServicesBackupClient { get; private set; } - - public void RunPowerShellTest(XunitTracingInterceptor logger, string scenario, params string[] scripts) - { - var sf = new StackTrace().GetFrame(1); - var callingClassType = sf.GetMethod().ReflectedType?.ToString(); - var mockName = sf.GetMethod().Name; - - RunPsTestWorkflow( - scenario, - () => scripts, - // no custom cleanup - null, - callingClassType, - mockName); - } - - public void RunPsTestWorkflow( - string scenario, - Func scriptBuilder, - Action cleanup, - string callingClassType, - string mockName) - { - var providers = new Dictionary - { - {"Microsoft.Resources", null}, - {"Microsoft.Features", null}, - {"Microsoft.Authorization", null}, - {"Microsoft.Compute", null}, - {"Microsoft.Storage", null}, - {"Microsoft.Network", null} - }; - - var providersToIgnore = new Dictionary - { - {"Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient", "2016-09-01"} - }; - - HttpMockServer.Matcher = new PermissiveRecordMatcherWithApiExclusion(true, providers, providersToIgnore); - HttpMockServer.RecordsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionRecords"); - - using (var context = MockContext.Start(callingClassType, mockName)) - { - SetupManagementClients(context); - - _helper.SetupEnvironment(AzureModule.AzureResourceManager); - - var rmProfileModule = _helper.RMProfileModule; - - _helper.SetupModules( - AzureModule.AzureResourceManager, - PowershellFile, - PowershellHelperFile, - rmProfileModule, - _helper.GetRMModulePath("AzureRM.Network.psd1"), - "AzureRM.Storage.ps1", - _helper.GetRMModulePath("AzureRM.Compute.psd1"), - _helper.GetRMModulePath("AzureRM.RecoveryServices.psd1"), -#if !NETSTANDARD - _helper.GetRMModulePath("AzureRM.RecoveryServices.SiteRecovery.psd1"), -#endif - "AzureRM.Resources.ps1"); - - try - { - var psScripts = scriptBuilder?.Invoke(); - if (psScripts != null) - { - _helper.RunPowerShellTest(psScripts); - } - } - finally - { - cleanup?.Invoke(); - } - } - } - - protected void SetupManagementClients(MockContext context) - { - ResourceManagementRestClient = GetResourceManagementClientRestClient(context); - RecoveryServicesMgmtClient = GetRecoveryServicesManagementClient(context); - SiteRecoveryMgmtClient = GetSiteRecoveryManagementClient(context); - StorageClient = GetStorageManagementClient(context); - ComputeStorageClient = GetComputeStorageManagementClient(context); - ComputeManagementRestClient = GetComputeManagementClientRestClient(context); - RecoveryServicesBackupClient = GetRecoveryServicesBackupClient(context); - - _helper.SetupManagementClients( - RecoveryServicesMgmtClient, - SiteRecoveryMgmtClient, - ResourceManagementRestClient, - StorageClient, - ComputeStorageClient, - ComputeManagementRestClient, - GetNetworkManagementClientRestClient(context), - GetNetworkManagementClient(context), - GetComputeNetworkManagementClient(context), - RecoveryServicesBackupClient); - } - - private static RecoveryServicesClient GetRecoveryServicesManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ResourceManagementClient GetResourceManagementClientRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static StorageManagementClient GetStorageManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ComputeHelpers.Storage.StorageManagementClient GetComputeStorageManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static InternalNetwork.NetworkManagementClient GetNetworkManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ComputeHelpers.Network.NetworkManagementClient GetComputeNetworkManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static NetworkManagementClient GetNetworkManagementClientRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ComputeManagementClient GetComputeManagementClientRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static SiteRecoveryManagementClient GetSiteRecoveryManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static RecoveryServicesBackupClient GetRecoveryServicesBackupClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - } -} diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/AsrTestsBase.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/AsrTestsBase.cs deleted file mode 100644 index a5e2a369ab0b..000000000000 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/AsrTestsBase.cs +++ /dev/null @@ -1,196 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.IO; -using RuntimeSerialization = System.Runtime.Serialization; -using System.Xml; -using Microsoft.Azure.Commands.Common.Authentication; -using Microsoft.Azure.Management.Internal.Resources; -using Microsoft.Azure.Management.RecoveryServices; -using Microsoft.Azure.Management.RecoveryServices.SiteRecovery; -using Microsoft.Azure.Test.HttpRecorder; -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; -using Microsoft.Azure.Commands.Common.Authentication.Abstractions; -using Microsoft.Azure.ServiceManagement.Common.Models; -using System.Diagnostics; -using Microsoft.Azure.Portal.RecoveryServices.Models.Common; -using Microsoft.Rest.ClientRuntime.Azure.TestFramework; -using Microsoft.Azure.Management.RecoveryServices.Backup; - -namespace RecoveryServices.SiteRecovery.Test -{ - public abstract class AsrTestsBase : RMTestBase - { - protected string VaultSettingsFilePath; - protected string PowershellFile; - private ASRVaultCreds _asrVaultCreds; - private EnvironmentSetupHelper _helper; - - protected void Initialize() - { - try - { - if (FileUtilities.DataStore.ReadFileAsText(VaultSettingsFilePath).ToLower().Contains(" scripts, - // no custom cleanup - null, - callingClassType, - mockName); - } - - public void RunPsTestWorkflow( - string scenario, - Func scriptBuilder, - Action cleanup, - string callingClassType, - string mockName) - { - var providers = new Dictionary - { - {"Microsoft.Resources", null}, - {"Microsoft.Features", null}, - {"Microsoft.Authorization", null}, - {"Microsoft.Compute", null} - }; - var providersToIgnore = new Dictionary - { - {"Microsoft.Azure.Management.Resources.ResourceManagementClient", "2016-02-01"} - }; - - HttpMockServer.Matcher = new PermissiveRecordMatcherWithApiExclusion(true, providers, providersToIgnore); - HttpMockServer.RecordsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionRecords"); - - using (var context = MockContext.Start(callingClassType, mockName)) - { - SetupManagementClients(scenario, context); - - _helper.SetupEnvironment(AzureModule.AzureResourceManager); - - var modules = new List - { - PowershellFile, - _helper.RMProfileModule, -#if !NETSTANDARD - _helper.GetRMModulePath("AzureRM.RecoveryServices.SiteRecovery.psd1"), -#endif - _helper.GetRMModulePath("AzureRM.RecoveryServices.psd1") - }; - - _helper.SetupModules(AzureModule.AzureResourceManager, modules.ToArray()); - - try - { - var psScripts = scriptBuilder?.Invoke(); - - if (psScripts != null) - { - _helper.RunPowerShellTest(psScripts); - } - } - finally - { - cleanup?.Invoke(); - } - } - } - - protected void SetupManagementClients(string scenario, MockContext context) - { - RmRestClient = GetRmRestClient(context); - RecoveryServicesMgmtClient = GetRecoveryServicesManagementClient(context); - SiteRecoveryMgmtClient = GetSiteRecoveryManagementClient(context); - RecoveryServicesBackupClient = GetRecoveryServicesBackupClient(context); - _helper.SetupManagementClients( - RmRestClient, - RecoveryServicesMgmtClient, - SiteRecoveryMgmtClient, - RecoveryServicesBackupClient); - } - - private static RecoveryServicesClient GetRecoveryServicesManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ResourceManagementClient GetRmRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static RecoveryServicesBackupClient GetRecoveryServicesBackupClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private SiteRecoveryManagementClient GetSiteRecoveryManagementClient(MockContext context) - { - var client = context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - client.ResourceGroupName = _asrVaultCreds.ResourceGroupName; - client.ResourceName = _asrVaultCreds.ResourceName; - - return client; - } - } -} diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/B2A/AsrB2ATests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/B2A/AsrB2ATests.cs index 2d8263043483..2c3ce3c48d2b 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/B2A/AsrB2ATests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/B2A/AsrB2ATests.cs @@ -12,182 +12,121 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; -using Microsoft.Azure.ServiceManagement.Common.Models; -using Microsoft.WindowsAzure.Commands.ScenarioTest; - namespace RecoveryServices.SiteRecovery.Test { - public class AsrB2ATests : AsrTestsBase + public class AsrB2ATests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _credModule = $"ScenarioTests/B2A/B2A.VaultCredentials"; + private readonly string _testModule = $"ScenarioTests/B2A/AsrB2ATests.ps1"; - public AsrB2ATests( - ITestOutputHelper output) + public AsrB2ATests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - this.VaultSettingsFilePath = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "B2A", "B2A.VaultCredentials"); - this.PowershellFile = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "B2A", "AsrB2ATests.ps1"); - this.Initialize(); + } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreatePolicy() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-CreatePolicy -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-CreatePolicy -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreatePCMap() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-CreatePCMap -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-CreatePCMap -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestEnableDR() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryEnableDR -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryEnableDR -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestUpdateRPI() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-UpdateRPI -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-UpdateRPI -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestTFO() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-TFO -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-TFO -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestPlannedFailover() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-PlannedFailover -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-PlannedFailover -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestUpdateRPIWithDES() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-UpdateRPIWithDiskEncryptionSetMap -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-UpdateRPIWithDiskEncryptionSetMap -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreateRPIWithAdditionalProperties() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-CreateRPIWithAdditionalProperties -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-CreateRPIWithAdditionalProperties -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestUpdateRPIWithAdditionalProperties() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-UpdateRPIWithAdditionalProperties -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-UpdateRPIWithAdditionalProperties -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreateRPIWithAvZone() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-CreateRPIWithAvailabilityZone -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-CreateRPIWithAvailabilityZone -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestUpdateRPIWithAvZone() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-UpdateRPIWithAvailabilityZone -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-UpdateRPIWithAvailabilityZone -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/Common/AsrTests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/Common/AsrTests.cs index 68add6554629..104f58edff44 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/Common/AsrTests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/Common/AsrTests.cs @@ -12,46 +12,34 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery; +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; +using Microsoft.Azure.Portal.RecoveryServices.Models.Common; +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using System; using Xunit; using Xunit.Abstractions; -using Microsoft.Azure.ServiceManagement.Common.Models; -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery; -using Microsoft.Azure.Portal.RecoveryServices.Models.Common; namespace RecoveryServices.SiteRecovery.Test { - public class AsrCommonTests : AsrTestsBase + public class AsrCommonTests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _credModule = $"ScenarioTests/Common/Common.VaultCredentials"; + private readonly string _testModule = $"ScenarioTests/Common/AsrTests.ps1"; - public AsrCommonTests( - ITestOutputHelper output) + public AsrCommonTests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - this.VaultSettingsFilePath = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "Common", "Common.VaultCredentials"); - this.PowershellFile = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "Common", "AsrTests.ps1"); - this.Initialize(); + } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void EnumerationTests() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryEnumerationTests -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryEnumerationTests -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } #if NETSTANDARD @@ -59,48 +47,36 @@ public void EnumerationTests() #else [Fact] #endif - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AEvent() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-AsrEvent -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-AsrEvent -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AGetJobTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-Job -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-Job -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AGetNotificationTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-NotificationSettings -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-NotificationSettings -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void CIKTokenValidation() { - DateTime dateTime = new DateTime(636604658296924385, DateTimeKind.Utc); PSRecoveryServicesClient.asrVaultCreds = new ASRVaultCreds(); PSRecoveryServicesClient.asrVaultCreds.ChannelIntegrityKey = "RandomRandom"; diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2A/AsrE2ATests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2A/AsrE2ATests.cs index 0a1ac6469f0a..9419efe0ab2f 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2A/AsrE2ATests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2A/AsrE2ATests.cs @@ -12,127 +12,85 @@ // limitations under the License. // ---------------------------------------------------------------------------------- +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; -using Microsoft.Azure.ServiceManagement.Common.Models; -using Microsoft.WindowsAzure.Commands.ScenarioTest; - namespace RecoveryServices.SiteRecovery.Test { - public class AsrE2ATests : AsrTestsBase + public class AsrE2ATests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; - public AsrE2ATests( - ITestOutputHelper output) + private readonly string _credModule = $"ScenarioTests/E2A/E2A.VaultCredentials"; + private readonly string _testModule = $"ScenarioTests/E2A/AsrE2ATests.ps1"; + + public AsrE2ATests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - this.VaultSettingsFilePath = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "E2A", "E2A.VaultCredentials"); - this.PowershellFile = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "E2A", "AsrE2ATests.ps1"); - this.Initialize(); + } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void FabricTests() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-FabricTest -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-FabricTest -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreatePolicy() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryCreatePolicy -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryCreatePolicy -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestEnableDR() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryEnableDR -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryEnableDR -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestMapNetwork() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-MapNetwork -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-MapNetwork -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestTFO() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-TFO -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-TFO -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestPlannedFailover() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-PlannedFailover -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-PlannedFailover -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestReprotect() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-Reprotect -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-Reprotect -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2E/AsrE2ETests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2E/AsrE2ETests.cs index a0f81f0561ef..f84b6ca03b98 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2E/AsrE2ETests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/E2E/AsrE2ETests.cs @@ -12,250 +12,167 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Xunit; -using Xunit.Abstractions; +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; - +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Xunit; +using Xunit.Abstractions; namespace RecoveryServices.SiteRecovery.Test { - public class AsrE2ETests : AsrTestsBase + public class AsrE2ETests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _credModule = $"ScenarioTests/E2E/E2E.VaultCredentials"; + private readonly string _testModule = $"ScenarioTests/E2E/AsrE2ETests.ps1"; - public AsrE2ETests( - ITestOutputHelper output) + public AsrE2ETests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - this.VaultSettingsFilePath = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "E2E", "E2E.VaultCredentials"); - this.PowershellFile = System.IO.Path.Combine( - System.AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "E2E", "AsrE2ETests.ps1"); - this.Initialize(); + } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void FabricTests() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryFabricTest -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryFabricTest -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreatePolicy() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryCreatePolicy -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryCreatePolicy -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestCreatePCMap() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-CreatePCMap -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-CreatePCMap -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestEnableDR() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryEnableDR -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryEnableDR -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestMapNetwork() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-MapNetwork -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-MapNetwork -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestTFO() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-TFO -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-TFO -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestPlannedFailover() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-PlannedFailover -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-PlannedFailover -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestReprotect() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-Reprotect -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-Reprotect -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestUFOandFailback() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-UFOandFailback -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-UFOandFailback -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestEditRP() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-EditRecoveryPlan -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-EditRecoveryPlan -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestRemoveRP() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryRemoveRecoveryPlan -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryRemoveRecoveryPlan -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestDisableDR() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryDisableDR -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryDisableDR -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestRemovePCMap() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-RemovePCMap -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-RemovePCMap -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestRemovePolicy() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryRemovePolicy -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryRemovePolicy -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestRemoveNetworkPairing() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-RemoveNetworkPairing -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-RemoveNetworkPairing -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestRemoveFabric() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-RemoveFabric -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-RemoveFabric -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs new file mode 100644 index 000000000000..8c7a6a71cfc5 --- /dev/null +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs @@ -0,0 +1,47 @@ +using Microsoft.Azure.Commands.TestFx; +using System.Collections.Generic; +using Xunit.Abstractions; + +namespace Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests +{ + public class RecoveryServicesSiteRecoveryTestRunner + { + protected readonly ITestRunner TestRunner; + + protected RecoveryServicesSiteRecoveryTestRunner(ITestOutputHelper output) + { + TestRunner = TestManager.CreateInstance(output) + .WithCommonPsScripts(new[] + { + "AzureRM.Storage.ps1", + "AzureRM.Resources.ps1" + }) + .WithNewRmModules(helper => new[] + { + helper.RMProfileModule, + helper.GetRMModulePath("Az.Network.psd1"), + helper.GetRMModulePath("Az.Compute.psd1"), + helper.GetRMModulePath("Az.RecoveryServices.psd1"), +#if !NETSTANDARD + helper.GetRMModulePath("Az.RecoveryServices.SiteRecovery.psd1"), +#endif + }) + .WithNewRecordMatcherArguments( + userAgentsToIgnore: new Dictionary + { + {"Microsoft.Azure.Management.Resources.ResourceManagementClient", "2016-02-01"}, + }, + resourceProviders: new Dictionary + { + {"Microsoft.Resources", null}, + {"Microsoft.Features", null}, + {"Microsoft.Authorization", null}, + {"Microsoft.Compute", null}, + {"Microsoft.Storage", null}, + {"Microsoft.Network", null} + } + ) + .Build(); + } + } +} diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2A/AsrV2ATests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2A/AsrV2ATests.cs index 70f35e770b06..da5f4d44c70a 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2A/AsrV2ATests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2A/AsrV2ATests.cs @@ -12,397 +12,277 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System; -using System.IO; +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using System; +using System.IO; using Xunit; using Xunit.Abstractions; namespace RecoveryServices.SiteRecovery.Test { - public class AsrV2ATests : AsrTestsBase + public class AsrV2ATests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _credModule = $"ScenarioTests/V2A/V2A.VaultCredentials"; + private readonly string _testModule = $"ScenarioTests/V2A/AsrV2ATests.ps1"; - public AsrV2ATests( - ITestOutputHelper output) + public AsrV2ATests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - this.VaultSettingsFilePath = Path.Combine( - AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "V2A", "V2A.VaultCredentials"); - this.PowershellFile = Path.Combine( - AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "V2A", "AsrV2ATests.ps1"); - this.Initialize(); + } [Fact(Skip = "Needs investigation for linux.")] [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AvCenterTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-vCenter -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-vCenter -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AAddvCenterTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-AddvCenter -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-AddvCenter -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AFabricTests() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryFabricTest -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryFabricTest -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2APCMappingTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-PCM -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-PCM -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2APCTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-PC -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-PC -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2APolicyTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SiteRecoveryPolicy -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SiteRecoveryPolicy -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AAddPI() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-V2AAddPI -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-V2AAddPI -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreatePolicyAndAssociateTest() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreatePolicyAndAssociate -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreatePolicyAndAssociate -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreateRPI() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreateRPI -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreateRPI -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ATestResync() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ATestResync -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ATestResync -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AUpdateMS() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AUpdateMobilityService -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AUpdateMobilityService -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AUpdateSP() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AUpdateServiceProvider -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AUpdateServiceProvider -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ATFOJob() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ATestFailoverJob -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ATestFailoverJob -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AFailoverJob() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AFailoverJob -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AFailoverJob -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ATestSwitchProtection() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ATestReprotectAzureToVmware -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ATestReprotectAzureToVmware -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ATestFailback() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ATestFailback -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ATestFailback -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ATestReprotect() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ATestReprotectVMwareToAzure -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ATestReprotectVMwareToAzure -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2APSSwitch() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ASwitchProcessServer -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ASwitchProcessServer -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AUpdatePolicy() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AUpdatePolicy -vaultSettingsFilePath \"" + this.VaultSettingsFilePath + "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AUpdatePolicy -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void SetRPI() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "Test-SetRPI -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Test-SetRPI -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreateRPIWithDES() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreateRPIWithDES -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreateRPIWithDES -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreateRPIWithDESEnabledDiskInput() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreateRPIWithDESEnabledDiskInput -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreateRPIWithDESEnabledDiskInput -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreateRPIWithPPG() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreateRPIWithPPG -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreateRPIWithPPG -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AUpdateRPIWithPPG() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AUpdateRPIWithPPG -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AUpdateRPIWithPPG -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreateRPIWithAvZone() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreateRPIWithAvZone -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreateRPIWithAvZone -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AUpdateRPIWithAvZone() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AUpdateRPIWithAvZone -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AUpdateRPIWithAvZone -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2ACreateRPIWithAdditionalProperties() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2ACreateRPIWithAdditionalProperties -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2ACreateRPIWithAdditionalProperties -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } [Fact] - [Trait( - Category.AcceptanceType, - Category.CheckIn)] + [Trait(Category.AcceptanceType, Category.CheckIn)] public void V2AUpdateRPIWithAdditionalProperties() { - this.RunPowerShellTest( - _logger, - Constants.NewModel, - "V2AUpdateRPIWithAdditionalProperties -vaultSettingsFilePath \"" + - this.VaultSettingsFilePath + - "\""); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"V2AUpdateRPIWithAdditionalProperties -vaultSettingsFilePath \"{_credModule.AsAbsoluteLocation()}\""); } } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTests.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTests.cs index 487603695cb7..90348dca8b73 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTests.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTests.cs @@ -12,133 +12,156 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System; -using System.IO; -using Microsoft.Azure.ServiceManagement.Common.Models; +using Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.Test.ScenarioTests; using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; using Xunit.Abstractions; namespace RecoveryServices.SiteRecovery.Test { - public class AsrV2ARCMTests : AsrV2ARCMTestsBase + public class AsrV2ARCMTests : RecoveryServicesSiteRecoveryTestRunner { - public XunitTracingInterceptor _logger; + private readonly string _testModule = $"ScenarioTests/V2ARCM/AsrV2ARcmTests.ps1"; - public AsrV2ARCMTests( - ITestOutputHelper output) + public AsrV2ARCMTests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); - this.PowershellFile = Path.Combine( - AppDomain.CurrentDomain.BaseDirectory, - "ScenarioTests", "V2ARCM", "AsrV2ARcmTests.ps1"); - this.Initialize(); + } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMFabric() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMFabric"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMFabric"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMPolicy() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMPolicy"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMPolicy"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMContainer() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMContainer"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMContainer"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMContainerMapping() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMContainerMapping"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMContainerMapping"); } [Fact] [Trait(Category.AcceptanceType, Category.LiveOnly)] public void TestV2ARCMEnableDR() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMEnableDR"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMEnableDR"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMUpdateProtection() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMUpdateProtection"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMUpdateProtection"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMTestFailover() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMTestFailover"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMTestFailover"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMFailover() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMFailover"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMFailover"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMCommit() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMCommit"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMCommit"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMReprotect() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMReprotect"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMReprotect"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMFailback() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMFailback"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMFailback"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMCancelFailover() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMCancelFailover"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMCancelFailover"); } [Fact] [Trait(Category.AcceptanceType, Category.LiveOnly)] public void TestV2ARCM540Reprotect() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCM540Reprotect"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCM540Reprotect"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMRecoveryPlan() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMRecoveryPlan"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMRecoveryPlan"); } [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestV2ARCMSwitchAppliance() { - this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMSwitchAppliance"); + TestRunner.RunTestScript( + $"Import-Module {_testModule.AsAbsoluteLocation()}", + "Test-V2ARCMSwitchAppliance"); } } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTestsBase.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTestsBase.cs deleted file mode 100644 index acb1e80caf42..000000000000 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/V2ARCM/AsrV2ARcmTestsBase.cs +++ /dev/null @@ -1,208 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using Microsoft.Azure.Commands.Common.Authentication; -using Microsoft.Azure.Management.Internal.Resources; -using Microsoft.Azure.Management.Compute; -using Microsoft.Azure.Management.Network; -using InternalNetwork = Microsoft.Azure.Management.Internal.Network.Version2017_10_01; -using Microsoft.Azure.Management.Storage.Version2017_10_01; -using Microsoft.Azure.Management.RecoveryServices; -using Microsoft.Azure.Management.RecoveryServices.SiteRecovery; -using Microsoft.Azure.Test.HttpRecorder; -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; -using Microsoft.Azure.ServiceManagement.Common.Models; -using Microsoft.Rest.ClientRuntime.Azure.TestFramework; -using Microsoft.Azure.Management.RecoveryServices.Backup; - -namespace RecoveryServices.SiteRecovery.Test -{ - public abstract class AsrV2ARCMTestsBase : RMTestBase - { - protected string VaultSettingsFilePath; - - protected string PowershellFile; - - private EnvironmentSetupHelper _helper; - - protected void Initialize() - { - _helper = new EnvironmentSetupHelper(); - } - - public RecoveryServicesClient RecoveryServicesMgmtClient { get; private set; } - - public SiteRecoveryManagementClient SiteRecoveryMgmtClient { get; private set; } - - public ResourceManagementClient ResourceManagementRestClient { get; private set; } - - public StorageManagementClient StorageClient { get; private set; } - - public ComputeManagementClient ComputeManagementRestClient { get; private set; } - - public RecoveryServicesBackupClient RecoveryServicesBackupClient { get; private set; } - - public void RunPowerShellTest(XunitTracingInterceptor logger, string scenario, params string[] scripts) - { - var sf = new StackTrace().GetFrame(1); - var callingClassType = sf.GetMethod().ReflectedType?.ToString(); - var mockName = sf.GetMethod().Name; - - RunPsTestWorkflow( - scenario, - () => scripts, - // no custom cleanup - null, - callingClassType, - mockName); - } - - public void RunPsTestWorkflow( - string scenario, - Func scriptBuilder, - Action cleanup, - string callingClassType, - string mockName) - { - var providers = new Dictionary - { - {"Microsoft.Resources", null}, - {"Microsoft.Features", null}, - {"Microsoft.Authorization", null}, - {"Microsoft.Compute", null}, - {"Microsoft.Storage", null}, - {"Microsoft.Network", null} - }; - - var providersToIgnore = new Dictionary - { - {"Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient", "2016-09-01"} - }; - - HttpMockServer.Matcher = new PermissiveRecordMatcherWithApiExclusion(true, providers, providersToIgnore); - HttpMockServer.RecordsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionRecords"); - - try - { - using (var context = MockContext.Start(callingClassType, mockName)) - { - SetupManagementClients(context); - - _helper.SetupEnvironment(AzureModule.AzureResourceManager); - - var rmProfileModule = _helper.RMProfileModule; - - _helper.SetupModules( - AzureModule.AzureResourceManager, - PowershellFile, - rmProfileModule, - _helper.GetRMModulePath("AzureRM.Network.psd1"), - "AzureRM.Storage.ps1", - _helper.GetRMModulePath("AzureRM.Compute.psd1"), - _helper.GetRMModulePath("AzureRM.RecoveryServices.psd1"), -#if !NETSTANDARD - _helper.GetRMModulePath("AzureRM.RecoveryServices.SiteRecovery.psd1"), -#endif - "AzureRM.Resources.ps1"); - - try - { - var psScripts = scriptBuilder?.Invoke(); - if (psScripts != null) - { - _helper.RunPowerShellTest(psScripts); - } - } - finally - { - cleanup?.Invoke(); - } - } - } - catch (UriFormatException) - { - // Pass. - } - } - - protected void SetupManagementClients(MockContext context) - { - ResourceManagementRestClient = GetResourceManagementClientRestClient(context); - RecoveryServicesMgmtClient = GetRecoveryServicesManagementClient(context); - SiteRecoveryMgmtClient = GetSiteRecoveryManagementClient(context); - StorageClient = GetStorageManagementClient(context); - ComputeManagementRestClient = GetComputeManagementClientRestClient(context); - RecoveryServicesBackupClient = GetRecoveryServicesBackupClient(context); - - _helper.SetupManagementClients( - RecoveryServicesMgmtClient, - SiteRecoveryMgmtClient, - ResourceManagementRestClient, - StorageClient, - ComputeManagementRestClient, - GetNetworkManagementClientRestClient(context), - GetNetworkManagementClient(context), - RecoveryServicesBackupClient); - } - - private static RecoveryServicesClient GetRecoveryServicesManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ResourceManagementClient GetResourceManagementClientRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static StorageManagementClient GetStorageManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static InternalNetwork.NetworkManagementClient GetNetworkManagementClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static NetworkManagementClient GetNetworkManagementClientRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static ComputeManagementClient GetComputeManagementClientRestClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - - private static SiteRecoveryManagementClient GetSiteRecoveryManagementClient(MockContext context) - { - var client = context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - client.ResourceGroupName = Constants.InMageRcmResourceGroupName; - client.ResourceName = Constants.InMageRcmResourceName; - - return client; - } - - private static RecoveryServicesBackupClient GetRecoveryServicesBackupClient(MockContext context) - { - return context.GetServiceClient(TestEnvironmentFactory.GetTestEnvironment()); - } - } -} diff --git a/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTestRunner.cs b/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTestRunner.cs new file mode 100644 index 000000000000..3af3cbab8025 --- /dev/null +++ b/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTestRunner.cs @@ -0,0 +1,56 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System.Collections.Generic; +using Microsoft.Azure.Commands.TestFx; +using Xunit.Abstractions; + +namespace Microsoft.Azure.Commands.RecoveryServices.Test.ScenarioTests +{ + public class RecoveryServicesTestRunner + { + protected readonly ITestRunner TestRunner; + + protected RecoveryServicesTestRunner(ITestOutputHelper output) + { + TestRunner = TestManager.CreateInstance(output) + .WithNewPsScriptFilename($"{GetType().Name}.ps1") + .WithProjectSubfolderForTests("ScenarioTests") + .WithCommonPsScripts(new[] + { + @"../AzureRM.Resources.ps1" + }) + .WithNewRmModules(helper => new[] + { + helper.RMProfileModule, + helper.GetRMModulePath("Az.RecoveryServices.psd1") + }) + .WithNewRecordMatcherArguments( + userAgentsToIgnore: new Dictionary + { + {"Microsoft.Azure.Management.Resources.ResourceManagementClient", "2016-02-01"}, + {"Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient", "2016-02-01"} + }, + resourceProviders: new Dictionary + { + {"Microsoft.Resources", null}, + {"Microsoft.Features", null}, + {"Microsoft.Authorization", null}, + {"Microsoft.Compute", null} + } + ) + .Build(); + } + } +} \ No newline at end of file diff --git a/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTests.cs b/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTests.cs index 7dafccf6f900..2ac69f7bfd0a 100644 --- a/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTests.cs +++ b/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/RecoveryServicesTests.cs @@ -12,29 +12,23 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Xunit; using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Test.ScenarioTests { - public class RecoveryServicesTests : RMTestBase + public class RecoveryServicesTests : RecoveryServicesTestRunner { - public XunitTracingInterceptor _logger; - - public RecoveryServicesTests(Xunit.Abstractions.ITestOutputHelper output) + public RecoveryServicesTests(ITestOutputHelper output) : base(output) { - _logger = new XunitTracingInterceptor(output); - XunitTracingInterceptor.AddToContext(_logger); } [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestRecoveryServicesVaultCRUD() { - TestController.NewInstance.RunPsTest(_logger, "Test-RecoveryServicesVaultCRUD"); + TestRunner.RunTestScript("Test-RecoveryServicesVaultCRUD"); } #if NETSTANDARD @@ -45,7 +39,7 @@ public void TestRecoveryServicesVaultCRUD() [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestGetRSVaultSettingsFile() { - TestController.NewInstance.RunPsTest(_logger, "Test-GetRSVaultSettingsFile"); + TestRunner.RunTestScript("Test-GetRSVaultSettingsFile"); } } } diff --git a/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/TestsBase.cs b/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/TestsBase.cs deleted file mode 100644 index 82cf7257d057..000000000000 --- a/src/RecoveryServices/RecoveryServices.Test/ScenarioTests/TestsBase.cs +++ /dev/null @@ -1,144 +0,0 @@ -// ---------------------------------------------------------------------------------- -// -// Copyright Microsoft Corporation -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// ---------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Microsoft.Azure.Commands.Common.Authentication; -using Microsoft.Azure.Management.RecoveryServices; -using Microsoft.Azure.Test.HttpRecorder; -using Microsoft.WindowsAzure.Commands.ScenarioTest; -using RestTestFramework = Microsoft.Rest.ClientRuntime.Azure.TestFramework; -using Microsoft.Azure.ServiceManagement.Common.Models; -using System.Diagnostics; -using Microsoft.Azure.Management.Internal.Resources; -using Microsoft.Azure.Management.RecoveryServices.Backup; - -namespace Microsoft.Azure.Commands.RecoveryServices.Test.ScenarioTests -{ - public class TestController - { - private readonly EnvironmentSetupHelper _helper; - - public RecoveryServicesClient RsClient { get; private set; } - - public RecoveryServicesBackupClient RsBackupClient { get; private set; } - - public ResourceManagementClient InternalRmClient { get; private set; } - - public static TestController NewInstance => new TestController(); - - public TestController() - { - _helper = new EnvironmentSetupHelper(); - } - - protected void SetupManagementClients(RestTestFramework.MockContext context) - { - RsClient = GetRsClient(context); - InternalRmClient = GetInternalRmClient(context); - RsBackupClient = GetRsBackupClient(context); - - _helper.SetupManagementClients(RsClient, InternalRmClient, RsBackupClient); - } - - public void RunPsTest(XunitTracingInterceptor logger, params string[] scripts) - { - var sf = new StackTrace().GetFrame(1); - var callingClassType = sf.GetMethod().ReflectedType?.ToString(); - var mockName = sf.GetMethod().Name; - - _helper.TracingInterceptor = logger; - - RunPsTestWorkflow( - () => scripts, - // no custom initializer - null, - // no custom cleanup - null, - callingClassType, - mockName); - } - - public void RunPsTestWorkflow( - Func scriptBuilder, - Action initialize, - Action cleanup, - string callingClassType, - string mockName) - { - var providers = new Dictionary - { - {"Microsoft.Resources", null}, - {"Microsoft.Features", null}, - {"Microsoft.Authorization", null}, - {"Microsoft.Compute", null} - }; - var providersToIgnore = new Dictionary - { - {"Microsoft.Azure.Management.Resources.ResourceManagementClient", "2016-02-01"}, - {"Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient", "2016-02-01"} - }; - HttpMockServer.Matcher = new PermissiveRecordMatcherWithApiExclusion(true, providers, providersToIgnore); - HttpMockServer.RecordsDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionRecords"); - - using (var context = RestTestFramework.MockContext.Start(callingClassType, mockName)) - { - initialize?.Invoke(this); - - SetupManagementClients(context); - - _helper.SetupEnvironment(AzureModule.AzureResourceManager); - - var callingClassName = callingClassType.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries).Last(); - var psFile = "ScenarioTests\\" + callingClassName + ".ps1"; - var rmProfileModule = _helper.RMProfileModule; - var rmModulePath = _helper.GetRMModulePath("AzureRM.RecoveryServices.psd1"); - - var modules = new List {psFile, rmProfileModule, rmModulePath, "AzureRM.Resources.ps1"}; - - _helper.SetupModules(AzureModule.AzureResourceManager, modules.ToArray()); - - try - { - var psScripts = scriptBuilder?.Invoke(); - if (psScripts != null) - { - _helper.RunPowerShellTest(psScripts); - } - } - finally - { - cleanup?.Invoke(); - } - } - } - - private static ResourceManagementClient GetInternalRmClient(RestTestFramework.MockContext context) - { - return context.GetServiceClient(RestTestFramework.TestEnvironmentFactory.GetTestEnvironment()); - } - - private static RecoveryServicesClient GetRsClient(RestTestFramework.MockContext context) - { - return context.GetServiceClient(RestTestFramework.TestEnvironmentFactory.GetTestEnvironment()); - } - - private static RecoveryServicesBackupClient GetRsBackupClient(RestTestFramework.MockContext context) - { - return context.GetServiceClient(RestTestFramework.TestEnvironmentFactory.GetTestEnvironment()); - } - } -} \ No newline at end of file diff --git a/src/RecoveryServices/ScenarioTests.zip b/src/RecoveryServices/ScenarioTests.zip new file mode 100644 index 0000000000000000000000000000000000000000..36bae2fb313219b03b183f949c8cc9f0d697c882 GIT binary patch literal 60804 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 U;0|;K1|{$l%*(()eTtO+4@Ws3EdT%j literal 0 HcmV?d00001 diff --git a/src/RecoveryServices/ScenarioTestsorigin.zip b/src/RecoveryServices/ScenarioTestsorigin.zip new file mode 100644 index 0000000000000000000000000000000000000000..7bc1e1ba2312cbb177fdad171de78628150b8479 GIT binary patch literal 3787 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 Date: Fri, 17 Jun 2022 19:29:38 +0800 Subject: [PATCH 2/3] remove zip file and add intro --- .../RecoveryServicesSiteRecoveryTestRunner.cs | 16 +++++++++++++++- src/RecoveryServices/ScenarioTests.zip | Bin 60804 -> 0 bytes src/RecoveryServices/ScenarioTestsorigin.zip | Bin 3787 -> 0 bytes 3 files changed, 15 insertions(+), 1 deletion(-) delete mode 100644 src/RecoveryServices/ScenarioTests.zip delete mode 100644 src/RecoveryServices/ScenarioTestsorigin.zip diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs index 8c7a6a71cfc5..867edf185195 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs @@ -1,4 +1,18 @@ -using Microsoft.Azure.Commands.TestFx; +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.TestFx; using System.Collections.Generic; using Xunit.Abstractions; diff --git a/src/RecoveryServices/ScenarioTests.zip b/src/RecoveryServices/ScenarioTests.zip deleted file mode 100644 index 36bae2fb313219b03b183f949c8cc9f0d697c882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60804 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 U;0|;K1|{$l%*(()eTtO+4@Ws3EdT%j diff --git a/src/RecoveryServices/ScenarioTestsorigin.zip b/src/RecoveryServices/ScenarioTestsorigin.zip deleted file mode 100644 index 7bc1e1ba2312cbb177fdad171de78628150b8479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3787 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 Date: Mon, 20 Jun 2022 11:35:39 +0800 Subject: [PATCH 3/3] remove some meaningless numbers --- .../AzureFiles/ContainerTests.cs | 13 ++- .../ScenarioTests/AzureFiles/ItemTests.cs | 25 +++--- .../ScenarioTests/AzureFiles/JobTests.cs | 17 ++-- .../ScenarioTests/AzureFiles/PolicyTests.cs | 13 ++- .../AzureFiles/ProtectionCheckTests.cs | 9 +-- .../ScenarioTests/AzureSql/ContainerTests.cs | 13 ++- .../ScenarioTests/AzureSql/ItemTests.cs | 17 ++-- .../ScenarioTests/AzureSql/PolicyTests.cs | 9 +-- .../AzureWorkload/ContainerTests.cs | 13 ++- .../ScenarioTests/AzureWorkload/ItemTests.cs | 45 +++++------ .../ScenarioTests/AzureWorkload/JobTests.cs | 17 ++-- .../AzureWorkload/PolicyTests.cs | 9 +-- .../ScenarioTests/Dpm/ContainerTests.cs | 14 ++-- .../ScenarioTests/IaasVm/ContainerTests.cs | 9 +-- .../ScenarioTests/IaasVm/ItemTests.cs | 81 +++++++++---------- .../ScenarioTests/IaasVm/JobTests.cs | 22 +++-- .../ScenarioTests/IaasVm/PolicyTests.cs | 16 ++-- .../IaasVm/ProtectionCheckTests.cs | 11 +-- .../ScenarioTests/Mab/ContainerTests.cs | 13 ++- .../RecoveryServicesSiteRecoveryTestRunner.cs | 5 +- 20 files changed, 172 insertions(+), 199 deletions(-) diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs index 5f6b0a313292..6aba5cd9dbe4 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ContainerTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ContainerTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; - private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ContainerTests.ps1"; + private readonly string _AzureFilescommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _AzureFilestestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ContainerTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class ContainerTests : RecoveryServicesBackupTestRunner public void TestAzureFSContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSContainer" ); } @@ -43,8 +42,8 @@ public void TestAzureFSContainer() public void TestAzureFSUnregisterContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSUnregisterContainer" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs index 7f43e7512330..5687c25ce9d3 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ItemTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ItemTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; - private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ItemTests.ps1"; + private readonly string _AzureFilescommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _AzureFilestestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ItemTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class ItemTests : RecoveryServicesBackupTestRunner public void TestAzureFSItem() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSItem" ); } @@ -43,8 +42,8 @@ public void TestAzureFSItem() public void TestAzureFSBackup() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSBackup" ); } @@ -55,8 +54,8 @@ public void TestAzureFSBackup() public void TestAzureFSGetRPs() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSGetRPs" ); } @@ -67,8 +66,8 @@ public void TestAzureFSGetRPs() public void TestAzureFSProtection() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSProtection" ); } @@ -79,8 +78,8 @@ public void TestAzureFSProtection() public void TestAzureFSFullRestore() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSFullRestore" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs index dfc9215037ad..af1628835e42 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/JobTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class JobTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; - private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/JobTests.ps1"; + private readonly string _AzureFilescommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _AzureFilestestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/JobTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class JobTests : RecoveryServicesBackupTestRunner public void TestAzureFSGetJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSGetJob" ); } @@ -43,8 +42,8 @@ public void TestAzureFSGetJob() public void TestAzureFSCancelJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSCancelJob" ); } @@ -55,8 +54,8 @@ public void TestAzureFSCancelJob() public void TestAzureFSWaitJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSWaitJob" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs index 8383d797f8f8..74790cd70335 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/PolicyTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class PolicyTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; - private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/PolicyTests.ps1"; + private readonly string _AzureFilescommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _AzureFilestestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/PolicyTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class PolicyTests : RecoveryServicesBackupTestRunner public void TestAzureFSPolicy() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSPolicy" ); } @@ -43,8 +42,8 @@ public void TestAzureFSPolicy() public void TestAzureFSHourlyPolicy() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSHourlyPolicy" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs index 5354c8c19035..26609769611c 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureFiles/ProtectionCheckTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ProtectionCheckTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; - private readonly string _testModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ProtectionCheckTests.ps1"; + private readonly string _AzureFilescommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/Common.ps1"; + private readonly string _AzureFilestestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureFiles}/ProtectionCheckTests.ps1"; [Fact(Skip = "To un-skip in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class ProtectionCheckTests : RecoveryServicesBackupTestRunner public void TestAzureFSProtectionCheck() { TestRunner.RunTestScript( - $"Import-Module {_commonModule.AsAbsoluteLocation()}", - $"Import-Module {_testModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilescommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureFilestestModule.AsAbsoluteLocation()}", "Test-AzureFSProtectionCheck" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs index 51a827f17a00..7e5eb428f043 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ContainerTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ContainerTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule1 = $"ScenarioTests/Common.ps1"; - private readonly string _testModule1 = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/ContainerTests.ps1"; + private readonly string _AzureSqlcommonModule = $"ScenarioTests/Common.ps1"; + private readonly string _AzureSqltestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/ContainerTests.ps1"; public ContainerTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { @@ -35,8 +34,8 @@ public ContainerTests(Xunit.Abstractions.ITestOutputHelper output) : base(output public void TestAzureSqlGetContainers() { TestRunner.RunTestScript( - $"Import-Module {_commonModule1.AsAbsoluteLocation()}", - $"Import-Module {_testModule1.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqlcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqltestModule.AsAbsoluteLocation()}", "Test-AzureSqlGetContainers" ); } @@ -47,8 +46,8 @@ public void TestAzureSqlGetContainers() public void TestAzureSqlUnregisterContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule1.AsAbsoluteLocation()}", - $"Import-Module {_testModule1.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqlcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqltestModule.AsAbsoluteLocation()}", "Test-AzureSqlUnregisterContainer" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs index 6928b86669a8..7ec1e52ca313 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/ItemTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ItemTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule1 = $"ScenarioTests/Common.ps1"; - private readonly string _testModule1 = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/ItemTests.ps1"; + private readonly string _AzureSqlcommonModule = $"ScenarioTests/Common.ps1"; + private readonly string _AzureSqltestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/ItemTests.ps1"; public ItemTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { @@ -35,8 +34,8 @@ public ItemTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) public void TestAzureSqlGetItems() { TestRunner.RunTestScript( - $"Import-Module {_commonModule1.AsAbsoluteLocation()}", - $"Import-Module {_testModule1.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqlcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqltestModule.AsAbsoluteLocation()}", "Test-AzureSqlGetItems" ); } @@ -47,8 +46,8 @@ public void TestAzureSqlGetItems() public void TestAzureSqlDisableProtection() { TestRunner.RunTestScript( - $"Import-Module {_commonModule1.AsAbsoluteLocation()}", - $"Import-Module {_testModule1.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqlcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqltestModule.AsAbsoluteLocation()}", "Test-AzureSqlDisableProtection" ); } @@ -59,8 +58,8 @@ public void TestAzureSqlDisableProtection() public void TestAzureSqlGetRPs() { TestRunner.RunTestScript( - $"Import-Module {_commonModule1.AsAbsoluteLocation()}", - $"Import-Module {_testModule1.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqlcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqltestModule.AsAbsoluteLocation()}", "Test-AzureSqlGetRPs" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs index 60d0f2264073..2404b62ef44b 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureSql/PolicyTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class PolicyTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule1 = $"ScenarioTests/Common.ps1"; - private readonly string _testModule1 = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/PolicyTests.ps1"; + private readonly string _AzureSqlcommonModule = $"ScenarioTests/Common.ps1"; + private readonly string _AzureSqltestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureSql}/PolicyTests.ps1"; [Fact(Skip = "This workload is not supported anymore")] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class PolicyTests : RecoveryServicesBackupTestRunner public void TestAzureSqlPolicy() { TestRunner.RunTestScript( - $"Import-Module {_commonModule1.AsAbsoluteLocation()}", - $"Import-Module {_testModule1.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqlcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureSqltestModule.AsAbsoluteLocation()}", "Test-AzureSqlPolicy" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs index fdeed336a6fb..6dd9f2082ac7 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ContainerTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ContainerTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; - private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/ContainerTests.ps1"; + private readonly string _AzureWorkloadcommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _AzureWorkloadtestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/ContainerTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class ContainerTests : RecoveryServicesBackupTestRunner public void GetAzureVmWorkloadContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Get-AzureVmWorkloadContainer" ); } @@ -43,8 +42,8 @@ public void GetAzureVmWorkloadContainer() public void UnregisterAzureWorkloadContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Unregister-AzureWorkloadContainer" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs index bde3b00eb7fb..316ffa062586 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/ItemTests.cs @@ -15,7 +15,6 @@ using Microsoft.Azure.Commands.Common.Authentication; using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -23,8 +22,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ItemTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; - private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/ItemTests.ps1"; + private readonly string _AzureWorkloadcommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _AzureWorkloadtestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/ItemTests.ps1"; [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -32,8 +31,8 @@ public partial class ItemTests : RecoveryServicesBackupTestRunner public void TestAzureVmWorkloadProtectableItem() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadProtectableItem" ); } @@ -44,8 +43,8 @@ public void TestAzureVmWorkloadProtectableItem() public void TestAzureVmWorkloadInitializeProtectableItem() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadInitializeProtectableItem" ); } @@ -56,8 +55,8 @@ public void TestAzureVmWorkloadInitializeProtectableItem() public void TestAzureVmWorkloadEnableProtectableItem() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadEnableProtectableItem" ); } @@ -69,8 +68,8 @@ public void TestAzureVmWorkloadEnableAutoProtectableItem() { AzureSession.Instance.RegisterComponent("GetGuidComponent", () => "29e3f4dc-6407-4a9a-99cf-ea910639ba19", true); TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadEnableAutoProtectableItem" ); } @@ -81,8 +80,8 @@ public void TestAzureVmWorkloadEnableAutoProtectableItem() public void TestAzureVmWorkloadBackupProtectionItem() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadBackupProtectionItem" ); } @@ -93,8 +92,8 @@ public void TestAzureVmWorkloadBackupProtectionItem() public void TestAzureVmWorkloadGetRPs() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadGetRPs" ); } @@ -105,8 +104,8 @@ public void TestAzureVmWorkloadGetRPs() public void TestAzureVmWorkloadGetLogChains() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadGetLogChains" ); } @@ -117,8 +116,8 @@ public void TestAzureVmWorkloadGetLogChains() public void TestAzureVmWorkloadFullRestore() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadFullRestore" ); } @@ -129,8 +128,8 @@ public void TestAzureVmWorkloadFullRestore() public void TestAzureVmWorkloadFullRestoreWithFiles() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadFullRestoreWithFiles" ); } @@ -141,8 +140,8 @@ public void TestAzureVmWorkloadFullRestoreWithFiles() public void TestAzureVmWorkloadRestoreAsFiles() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadRestoreAsFiles" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs index 170656b76bb8..10633e034f17 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/JobTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class JobTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; - private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/JobTests.ps1"; + private readonly string _AzureWorkloadcommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _AzureWorkloadtestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/JobTests.ps1"; [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class JobTests : RecoveryServicesBackupTestRunner public void TestAzureVmWorkloadGetJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadGetJob" ); } @@ -43,8 +42,8 @@ public void TestAzureVmWorkloadGetJob() public void TestAzureVmWorkloadCancelJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadCancelJob" ); } @@ -55,8 +54,8 @@ public void TestAzureVmWorkloadCancelJob() public void TestAzureVmWorkloadWaitJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadWaitJob" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs index c322eb9e114e..437bf27e2c6e 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class PolicyTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; - private readonly string _testModule2 = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/PolicyTests.ps1"; + private readonly string _AzureWorkloadcommonModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/Common.ps1"; + private readonly string _AzureWorkloadtestModule = $"ScenarioTests/{PsBackupProviderTypes.AzureWorkload}/PolicyTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class PolicyTests : RecoveryServicesBackupTestRunner public void TestAzureVmWorkloadPolicy() { TestRunner.RunTestScript( - $"Import-Module {_commonModule2.AsAbsoluteLocation()}", - $"Import-Module {_testModule2.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_AzureWorkloadtestModule.AsAbsoluteLocation()}", "Test-AzureVmWorkloadPolicy" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs index 75172f719e5a..feb45c361294 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Dpm/ContainerTests.cs @@ -14,17 +14,15 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; -using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ContainerTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule3 = $"ScenarioTests/Common.ps1"; - private readonly string _testModule3 = $"ScenarioTests/{PsBackupProviderTypes.Dpm}/ContainerTests.ps1"; + private readonly string _DpmcommonModule = $"ScenarioTests/Common.ps1"; + private readonly string _DpmtestModule = $"ScenarioTests/{PsBackupProviderTypes.Dpm}/ContainerTests.ps1"; [Fact(Skip ="To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -32,8 +30,8 @@ public partial class ContainerTests : RecoveryServicesBackupTestRunner public void TestBmsGetContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule3.AsAbsoluteLocation()}", - $"Import-Module {_testModule3.AsAbsoluteLocation()}", + $"Import-Module {_DpmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_DpmtestModule.AsAbsoluteLocation()}", "Test-BmsGetContainer" ); } @@ -44,8 +42,8 @@ public void TestBmsGetContainer() public void TestBmsUnregisterContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule3.AsAbsoluteLocation()}", - $"Import-Module {_testModule3.AsAbsoluteLocation()}", + $"Import-Module {_DpmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_DpmtestModule.AsAbsoluteLocation()}", "Test-BmsUnregisterContainer" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs index 792ae494946e..15c1d337a81e 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ContainerTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ContainerTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; - private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ContainerTests.ps1"; + private readonly string _IaasVmcommonModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _IaasVmtestModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ContainerTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class ContainerTests : RecoveryServicesBackupTestRunner public void TestAzureVMGetContainers() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMGetContainers" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs index d6ade45c3fb5..3cc69087febc 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs @@ -12,12 +12,7 @@ // limitations under the License. // ---------------------------------------------------------------------------------- -using System.Collections.ObjectModel; -using System.Linq; -using System.Management.Automation; -using Microsoft.Azure.Commands.Common.Authentication; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Xunit; using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.Utilities.Common; @@ -26,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ItemTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; - private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ItemTests.ps1"; + private readonly string _IaasVmcommonModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _IaasVmtestModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ItemTests.ps1"; [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -35,8 +30,8 @@ public partial class ItemTests : RecoveryServicesBackupTestRunner public void TestAzureVMGetItems() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMGetItems" ); } @@ -47,8 +42,8 @@ public void TestAzureVMGetItems() public void TestAzureVMProtection() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMProtection" ); } @@ -59,8 +54,8 @@ public void TestAzureVMProtection() public void TestAzureVMBackup() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMBackup" ); } @@ -71,8 +66,8 @@ public void TestAzureVMBackup() public void TestAzureVMGetRPs() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMGetRPs" ); } @@ -85,8 +80,8 @@ public void TestAzureVMGetRPs() public void TestAzureVMFullRestore() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMFullRestore" ); } @@ -97,8 +92,8 @@ public void TestAzureVMFullRestore() public void TestAzureUnmanagedVMFullRestore() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureUnmanagedVMFullRestore" ); } @@ -109,8 +104,8 @@ public void TestAzureUnmanagedVMFullRestore() public void TestAzureVMSoftDelete() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMSoftDelete" ); } @@ -121,8 +116,8 @@ public void TestAzureVMSoftDelete() public void TestAzureVMRPMountScript() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMRPMountScript"); //AzureVmRPMountScriptDetails mountScriptDetails = (AzureVmRPMountScriptDetails)psObjects.First( @@ -137,8 +132,8 @@ public void TestAzureVMRPMountScript() public void TestAzureVMSetVaultContext() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMSetVaultContext" ); } @@ -149,8 +144,8 @@ public void TestAzureVMSetVaultContext() public void TestAzureVMSetVaultProperty() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMSetVaultProperty" ); } @@ -161,8 +156,8 @@ public void TestAzureVMSetVaultProperty() public void TestAzureVMDiskExclusion() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMDiskExclusion" ); } @@ -173,8 +168,8 @@ public void TestAzureVMDiskExclusion() public void TestAzureBackupDataMove() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureBackupDataMove" ); } @@ -185,8 +180,8 @@ public void TestAzureBackupDataMove() public void TestAzureRSVaultMSI() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureRSVaultMSI" ); } @@ -197,8 +192,8 @@ public void TestAzureRSVaultMSI() public void TestAzureVMCrossRegionRestore() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMCrossRegionRestore" ); } @@ -209,8 +204,8 @@ public void TestAzureVMCrossRegionRestore() public void TestAzureVMRestoreWithMSI() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMRestoreWithMSI" ); } @@ -221,8 +216,8 @@ public void TestAzureVMRestoreWithMSI() public void TestAzureRSVaultCMK() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureRSVaultCMK" ); } @@ -233,8 +228,8 @@ public void TestAzureRSVaultCMK() public void TestAzureManagedVMRestore() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureManagedVMRestore" ); } @@ -245,8 +240,8 @@ public void TestAzureManagedVMRestore() public void TestAzureVMMUA() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMMUA" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs index 94d332640f1b..d315df3ae34b 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/JobTests.cs @@ -14,17 +14,15 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; -using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class JobTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; - private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/JobTests.ps1"; + private readonly string _IaasVmcommonModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _IaasVmtestModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/JobTests.ps1"; public JobTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { @@ -36,8 +34,8 @@ public JobTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) public void TestAzureVMGetJobs() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMGetJobs" ); } @@ -48,8 +46,8 @@ public void TestAzureVMGetJobs() public void TestAzureVMGetJobsTimeFilter() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMGetJobsTimeFilter" ); } @@ -60,8 +58,8 @@ public void TestAzureVMGetJobsTimeFilter() public void TestAzureVMWaitJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMWaitJob" ); } @@ -72,8 +70,8 @@ public void TestAzureVMWaitJob() public void TestAzureVMCancelJob() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMCancelJob" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs index d8dc9de5975e..a0084c4988f4 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/PolicyTests.cs @@ -13,19 +13,17 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; -using Xunit.Abstractions; + namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class PolicyTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; - private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/PolicyTests.ps1"; + private readonly string _IaasVmcommonModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _IaasVmtestModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/PolicyTests.ps1"; public PolicyTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { @@ -37,8 +35,8 @@ public PolicyTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) public void TestAzureVMPolicy() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMPolicy" ); } @@ -49,8 +47,8 @@ public void TestAzureVMPolicy() public void TestAzureVMEnhancedPolicy() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMEnhancedPolicy" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs index a81e208ab58b..30ea71db1b49 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ProtectionCheckTests.cs @@ -13,19 +13,16 @@ // ---------------------------------------------------------------------------------- using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; -using Microsoft.Azure.ServiceManagement.Common.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; -using Xunit.Abstractions; namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ProtectionCheckTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; - private readonly string _testModule4 = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ProtectionCheckTests.ps1"; + private readonly string _IaasVmcommonModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/Common.ps1"; + private readonly string _IaasVmtestModule = $"ScenarioTests/{PsBackupProviderTypes.IaasVm}/ProtectionCheckTests.ps1"; public ProtectionCheckTests(Xunit.Abstractions.ITestOutputHelper output) : base(output) { @@ -41,8 +38,8 @@ public ProtectionCheckTests(Xunit.Abstractions.ITestOutputHelper output) : base( public void TestAzureVMProtectionCheck() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}", "Test-AzureVMProtectionCheck" ); } diff --git a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs index 69356c36bf9b..706837e339e7 100644 --- a/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs +++ b/src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/Mab/ContainerTests.cs @@ -14,7 +14,6 @@ using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; -using Microsoft.WindowsAzure.Commands.Test.Utilities.Common; using Microsoft.WindowsAzure.Commands.Utilities.Common; using Xunit; @@ -22,8 +21,8 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Test.ScenarioTests { public partial class ContainerTests : RecoveryServicesBackupTestRunner { - private readonly string _commonModule5 = $"ScenarioTests/Common.ps1"; - private readonly string _testModule5 = $"ScenarioTests/{PsBackupProviderTypes.Mab}/ContainerTests.ps1"; + private readonly string _MabcommonModule = $"ScenarioTests/Common.ps1"; + private readonly string _MabtestModule = $"ScenarioTests/{PsBackupProviderTypes.Mab}/ContainerTests.ps1"; [Fact(Skip = "To be fixed in upcoming release")] [Trait(Category.AcceptanceType, Category.CheckIn)] @@ -31,8 +30,8 @@ public partial class ContainerTests : RecoveryServicesBackupTestRunner public void TestMabGetContainers() { TestRunner.RunTestScript( - $"Import-Module {_commonModule5.AsAbsoluteLocation()}", - $"Import-Module {_testModule5.AsAbsoluteLocation()}", + $"Import-Module {_MabcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_MabtestModule.AsAbsoluteLocation()}", "Test-MabGetContainers" ); } @@ -44,8 +43,8 @@ public void TestMabGetContainers() public void TestMabUnregisterContainer() { TestRunner.RunTestScript( - $"Import-Module {_commonModule4.AsAbsoluteLocation()}", - $"Import-Module {_testModule4.AsAbsoluteLocation()}", + $"Import-Module {_MabcommonModule.AsAbsoluteLocation()}", + $"Import-Module {_MabtestModule.AsAbsoluteLocation()}", "Test-MabUnregisterContainer"); } } diff --git a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs index 867edf185195..5febf73b6b92 100644 --- a/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs +++ b/src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/RecoveryServicesSiteRecoveryTestRunner.cs @@ -25,10 +25,11 @@ public class RecoveryServicesSiteRecoveryTestRunner protected RecoveryServicesSiteRecoveryTestRunner(ITestOutputHelper output) { TestRunner = TestManager.CreateInstance(output) + .WithProjectSubfolderForTests("ScenarioTests") .WithCommonPsScripts(new[] { - "AzureRM.Storage.ps1", - "AzureRM.Resources.ps1" + @"../AzureRM.Storage.ps1", + @"../AzureRM.Resources.ps1" }) .WithNewRmModules(helper => new[] {