e2etest/GuestProxyAgentTest/TestCases/AddLinuxVMExtensionCase.cs (71 lines of code) (raw):

// Copyright (c) Microsoft Corporation // SPDX-License-Identifier: MIT using GuestProxyAgentTest.TestScenarios; using Azure.ResourceManager.Compute; namespace GuestProxyAgentTest.TestCases { /// <summary> /// Reboot VM test case /// </summary> public class AddLinuxVMExtensionCase : TestCaseBase { public AddLinuxVMExtensionCase() : base("AddLinuxVMExtensionCase") { } public AddLinuxVMExtensionCase(string testCaseName) : base(testCaseName) { } private const string EXTENSION_NAME = "ProxyAgentLinuxTest"; public override async Task StartAsync(TestCaseExecutionContext context) { var vmr = context.VirtualMachineResource; var vmExtData = new VirtualMachineExtensionData(GuestProxyAgentTest.Settings.TestSetting.Instance.location) { Location = GuestProxyAgentTest.Settings.TestSetting.Instance.location, Publisher = "Microsoft.CPlat.ProxyAgent", ExtensionType = "ProxyAgentLinuxTest", TypeHandlerVersion = "1.0", AutoUpgradeMinorVersion = false, EnableAutomaticUpgrade = false, Settings = { } }; try { context.TestResultDetails = new GuestProxyAgentTest.Models.TestCaseResultDetails { StdOut = "", StdErr = "", Succeed = false, FromBlob = false, }; var result = await vmr.GetVirtualMachineExtensions().CreateOrUpdateAsync(Azure.WaitUntil.Completed, EXTENSION_NAME, vmExtData, cancellationToken: context.CancellationToken); var provisioningState = result.Value.Data.ProvisioningState; if (result.HasValue && result.Value.Data != null && result.Value.Data.ProvisioningState == "Succeeded") { // add vm extension operation succeeded context.TestResultDetails.Succeed = true; context.TestResultDetails.CustomOut = FormatVMExtensionData(result.Value.Data); return; } else { // capture the provisioning data into TestResultDetails and continue poll the extension instance view context.TestResultDetails.StdErr = string.Format("VMExtension provisioning data: {}", FormatVMExtensionData(result?.Value?.Data)); } } catch (Exception ex) { // capture the exception into TestResultDetails and continue poll the extension instance view context.TestResultDetails.StdErr = ex.ToString(); } // poll the extension instance view for 5 minutes more var startTime = DateTime.UtcNow; while (true) { var vmExtension = await vmr.GetVirtualMachineExtensionAsync(EXTENSION_NAME, expand: "instanceView", cancellationToken: context.CancellationToken); var instanceView = vmExtension?.Value?.Data?.InstanceView; if (instanceView?.Statuses?.Count > 0 && instanceView.Statuses[0].DisplayStatus == "Provisioning succeeded") { context.TestResultDetails.Succeed = true; context.TestResultDetails.CustomOut = FormatVMExtensionData(vmExtension.Value.Data); return; } if (DateTime.UtcNow - startTime > TimeSpan.FromMinutes(5)) { // poll timed out, report failure with the extension data context.TestResultDetails.CustomOut = FormatVMExtensionData(vmExtension?.Value?.Data); return; } // wait for 10 seconds before polling again await Task.Delay(10000); } } } }