e2etest/GuestProxyAgentTest/Utilities/TestCommonUtilities.cs (102 lines of code) (raw):

// Copyright (c) Microsoft Corporation // SPDX-License-Identifier: MIT using Azure.Core; using GuestProxyAgentTest.Models; using GuestProxyAgentTest.Settings; using Newtonsoft.Json; using System.Runtime.Serialization; namespace GuestProxyAgentTest.Utilities { public static class TestCommonUtilities { /// <summary> /// Test Setup, set up all the test related setting /// </summary> /// <param name="guestProxyAgentZipFilePath"></param> /// <param name="testConfigFilePath"></param> /// <param name="testResultFolder"></param> public static void TestSetup(string guestProxyAgentZipFilePath, string testConfigFilePath, string testResultFolder) { TestSetting.Init(YamlUtils.DeserializeYaml<TestConfig>(testConfigFilePath), guestProxyAgentZipFilePath, testResultFolder); StorageHelper.Init(TestSetting.Instance.tenantId, TestSetting.Instance.appClientId); VMHelper.Init(TestSetting.Instance.tenantId, TestSetting.Instance.appClientId, TestSetting.Instance.subscriptionId); } /// <summary> /// download the content as string with retry per 1 second /// in case of download succeed will return (true, content string) /// if case of download failed will return(false, error message) /// </summary> /// <param name="url">download url</param> /// <param name="retryCnt">retry count, default value is 5</param> /// <returns></returns> public static (bool, string) DownloadContentAsString(string url, Action<string> logger = null!, int retryCnt = 5) { if (url == null || url.Length == 0) { return (false, "The url provided is null or empty."); } int cnt = 0; var errMessage = ""; while (cnt < retryCnt) { cnt++; try { string contents = ""; using (var client = new HttpClient()) { var res = client.GetAsync(url).Result; res.EnsureSuccessStatusCode(); contents = res.Content.ReadAsStringAsync().Result; } return (true, contents); } catch (Exception ex) { errMessage = string.Format("Download content failed, attempted: {0} times, exception: {1}", cnt, ex.ToString()); logger?.Invoke(errMessage); } Thread.Sleep(1000); } return (false, errMessage); } public static bool DownloadFile(string url, string filePath, Action<string> logger = null!, int retryCnt = 5) { if (null == url || url.Length == 0) { return false; } int cnt = 0; while (cnt < retryCnt) { cnt++; try { if (File.Exists(filePath)) { File.Delete(filePath); } using var client = new HttpClient(); var res = client.GetAsync(url).Result; res.EnsureSuccessStatusCode(); using var fileStream = File.Create(filePath); res.Content.CopyToAsync(fileStream).Wait(); return true; } catch (Exception ex) { var errMessage = string.Format("Download file failed, attempted: {0} times, exception: {1}", cnt, ex.ToString()); logger?.Invoke(errMessage); } } return false; } public static AccessToken GetAccessTokenFromEnv(string envName) { var tokenString = Environment.GetEnvironmentVariable(envName); if (string.IsNullOrEmpty(tokenString)) { throw new Exception("Failed to get the access token from environment variable: " + envName); } var model = JsonConvert.DeserializeObject<TokenEnvModel>(tokenString); if (model == null) { throw new Exception("Failed to deserialize access token json object: " + tokenString); } return new AccessToken(model.AccessToken, DateTimeOffset.Parse(model.ExpiresOn)); } [DataContract] public class TokenEnvModel { [DataMember(Name = "accessToken")] public string AccessToken { get; set; } [DataMember(Name = "expiresOn")] public string ExpiresOn { get; set; } } } }