e2etest/GuestProxyAgentTest/Extensions/ModelExtensions.cs (90 lines of code) (raw):

// Copyright (c) Microsoft Corporation // SPDX-License-Identifier: MIT using GuestProxyAgentTest.Utilities; using GuestProxyAgentTest.Models; using System.Net; using Newtonsoft.Json; namespace GuestProxyAgentTest.Extensions { /// <summary> /// Extension methods for data model, that translate one model to another. /// </summary> public static class ModelExtensions { public static TestCaseResultDetails ToTestResultDetails(this RunCommandOutputDetails runCommandOutputDetails, Action<string> logger = null!, bool downloadContentFromBlob = true) { return new TestCaseResultDetails { StdOut = runCommandOutputDetails.StdOut, StdErr = runCommandOutputDetails.StdErr, Succeed = runCommandOutputDetails.Succeed, CustomOut = runCommandOutputDetails.CustomOut, FromBlob = downloadContentFromBlob }.DownloadContentIfFromBlob(logger); } public static TestCaseResultDetails DownloadContentIfFromBlob(this TestCaseResultDetails testCaseResultDetails, Action<string> logger = null!) { if(!testCaseResultDetails.FromBlob) { return testCaseResultDetails; } testCaseResultDetails.FromBlob = false; var downloadSucceed = true; if (!string.IsNullOrEmpty(testCaseResultDetails.StdOut)) { var stdOutDownload = TestCommonUtilities.DownloadContentAsString(testCaseResultDetails.StdOut, logger); testCaseResultDetails.StdOut = stdOutDownload.Item2; if(!stdOutDownload.Item1) { downloadSucceed = false; } } if (!string.IsNullOrEmpty(testCaseResultDetails.StdErr)) { var stdErrDownload = TestCommonUtilities.DownloadContentAsString(testCaseResultDetails.StdErr, logger); testCaseResultDetails.StdErr = stdErrDownload.Item2; if(!stdErrDownload.Item1) { downloadSucceed = false; } } if (!string.IsNullOrEmpty(testCaseResultDetails.CustomOut)) { var custOutDownload = TestCommonUtilities.DownloadContentAsString(testCaseResultDetails.CustomOut, logger); testCaseResultDetails.CustomOut = custOutDownload.Item2; if(!custOutDownload.Item1) { downloadSucceed = false; } } if (!downloadSucceed) { // in case of any download failed, mark the test result as failed and set the std error as combined string from all the download result testCaseResultDetails.Succeed = false; testCaseResultDetails.StdErr = string.Format("Download content from blob failed: \n stdOut: {0}\n stdError: {1}\n customOut: {2}" , testCaseResultDetails.StdOut , testCaseResultDetails.StdErr , testCaseResultDetails.CustomOut); } return testCaseResultDetails; } public static void WriteJUnitTestResult(this TestCaseResultDetails testCaseResultDetails, JunitTestResultBuilder testResultBuilder, string testScenarioName, string testCaseName, long durationInMilliseconds = 0) { if(testCaseResultDetails.Succeed) { testResultBuilder.AddSuccessTestResult(testScenarioName, testCaseName, testCaseResultDetails.StdOut, testCaseResultDetails.CustomOut, durationInMilliseconds); } else { testResultBuilder.AddFailureTestResult(testScenarioName, testCaseName, testCaseResultDetails.StdOut, testCaseResultDetails.StdErr, testCaseResultDetails.CustomOut, durationInMilliseconds); } } /// <summary> /// Safely do json deserialize customout as the object /// In case of error, return null /// </summary> /// <typeparam name="T"></typeparam> /// <param name="testCaseResultDetails"></param> /// <returns></returns> public static T SafeDeserializedCustomOutAs<T>(this TestCaseResultDetails testCaseResultDetails) where T: class { try { return JsonConvert.DeserializeObject<T>(testCaseResultDetails.CustomOut); } catch (Exception ex) { Console.WriteLine("Deserialized custom out json string failed with exception: " + ex.ToString()); } return null; } } }