public void ValidateSingleStorageAccount()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\Storage1"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.StorageAccounts.Add("mystorage");

            templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            JObject templateJson = TestHelper.GetJsonData(templateStream);

            Assert.AreEqual(1, templateJson["resources"].Children().Count());
            var resource = templateJson["resources"].Single();

            Assert.AreEqual("Microsoft.Storage/storageAccounts", resource["type"].Value <string>());
            Assert.AreEqual("mystoragev2", resource["name"].Value <string>());
            Assert.AreEqual("Antarctica", resource["location"].Value <string>());
            Assert.AreEqual("Standard_LRS", resource["properties"]["accountType"].Value <string>());
        }
Пример #2
0
        public void ValidateSingleVnetWithNsgAndRT()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET2"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualNetworks.Add("asmtest");

            templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            JObject templateJson = TestHelper.GetJsonData(templateStream);

            // Validate NSG
            var nsgs = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/networkSecurityGroups");

            Assert.AreEqual(1, nsgs.Count());
            Assert.AreEqual("asmnsg", nsgs.First()["name"].Value <string>());

            // Validate NSG rules
            JArray rules = (JArray)nsgs.First()["properties"]["securityRules"];

            Assert.AreEqual(2, rules.Count());
            Assert.AreEqual("Enable-Internal-DNS", rules[0]["name"].Value <string>());
            Assert.AreEqual("Port-7777-rule", rules[1]["name"].Value <string>());

            // Validate RouteTable
            var rt = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/routeTables");

            Assert.AreEqual(1, rt.Count());
            Assert.AreEqual("asmrt", rt.First()["name"].Value <string>());

            // Validate Routes
            JArray routes = (JArray)rt.First()["properties"]["routes"];

            Assert.AreEqual(1, routes.Count());
            Assert.AreEqual("all-traffic-to-fw", routes[0]["name"].Value <string>());

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("asmtest", vnets.First()["name"].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(1, subnets.Count());
            Assert.AreEqual("Subnet-1", subnets.First()["name"].Value <string>());
            StringAssert.Contains(subnets.First()["properties"]["networkSecurityGroup"]["id"].Value <string>(), "networkSecurityGroups/asmnsg");
            StringAssert.Contains(subnets.First()["properties"]["routeTable"]["id"].Value <string>(), "routeTables/asmrt");
        }
Пример #3
0
        public async Task ValidateSingleVnetWithNoSubnetsGetsNewDefaultSubet()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET4"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualNetworks.Add("asmnet");

            var messages = await templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            JObject templateJson = TestHelper.GetJsonData(templateStream);

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("asmnet", vnets.First()["name"].Value <string>());
            Assert.AreEqual("10.0.0.0/20", vnets.First()["properties"]["addressSpace"]["addressPrefixes"][0].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(1, subnets.Count());
            Assert.AreEqual("Subnet1", subnets[0]["name"].Value <string>());
            Assert.AreEqual("10.0.0.0/20", subnets[0]["properties"]["addressPrefix"].Value <string>());
        }
Пример #4
0
        public async Task ValidateSingleVnetWithExpressRouteGateway()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET3"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualNetworks.Add("vnet3");

            var messages = await templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            JObject templateJson = TestHelper.GetJsonData(templateStream);

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("vnet3", vnets.First()["name"].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(2, subnets.Count());

            // Validate gateway
            var gw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworkGateways");

            Assert.AreEqual(1, gw.Count());
            Assert.AreEqual("vnet3-Gateway", gw.First()["name"].Value <string>());
            Assert.AreEqual("ExpressRoute", gw.First()["properties"]["gatewayType"].Value <string>());

            // Validate no local network
            var localGw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/localNetworkGateways");

            Assert.AreEqual(0, localGw.Count());

            // Validate connection
            var conn = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/connections");

            Assert.AreEqual(1, conn.Count());
            Assert.AreEqual("vnet3-Gateway-localsite-connection", conn.First()["name"].Value <string>());
            Assert.AreEqual("ExpressRoute", conn.First()["properties"]["connectionType"].Value <string>());
            Assert.IsNotNull(conn.First()["properties"]["peer"]["id"].Value <string>());

            // Validate message
            Assert.AreEqual(1, messages.Count);
            StringAssert.Contains(messages[0], "ExpressRoute");
        }
Пример #5
0
        public void ValidateComplexSingleVnet()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VNET1"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualNetworks.Add("10.2.0.0");

            templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            JObject templateJson = TestHelper.GetJsonData(templateStream);

            // Validate VNETs
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("10.2.0.0", vnets.First()["name"].Value <string>());

            // Validate subnets
            var subnets = vnets.First()["properties"]["subnets"];

            Assert.AreEqual(8, subnets.Count());

            // Validate gateway
            var gw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworkGateways");

            Assert.AreEqual(1, gw.Count());
            Assert.AreEqual("10.2.0.0-VPNGateway", gw.First()["name"].Value <string>());

            var localGw = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/localNetworkGateways");

            Assert.AreEqual(2, localGw.Count());
            Assert.AreEqual("MOBILEDATACENTER-LocalGateway", localGw.First()["name"].Value <string>());
            Assert.AreEqual("EastUSNet-LocalGateway", localGw.Last()["name"].Value <string>());

            var pips = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/publicIPAddresses");

            Assert.AreEqual(1, pips.Count());
            Assert.AreEqual("10.2.0.0-VPNGateway-PIP", pips.First()["name"].Value <string>());
            Assert.AreEqual("Dynamic", pips.First()["properties"]["publicIPAllocationMethod"].Value <string>());
        }
Пример #6
0
        private void btnExport_Click(object sender, EventArgs e)
        {
            btnExport.Enabled = false;

            var artefacts = new AsmArtefacts();

            foreach (var selectedItem in lvwStorageAccounts.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.StorageAccounts.Add(listItem.Text);
            }

            foreach (var selectedItem in lvwVirtualNetworks.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.VirtualNetworks.Add(listItem.Text);
            }

            foreach (var selectedItem in lvwVirtualMachines.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.VirtualMachines.Add(
                    new CloudServiceVM
                {
                    CloudService   = listItem.Text,
                    VirtualMachine = listItem.SubItems[1].Text,
                });
            }

            if (!Directory.Exists(txtDestinationFolder.Text))
            {
                MessageBox.Show("The chosen output folder does not exist.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                // If save selection option is enabled
                if (app.Default.SaveSelection)
                {
                    lblStatus.Text = "BUSY: Reading saved selection";
                    Application.DoEvents();
                    _saveSelectionProvider.Save(Guid.Parse(subscriptionid), lvwVirtualNetworks, lvwStorageAccounts, lvwVirtualMachines);
                }

                var templateWriter   = new StreamWriter(Path.Combine(txtDestinationFolder.Text, "export.json"));
                var blobDetailWriter = new StreamWriter(Path.Combine(txtDestinationFolder.Text, "copyblobdetails.json"));
                _templateGenerator.GenerateTemplate(subscriptionsAndTenants[subscriptionid], subscriptionid, artefacts, templateWriter, blobDetailWriter);
                MessageBox.Show("Template has been generated successfully.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            btnExport.Enabled = true;
        }
        public void ValidateSingleVMWithDataDisksNotInVnet()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VM2"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualMachines.Add(new CloudServiceVM()
            {
                CloudService = "myasmvm", VirtualMachine = "myasmvm"
            });

            templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            var templateJson = TestHelper.GetJsonData(templateStream);

            // Validate VNET
            var vnets = templateJson["resources"].Children().Where(
                r => r["type"].Value <string>() == "Microsoft.Network/virtualNetworks");

            Assert.AreEqual(1, vnets.Count());
            Assert.AreEqual("myasmvm-VNET", vnets.First()["name"].Value <string>());

            // Validate VM
            var vmResource = templateJson["resources"].Where(
                j => j["type"].Value <string>() == "Microsoft.Compute/virtualMachines").Single();

            Assert.AreEqual("myasmvm", vmResource["name"].Value <string>());

            // Validate disks
            var dataDisks = (JArray)vmResource["properties"]["storageProfile"]["dataDisks"];

            Assert.AreEqual(2, dataDisks.Count);
            Assert.AreEqual("Disk1", dataDisks[0]["name"].Value <string>());
            Assert.AreEqual("Disk2", dataDisks[1]["name"].Value <string>());
        }
        private JObject GenerateSingleVMTemplate()

        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VM1"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualMachines.Add(new CloudServiceVM()
            {
                CloudService = "myservice", VirtualMachine = "myservice"
            });

            templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            return(TestHelper.GetJsonData(templateStream));
        }
Пример #9
0
        private void btnExport_Click(object sender, EventArgs e)
        {
            var artefacts = new AsmArtefacts();

            foreach (var selectedItem in lvwStorageAccounts.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.StorageAccounts.Add(listItem.Text);
            }

            foreach (var selectedItem in lvwVirtualNetworks.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.VirtualNetworks.Add(listItem.Text);
            }

            foreach (var selectedItem in lvwVirtualMachines.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.VirtualMachines.Add(
                    new CloudServiceVM
                {
                    CloudService   = listItem.Text,
                    VirtualMachine = listItem.SubItems[1].Text,
                });
            }

            if (!Directory.Exists(txtDestinationFolder.Text))
            {
                MessageBox.Show("The chosen output folder does not exist.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                var templateWriter   = new StreamWriter(Path.Combine(txtDestinationFolder.Text, "export.json"));
                var blobDetailWriter = new StreamWriter(Path.Combine(txtDestinationFolder.Text, "copyblobdetails.json"));
                _templateGenerator.GenerateTemplate(subscriptionsAndTenants[subscriptionid], subscriptionid, artefacts, templateWriter, blobDetailWriter);
                MessageBox.Show("Template has been generated successfully.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #10
0
        public async Task ValidateVMInVnetButNotInSubnet()
        {
            FakeAsmRetriever  fakeAsmRetriever;
            TemplateGenerator templateGenerator;

            TestHelper.SetupObjects(out fakeAsmRetriever, out templateGenerator);
            fakeAsmRetriever.LoadDocuments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestDocs\\VM3"));

            var templateStream   = new MemoryStream();
            var blobDetailStream = new MemoryStream();
            var artefacts        = new AsmArtefacts();

            artefacts.VirtualMachines.Add(new CloudServiceVM()
            {
                CloudService = "CS3", VirtualMachine = "VM3"
            });

            await templateGenerator.GenerateTemplate(TestHelper.TenantId, TestHelper.SubscriptionId, artefacts, new StreamWriter(templateStream), new StreamWriter(blobDetailStream));

            var templateJson = TestHelper.GetJsonData(templateStream);

            // Validate VM
            var vmResource = templateJson["resources"].Where(
                j => j["type"].Value <string>() == "Microsoft.Compute/virtualMachines").Single();

            Assert.AreEqual("VM3", vmResource["name"].Value <string>());
            StringAssert.Contains(vmResource["properties"]["networkProfile"]["networkInterfaces"][0]["id"].Value <string>(),
                                  "'/providers/Microsoft.Network/networkInterfaces/VM3'");

            // Validate NIC
            var nicResource = templateJson["resources"].Where(
                j => j["type"].Value <string>() == "Microsoft.Network/networkInterfaces").Single();

            Assert.AreEqual("VM3", nicResource["name"].Value <string>());
            StringAssert.Contains(nicResource["properties"]["ipConfigurations"][0]["properties"]["subnet"]["id"].Value <string>(),
                                  "'/providers/Microsoft.Network/virtualNetworks/POC-Vnet/subnets/Subnet1'");
        }
Пример #11
0
        private async void btnExport_Click(object sender, EventArgs e)
        {
            btnExport.Enabled = false;

            var artefacts = new AsmArtefacts();

            foreach (var selectedItem in lvwStorageAccounts.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.StorageAccounts.Add(listItem.Text);
            }

            foreach (var selectedItem in lvwVirtualNetworks.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.VirtualNetworks.Add(listItem.Text);
            }

            foreach (var selectedItem in lvwVirtualMachines.CheckedItems)
            {
                var listItem = (ListViewItem)selectedItem;
                artefacts.VirtualMachines.Add(
                    new CloudServiceVM
                {
                    CloudService   = listItem.Text,
                    VirtualMachine = listItem.SubItems[1].Text,
                });
            }

            if (!Directory.Exists(txtDestinationFolder.Text))
            {
                MessageBox.Show("The chosen output folder does not exist.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                // If save selection option is enabled
                if (app.Default.SaveSelection)
                {
                    lblStatus.Text = "BUSY: Reading saved selection";
                    _saveSelectionProvider.Save(Guid.Parse(subscriptionid), lvwVirtualNetworks, lvwStorageAccounts, lvwVirtualMachines);
                }

                var instructionsPath = Path.Combine(txtDestinationFolder.Text, "DeployInstructions.html");
                var templatePath     = Path.Combine(txtDestinationFolder.Text, "export.json");
                var blobDetailsPath  = Path.Combine(txtDestinationFolder.Text, "copyblobdetails.json");
                var templateWriter   = new StreamWriter(templatePath);
                var blobDetailWriter = new StreamWriter(blobDetailsPath);
                try
                {
                    var messages = await _templateGenerator.GenerateTemplate(subscriptionsAndTenants[subscriptionid], subscriptionid, artefacts, templateWriter, blobDetailWriter);

                    var token         = GetToken(subscriptionsAndTenants[subscriptionid], PromptBehavior.Auto);
                    var exportResults = new ExportResults(_asmRetriever, token, messages, subscriptionid, instructionsPath, templatePath, blobDetailsPath);
                    exportResults.ShowDialog(this);
                }
                catch (Exception ex)
                {
                    writeLog("btnExport_Click", "Error generating template : " + ex.ToString());
                    MessageBox.Show("Something went wrong when generating the template. Check the log file for details.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            btnExport.Enabled = true;
        }