/// <summary> /// This method verifies that invalid file extensions are handled. /// </summary> public void TestVerifyFileExtensionsInvalid() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); List <Testing <string[]> > testCasesInvalid = new List <Testing <string[]> >() { new Testing <string[]> (new string[] {}, "Missing 2 input files."), new Testing <string[]> (new string[] { "file.json" }, "Missing 1 input file."), new Testing <string[]> (new string[] { "file1.json", "file2.yml", "../../../output" }, "Too many input files. Maximum needed is 2."), new Testing <string[]> (new string[] { "file.jsn", "../../../output" }, "The 1st argument is not a .json file."), new Testing <string[]> (new string[] { "file.json", "../../../outp1ut" }, "The 2nd argument is not a valid path."), }; foreach (Testing <string[]> testCase in testCasesInvalid) { try { ap.verifyFileExtensions(testCase.testObject); } catch (Exception e) { Assert.AreEqual(testCase.error, e.Message); } } }
/// <summary> /// This method verifies that reading invalid Resource Fields are handled. /// </summary> public void TestCheckMissingResourceFieldsInvalid() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); string masterConfig = System.IO.File.ReadAllText("../../../Input/MasterConfig.json"); JObject configVaults = JObject.Parse(masterConfig); JsonInput missingResourceGroupName = createExpectedJson(new List <Resource>()); missingResourceGroupName.Resources[0].ResourceGroups[0].ResourceGroupName = null; JsonInput missingSubscriptionId = createExpectedJson(new List <Resource>()); missingSubscriptionId.Resources[1].SubscriptionId = null; List <Testing <JsonInput> > negativeTestMissingResourceFields = new List <Testing <JsonInput> >() { new Testing <JsonInput>(missingResourceGroupName, "Missing 'ResourceGroupName' for ResourceGroup. Invalid fields were defined; valid fields are 'ResourceGroupName' and 'KeyVaults'."), new Testing <JsonInput>(missingSubscriptionId, "Missing 'SubscriptionId' for Resource. Invalid fields were defined; valid fields are 'SubscriptionId' and 'ResourceGroups'.") }; foreach (Testing <JsonInput> testCase in negativeTestMissingResourceFields) { try { ap.checkMissingResourceFields(testCase.testObject, configVaults); Assert.Fail(); } catch (Exception e) { Assert.AreEqual(testCase.error, e.Message); } } }
/// <summary> /// This method verifies that reading in invalid Json fields are handled (checks if Resources is null). /// </summary> public void TestCheckJsonFieldsInvalid() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true);; string masterConfig = System.IO.File.ReadAllText("../../../Input/MasterConfig.json"); JObject configVaults = JObject.Parse(masterConfig); List <Testing <JsonInput> > testCasesJsonFieldsInvalid = new List <Testing <JsonInput> >() { new Testing <JsonInput> (createExpectedJson(null), "Missing Resources in Json. Invalid fields were defined; Only valid field is 'Resources'.") }; foreach (Testing <JsonInput> testCase in testCasesJsonFieldsInvalid) { try { ap.checkJsonFields(testCase.testObject, configVaults); Assert.Fail(); } catch (Exception e) { Assert.AreEqual(testCase.error, e.Message); } } }
/// <summary> /// This method tests the convertToYaml() method. /// </summary> public void TestConvertToYaml() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); var vaults = UpdatePoliciesFromYamlTest.createExpectedYamlVaults(); ap.convertToYaml(vaults, "../../../output/ActualOutput.yml"); Assert.AreEqual(System.IO.File.ReadAllText("../../../output/ActualOutput.yml"), System.IO.File.ReadAllText("../../../output/ActualOutput.yml")); }
/// <summary> /// This method verifies that a valid Json file is consistent with an expected json file. /// </summary> public void TestReadJsonFileValid() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); var json = ap.readJsonFile("../../../Input/MasterConfig.json"); var exp = createExpectedJson(new List <Resource>()); Assert.IsTrue(exp.Equals(json)); }
public static List <KeyVaultProperties> runProgram(string[] args, bool testing) { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(testing); UpdatePoliciesFromYaml up = new UpdatePoliciesFromYaml(testing); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Refer to 'Log.log' for more details should an error be thrown.\n"); Console.ResetColor(); Console.WriteLine("Reading input files..."); up.verifyFileExtensions(args); JsonInput vaultList = ap.readJsonFile(args[0]); Console.WriteLine("Finished!"); Console.WriteLine("Grabbing secrets..."); Dictionary <string, string> secrets = ap.getSecrets(); Console.WriteLine("Finished!"); Console.WriteLine("Creating KeyVaultManagementClient, GraphServiceClient, and AzureClient..."); KeyVaultManagementClient kvmClient = ap.createKVMClient(secrets); GraphServiceClient graphClient = ap.createGraphClient(secrets); IAuthenticated azureClient = ap.createAzureClient(secrets); Console.WriteLine("Finished!");; Console.WriteLine("Checking access and retrieving key vaults..."); ap.checkAccess(vaultList, azureClient); List <KeyVaultProperties> vaultsRetrieved = ap.getVaults(vaultList, kvmClient, graphClient); Console.WriteLine("Finished!"); Console.WriteLine("Reading yaml file..."); List <KeyVaultProperties> yamlVaults = up.deserializeYaml(args[1]); Console.WriteLine("Finished!"); Console.WriteLine("Updating key vaults..."); List <KeyVaultProperties> deletedPolicies = up.updateVaults(yamlVaults, vaultsRetrieved, kvmClient, secrets, graphClient); Console.WriteLine("Finished!"); Console.WriteLine("Generating DeletedPolicies yaml..."); up.convertToYaml(deletedPolicies, args[2]); Console.WriteLine("Finished!"); if (testing) { return(up.Changed); } return(null); }
/// <summary> /// This method tests the getVaults() method. /// </summary> public void TestGetVaults() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); var json = ap.readJsonFile("../../../Input/TestActualVaults.json"); var ret = ap.getVaults(json, new TestKVMClient(), new TestGraphClient(new MsalAuthenticationProvider())); Assert.AreEqual(4, ret.Count); json.Resources[0].ResourceGroups.Add(new ResourceGroup { ResourceGroupName = "RG1", KeyVaults = new string[] { "RG1Test1" }.ToList() }); json.Resources[0].ResourceGroups.Add(new ResourceGroup { ResourceGroupName = "RG2" }); ret = ap.getVaults(json, new TestKVMClient(), new TestGraphClient(new MsalAuthenticationProvider())); Assert.AreEqual(3, ret.Count); }
/// <summary> /// This method verifies that valid file extensions work. /// </summary> public void TestVerifyFileExtensionsValid() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); List <Testing <string[]> > testCasesValid = new List <Testing <string[]> >() { new Testing <string[]> (new string[] { "file.json", "../../../output" }) }; foreach (Testing <string[]> testCase in testCasesValid) { try { ap.verifyFileExtensions(testCase.testObject); } catch { Assert.Fail(); } } }
/// <summary> /// This method verifies that reading in valid Json fields work. /// </summary> public void TestCheckJsonFieldsValid() { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(true); string masterConfig = System.IO.File.ReadAllText("../../../Input/MasterConfig.json"); JObject configVaults = JObject.Parse(masterConfig); List <Testing <JsonInput> > testCasesJsonFieldsValid = new List <Testing <JsonInput> >() { new Testing <JsonInput> (createExpectedJson(new List <Resource>())) }; foreach (Testing <JsonInput> testCase in testCasesJsonFieldsValid) { try { ap.checkJsonFields(testCase.testObject, configVaults); } catch { Assert.Fail(); } } }
/// <summary> /// This method reads in a Json config file and converts it into a serialized list of KeyVaults that are displayed in a Yaml file. /// </summary> public static void Main(string[] args) { AccessPoliciesToYaml ap = new AccessPoliciesToYaml(false); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Refer to 'Log.log' for more details should an error be thrown.\n"); Console.ResetColor(); Console.WriteLine("Reading input file..."); ap.verifyFileExtensions(args); JsonInput vaultList = ap.readJsonFile(args[0]); Console.WriteLine("Finished!"); Console.WriteLine("Grabbing secrets..."); Dictionary <string, string> secrets = ap.getSecrets(); Console.WriteLine("Finished!"); Console.WriteLine("Creating KeyVaultManagementClient, GraphServiceClient, and AzureClient..."); KeyVaultManagementClient kvmClient = ap.createKVMClient(secrets); GraphServiceClient graphClient = ap.createGraphClient(secrets); IAuthenticated azureClient = ap.createAzureClient(secrets); Console.WriteLine("Finished!");; Console.WriteLine("Checking access and retrieving key vaults..."); ap.checkAccess(vaultList, azureClient); List <KeyVaultProperties> vaultsRetrieved = ap.getVaults(vaultList, kvmClient, graphClient); Console.WriteLine("Finished!"); Console.WriteLine("Generating YAML output..."); ap.convertToYaml(vaultsRetrieved, args[1]); Console.WriteLine("Finished!"); }