Inheritance: ManagementOperationContext
        public void AzureVMExtensionTest()
        {
            try
            {
                
                //Get the available VM Extension 

                var availableExtensions =  vmPowershellCmdlets.GetAzureVMAvailableExtension();
                vmAccessExtension = availableExtensions[2];
                if (availableExtensions.Count > 0)
                {
                    
                    //var VMExtensionConfigTemplate = vmPowershellCmdlets.GetAzureVMExtensionConfigTemplate(vmAccessExtension.ExtensionName, vmAccessExtension.Publisher, localPath, version);

                    //Deploy a new IaaS VM with Extension using Add-AzureVMExtension
                    Console.WriteLine("Create a new VM with VM access extension.");
                    var vm = CreateIaaSVMObject(vmName);
                    vm = vmPowershellCmdlets.SetAzureVMExtension(vm, vmAccessExtension.ExtensionName, vmAccessExtension.Publisher, version, referenceName, publicConfigPath: publicConfigPath, privateConfigPath:privateConfigPath, disable: false);
                    
                    vmPowershellCmdlets.NewAzureVM(serviceName,new[] {vm},locationName,true);
                    Console.WriteLine("Created a new VM {0} with VM access extension. Service Name : {1}",vmName,serviceName);

                    ValidateVMExtension(vmName, serviceName, true);
                    //Verify that the extension actually work
                    VerifyRDPExtension(vmName, serviceName);

                    //Disbale extesnion
                    DisableExtension(vmName, serviceName);

                    ValidateVMExtension(vmName, serviceName, false);
                    pass = true;
                }
                else
                {
                    Console.WriteLine("There are no Azure VM extension available");
                }
                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
        }
        public void AddRoleWithExtensionTest()
        {
            try
            {
                var availableExtensions = vmPowershellCmdlets.GetAzureVMAvailableExtension();
                vmAccessExtension = availableExtensions[2];
                //Create an deployment
                
                var vm1 = CreateIaaSVMObject(vmName);
                vmPowershellCmdlets.NewAzureVM(serviceName, new[] { vm1 }, locationName);
                //Add a role with extension enabled.

                string referenceName = Utilities.GetUniqueShortName(referenceNamePrefix);
                string vmName2 = Utilities.GetUniqueShortName(vmNamePrefix);
                var vm2 = CreateIaaSVMObject(vmName2);
                vm2 = vmPowershellCmdlets.SetAzureVMExtension(vm2, vmAccessExtension.ExtensionName, vmAccessExtension.Publisher, version, referenceName, publicConfiguration, privateConfiguration, disable: false);
                vmPowershellCmdlets.NewAzureVM(serviceName, new[] { vm2 }, waitForBoot:true);

                ValidateVMExtension(vmName2, serviceName, true);
                //Verify that the extension actually work
                VerifyRDPExtension(vmName2, serviceName);
                pass = true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
            

        }
        public void ValidateAvailableExtesnion(VirtualMachineExtensionImageContext extension)
        {
            Utilities.PrintContext(extension);
            Assert.IsFalse(string.IsNullOrEmpty(extension.ExtensionName));
            Assert.IsFalse(string.IsNullOrEmpty(extension.Publisher));
            Assert.IsFalse(string.IsNullOrEmpty(extension.Version));

            // Intentionally commented as the cmdlet prod cmdlet doesnt have these properties and dogfood returns errors
            // now
            //Assert.IsTrue(extension.ReplicationCompleted);
            //Assert.IsTrue(Utilities.validateHttpUri(extension.PrivacyUri.ToString()));
            //Assert.IsTrue(Utilities.validateHttpUri(extension.PrivacyUri.ToString()));
            //Assert.IsTrue(Utilities.validateHttpUri(extension.Eula.ToString()));

            switch (extension.ExtensionName)
            {
                //case "BGInfo":
                //    {
                //        Assert.IsTrue(extension.ReplicationCompleted);
                //        break;
                //    }
                case "DiagnosticsAgent":
                    {
                        Assert.IsFalse(string.IsNullOrEmpty(extension.PublicConfigurationSchema));
                        break;
                    }
                case "VMAccessAgent":
                    {
                        Assert.IsFalse(string.IsNullOrEmpty(extension.PublicConfigurationSchema));
                        Assert.IsFalse(string.IsNullOrEmpty(extension.PrivateConfigurationSchema));
                        //Assert.IsFalse(string.IsNullOrEmpty(extension.SampleConfig));
                        break;
                    }
            }
        }
        public void UpdateVMWithExtensionTest()
        {
            try
            {
                var availableExtensions =  vmPowershellCmdlets.GetAzureVMAvailableExtension();
                if (availableExtensions.Count > 0)
                {
                    
                    vmAccessExtension = availableExtensions[2];

                    //Deploy a new IaaS VM with Extension using Add-AzureVMExtension
                    var vm = CreateIaaSVMObject(vmName);
                    vmPowershellCmdlets.NewAzureVM(serviceName, new[] { vm }, locationName,true);

                    vm = GetAzureVM(vmName, serviceName);
                    //Set extension without version
                    vm = vmPowershellCmdlets.SetAzureVMExtension(vm, vmAccessExtension.ExtensionName, vmAccessExtension.Publisher, null,referenceName, publicConfiguration, privateConfiguration);
                    vmPowershellCmdlets.UpdateAzureVM(vmName, serviceName, vm);

                    ValidateVMExtension(vmName, serviceName, true);

                    //Verify that the extension actually work
                    VerifyRDPExtension(vmName, serviceName);

                    vmPowershellCmdlets.RemoveAzureVMExtension(GetAzureVM(vmName, serviceName), vmAccessExtension.ExtensionName, vmAccessExtension.Publisher);
                    pass = true;
                }
                else
                {
                    Console.WriteLine("There are no Azure VM extension available");
                }
                pass = true;

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
        }
        public void UpdateVMWithExtensionTest()
        {
            try
            {
                var availableExtensions =  vmPowershellCmdlets.GetAzureVMAvailableExtension();
                if (availableExtensions.Count > 0)
                {

                    vmAccessExtension = availableExtensions.First(extension => extension.ExtensionName.Equals(VmAccessAgentExtensionName));

                    //Deploy a new IaaS VM with Extension using Add-AzureVMExtension
                    var vm = CreateIaaSVMObject(vmName);
                    vmPowershellCmdlets.NewAzureVM(serviceName, new[] { vm }, locationName);

                    vm = GetAzureVM(vmName, serviceName);

                    vm = vmPowershellCmdlets.SetAzureVMExtension(vm,
                        vmAccessExtension.ExtensionName,
                        vmAccessExtension.Publisher,
                        vmAccessExtension.Version,
                        referenceName,
                        publicConfiguration,
                        privateConfiguration,
                        "pubkey1",
                        "prikey1");
                    vmPowershellCmdlets.UpdateAzureVM(vmName, serviceName, vm);

                    var updatedVM = vmPowershellCmdlets.GetAzureVM(vmName, serviceName);
                    var updatedExt = updatedVM.VM.ResourceExtensionReferences.First(
                        e => e.Name == vmAccessExtension.ExtensionName &&
                             e.Publisher == vmAccessExtension.Publisher &&
                             e.Version == vmAccessExtension.Version);
                    Assert.IsTrue(updatedExt.ResourceExtensionParameterValues.Any(r => r.Type == "Public" && r.Key == "pubkey1"));

                    ValidateVMAccessExtension(vmName, serviceName, true);

                    vmPowershellCmdlets.RemoveAzureVMExtension(GetAzureVM(vmName, serviceName), vmAccessExtension.ExtensionName, vmAccessExtension.Publisher);
                    pass = true;
                }
                else
                {
                    Console.WriteLine("There are no Azure VM extension available");
                }
                pass = true;

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
        }
        private void GetCustomScriptExtensionVersion()
        {
            Utilities.PrintHeader("Listing the available VM extensions");
            var extensionsInfo = vmPowershellCmdlets.GetAzureVMAvailableExtension(ConstCustomScriptExtensionName, ConstCustomScriptExtensionPublisher, true);
            customScriptExtension = extensionsInfo.OrderBy(c => c.Version).LastOrDefault();

            Match m = Regex.Match(customScriptExtension.Version, @"((\.).*?){2}");
            if (m.Success)
            {
                customScriptExtension.Version = customScriptExtension.Version.Substring(0, m.Groups[2].Captures[1].Index);
            }

            Console.WriteLine("Using CustomScript Extension Version: {0}", customScriptExtension.Version);
            Utilities.PrintFooter("Listing the available VM extensions");
        }
 private void GetCustomScriptExtensionVersion()
 {
     Utilities.PrintHeader("Listing the available VM extensions");
     var extensionsInfo = vmPowershellCmdlets.GetAzureVMAvailableExtension();
     customScriptExtension = extensionsInfo.First(c => c.ExtensionName.Equals(CONST_CUSOTM_SCRIPT_EXTENSION_NAME));
     Utilities.PrintFooter("Listing the available VM extensions");
 }
        public void ValidateAvailableExtesnion(VirtualMachineExtensionImageContext extension)
        {
            Utilities.PrintContext(extension);
            Assert.IsFalse(string.IsNullOrEmpty(extension.ExtensionName));
            Assert.IsFalse(string.IsNullOrEmpty(extension.Publisher));
            Assert.IsFalse(string.IsNullOrEmpty(extension.Version));

            if (! extension.IsJsonExtension)
            {
                switch (extension.ExtensionName)
                {
                    case "DiagnosticsAgent":
                        {
                            Assert.IsFalse(string.IsNullOrEmpty(extension.PublicConfigurationSchema));
                            break;
                        }
                    case "VMAccessAgent":
                        {
                            Assert.IsFalse(string.IsNullOrEmpty(extension.PublicConfigurationSchema));
                            Assert.IsFalse(string.IsNullOrEmpty(extension.PrivateConfigurationSchema));
                            break;
                        }
                }
            }
        }
 private void GetCustomScriptExtensionVersion()
 {
     Utilities.PrintHeader("Listing the available VM extensions");
     var extensionsInfo = vmPowershellCmdlets.GetAzureVMAvailableExtension(ConstCustomScriptExtensionName, ConstCustomScriptExtensionPublisher, true);
     customScriptExtension = extensionsInfo.OrderBy(c => c.Version).LastOrDefault();
     Console.WriteLine("Using CustomScript Extension Version: {0}", customScriptExtension.Version);
     Utilities.PrintFooter("Listing the available VM extensions");
 }