e2etest/GuestProxyAgentTest/Utilities/RunCommandSettingBuilder.cs (82 lines of code) (raw):
// Copyright (c) Microsoft Corporation
// SPDX-License-Identifier: MIT
using Azure.Core;
using GuestProxyAgentTest.Settings;
using System;
namespace GuestProxyAgentTest.Utilities
{
/// <summary>
/// Builder class for build RunCommandSetting
/// </summary>
public class RunCommandSettingBuilder
{
internal string scriptFullPath = null!;
private TestScenarioSetting _testCaseSetting = null!;
private RunCommandSetting runCommandSetting;
public RunCommandSettingBuilder()
{
this.runCommandSetting = new RunCommandSetting();
}
/// <summary>
/// Specify test case setting for the run command setting
/// </summary>
/// <param name="testCaseSetting"></param>
/// <returns></returns>
public RunCommandSettingBuilder TestScenarioSetting(TestScenarioSetting testCaseSetting)
{
this._testCaseSetting = testCaseSetting;
return this;
}
/// <summary>
/// Set run command name
/// </summary>
/// <param name="runCommandName"></param>
/// <returns></returns>
public RunCommandSettingBuilder RunCommandName(string runCommandName)
{
this.runCommandSetting.runCommandName = runCommandName;
return this;
}
/// <summary>
/// Set run command script by local file
/// The 'scriptFullPath' is the full path of a local script file that will be uploaded to blob and used as the run command script rul
/// </summary>
/// <param name="scriptFullPath"></param>
/// <returns></returns>
public RunCommandSettingBuilder ScriptFullPath(string scriptFullPath)
{
this.scriptFullPath = scriptFullPath;
return this;
}
/// <summary>
/// Set custom output SAS url
/// </summary>
/// <param name="customOutputSas"></param>
/// <returns></returns>
public RunCommandSettingBuilder CustomOutputSas(string customOutputSas)
{
this.runCommandSetting.customOutputSAS = customOutputSas;
return this;
}
/// <summary>
/// Add parameter for the run command script.
/// </summary>
/// <param name="paramName"></param>
/// <param name="paramValue"></param>
/// <returns></returns>
public RunCommandSettingBuilder AddParameter(string paramName, string paramValue)
{
this.runCommandSetting.runCommandParameters.Add(paramName, paramValue);
return this;
}
public RunCommandSettingBuilder AddParameters(List<(string, string)> list)
{
if(list == null || list.Count == 0)
{
return this;
}
foreach(var kv in list)
{
this.runCommandSetting.runCommandParameters.Add(kv.Item1, kv.Item2);
}
return this;
}
/// <summary>
/// Set run command script by blob SAS url
/// </summary>
/// <param name="scriptSAS"></param>
/// <returns></returns>
public RunCommandSettingBuilder RunCommandScriptSAS(string scriptSAS)
{
this.runCommandSetting.runCommandScriptSAS = scriptSAS;
return this;
}
/// <summary>
/// Build the run command setting
/// Setup run command script, if non of scriptFullPath or runCommandScriptSAS was specified, will throw the parameter error exception
/// if both was set, the runCommandScriptSAS has more priority.
/// Setup testcasesetting/output/error output for the run command
/// </summary>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public RunCommandSetting Build()
{
if(this.runCommandSetting.runCommandScriptSAS == null && this.scriptFullPath == null)
{
throw new Exception("neither specifying the run command script from runCommandScriptSAS nor scriptFullPath");
}
if(this.runCommandSetting.runCommandName == null)
{
throw new Exception("runCommandName was not specified.");
}
if(this.runCommandSetting.runCommandScriptSAS == null)
{
this.runCommandSetting.runCommandScriptSAS = StorageHelper.Instance.Upload2SharedBlob(Constants.SHARED_SCRIPTS_CONTAINER_NAME, this.scriptFullPath);
}
runCommandSetting.testCaseSetting = _testCaseSetting;
this.runCommandSetting.outputBlobSAS = StorageHelper.Instance.CreateAppendBlob(Constants.SHARED_E2E_TEST_OUTPUT_CONTAINER_NAME, Constants.RUNCOMMAND_OUTPUT_FILE_NAME, this._testCaseSetting.TestScenarioStorageFolderPrefix + "/" + this.runCommandSetting.runCommandName);
this.runCommandSetting.errorBlobSAS= StorageHelper.Instance.CreateAppendBlob(Constants.SHARED_E2E_TEST_OUTPUT_CONTAINER_NAME, Constants.RUNCOMMAND_ERROR_OUTPUT_FILE_NAME, this._testCaseSetting.TestScenarioStorageFolderPrefix + "/" + this.runCommandSetting.runCommandName);
if(this.runCommandSetting.customOutputSAS != null && this.runCommandSetting.customOutputSAS.Count() > 0)
{
this.runCommandSetting.runCommandParameters.Add(Constants.RUNCOMMAND_CUSTOM_OUTPUT_SAS_PARAMETER_NAME, System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(this.runCommandSetting.customOutputSAS)));
}
return this.runCommandSetting;
}
}
}