public void List_Empty_Secrets_File() { var projectPath = UserSecretHelper.GetTempSecretProject(); var logger = new TestLogger(_runtimeEnv); var secretManager = new Program(_runtimeEnv) { Logger = logger }; secretManager.Run(new string[] { "list", "-p", projectPath }); Assert.Equal(1, logger.Messages.Count); Assert.Contains(Resources.Error_No_Secrets_Found, logger.Messages); }
public void Throws_If_Project_Json_Does_Not_Contain_UserSecretId() { var projectPath = UserSecretHelper.GetTempSecretProject(); File.WriteAllText(Path.Combine(projectPath, "project.json"), "{}"); Assert.Throws <InvalidOperationException>(() => { PathHelper.GetSecretsPath(projectPath); }); UserSecretHelper.DeleteTempSecretProject(projectPath); }
public void Remove_Non_Existing_Secret() { var projectPath = UserSecretHelper.GetTempSecretProject(); var logger = new TestLogger(_runtimeEnv); var secretManager = new Program(_runtimeEnv) { Logger = logger }; secretManager.Run(new string[] { "remove", "secret1", "-p", projectPath }); Assert.Equal(1, logger.Messages.Count); Assert.Contains("Cannot find 'secret1' in the secret store.", logger.Messages); }
public void Throws_If_Project_Json_Not_Found() { var projectPath = UserSecretHelper.GetTempSecretProject(); File.Delete(Path.Combine(projectPath, "project.json")); Assert.Throws <InvalidOperationException>(() => { PathHelper.GetSecretsPath(projectPath); }); UserSecretHelper.DeleteTempSecretProject(projectPath); }
public void Throws_If_UserSecretId_Contains_Invalid_Characters() { var projectPath = UserSecretHelper.GetTempSecretProject(); foreach (var character in Path.GetInvalidPathChars()) { UserSecretHelper.SetTempSecretInProject(projectPath, "Test" + character); Assert.Throws <InvalidOperationException>(() => { PathHelper.GetSecretsPath(projectPath); }); } UserSecretHelper.DeleteTempSecretProject(projectPath); }
public void Gives_Correct_Secret_Path() { string userSecretsId; var projectPath = UserSecretHelper.GetTempSecretProject(out userSecretsId); var actualSecretPath = PathHelper.GetSecretsPath(projectPath); var root = Environment.GetEnvironmentVariable("APPDATA") ?? // On Windows it goes to %APPDATA%\Microsoft\UserSecrets\ Environment.GetEnvironmentVariable("HOME"); // On Mac/Linux it goes to ~/.microsoft/usersecrets/ var expectedSecretPath = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPDATA"))? Path.Combine(root, "Microsoft", "UserSecrets", userSecretsId, "secrets.json") : Path.Combine(root, ".microsoft", "usersecrets", userSecretsId, "secrets.json"); Assert.Equal(expectedSecretPath, actualSecretPath); UserSecretHelper.DeleteTempSecretProject(projectPath); }
public void SetSecret_With_Verbose_Flag() { var projectPath = UserSecretHelper.GetTempSecretProject(); var logger = new TestLogger(_runtimeEnv, debug: true); var secretManager = new Program(_runtimeEnv) { Logger = logger }; secretManager.Run(new string[] { "-v", "set", "secret1", "value1", "-p", projectPath }); Assert.Equal(3, logger.Messages.Count); Assert.Contains(string.Format("Project file path {0}.", projectPath), logger.Messages); Assert.Contains(string.Format("Secrets file path {0}.", PathHelper.GetSecretsPath(projectPath)), logger.Messages); Assert.Contains("Successfully saved secret1 = value1 to the secret store.", logger.Messages); logger.Messages.Clear(); secretManager.Run(new string[] { "-v", "list", "-p", projectPath }); Assert.Equal(3, logger.Messages.Count); Assert.Contains(string.Format("Project file path {0}.", projectPath), logger.Messages); Assert.Contains(string.Format("Secrets file path {0}.", PathHelper.GetSecretsPath(projectPath)), logger.Messages); Assert.Contains("secret1 = value1", logger.Messages); UserSecretHelper.DeleteTempSecretProject(projectPath); }
public void SetSecret_Update_Existing_Secret() { var projectPath = UserSecretHelper.GetTempSecretProject(); var logger = new TestLogger(_runtimeEnv); var secretManager = new Program(_runtimeEnv) { Logger = logger }; secretManager.Run(new string[] { "set", "secret1", "value1", "-p", projectPath }); Assert.Equal(1, logger.Messages.Count); Assert.Contains("Successfully saved secret1 = value1 to the secret store.", logger.Messages); secretManager.Run(new string[] { "set", "secret1", "value2", "-p", projectPath }); Assert.Equal(2, logger.Messages.Count); Assert.Contains("Successfully saved secret1 = value2 to the secret store.", logger.Messages); logger.Messages.Clear(); secretManager.Run(new string[] { "list", "-p", projectPath }); Assert.Equal(1, logger.Messages.Count); Assert.Contains("secret1 = value2", logger.Messages); UserSecretHelper.DeleteTempSecretProject(projectPath); }
private void SetSecrets(bool fromCurrentDirectory) { var secrets = new KeyValuePair <string, string>[] { new KeyValuePair <string, string>("key1", Guid.NewGuid().ToString()), new KeyValuePair <string, string>("Facebook:AppId", Guid.NewGuid().ToString()), new KeyValuePair <string, string>(@"key-@\/.~123!#$%^&*())-+==", @"key-@\/.~123!#$%^&*())-+=="), new KeyValuePair <string, string>("key2", string.Empty) }; var projectPath = UserSecretHelper.GetTempSecretProject(); if (fromCurrentDirectory) { Directory.SetCurrentDirectory(projectPath); // Point current directory to the project.json directory. } var logger = new TestLogger(_runtimeEnv); var secretManager = new Program(_runtimeEnv) { Logger = logger }; foreach (var secret in secrets) { var parameters = fromCurrentDirectory ? new string[] { "set", secret.Key, secret.Value } : new string[] { "set", secret.Key, secret.Value, "-p", projectPath }; secretManager.Run(parameters); } Assert.Equal(4, logger.Messages.Count); foreach (var keyValue in secrets) { Assert.Contains( string.Format("Successfully saved {0} = {1} to the secret store.", keyValue.Key, keyValue.Value), logger.Messages); } logger.Messages.Clear(); var args = fromCurrentDirectory ? new string[] { "list" } : new string[] { "list", "-p", projectPath }; secretManager.Run(args); Assert.Equal(4, logger.Messages.Count); foreach (var keyValue in secrets) { Assert.Contains( string.Format("{0} = {1}", keyValue.Key, keyValue.Value), logger.Messages); } // Remove secrets. logger.Messages.Clear(); foreach (var secret in secrets) { var parameters = fromCurrentDirectory ? new string[] { "remove", secret.Key } : new string[] { "remove", secret.Key, "-p", projectPath }; secretManager.Run(parameters); } // Verify secrets are removed. logger.Messages.Clear(); args = fromCurrentDirectory ? new string[] { "list" } : new string[] { "list", "-p", projectPath }; secretManager.Run(args); Assert.Equal(1, logger.Messages.Count); Assert.Contains(Resources.Error_No_Secrets_Found, logger.Messages); UserSecretHelper.DeleteTempSecretProject(projectPath); }