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>()); }
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"); }
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>()); }
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"); }
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>()); }
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)); }
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); } }
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'"); }
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; }