/// <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));
        }
Beispiel #6
0
        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!");
        }