using ZB.MOM.WW.ScadaBridge.CLI; namespace ZB.MOM.WW.ScadaBridge.CLI.Tests; /// /// Regression tests for CLI-006 — credentials could only be supplied via the /// --password command-line option, which leaks into process listings and /// shell history. A SCADABRIDGE_PASSWORD / SCADABRIDGE_USERNAME environment /// fallback gives CI/CD a safer alternative. /// [Collection("Environment")] public class CredentialResolutionTests { [Fact] public void Load_Password_FromEnvironment() { var orig = Environment.GetEnvironmentVariable("SCADABRIDGE_PASSWORD"); try { Environment.SetEnvironmentVariable("SCADABRIDGE_PASSWORD", "s3cret"); var config = CliConfig.Load(); Assert.Equal("s3cret", config.Password); } finally { Environment.SetEnvironmentVariable("SCADABRIDGE_PASSWORD", orig); } } [Fact] public void Load_Username_FromEnvironment() { var orig = Environment.GetEnvironmentVariable("SCADABRIDGE_USERNAME"); try { Environment.SetEnvironmentVariable("SCADABRIDGE_USERNAME", "ci-user"); var config = CliConfig.Load(); Assert.Equal("ci-user", config.Username); } finally { Environment.SetEnvironmentVariable("SCADABRIDGE_USERNAME", orig); } } [Fact] public void Load_NoCredentialEnvVars_LeavesCredentialsNull() { var origUser = Environment.GetEnvironmentVariable("SCADABRIDGE_USERNAME"); var origPass = Environment.GetEnvironmentVariable("SCADABRIDGE_PASSWORD"); try { Environment.SetEnvironmentVariable("SCADABRIDGE_USERNAME", null); Environment.SetEnvironmentVariable("SCADABRIDGE_PASSWORD", null); var config = CliConfig.Load(); Assert.Null(config.Username); Assert.Null(config.Password); } finally { Environment.SetEnvironmentVariable("SCADABRIDGE_USERNAME", origUser); Environment.SetEnvironmentVariable("SCADABRIDGE_PASSWORD", origPass); } } }