| File: TestKubernetesEnvironmentSetup.cs | Web Access |
| Project: src\test\Libraries\Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.Tests\Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.Tests.csproj (Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using Xunit; namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring.Test; internal class TestKubernetesEnvironmentSetup : IDisposable { private const string ClusterLimitCpu = "TEST_SETUP_CLUSTER_"; private readonly List<string> _environmentVariablesToCleanup = []; /// <summary> /// Sets up environment variables for Kubernetes resource monitoring tests. /// </summary> /// <param name="prefix">The prefix to use for environment variables. Defaults to "MYCLUSTER_".</param> /// <param name="limitsMemory">Memory limit in bytes. Defaults to 2GB.</param> /// <param name="limitsCpu">CPU limit in millicores. Defaults to 2000 (2 cores).</param> /// <param name="requestsMemory">Memory request in bytes. Defaults to 1GB.</param> /// <param name="requestsCpu">CPU request in millicores. Defaults to 1000 (1 core).</param> public void SetupKubernetesEnvironment( string? prefix = null, ulong limitsMemory = 2_147_483_648, // 2GB ulong limitsCpu = 2000, // 2 cores in millicores ulong requestsMemory = 1_073_741_824, // 1GB ulong requestsCpu = 1000) // 1 core in millicores { prefix ??= ClusterLimitCpu; SetEnvironmentVariable($"{prefix}LIMITS_MEMORY", limitsMemory.ToString()); SetEnvironmentVariable($"{prefix}LIMITS_CPU", limitsCpu.ToString()); SetEnvironmentVariable($"{prefix}REQUESTS_MEMORY", requestsMemory.ToString()); SetEnvironmentVariable($"{prefix}REQUESTS_CPU", requestsCpu.ToString()); } /// <summary> /// Sets up minimal environment variables for Kubernetes resource monitoring tests without requests. /// </summary> /// <param name="prefix">The prefix to use for environment variables. Defaults to "MYCLUSTER_".</param> public void SetupMinimalKubernetesEnvironmentWithoutRequests(string? prefix = null) { prefix ??= ClusterLimitCpu; SetEnvironmentVariable($"{prefix}LIMITS_MEMORY", "1073741824"); // 1GB SetEnvironmentVariable($"{prefix}LIMITS_CPU", "1000"); // 1 core } /// <summary> /// Sets up environment variables for testing edge cases. /// </summary> /// <param name="prefix">The prefix to use for environment variables. Defaults to "MYCLUSTER_".</param> public void SetupEdgeCaseKubernetesEnvironment(string? prefix = null) { prefix ??= ClusterLimitCpu; // Set maximum values to test upper bounds SetEnvironmentVariable($"{prefix}LIMITS_MEMORY", ulong.MaxValue.ToString()); SetEnvironmentVariable($"{prefix}LIMITS_CPU", ulong.MaxValue.ToString()); SetEnvironmentVariable($"{prefix}REQUESTS_MEMORY", "0"); SetEnvironmentVariable($"{prefix}REQUESTS_CPU", "0"); } /// <summary> /// Sets an environment variable and tracks it for cleanup. /// </summary> /// <param name="name">The name of the environment variable.</param> /// <param name="value">The value to set.</param> public void SetEnvironmentVariable(string name, string value) { Environment.SetEnvironmentVariable(name, value, EnvironmentVariableTarget.Process); _environmentVariablesToCleanup.Add(name); } /// <summary> /// Clears all environment variables that were set during testing. /// </summary> public void ClearEnvironmentVariables() { foreach (string variableName in _environmentVariablesToCleanup) { Environment.SetEnvironmentVariable(variableName, null, EnvironmentVariableTarget.Process); } _environmentVariablesToCleanup.Clear(); } public void Dispose() { ClearEnvironmentVariables(); } } [CollectionDefinition("EnvironmentVariableTests", DisableParallelization = true)] #pragma warning disable SA1402 // File may only contain a single type public class KubernetesEnvironmentTestCollection { } #pragma warning restore SA1402 // File may only contain a single type