public void CanCreateFromCustomImageWithManagedDisk()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var userName         = "******";
                var password         = "******";
                var publicIPDnsLabel = SdkContext.RandomResourceName("pip", 10);
                var customImageName  = SdkContext.RandomResourceName("img", 10);
                var vmssName         = SdkContext.RandomResourceName("vmss", 10);
                var resourceManager  = TestHelper.CreateRollupClient();
                var computeManager   = TestHelper.CreateComputeManager();
                var networkManager   = TestHelper.CreateNetworkManager();
                var rgName           = TestUtilities.GenerateName("rgfluentchash-");
                try
                {
                    var resourceGroup = resourceManager.ResourceGroups
                                        .Define(rgName)
                                        .WithRegion(Location)
                                        .Create();

                    var vm = computeManager.VirtualMachines.Define(SdkContext.RandomResourceName("vm", 10))
                             .WithRegion(Location)
                             .WithExistingResourceGroup(resourceGroup)
                             .WithNewPrimaryNetwork("10.0.0.0/28")
                             .WithPrimaryPrivateIPAddressDynamic()
                             .WithNewPrimaryPublicIPAddress(publicIPDnsLabel)
                             .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                             .WithRootUsername(userName)
                             .WithRootPassword(password)
                             .WithUnmanagedDisks()
                             .DefineUnmanagedDataDisk("disk-1")
                             .WithNewVhd(100)
                             .WithLun(1)
                             .Attach()
                             .DefineUnmanagedDataDisk("disk-2")
                             .WithNewVhd(50)
                             .WithLun(2)
                             .Attach()
                             .WithSize(VirtualMachineSizeTypes.StandardD3V2)
                             .Create();

                    Assert.NotNull(vm);

                    TestHelper.DeprovisionAgentInLinuxVM(vm.GetPrimaryPublicIPAddress().Fqdn, 22, userName, password);
                    vm.Deallocate();
                    vm.Generalize();

                    var virtualMachineCustomImage = computeManager.VirtualMachineCustomImages
                                                    .Define(customImageName)
                                                    .WithRegion(Location)
                                                    .WithExistingResourceGroup(resourceGroup)
                                                    .FromVirtualMachine(vm)
                                                    .Create();

                    Assert.NotNull(virtualMachineCustomImage);

                    var network = networkManager
                                  .Networks
                                  .Define(SdkContext.RandomResourceName("vmssvnet", 15))
                                  .WithRegion(Location)
                                  .WithExistingResourceGroup(resourceGroup)
                                  .WithAddressSpace("10.0.0.0/28")
                                  .WithSubnet("subnet1", "10.0.0.0/28")
                                  .Create();

                    var publicLoadBalancer = ScaleSet.CreateHttpLoadBalancers(resourceManager, resourceGroup, "1", Location);
                    var vmScaleSet         = computeManager.VirtualMachineScaleSets
                                             .Define(vmssName)
                                             .WithRegion(Location)
                                             .WithExistingResourceGroup(resourceGroup)
                                             .WithSku(VirtualMachineScaleSetSkuTypes.StandardD5v2)
                                             .WithExistingPrimaryNetworkSubnet(network, "subnet1")
                                             .WithExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
                                             .WithoutPrimaryInternalLoadBalancer()
                                             .WithLinuxCustomImage(virtualMachineCustomImage.Id)
                                             .WithRootUsername(userName)
                                             .WithRootPassword(password)
                                             .Create();

                    var virtualMachineScaleSetVMs = vmScaleSet.VirtualMachines;
                    var virtualMachines           = virtualMachineScaleSetVMs.List();
                    Assert.Equal(virtualMachines.Count(), vmScaleSet.Capacity);
                    foreach (var vm1 in virtualMachines)
                    {
                        Assert.True(vm1.IsOSBasedOnCustomImage);
                        Assert.False(vm1.IsOSBasedOnPlatformImage);
                        Assert.False(vm1.IsOSBasedOnStoredImage);
                        Assert.True(vm1.IsManagedDiskEnabled);
                        Assert.NotNull(vm1.UnmanagedDataDisks);
                        Assert.Empty(vm1.UnmanagedDataDisks);
                        Assert.NotNull(vm1.DataDisks);
                        Assert.Equal(2, vm1.DataDisks.Count); // Disks from data disk image from custom image
                        Assert.True(vm1.DataDisks.ContainsKey(1));
                        var disk = vm1.DataDisks[1];
                        Assert.Equal(100, disk.Size);
                        Assert.True(vm1.DataDisks.ContainsKey(2));
                        disk = vm1.DataDisks[2];
                        Assert.Equal(50, disk.Size);
                    }

                    vmScaleSet.Deallocate();

                    // Updating and adding disk as part of VMSS Update seems consistency failing, CRP is aware of
                    // this, hence until it is fixed comment-out the test
                    //
                    //        {
                    //            "startTime": "2017-01-25T06:10:55.2243509+00:00",
                    //                "endTime": "2017-01-25T06:11:07.8649525+00:00",
                    //                "status": "Failed",
                    //                "error": {
                    //            "code": "InternalExecutionError",
                    //                    "message": "An internal execution error occurred."
                    //        },
                    //            "name": "6786df83-ed3f-4d7a-bf58-d295b96fef46"
                    //        }
                    //
                    //        vmScaleSet.Update()
                    //                .WithDataDiskUpdated(1, 200) // update not supported
                    //                .WithNewDataDisk(100)
                    //                .Apply();
                    //
                    //        vmScaleSet.Start();
                    //
                    //        virtualMachineScaleSetVMs = vmScaleSet.VirtualMachines;
                    //        virtualMachines = virtualMachineScaleSetVMs.List();
                    //        foreach (VirtualMachineScaleSetVM vm1 in virtualMachines) {
                    //            Assert.True(vm1.IsOSBasedOnCustomImage());
                    //            Assert.False(vm1.IsOSBasedOnPlatformImage());
                    //            Assert.False(vm1.IsOSBasedOnStoredImage());
                    //            Assert.True(vm1.IsManagedDiskEnabled());
                    //            Assert.NotNull(vm1.UnmanagedDataDisks());
                    //            Assert.Equal(vm1.UnmanagedDataDisks().Size(), 0);
                    //            Assert.NotNull(vm1.DataDisks());
                    //            Assert.Equal(vm1.DataDisks().Size(), 3);
                    //            Assert.True(vm1.DataDisks().ContainsKey(1));
                    //            VirtualMachineDataDisk disk = vm1.DataDisks().Get(1);
                    //            Assert.Equal(disk.Size(), 200);
                    //            Assert.True(vm1.DataDisks().ContainsKey(2));
                    //            disk = vm1.DataDisks().Get(2);
                    //            Assert.Equal(disk.Size(), 50);
                    //            Assert.True(vm1.DataDisks().ContainsKey(0));
                    //            disk = vm1.DataDisks().Get(0);
                    //            Assert.Equal(disk.Size(), 100);
                    //        }
                }
                finally
                {
                    try
                    {
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #2
0
        public void CanOperateOnAuthorizationRules()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var rgName = TestUtilities.GenerateName("fluentnetsbmrg");
                try
                {
                    var    resourceManager   = TestHelper.CreateResourceManager();
                    var    serviceBusManager = TestHelper.CreateServiceBusManager();
                    Region region            = Region.USEast;

                    var rgCreatable = resourceManager.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var namespaceDNSLabel = TestUtilities.GenerateName("netsbns");
                    var queueName         = TestUtilities.GenerateName("queue1-");
                    var topicName         = TestUtilities.GenerateName("topic1-");
                    var nsRuleName        = TestUtilities.GenerateName("nsrule1-");
                    // Create NS with Queue, Topic and authorization rule
                    //
                    var nspace = serviceBusManager.Namespaces
                                 .Define(namespaceDNSLabel)
                                 .WithRegion(region)
                                 .WithNewResourceGroup(rgCreatable)
                                 .WithSku(NamespaceSku.Standard)
                                 .WithNewQueue(queueName, 1024)
                                 .WithNewTopic(topicName, 1024)
                                 .WithNewManageRule(nsRuleName)
                                 .Create();

                    // Lookup ns authorization rule
                    //
                    var rulesInNamespace = nspace.AuthorizationRules.List();
                    Assert.NotNull(rulesInNamespace);
                    Assert.Equal(2, rulesInNamespace.Count());    // Default + one explicit

                    INamespaceAuthorizationRule foundNsRule = rulesInNamespace.FirstOrDefault(r => r.Name.Equals(nsRuleName, StringComparison.OrdinalIgnoreCase));
                    Assert.NotNull(foundNsRule);
                    var nsRuleKeys = foundNsRule.GetKeys();
                    Assert.NotNull(nsRuleKeys);
                    Assert.NotNull(nsRuleKeys.Inner);
                    var primaryKey = nsRuleKeys.PrimaryKey;
                    Assert.NotNull(primaryKey);
                    Assert.NotNull(nsRuleKeys.SecondaryKey);
                    Assert.NotNull(nsRuleKeys.PrimaryConnectionString);
                    Assert.NotNull(nsRuleKeys.SecondaryConnectionString);
                    nsRuleKeys = foundNsRule.RegenerateKey(Policykey.PrimaryKey);
                    if (HttpMockServer.Mode != HttpRecorderMode.Playback)
                    {
                        Assert.NotEqual(nsRuleKeys.PrimaryKey, primaryKey);
                    }
                    // Lookup queue & operate on auth rules
                    //
                    var queuesInNamespace = nspace.Queues.List();
                    Assert.NotNull(queuesInNamespace);
                    Assert.Single(queuesInNamespace);
                    var queue = queuesInNamespace.ElementAt(0);
                    Assert.NotNull(queue);
                    Assert.NotNull(queue.Inner);

                    var qRule = queue.AuthorizationRules
                                .Define("rule1")
                                .WithListeningEnabled()
                                .Create();
                    Assert.NotNull(qRule);
                    Assert.Contains(AccessRights.Listen, qRule.Rights);
                    qRule = qRule.Update()
                            .WithManagementEnabled()
                            .Apply();
                    Assert.Contains(AccessRights.Manage, qRule.Rights);
                    var rulesInQueue = queue.AuthorizationRules.List();
                    Assert.True(rulesInQueue.Count() > 0);
                    var foundQRule = false;
                    foreach (var r in rulesInQueue)
                    {
                        if (r.Name.Equals(qRule.Name, StringComparison.OrdinalIgnoreCase))
                        {
                            foundQRule = true;
                            break;
                        }
                    }
                    Assert.True(foundQRule);
                    queue.AuthorizationRules.DeleteByName(qRule.Name);
                    // Lookup topic & operate on auth rules
                    //
                    var topicsInNamespace = nspace.Topics.List();
                    Assert.NotNull(topicsInNamespace);
                    Assert.Single(topicsInNamespace);
                    var topic = topicsInNamespace.ElementAt(0);
                    Assert.NotNull(topic);
                    Assert.NotNull(topic.Inner);
                    var tRule = topic.AuthorizationRules
                                .Define("rule2")
                                .WithSendingEnabled()
                                .Create();
                    Assert.NotNull(tRule);
                    Assert.Contains(AccessRights.Send, tRule.Rights);
                    tRule = tRule.Update()
                            .WithManagementEnabled()
                            .Apply();
                    Assert.Contains(AccessRights.Manage, tRule.Rights);
                    var rulesInTopic = topic.AuthorizationRules.List();
                    Assert.True(rulesInTopic.Count() > 0);
                    var foundTRule = false;
                    foreach (var r in rulesInTopic)
                    {
                        if (r.Name.Equals(tRule.Name, StringComparison.OrdinalIgnoreCase))
                        {
                            foundTRule = true;
                            break;
                        }
                    }
                    Assert.True(foundTRule);
                    topic.AuthorizationRules.DeleteByName(tRule.Name);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch
                    {
                    }
                }
            }
        }
Exemple #3
0
        public void CanCreateNamespaceThenCRUDOnQueue()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var rgName = TestUtilities.GenerateName("sluentnetsbmrg");
                try
                {
                    var    resourceManager   = TestHelper.CreateResourceManager();
                    var    serviceBusManager = TestHelper.CreateServiceBusManager();
                    Region region            = Region.USEast;

                    var rgCreatable = resourceManager.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var namespaceDNSLabel = TestUtilities.GenerateName("netsbns");
                    var nspace            = serviceBusManager.Namespaces
                                            .Define(namespaceDNSLabel)
                                            .WithRegion(region)
                                            .WithNewResourceGroup(rgCreatable)
                                            .WithSku(NamespaceSku.Standard)
                                            .Create();
                    Assert.NotNull(nspace);
                    Assert.NotNull(nspace.Inner);

                    String queueName = TestUtilities.GenerateName("queue14444444444444444444444444444444444444444444555555555555");
                    var    queue     = nspace.Queues
                                       .Define(queueName)
                                       .Create();

                    Assert.NotNull(queue);
                    Assert.NotNull(queue.Inner);
                    Assert.NotNull(queue.Name);
                    Assert.Equal(queue.Name, queueName, ignoreCase: true);

                    // Default lock duration is 1 minute, assert TimeSpan("00:01:00") parsing
                    //
                    Assert.Equal("00:01:00", queue.Inner.LockDuration);
                    Assert.Equal(60, queue.LockDurationInSeconds);

                    var dupDetectionDuration = queue.DuplicateMessageDetectionHistoryDuration;
                    Assert.Equal(10, dupDetectionDuration.TotalMinutes);
                    // Default message TTL is TimeSpan.Max, assert parsing
                    //
                    Assert.Equal("10675199.02:48:05.4775807", queue.Inner.DefaultMessageTimeToLive);
                    var msgTtlDuration = queue.DefaultMessageTtlDuration;
                    // Assert the default ttl TimeSpan("10675199.02:48:05.4775807") parsing
                    //
                    Assert.Equal(10675199, msgTtlDuration.Days);
                    Assert.Equal(2, msgTtlDuration.Hours);
                    Assert.Equal(48, msgTtlDuration.Minutes);
                    // Assert the default max size In MB
                    //
                    Assert.Equal(1024, queue.MaxSizeInMB);
                    var queuesInNamespace = nspace.Queues.List();
                    Assert.NotNull(queuesInNamespace);
                    Assert.True(queuesInNamespace.Count() > 0);
                    IQueue foundQueue = queuesInNamespace.FirstOrDefault(q => q.Name.Equals(queueName, StringComparison.OrdinalIgnoreCase));
                    Assert.NotNull(foundQueue);
                    // Dead lettering disabled by default
                    //
                    Assert.False(foundQueue.IsDeadLetteringEnabledForExpiredMessages);
                    foundQueue = foundQueue.Update()
                                 .WithMessageLockDurationInSeconds(120)
                                 .WithDefaultMessageTTL(new TimeSpan(0, 20, 0))
                                 .WithExpiredMessageMovedToDeadLetterQueue()
                                 .WithMessageMovedToDeadLetterQueueOnMaxDeliveryCount(25)
                                 .Apply();
                    Assert.Equal(120, foundQueue.LockDurationInSeconds);
                    Assert.True(foundQueue.IsDeadLetteringEnabledForExpiredMessages);
                    Assert.Equal(25, foundQueue.MaxDeliveryCountBeforeDeadLetteringMessage);

                    queuesInNamespace = nspace.Queues.List();
                    Assert.NotNull(queuesInNamespace);
                    Assert.True(queuesInNamespace.Count() > 0);
                    foundQueue = queuesInNamespace.FirstOrDefault(q => q.Name.Equals(queueName, StringComparison.OrdinalIgnoreCase));
                    Assert.NotNull(foundQueue);
                    Assert.Equal(120, foundQueue.LockDurationInSeconds);
                    Assert.True(foundQueue.IsDeadLetteringEnabledForExpiredMessages);
                    Assert.Equal(25, foundQueue.MaxDeliveryCountBeforeDeadLetteringMessage);

                    nspace.Queues.DeleteByName(foundQueue.Name);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch
                    {
                    }
                }
            }
        }
Exemple #4
0
        public void CanCreateImageFromNativeVhd()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var vhdBasedImageName = SdkContext.RandomResourceName("img", 20);
                var resourceManager   = TestHelper.CreateRollupClient();
                var computeManager    = TestHelper.CreateComputeManager();
                var rgName            = TestUtilities.GenerateName("rgfluentchash-");

                try
                {
                    var linuxVM = PrepareGeneralizedVMWith2EmptyDataDisks(rgName,
                                                                          SdkContext.RandomResourceName("muldvm", 15),
                                                                          Location,
                                                                          computeManager);
                    //
                    var creatableDisk = computeManager.VirtualMachineCustomImages.Define(vhdBasedImageName)
                                        .WithRegion(Location)
                                        .WithNewResourceGroup(rgName)
                                        .WithLinuxFromVhd(linuxVM.OSUnmanagedDiskVhdUri, OperatingSystemStateTypes.Generalized)
                                        .WithOSDiskCaching(linuxVM.OSDiskCachingType);
                    foreach (var disk in linuxVM.UnmanagedDataDisks.Values)
                    {
                        creatableDisk.DefineDataDiskImage()
                        .WithLun(disk.Lun)
                        .FromVhd(disk.VhdUri)
                        .WithDiskCaching(disk.CachingType)
                        .WithDiskSizeInGB(disk.Size + 10)         // Resize each data disk image by +10GB
                        .Attach();
                    }
                    var customImage = creatableDisk.Create();
                    Assert.NotNull(customImage.Id);
                    Assert.Equal(customImage.Name, vhdBasedImageName);
                    Assert.False(customImage.IsCreatedFromVirtualMachine);
                    Assert.Null(customImage.SourceVirtualMachineId);
                    Assert.NotNull(customImage.OSDiskImage);
                    Assert.NotNull(customImage.OSDiskImage.BlobUri);
                    Assert.Equal(CachingTypes.ReadWrite, customImage.OSDiskImage.Caching);
                    Assert.Equal(OperatingSystemStateTypes.Generalized, customImage.OSDiskImage.OsState);
                    Assert.Equal(OperatingSystemTypes.Linux, customImage.OSDiskImage.OsType);
                    Assert.NotNull(customImage.DataDiskImages);
                    Assert.Equal(customImage.DataDiskImages.Count, linuxVM.UnmanagedDataDisks.Count);
                    Assert.Equal(customImage.HyperVGeneration, HyperVGenerationTypes.V1);
                    foreach (ImageDataDisk diskImage in customImage.DataDiskImages.Values)
                    {
                        IVirtualMachineUnmanagedDataDisk matchedDisk = null;
                        foreach (var vmDisk in linuxVM.UnmanagedDataDisks.Values)
                        {
                            if (vmDisk.Lun == diskImage.Lun)
                            {
                                matchedDisk = vmDisk;
                                break;
                            }
                        }
                        Assert.NotNull(matchedDisk);
                        Assert.Equal(matchedDisk.CachingType, diskImage.Caching);
                        Assert.Equal(matchedDisk.VhdUri, diskImage.BlobUri);
                        Assert.Equal((long)matchedDisk.Size + 10, (long)diskImage.DiskSizeGB);
                    }
                    var image = computeManager
                                .VirtualMachineCustomImages
                                .GetByResourceGroup(rgName, vhdBasedImageName);
                    Assert.NotNull(image);
                    var images = computeManager
                                 .VirtualMachineCustomImages
                                 .ListByResourceGroup(rgName);
                    Assert.True(images.Count() > 0);

                    // Create virtual machine from custom image
                    //
                    var virtualMachine = computeManager.VirtualMachines
                                         .Define(SdkContext.RandomResourceName("cusvm", 15))
                                         .WithRegion(Location)
                                         .WithNewResourceGroup(rgName)
                                         .WithNewPrimaryNetwork("10.0.0.0/28")
                                         .WithPrimaryPrivateIPAddressDynamic()
                                         .WithoutPrimaryPublicIPAddress()
                                         .WithLinuxCustomImage(image.Id)
                                         .WithRootUsername("javauser")
                                         .WithRootPassword(TestUtilities.GenerateName("Pa5$"))
                                         .WithSize(VirtualMachineSizeTypes.Parse("Standard_D2a_v4"))
                                         .WithOSDiskCaching(CachingTypes.ReadWrite)
                                         .Create();

                    var dataDisks = virtualMachine.DataDisks;
                    Assert.NotNull(dataDisks);
                    Assert.Equal(dataDisks.Count, image.DataDiskImages.Count);

                    //Create a hyperv Gen2 image
                    var creatableDiskGen2 = computeManager
                                            .VirtualMachineCustomImages
                                            .Define(vhdBasedImageName + "Gen2")
                                            .WithRegion(Location)
                                            .WithNewResourceGroup(rgName)
                                            .WithHyperVGeneration(HyperVGenerationTypes.V2)
                                            .WithLinuxFromVhd(linuxVM.OSUnmanagedDiskVhdUri, OperatingSystemStateTypes.Generalized)
                                            .WithOSDiskCaching(linuxVM.OSDiskCachingType);
                    foreach (var disk in linuxVM.UnmanagedDataDisks.Values)
                    {
                        creatableDisk.DefineDataDiskImage()
                        .WithLun(disk.Lun)
                        .FromVhd(disk.VhdUri)
                        .WithDiskCaching(disk.CachingType)
                        .WithDiskSizeInGB(disk.Size + 10)         // Resize each data disk image by +10GB
                        .Attach();
                    }
                    IVirtualMachineCustomImage customImageGen2 = creatableDiskGen2.Create();
                    Assert.NotNull(customImageGen2.Id);
                    Assert.Equal(customImageGen2.Name, vhdBasedImageName + "Gen2");
                    Assert.False(customImageGen2.IsCreatedFromVirtualMachine);
                    Assert.Null(customImageGen2.SourceVirtualMachineId);
                    Assert.NotNull(customImageGen2.OSDiskImage);
                    Assert.NotNull(customImageGen2.OSDiskImage);
                    Assert.Equal(CachingTypes.ReadWrite, customImageGen2.OSDiskImage.Caching);
                    Assert.Equal(OperatingSystemStateTypes.Generalized, customImageGen2.OSDiskImage.OsState);
                    Assert.Equal(OperatingSystemTypes.Linux, customImageGen2.OSDiskImage.OsType);
                    Assert.NotNull(customImageGen2.DataDiskImages);
                    Assert.Equal(0, customImageGen2.DataDiskImages.Count);
                    Assert.Equal(customImageGen2.HyperVGeneration, HyperVGenerationTypes.V2);
                }
                finally
                {
                    try
                    {
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #5
0
        public void CanCRUDOnSimpleNamespace()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var rgName = TestUtilities.GenerateName("fluentnetsbmrg");
                try
                {
                    var    resourceManager   = TestHelper.CreateResourceManager();
                    var    serviceBusManager = TestHelper.CreateServiceBusManager();
                    Region region            = Region.USEast;

                    var rgCreatable = resourceManager.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var namespaceDNSLabel = TestUtilities.GenerateName("netsbns");
                    var nspace            = serviceBusManager.Namespaces
                                            .Define(namespaceDNSLabel)
                                            .WithRegion(region)
                                            .WithNewResourceGroup(rgCreatable)
                                            .WithSku(NamespaceSku.Basic)
                                            .Create();

                    var namespaces = serviceBusManager.Namespaces.ListByResourceGroup(rgName);
                    Assert.NotNull(namespaces);
                    Assert.True(namespaces.Count() > 0);
                    var found = namespaces.Any(n => n.Name.Equals(nspace.Name, StringComparison.OrdinalIgnoreCase));
                    Assert.True(found);

                    Assert.NotNull(nspace.DnsLabel);
                    Assert.Equal(nspace.DnsLabel, namespaceDNSLabel, ignoreCase: true);
                    Assert.NotNull(nspace.Fqdn);
                    Assert.Contains(namespaceDNSLabel, nspace.Fqdn);
                    Assert.NotNull(nspace.Sku);
                    Assert.True(nspace.Sku.Name.Equals(NamespaceSku.Basic.Name));
                    Assert.NotNull(nspace.Region);
                    Assert.True(nspace.Region.Equals(region));
                    Assert.NotNull(nspace.ResourceGroupName);
                    Assert.Equal(nspace.ResourceGroupName, rgName, ignoreCase: true);
                    Assert.NotNull(nspace.Queues);
                    Assert.Empty(nspace.Queues.List());
                    Assert.NotNull(nspace.Topics);
                    Assert.Empty(nspace.Topics.List());
                    Assert.NotNull(nspace.AuthorizationRules);
                    var defaultNsRules = nspace.AuthorizationRules.List();
                    Assert.Single(defaultNsRules);
                    var defaultNsRule = defaultNsRules.ElementAt(0);
                    Assert.Equal("RootManageSharedAccessKey", defaultNsRule.Name, ignoreCase: true);
                    Assert.NotNull(defaultNsRule.Rights);
                    Assert.NotNull(defaultNsRule.NamespaceName);
                    Assert.Equal(defaultNsRule.NamespaceName, namespaceDNSLabel, ignoreCase: true);
                    Assert.NotNull(defaultNsRule.ResourceGroupName);
                    Assert.Equal(defaultNsRule.ResourceGroupName, rgName, ignoreCase: true);
                    nspace.Update()
                    .WithSku(NamespaceSku.Standard)
                    .Apply();
                    Assert.True(nspace.Sku.Name.Equals(NamespaceSku.Standard.Name));
                    // TODO: There is a bug in LRO implementation of ServiceBusNamespace DELETE operation (Last poll returns 404, reported this to RP]
                    //
                    // serviceBusManager.Namespaces.DeleteByGroup(rgName, nspace.Name);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch
                    {
                    }
                }
            }
        }
        public void CanAssignRoles()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var rgName        = TestUtilities.GenerateName("rgmsi");
                var identityName  = TestUtilities.GenerateName("msitest");
                var anotherRgName = TestUtilities.GenerateName("rg");
                try
                {
                    var azure = TestHelper.CreateRollupClient();

                    var anotherResourceGroup = azure.ResourceGroups
                                               .Define(anotherRgName)
                                               .WithRegion(region)
                                               .Create();

                    var creatableRG = azure.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var identity = azure.Identities
                                   .Define(identityName)
                                   .WithRegion(region)
                                   .WithNewResourceGroup(creatableRG)
                                   .WithAccessToCurrentResourceGroup(BuiltInRole.Reader)
                                   .WithAccessTo(anotherResourceGroup, BuiltInRole.Contributor)
                                   .Create();

                    Assert.NotNull(identity);
                    Assert.NotNull(identity.Inner);

                    // Ensure roles are assigned
                    //
                    var  resourceGroup   = azure.ResourceGroups.GetByName(identity.ResourceGroupName);
                    var  roleAssignments = azure.Identities.Manager.GraphRbacManager.RoleAssignments.ListByScope(resourceGroup.Id);
                    bool found           = false;
                    foreach (var roleAssignment in roleAssignments)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(identity.PrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.True(found, "Expected role assignment not found for the resource group that identity belongs to");

                    roleAssignments = azure.Identities.Manager.GraphRbacManager.RoleAssignments.ListByScope(anotherResourceGroup.Id);
                    found           = false;
                    foreach (var roleAssignment in roleAssignments)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(identity.PrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.True(found, "Expected role assignment not found for the resource group resource");

                    identity = identity
                               .Update()
                               .WithTag("a", "bb")
                               .Apply();

                    Assert.NotNull(identity.Tags);
                    Assert.True(identity.Tags.ContainsKey("a"));
                }
                finally
                {
                    try
                    {
                        var resourceManager = TestHelper.CreateResourceManager();
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
        public void CanAssignCurrentResourceGroupAccessRole()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var rgName       = TestUtilities.GenerateName("rgmsi");
                var identityName = TestUtilities.GenerateName("msitest");
                try
                {
                    var azure = TestHelper.CreateRollupClient();

                    var creatableRG = azure.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var identity = azure.Identities
                                   .Define(identityName)
                                   .WithRegion(region)
                                   .WithNewResourceGroup(creatableRG)
                                   .WithAccessToCurrentResourceGroup(BuiltInRole.Reader)
                                   .Create();

                    // Ensure role assigned
                    //
                    var resourceGroup   = azure.ResourceGroups.GetByName(identity.ResourceGroupName);
                    var roleAssignments = azure.Identities.Manager.GraphRbacManager
                                          .RoleAssignments
                                          .ListByScope(resourceGroup.Id);
                    var found = false;
                    foreach (var roleAssignment in roleAssignments)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(identity.PrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.True(found, "Expected role assignment not found for the resource group that identity belongs to");

                    identity.Update()
                    .WithoutAccessTo(resourceGroup.Id, BuiltInRole.Reader)
                    .Apply();

                    SdkContext.DelayProvider.Delay(30 * 1000);

                    // Ensure role assignment removed
                    //
                    roleAssignments = azure.Identities.Manager.GraphRbacManager
                                      .RoleAssignments
                                      .ListByScope(resourceGroup.Id);
                    bool notFound = true;
                    foreach (var roleAssignment in roleAssignments)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(identity.PrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            notFound = false;
                            break;
                        }
                    }
                    Assert.True(notFound, "Role assignment to access resource group is not removed");

                    azure.Identities.DeleteById(identity.Id);
                }
                finally
                {
                    try
                    {
                        var resourceManager = TestHelper.CreateResourceManager();
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #8
0
        public void CanCheckAvailabilityAndCreate()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var rgName  = TestUtilities.GenerateName("rgstg");
                var stgName = TestUtilities.GenerateName("stgbnx");
                try
                {
                    var storageManager = TestHelper.CreateStorageManager();

                    var availabilityResult = storageManager
                                             .StorageAccounts
                                             .CheckNameAvailability(stgName);
                    Assert.NotNull(availabilityResult);
                    Assert.True(availabilityResult.IsAvailable);

                    var storageAccount = storageManager.StorageAccounts.Define(stgName)
                                         .WithRegion(Region.USEast2)
                                         .WithNewResourceGroup(rgName)
                                         .WithTag("aa", "aa")
                                         .WithTag("bb", "bb")
                                         .Create();

                    Assert.NotNull(storageAccount);
                    Assert.NotNull(storageAccount.Inner);

                    // Check the defaults
                    //
                    Assert.Equal(SkuName.StandardGRS, storageAccount.Sku.Name);
                    Assert.Equal(Kind.Storage, storageAccount.Kind);
                    //

                    Assert.NotNull(storageAccount.Tags);
                    Assert.Equal(2, storageAccount.Tags.Count());

                    Assert.NotNull(storageAccount);
                    Assert.NotNull(storageAccount.Inner);

                    availabilityResult = storageManager
                                         .StorageAccounts
                                         .CheckNameAvailability(stgName);

                    Assert.NotNull(availabilityResult);
                    Assert.False(availabilityResult.IsAvailable);
                    Assert.NotNull(availabilityResult.Reason);

                    // Get
                    storageAccount = storageManager.StorageAccounts.GetByResourceGroup(rgName, stgName);
                    Assert.NotNull(storageAccount);
                    Assert.NotNull(storageAccount.Inner);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.BeginDeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
        public void CreateUpdate()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                string groupName          = SdkContext.RandomResourceName("rg", 10);
                string clusterName        = SdkContext.RandomResourceName("cluster", 15);
                string saName             = SdkContext.RandomResourceName("sa", 15);
                string shareName          = "myfileshare";
                string shareMountPath     = "azurefileshare";
                string blobFileSystemPath = "myblobsystem";
                string containerName      = "mycontainer";
                string userName           = "******";
                string storageAccountKey  = "dummy_key";
                string fileShareUri       = "dummy_uri";

                var manager = TestHelper.CreateBatchAIManager();

                IBatchAICluster cluster = manager.BatchAIClusters.Define(clusterName)
                                          .WithRegion(REGION)
                                          .WithNewResourceGroup(groupName)
                                          .WithVMSize(VirtualMachineSizeTypes.StandardD1V2.Value)
                                          .WithUserName(userName)
                                          .WithPassword("MyPassword")
                                          .WithAutoScale(1, 1)
                                          .WithLowPriority()
                                          .DefineSetupTask()
                                          .WithCommandLine("echo Hello World!")
                                          .WithStdOutErrPath("./outputpath")
                                          .Attach()
                                          .DefineAzureFileShare()
                                          .WithStorageAccountName(saName)
                                          .WithAzureFileUrl(fileShareUri)
                                          .WithRelativeMountPath(shareMountPath)
                                          .WithAccountKey(storageAccountKey)
                                          .Attach()
                                          .DefineAzureBlobFileSystem()
                                          .WithStorageAccountName(saName)
                                          .WithContainerName(containerName)
                                          .WithRelativeMountPath(blobFileSystemPath)
                                          .WithAccountKey(storageAccountKey)
                                          .Attach()
                                          .WithTag("tag1", "value1")
                                          .Create();
                Assert.Equal(AllocationState.Steady, cluster.AllocationState);
                Assert.Equal(userName, cluster.AdminUserName);
                Assert.Equal(VmPriority.Lowpriority, cluster.VMPriority);
                Assert.Equal(1, cluster.NodeSetup.MountVolumes.AzureFileShares.Count);
                Assert.Equal(shareMountPath, cluster.NodeSetup.MountVolumes.AzureFileShares.ElementAt(0).RelativeMountPath);
                Assert.Equal(1, cluster.NodeSetup.MountVolumes.AzureBlobFileSystems.Count);
                Assert.Equal(blobFileSystemPath, cluster.NodeSetup.MountVolumes.AzureBlobFileSystems.ElementAt(0).RelativeMountPath);

                cluster.Update()
                .WithAutoScale(1, 2, 2)
                .WithTag("tag1", "value2")
                .Apply();
                Assert.Equal(2, cluster.ScaleSettings.AutoScale.MaximumNodeCount);
                string tag1;
                Assert.True(cluster.Tags.TryGetValue("tag1", out tag1));
                Assert.Equal("value2", tag1);

                manager.ResourceManager.ResourceGroups.DeleteByName(groupName);
            }
        }
Exemple #10
0
        public void CanUpdateEMSIAndLMSI()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var    region        = Region.USSouthCentral;
                var    vmssName      = "javavm";
                var    groupName     = TestUtilities.GenerateName("rgmsi");
                String identityName1 = TestUtilities.GenerateName("msi-id");
                String identityName2 = TestUtilities.GenerateName("msi-id");

                IAzure azure = null;
                try
                {
                    azure = TestHelper.CreateRollupClient();

                    // Prepare a definition for yet-to-be-created resource group
                    //
                    var resourceGroup = azure.ResourceGroups
                                        .Define(groupName)
                                        .WithRegion(region)
                                        .Create();

                    // Create a virtual network for VMSS
                    //
                    var vmssNetwork = azure
                                      .Networks
                                      .Define("vmssvnet")
                                      .WithRegion(region)
                                      .WithExistingResourceGroup(resourceGroup)
                                      .WithAddressSpace("10.0.0.0/28")
                                      .WithSubnet("subnet1", "10.0.0.0/28")
                                      .Create();

                    // Create a Load balancer for VMSS
                    //
                    var vmssInternalLoadBalancer = CreateInternalLoadBalancer(azure,
                                                                              resourceGroup,
                                                                              vmssNetwork,
                                                                              "1",
                                                                              region);

                    var virtualMachineScaleSet = azure.VirtualMachineScaleSets
                                                 .Define(vmssName)
                                                 .WithRegion(region)
                                                 .WithExistingResourceGroup(resourceGroup)
                                                 .WithSku(VirtualMachineScaleSetSkuTypes.StandardA0)
                                                 .WithExistingPrimaryNetworkSubnet(vmssNetwork, "subnet1")
                                                 .WithoutPrimaryInternetFacingLoadBalancer()
                                                 .WithExistingPrimaryInternalLoadBalancer(vmssInternalLoadBalancer)
                                                 .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                                                 .WithRootUsername("jvuser")
                                                 .WithRootPassword(TestUtilities.GenerateName("Pa5$"))
                                                 .Create();

                    // Prepare a definition for yet-to-be-created "User Assigned (External) MSI" with contributor access to the resource group
                    // it resides
                    //
                    var creatableIdentity = azure.Identities
                                            .Define(identityName1)
                                            .WithRegion(region)
                                            .WithExistingResourceGroup(virtualMachineScaleSet.ResourceGroupName)
                                            .WithAccessToCurrentResourceGroup(BuiltInRole.Contributor);

                    // Update virtual machine so that it depends on the EMSI
                    //
                    virtualMachineScaleSet = virtualMachineScaleSet.Update()
                                             .WithNewUserAssignedManagedServiceIdentity(creatableIdentity)
                                             .Apply();

                    // Ensure the "User Assigned (External) MSI" id can be retrieved from the virtual machine
                    //
                    ISet <string> emsiIds = virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds;
                    Assert.NotNull(emsiIds);
                    Assert.Equal(1, emsiIds.Count);

                    var identity = azure.Identities.GetById(emsiIds.First());
                    Assert.NotNull(identity);
                    Assert.Equal(identity.Name, identityName1, ignoreCase: true);

                    var createdIdentity = azure.Identities
                                          .Define(identityName2)
                                          .WithRegion(region)
                                          .WithExistingResourceGroup(virtualMachineScaleSet.ResourceGroupName)
                                          .WithAccessToCurrentResourceGroup(BuiltInRole.Contributor)
                                          .Create();

                    // Update the virtual machine by removing the an EMSI and adding existing EMSI
                    //
                    virtualMachineScaleSet = virtualMachineScaleSet.Update()
                                             .WithoutUserAssignedManagedServiceIdentity(identity.Id)
                                             .WithExistingUserAssignedManagedServiceIdentity(createdIdentity)
                                             .Apply();

                    // Ensure the "User Assigned (External) MSI" id can be retrieved from the virtual machine
                    //
                    emsiIds = virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds;
                    Assert.NotNull(emsiIds);
                    Assert.Single(emsiIds);

                    identity = azure.Identities.GetById(emsiIds.First());
                    Assert.NotNull(identity);
                    Assert.Equal(identity.Name, identityName2, ignoreCase: true);


                    // Update the virtual machine by enabling "LMSI"
                    virtualMachineScaleSet
                    .Update()
                    .WithSystemAssignedManagedServiceIdentity()
                    .Apply();

                    Assert.NotNull(virtualMachineScaleSet);
                    Assert.NotNull(virtualMachineScaleSet.Inner);
                    Assert.True(virtualMachineScaleSet.IsManagedServiceIdentityEnabled);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);
                }
                finally
                {
                    try
                    {
                        if (azure != null)
                        {
                            azure.ResourceGroups.BeginDeleteByName(groupName);
                        }
                    }
                    catch { }
                }
            }
        }
        public void CanCRUDSecret()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                IGraphRbacManager graphManager = TestHelper.CreateGraphRbacManager();
                string            vaultName1   = TestUtilities.GenerateName("vault1");
                string            secretName   = TestUtilities.GenerateName("secret1");
                string            rgName       = TestUtilities.GenerateName("rgNEMV");

                IKeyVaultManager manager = TestHelper.CreateKeyVaultManager();

                var spnCredentialsClientId = HttpMockServer.Variables[ConnectionStringKeys.ServicePrincipalKey];

                try
                {
                    IVault vault = manager.Vaults
                                   .Define(vaultName1)
                                   .WithRegion(Region.USWest)
                                   .WithNewResourceGroup(rgName)
                                   .DefineAccessPolicy()
                                   .ForServicePrincipal(spnCredentialsClientId)
                                   .AllowKeyAllPermissions()
                                   .AllowSecretAllPermissions()
                                   .Attach()
                                   .Create();
                    Assert.NotNull(vault);

                    SdkContext.DelayProvider.Delay(10000);

                    var secret = vault.Secrets.Define(secretName)
                                 .WithValue("Some secret value")
                                 .Create();

                    Assert.NotNull(secret);
                    Assert.NotNull(secret.Id);
                    Assert.Equal("Some secret value", secret.Value);

                    secret = secret.Update()
                             .WithValue("Some updated value")
                             .Apply();

                    Assert.Equal("Some updated value", secret.Value);

                    var versions = secret.ListVersions();

                    int count = 2;
                    foreach (var version in versions)
                    {
                        if ("Some secret value" == version.Value)
                        {
                            count--;
                        }
                        if ("Some updated value" == version.Value)
                        {
                            count--;
                        }
                    }
                    Assert.Equal(0, count);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #12
0
        public void CanCreateWithEMSI()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var    region        = Region.USSouthCentral;
                var    vmssName      = "javavm";
                var    groupName     = TestUtilities.GenerateName("rgmsi");
                String identityName1 = TestUtilities.GenerateName("msi-id");
                String identityName2 = TestUtilities.GenerateName("msi-id");
                String networkName   = TestUtilities.GenerateName("nw");

                IAzure azure = null;
                try
                {
                    azure = TestHelper.CreateRollupClient();

                    // Prepare a definition for yet-to-be-created resource group
                    //
                    var resourceGroup = azure.ResourceGroups
                                        .Define(groupName)
                                        .WithRegion(region)
                                        .Create();

                    // Create a virtual network residing in the above RG
                    //
                    var network = azure.Networks
                                  .Define(networkName)
                                  .WithRegion(region)
                                  .WithExistingResourceGroup(resourceGroup)
                                  .Create();

                    // Create an "User Assigned (External) MSI" residing in the above RG and assign reader access to the virtual network
                    //
                    var createdIdentity = azure.Identities
                                          .Define(identityName1)
                                          .WithRegion(region)
                                          .WithExistingResourceGroup(resourceGroup)
                                          .WithAccessTo(network, BuiltInRole.Reader)
                                          .Create();

                    // Prepare a definition for yet-to-be-created "User Assigned (External) MSI" with contributor access to the resource group
                    // it resides
                    //
                    var creatableIdentity = azure.Identities
                                            .Define(identityName2)
                                            .WithRegion(region)
                                            .WithExistingResourceGroup(resourceGroup)
                                            .WithAccessToCurrentResourceGroup(BuiltInRole.Contributor);

                    // Create a virtual network for VMSS
                    //
                    var vmssNetwork = azure
                                      .Networks
                                      .Define("vmssvnet")
                                      .WithRegion(region)
                                      .WithExistingResourceGroup(resourceGroup)
                                      .WithAddressSpace("10.0.0.0/28")
                                      .WithSubnet("subnet1", "10.0.0.0/28")
                                      .Create();

                    // Create a Load balancer for VMSS
                    //
                    var vmssInternalLoadBalancer = CreateInternalLoadBalancer(azure,
                                                                              resourceGroup,
                                                                              vmssNetwork,
                                                                              "1",
                                                                              region);

                    var virtualMachineScaleSet = azure.VirtualMachineScaleSets
                                                 .Define(vmssName)
                                                 .WithRegion(region)
                                                 .WithExistingResourceGroup(resourceGroup)
                                                 .WithSku(VirtualMachineScaleSetSkuTypes.StandardA0)
                                                 .WithExistingPrimaryNetworkSubnet(vmssNetwork, "subnet1")
                                                 .WithoutPrimaryInternetFacingLoadBalancer()
                                                 .WithExistingPrimaryInternalLoadBalancer(vmssInternalLoadBalancer)
                                                 .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                                                 .WithRootUsername("jvuser")
                                                 .WithRootPassword(TestUtilities.GenerateName("Pa5$"))
                                                 .WithExistingUserAssignedManagedServiceIdentity(createdIdentity)
                                                 .WithNewUserAssignedManagedServiceIdentity(creatableIdentity)
                                                 .Create();

                    Assert.NotNull(virtualMachineScaleSet);
                    Assert.NotNull(virtualMachineScaleSet.Inner);
                    Assert.True(virtualMachineScaleSet.IsManagedServiceIdentityEnabled);
                    Assert.Null(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId); // No Local MSI enabled
                    Assert.Null(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);    // No Local MSI enabled

                    // Ensure the "User Assigned (External) MSI" id can be retrieved from the VMSS
                    //
                    var emsiIds = virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds;
                    Assert.NotNull(emsiIds);
                    Assert.Equal(2, emsiIds.Count);

                    // Ensure the "User Assigned (External) MSI"s matches with the those provided as part of VMSS create
                    //
                    IIdentity implicitlyCreatedIdentity = null;
                    foreach (var emsiId in emsiIds)
                    {
                        var identity = azure.Identities.GetById(emsiId);
                        Assert.NotNull(identity);
                        Assert.True(identity.Name.Equals(identityName1, StringComparison.OrdinalIgnoreCase) ||
                                    identity.Name.Equals(identityName2, StringComparison.OrdinalIgnoreCase));
                        Assert.NotNull(identity.PrincipalId);

                        if (identity.Name.Equals(identityName2, StringComparison.OrdinalIgnoreCase))
                        {
                            implicitlyCreatedIdentity = identity;
                        }
                    }
                    Assert.NotNull(implicitlyCreatedIdentity);

                    // Ensure expected role assignment exists for explicitly created EMSI
                    //
                    var roleAssignmentsForNetwork = azure
                                                    .AccessManagement
                                                    .RoleAssignments
                                                    .ListByScope(network.Id);
                    bool found = roleAssignmentsForNetwork.Any(r => r.PrincipalId != null && r.PrincipalId.Equals(createdIdentity.PrincipalId, StringComparison.OrdinalIgnoreCase));
                    Assert.True(found, $"Expected role assignment not found for the virtual network for identity {createdIdentity.Name}");

                    var assignment = LookupRoleAssignmentUsingScopeAndRole(network.Id, BuiltInRole.Reader, createdIdentity.PrincipalId, azure);
                    Assert.False(assignment == null, "Expected role assignment with ROLE not found for the virtual network for identity");

                    // Ensure expected role assignment exists for explicitly created EMSI
                    //

                    var roleAssignmentsForResourceGroup = azure
                                                          .AccessManagement
                                                          .RoleAssignments
                                                          .ListByScope(resourceGroup.Id);
                    found = roleAssignmentsForResourceGroup.Any(r => r.PrincipalId != null && r.PrincipalId.Equals(implicitlyCreatedIdentity.PrincipalId, StringComparison.OrdinalIgnoreCase));
                    Assert.True(found, $"Expected role assignment not found for the resource group for identity{implicitlyCreatedIdentity.Name}");

                    assignment = LookupRoleAssignmentUsingScopeAndRole(resourceGroup.Id, BuiltInRole.Contributor, implicitlyCreatedIdentity.PrincipalId, azure);
                    Assert.False(assignment == null, "Expected role assignment with ROLE not found for the resource group for identity");

                    emsiIds = virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds;

                    // Remove both (all) identities
                    virtualMachineScaleSet.Update()
                    .WithoutUserAssignedManagedServiceIdentity(emsiIds.ElementAt(0))
                    .WithoutUserAssignedManagedServiceIdentity(emsiIds.ElementAt(1))
                    .Apply();

                    //
                    Assert.Equal(0, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    if (virtualMachineScaleSet.ManagedServiceIdentityType != null)
                    {
                        Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.None));
                    }
                    // fetch vm again and validate
                    virtualMachineScaleSet.Refresh();
                    //
                    Assert.Equal(0, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    if (virtualMachineScaleSet.ManagedServiceIdentityType != null)
                    {
                        Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.None));
                    }
                    //
                    //
                    var identity1 = azure.Identities.GetById(emsiIds.ElementAt(0));
                    var identity2 = azure.Identities.GetById(emsiIds.ElementAt(1));
                    //
                    // Update VM by enabling System-MSI and add two identities
                    virtualMachineScaleSet.Update()
                    .WithSystemAssignedManagedServiceIdentity()
                    .WithExistingUserAssignedManagedServiceIdentity(identity1)
                    .WithExistingUserAssignedManagedServiceIdentity(identity2)
                    .Apply();
                    Assert.NotNull(virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds);
                    Assert.Equal(2, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    Assert.NotNull(virtualMachineScaleSet.ManagedServiceIdentityType);
                    Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.SystemAssignedUserAssigned));
                    //
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);
                    //
                    virtualMachineScaleSet.Refresh();
                    Assert.NotNull(virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds);
                    Assert.Equal(2, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    Assert.NotNull(virtualMachineScaleSet.ManagedServiceIdentityType);
                    Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.SystemAssignedUserAssigned));
                    //
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);
                    //
                    // Remove identities one by one (first one)
                    virtualMachineScaleSet.Update()
                    .WithoutUserAssignedManagedServiceIdentity(emsiIds.ElementAt(0))
                    .Apply();
                    //
                    Assert.NotNull(virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds);
                    Assert.Equal(1, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    Assert.NotNull(virtualMachineScaleSet.ManagedServiceIdentityType);
                    Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.SystemAssignedUserAssigned));
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);
                    // Remove identities one by one (second one)
                    virtualMachineScaleSet
                    .Update()
                    .WithoutUserAssignedManagedServiceIdentity(emsiIds.ElementAt(1))
                    .Apply();
                    //
                    Assert.Equal(0, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    Assert.NotNull(virtualMachineScaleSet.ManagedServiceIdentityType);
                    Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.SystemAssigned));
                    //
                    virtualMachineScaleSet
                    .Update()
                    .WithoutSystemAssignedManagedServiceIdentity()
                    .Apply();

                    Assert.Equal(0, virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds.Count);
                    if (virtualMachineScaleSet.ManagedServiceIdentityType != null)
                    {
                        Assert.True(virtualMachineScaleSet.ManagedServiceIdentityType.Equals(ResourceIdentityType.None));
                    }
                    Assert.Null(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.Null(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);
                }
                finally
                {
                    try
                    {
                        if (azure != null)
                        {
                            azure.ResourceGroups.BeginDeleteByName(groupName);
                        }
                    }
                    catch { }
                }
            }
        }
Exemple #13
0
        public void CanCreateWithLMSIAndEMSI()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var    region        = Region.USSouthCentral;
                var    vmssName      = "javavm";
                var    groupName     = TestUtilities.GenerateName("rgmsi");
                String identityName1 = TestUtilities.GenerateName("msi-id");
                String networkName   = TestUtilities.GenerateName("nw");

                IAzure azure = null;
                try
                {
                    azure = TestHelper.CreateRollupClient();

                    // Prepare a definition for yet-to-be-created resource group
                    //
                    var resourceGroup = azure.ResourceGroups
                                        .Define(groupName)
                                        .WithRegion(region)
                                        .Create();

                    // Create a virtual network residing in the above RG
                    //
                    var network = azure.Networks
                                  .Define(networkName)
                                  .WithRegion(region)
                                  .WithExistingResourceGroup(resourceGroup)
                                  .Create();

                    // Prepare a definition for yet-to-be-created "User Assigned (External) MSI" with contributor access to the resource group
                    // it resides
                    //
                    var creatableIdentity = azure.Identities
                                            .Define(identityName1)
                                            .WithRegion(region)
                                            .WithExistingResourceGroup(resourceGroup)
                                            .WithAccessToCurrentResourceGroup(BuiltInRole.Contributor);

                    // Create a virtual network for VMSS
                    //
                    var vmssNetwork = azure
                                      .Networks
                                      .Define("vmssvnet")
                                      .WithRegion(region)
                                      .WithExistingResourceGroup(resourceGroup)
                                      .WithAddressSpace("10.0.0.0/28")
                                      .WithSubnet("subnet1", "10.0.0.0/28")
                                      .Create();

                    // Create a Load balancer for VMSS
                    //
                    var vmssInternalLoadBalancer = CreateInternalLoadBalancer(azure,
                                                                              resourceGroup,
                                                                              vmssNetwork,
                                                                              "1",
                                                                              region);

                    var virtualMachineScaleSet = azure.VirtualMachineScaleSets
                                                 .Define(vmssName)
                                                 .WithRegion(region)
                                                 .WithExistingResourceGroup(resourceGroup)
                                                 .WithSku(VirtualMachineScaleSetSkuTypes.StandardA0)
                                                 .WithExistingPrimaryNetworkSubnet(vmssNetwork, "subnet1")
                                                 .WithoutPrimaryInternetFacingLoadBalancer()
                                                 .WithExistingPrimaryInternalLoadBalancer(vmssInternalLoadBalancer)
                                                 .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                                                 .WithRootUsername("jvuser")
                                                 .WithRootPassword(TestUtilities.GenerateName("Pa5$"))
                                                 .WithSystemAssignedManagedServiceIdentity()
                                                 .WithSystemAssignedIdentityBasedAccessTo(network.Id, BuiltInRole.Contributor)
                                                 .WithNewUserAssignedManagedServiceIdentity(creatableIdentity)
                                                 .Create();

                    Assert.NotNull(virtualMachineScaleSet);
                    Assert.NotNull(virtualMachineScaleSet.Inner);
                    Assert.True(virtualMachineScaleSet.IsManagedServiceIdentityEnabled);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.NotNull(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityTenantId);

                    // Ensure the "User Assigned (External) MSI" id can be retrieved from the virtual machine
                    //
                    ISet <string> emsiIds = virtualMachineScaleSet.UserAssignedManagedServiceIdentityIds;
                    Assert.NotNull(emsiIds);
                    Assert.Equal(1, emsiIds.Count);

                    var identity = azure.Identities.GetById(emsiIds.First());
                    Assert.NotNull(identity);
                    Assert.Equal(identity.Name, identityName1, ignoreCase: true);

                    // Ensure expected role assignment exists for LMSI
                    //
                    var roleAssignmentsForNetwork = azure
                                                    .AccessManagement
                                                    .RoleAssignments
                                                    .ListByScope(network.Id);
                    bool found = roleAssignmentsForNetwork.Any(r => r.PrincipalId != null && r.PrincipalId.Equals(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId, StringComparison.OrdinalIgnoreCase));
                    Assert.True(found, $"Expected role assignment not found for the virtual network for local identity {virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId}");

                    var assignment = LookupRoleAssignmentUsingScopeAndRole(network.Id, BuiltInRole.Contributor, virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId, azure);
                    Assert.False(assignment == null, $"Expected role assignment with ROLE {BuiltInRole.Contributor} not found for the virtual network for identity");

                    var roleAssignmentsForResourceGroup = azure
                                                          .AccessManagement
                                                          .RoleAssignments
                                                          .ListByScope(resourceGroup.Id);
                    found = roleAssignmentsForResourceGroup.Any(r => r.PrincipalId != null && r.PrincipalId.Equals(identity.PrincipalId, StringComparison.OrdinalIgnoreCase));
                    Assert.True(found, $"Expected role assignment not found for the resource group for identity {identity.Name}");

                    assignment = LookupRoleAssignmentUsingScopeAndRole(resourceGroup.Id, BuiltInRole.Contributor, identity.PrincipalId, azure);
                    Assert.False(assignment == null, $"Expected role assignment with ROLE {BuiltInRole.Contributor}  not found for the resource group for system assigned identity");
                }
                finally
                {
                    try
                    {
                        if (azure != null)
                        {
                            azure.ResourceGroups.BeginDeleteByName(groupName);
                        }
                    }
                    catch { }
                }
            }
        }
        public void CanCreateUpdateFromPIRWithManagedDisk()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var vmssName        = SdkContext.RandomResourceName("vmss", 10);
                var resourceManager = TestHelper.CreateRollupClient();
                var computeManager  = TestHelper.CreateComputeManager();
                var networkManager  = TestHelper.CreateNetworkManager();
                var rgName          = TestUtilities.GenerateName("rgfluentchash-");
                try
                {
                    var resourceGroup = resourceManager.ResourceGroups
                                        .Define(rgName)
                                        .WithRegion(Location)
                                        .Create();

                    var network = networkManager
                                  .Networks
                                  .Define(SdkContext.RandomResourceName("vmssvnet", 15))
                                  .WithRegion(Location)
                                  .WithExistingResourceGroup(resourceGroup)
                                  .WithAddressSpace("10.0.0.0/28")
                                  .WithSubnet("subnet1", "10.0.0.0/28")
                                  .Create();

                    var publicLoadBalancer = ScaleSet.CreateHttpLoadBalancers(resourceManager, resourceGroup, "1", Location);
                    var vmScaleSet         = computeManager.VirtualMachineScaleSets
                                             .Define(vmssName)
                                             .WithRegion(Location)
                                             .WithExistingResourceGroup(resourceGroup)
                                             .WithSku(VirtualMachineScaleSetSkuTypes.StandardD5v2)
                                             .WithExistingPrimaryNetworkSubnet(network, "subnet1")
                                             .WithExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
                                             .WithoutPrimaryInternalLoadBalancer()
                                             .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                                             .WithRootUsername("jvuser")
                                             .WithRootPassword("123OData!@#123")
                                             .WithNewDataDisk(100)
                                             .WithNewDataDisk(100, 1, CachingTypes.ReadWrite)
                                             .WithNewDataDisk(100, 2, CachingTypes.ReadOnly)
                                             .Create();

                    var virtualMachineScaleSetVMs = vmScaleSet.VirtualMachines;
                    var virtualMachines           = virtualMachineScaleSetVMs.List();
                    Assert.Equal(virtualMachines.Count(), vmScaleSet.Capacity);
                    foreach (var vm in virtualMachines)
                    {
                        Assert.True(vm.IsOSBasedOnPlatformImage);
                        Assert.False(vm.IsOSBasedOnCustomImage);
                        Assert.False(vm.IsOSBasedOnStoredImage);
                        Assert.True(vm.IsManagedDiskEnabled);
                        Assert.NotNull(vm.UnmanagedDataDisks);
                        Assert.Empty(vm.UnmanagedDataDisks);
                        Assert.NotNull(vm.DataDisks);
                        Assert.Equal(3, vm.DataDisks.Count);
                    }
                    vmScaleSet.Update()
                    .WithoutDataDisk(0)
                    .WithNewDataDisk(50)
                    .Apply();

                    virtualMachineScaleSetVMs = vmScaleSet.VirtualMachines;
                    virtualMachines           = virtualMachineScaleSetVMs.List();
                    Assert.Equal(virtualMachines.Count(), vmScaleSet.Capacity);
                    foreach (var vm in virtualMachines)
                    {
                        Assert.NotNull(vm.DataDisks);
                        Assert.Equal(3, vm.DataDisks.Count);
                    }
                }
                finally
                {
                    try
                    {
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
        public void CanCRUDGroup()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                IGraphRbacManager manager = TestHelper.CreateGraphRbacManager();
                var userName = SdkContext.RandomResourceName("user", 16);
                var spName = SdkContext.RandomResourceName("sp", 16);
                var group1Name = SdkContext.RandomResourceName("group", 16);
                var group2Name = SdkContext.RandomResourceName("group", 16);
                IActiveDirectoryUser user = null;
                IServicePrincipal servicePrincipal = null;
                IActiveDirectoryGroup group1 = null;
                IActiveDirectoryGroup group2 = null;
                try
                {
                    user = manager.Users.Define(userName)
                            .WithEmailAlias(userName)
                            .WithPassword("StrongPass!123")
                            .Create();
                    servicePrincipal = manager.ServicePrincipals.Define(spName)
                            .WithNewApplication("https://" + spName)
                            .Create();
                    group1 = manager.Groups.Define(group1Name)
                            .WithEmailAlias(group1Name)
                            .Create();
                    SdkContext.DelayProvider.Delay(15000);
                    group2 = manager.Groups.Define(group2Name)
                            .WithEmailAlias(group2Name)
                            .WithMember(user.Id)
                            .WithMember(servicePrincipal.Id)
                            .WithMember(group1.Id)
                            .Create();

                    Assert.NotNull(group2);
                    Assert.NotNull(group2.Id);
                    var members = group2.ListMembers();
                    Assert.Equal(3, members.Count());
                    var enumerator = members.GetEnumerator();
                    Assert.True(enumerator.MoveNext());
                    Assert.NotNull(enumerator.Current.Id);
                    Assert.True(enumerator.MoveNext());
                    Assert.NotNull(enumerator.Current.Id);
                    Assert.True(enumerator.MoveNext());
                    Assert.NotNull(enumerator.Current.Id);
                    Assert.False(enumerator.MoveNext());
                }
                finally
                {
                    if (servicePrincipal != null)
                    {
                        manager.ServicePrincipals.DeleteById(servicePrincipal.Id);
                    }
                    // cannot delete users or groups from service principal
                    // if (user != null) {
                    //     manager.Users.DeleteById(user.Id);
                    // }
                    // if (group != null) {
                    //     manager.Groups.DeleteById(group.Id);
                    // }
                }
            }
        }
Exemple #16
0
        public void CanCreateUpdateGetDeleteGalleryImageVersion()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                Region region           = Region.USWestCentral;
                string rgName           = TestUtilities.GenerateName("vmexttest");
                string galleryName      = TestUtilities.GenerateName("jsim");
                string galleryImageName = "SampleImages";

                var azure = TestHelper.CreateRollupClient();

                try
                {
                    IGallery gallery = azure.Galleries.Define(galleryName)
                                       .WithRegion(region)
                                       .WithNewResourceGroup(rgName)
                                       .WithDescription("java's image gallery")
                                       .Create();
                    //
                    // Create an image in the gallery (a container to hold custom linux image)
                    //

                    IGalleryImage galleryImage = azure.GalleryImages.Define(galleryImageName)
                                                 .WithExistingGallery(gallery)
                                                 .WithLocation(region)
                                                 .WithIdentifier("JavaSDKTeam", "JDK", "Jdk-9")
                                                 .WithGeneralizedLinux()
                                                 .Create();
                    //
                    // Create a custom image to base the version on
                    //
                    IVirtualMachineCustomImage customImage = PrepareCustomImage(rgName, region, azure);
                    // String customImageId = "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/javacsmrg91482/providers/Microsoft.Compute/images/img96429090dee3";
                    //
                    // Create a image version based on the custom image
                    //

                    string versionName = "0.0.4";

                    IGalleryImageVersion imageVersion = azure.GalleryImageVersions.Define(versionName)
                                                        .WithExistingImage(rgName, gallery.Name, galleryImage.Name)
                                                        .WithLocation(region.ToString())
                                                        .WithSourceCustomImage(customImage)
                                                        // Options - Start
                                                        .WithRegionAvailability(Region.USEast2, 1)
                                                        // Options - End
                                                        .Create();

                    Assert.NotNull(imageVersion);
                    Assert.NotNull(imageVersion.Inner);
                    Assert.NotNull(imageVersion.PublishingProfile.TargetRegions);
                    Assert.Equal(2, imageVersion.PublishingProfile.TargetRegions.Count);
                    Assert.False(imageVersion.IsExcludedFromLatest);

                    imageVersion = azure.GalleryImageVersions.GetByGalleryImage(rgName, gallery.Name, galleryImage.Name, imageVersion.Name);
                    Assert.NotNull(imageVersion);
                    Assert.Null(imageVersion.ReplicationStatus);

                    imageVersion = azure.GalleryImageVersions.GetByGalleryImageWithReplicationStatus(rgName, gallery.Name, galleryImage.Name, imageVersion.Name);
                    Assert.NotNull(imageVersion);
                    Assert.NotNull(imageVersion.ReplicationStatus);
                    Assert.NotNull(imageVersion.ReplicationStatus.AggregatedState);

                    //
                    // Update image version
                    //
                    imageVersion.Update()
                    .WithoutRegionAvailability(Region.USEast2)
                    .Apply();

                    Assert.NotNull(imageVersion.PublishingProfile.TargetRegions);
                    Assert.Equal(1, imageVersion.PublishingProfile.TargetRegions.Count);
                    Assert.False(imageVersion.IsExcludedFromLatest);

                    //
                    // List image versions
                    //
                    IEnumerable <IGalleryImageVersion> versions = galleryImage.ListVersions();

                    Assert.NotNull(versions);
                    Assert.True(versions.Count() > 0);

                    //
                    // Delete the image version
                    //
                    azure.GalleryImageVersions.DeleteByGalleryImage(rgName, galleryName, galleryImageName, versionName);
                }
                finally
                {
                    try
                    {
                        azure.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #17
0
        public void CanCRUDCdn()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var cdnStandardProfileName = TestUtilities.GenerateName("cdnStandardProfile");
                var cdnPremiumProfileName  = TestUtilities.GenerateName("cdnPremiumProfile22");
                var cdnPremiumEndpointName = TestUtilities.GenerateName("premiumVerizonEndpointFluentTest22");
                var rgName = TestUtilities.GenerateName("rgRCCDN");

                try
                {
                    var cdnManager = TestHelper.CreateCdnManager();

                    var standardProfile = cdnManager.Profiles.Define(cdnStandardProfileName)
                                          .WithRegion(Region.USCentral)
                                          .WithNewResourceGroup(rgName)
                                          .WithStandardAkamaiSku()
                                          .WithNewEndpoint("supername.cloudapp.net")
                                          .DefineNewEndpoint("akamiEndpointWithoutMuchProperties")
                                          .WithOrigin("originSuperName", "storageforazdevextest.blob.core.windows.net")
                                          .Attach()
                                          .DefineNewEndpoint(cdnEndpointName, endpointOriginHostname)
                                          .WithContentTypeToCompress("powershell/pain")
                                          .WithGeoFilter("/path/videos", GeoFilterActions.Block, CountryISOCode.Argentina)
                                          .WithGeoFilter("/path/images", GeoFilterActions.Block, CountryISOCode.Belgium)
                                          .WithContentTypeToCompress("text/plain")
                                          .WithCompressionEnabled(true)
                                          .WithQueryStringCachingBehavior(QueryStringCachingBehavior.BypassCaching)
                                          .WithHttpsAllowed(true)
                                          .WithHttpsPort(444)
                                          .WithHttpAllowed(true)
                                          .WithHttpPort(85)
                                          .WithCustomDomain("sdk-1-f3757d2a3e10.azureedge-test.net")
                                          .WithCustomDomain("sdk-2-f3757d2a3e10.azureedge-test.net")
                                          .Attach()
                                          .Create();

                    Assert.NotNull(standardProfile);
                    Assert.Equal(cdnStandardProfileName, standardProfile.Name);
                    Assert.False(standardProfile.IsPremiumVerizon);
                    Assert.Equal(3, standardProfile.Endpoints.Count);
                    Assert.True(standardProfile.Endpoints.ContainsKey(cdnEndpointName));
                    Assert.Equal(endpointOriginHostname, standardProfile.Endpoints[cdnEndpointName].OriginHostName);
                    Assert.Equal(2, standardProfile.Endpoints[cdnEndpointName].CustomDomains.Count);
                    Assert.Equal(2, standardProfile.Endpoints[cdnEndpointName].GeoFilters.Count);
                    Assert.True(standardProfile.Endpoints[cdnEndpointName].IsCompressionEnabled);
                    Assert.True(standardProfile.Endpoints[cdnEndpointName].IsHttpAllowed);
                    Assert.True(standardProfile.Endpoints[cdnEndpointName].IsHttpsAllowed);
                    Assert.Equal(444, standardProfile.Endpoints[cdnEndpointName].HttpsPort);
                    Assert.Equal(85, standardProfile.Endpoints[cdnEndpointName].HttpPort);


                    var premiumProfile = cdnManager.Profiles.Define(cdnPremiumProfileName)
                                         .WithRegion(Region.USCentral)
                                         .WithNewResourceGroup(rgName)
                                         .WithPremiumVerizonSku()
                                         .WithNewPremiumEndpoint("someweirdname.blob.core.windows.net")
                                         .DefineNewPremiumEndpoint("supermuperep1")
                                         .WithPremiumOrigin("originPremium", "xplattestvmss1sto0575014.blob.core.windows.net")
                                         .Attach()
                                         .DefineNewPremiumEndpoint(cdnPremiumEndpointName)
                                         .WithPremiumOrigin("supername.cloudapp.net")
                                         .WithHttpAllowed(true)
                                         .WithHttpsAllowed(true)
                                         .WithHttpsPort(12)
                                         .WithHttpPort(123)
                                         .Attach()
                                         .Create();
                    Assert.NotNull(premiumProfile);
                    Assert.Equal(Region.USCentral, premiumProfile.Region);
                    Assert.True(premiumProfile.IsPremiumVerizon);
                    Assert.Equal(3, premiumProfile.Endpoints.Count);
                    Assert.True(premiumProfile.Endpoints.ContainsKey(cdnPremiumEndpointName));
                    Assert.True(premiumProfile.Endpoints[cdnPremiumEndpointName].IsHttpAllowed);
                    Assert.True(premiumProfile.Endpoints[cdnPremiumEndpointName].IsHttpsAllowed);
                    Assert.Equal(12, premiumProfile.Endpoints[cdnPremiumEndpointName].HttpsPort);
                    Assert.Equal(123, premiumProfile.Endpoints[cdnPremiumEndpointName].HttpPort);

                    var profileRead = standardProfile.Refresh();

                    Assert.NotNull(profileRead);
                    Assert.Equal(standardProfile.Region, profileRead.Region);
                    Assert.Equal(standardProfile.Name, profileRead.Name);
                    Assert.Equal(standardProfile.Endpoints.Count, profileRead.Endpoints.Count);

                    profileRead = cdnManager.Profiles.GetById(standardProfile.Id);
                    Assert.Equal(3, profileRead.Endpoints.Count);
                    Assert.Equal(2, profileRead.Endpoints[cdnEndpointName].CustomDomains.Count);
                    Assert.Equal(standardProfile.Name, profileRead.Name);

                    if (!standardProfile.IsPremiumVerizon)
                    {
                        standardProfile.Update()
                        .WithTag("provider", "Akamai")
                        .WithNewEndpoint("www.somewebsite.com")
                        .DefineNewEndpoint("somenewnamefortheendpoint")
                        .WithOrigin("www.someotherwebsite.com")
                        .WithGeoFilter("/path/music", GeoFilterActions.Block, CountryISOCode.Estonia)
                        .Attach()
                        .UpdateEndpoint(cdnEndpointName)
                        .WithoutGeoFilters()
                        .WithHttpAllowed(true)
                        .WithHttpPort(1111)
                        .WithoutCustomDomain("sdk-2-f3757d2a3e10.azureedge-test.net")
                        .Parent()
                        .Apply();
                    }

                    Assert.Equal(standardProfile.Region, profileRead.Region);
                    Assert.Equal(standardProfile.Name, profileRead.Name);
                    Assert.NotEqual(standardProfile.Endpoints.Count, profileRead.Endpoints.Count);
                    Assert.Equal(5, standardProfile.Endpoints.Count);
                    Assert.Equal(1111, standardProfile.Endpoints[cdnEndpointName].HttpPort);
                    Assert.Equal(1, standardProfile.Endpoints[cdnEndpointName].CustomDomains.Count);
                    Assert.Equal("sdk-1-f3757d2a3e10.azureedge-test.net", standardProfile.Endpoints[cdnEndpointName].CustomDomains.ElementAt(0));
                    Assert.Equal(0, standardProfile.Endpoints[cdnEndpointName].GeoFilters.Count);

                    premiumProfile.Update()
                    .WithTag("provider", "Verizon")
                    .WithNewPremiumEndpoint("xplattestvmss1sto0575014.blob.core.windows.net")
                    .DefineNewPremiumEndpoint("supermuperep3")
                    .WithPremiumOrigin("xplattestvmss1sto0575014.blob.core.windows.net")
                    .Attach()
                    .UpdatePremiumEndpoint(cdnPremiumEndpointName)
                    .WithHttpsAllowed(true)
                    .WithHttpsPort(1111)
                    .Parent()
                    .WithoutEndpoint("supermuperep1")
                    .Apply();

                    Assert.True(premiumProfile.IsPremiumVerizon);
                    Assert.Equal(4, premiumProfile.Endpoints.Count);
                    Assert.False(premiumProfile.Endpoints.ContainsKey("supermuperep1"));
                    Assert.True(premiumProfile.IsPremiumVerizon);

                    string ssoUri = premiumProfile.GenerateSsoUri();
                    Assert.NotNull(ssoUri);

                    var standardEp       = standardProfile.Endpoints[cdnEndpointName];
                    var validationResult = standardEp.ValidateCustomDomain("sdk-2-f3757d2a3e10.azureedge-test.net");
                    Assert.NotNull(validationResult);
                    Assert.True(validationResult.CustomDomainValidated);

                    standardProfile.StopEndpoint(standardEp.Name);
                    standardEp.Start();
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch
                    { }
                }
            }
        }
Exemple #18
0
        public void CanCreateUpdateGetDeleteGalleryImage()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                Region region           = Region.USWestCentral;
                string rgName           = TestUtilities.GenerateName("vmexttest");
                string galleryName      = TestUtilities.GenerateName("jsim");
                string galleryImageName = "JavaImages";

                var azure = TestHelper.CreateRollupClient();

                try
                {
                    // Create a gallery
                    //
                    IGallery javaGallery = azure.Galleries.Define(galleryName)
                                           .WithRegion(region)
                                           .WithNewResourceGroup(rgName)
                                           .WithDescription("java's image gallery")
                                           .Create();
                    //
                    // Create an image in the gallery
                    //
                    IGalleryImage galleryImage = azure.GalleryImages.Define(galleryImageName)
                                                 .WithExistingGallery(javaGallery)
                                                 .WithLocation(region)
                                                 .WithIdentifier("JavaSDKTeam", "JDK", "Jdk-9")
                                                 .WithGeneralizedWindows()
                                                 // Optionals - Start
                                                 .WithUnsupportedDiskType(DiskSkuTypes.StandardLRS)
                                                 .WithUnsupportedDiskType(DiskSkuTypes.PremiumLRS)
                                                 .WithRecommendedMaximumCPUsCountForVirtualMachine(25)
                                                 .WithRecommendedMaximumMemoryForVirtualMachine(3200)
                                                 // Options - End
                                                 .Create();

                    Assert.NotNull(galleryImage);
                    Assert.NotNull(galleryImage.Inner);
                    Assert.Equal(galleryImage.Location, region.ToString(), ignoreCase: true);
                    Assert.True(galleryImage.OSType.Equals(OperatingSystemTypes.Windows));
                    Assert.True(galleryImage.OSState.Equals(OperatingSystemStateTypes.Generalized));
                    Assert.Equal(2, galleryImage.UnsupportedDiskTypes.Count);
                    Assert.NotNull(galleryImage.Identifier);
                    Assert.Equal("JavaSDKTeam", galleryImage.Identifier.Publisher);
                    Assert.Equal("JDK", galleryImage.Identifier.Offer);
                    Assert.Equal("Jdk-9", galleryImage.Identifier.Sku);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.VCPUs);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.VCPUs.Max);
                    Assert.Equal(25, galleryImage.RecommendedVirtualMachineConfiguration.VCPUs.Max);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.Memory);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.Memory.Max);
                    Assert.Equal(3200, galleryImage.RecommendedVirtualMachineConfiguration.Memory.Max);
                    //
                    // Update an image in the gallery
                    //
                    galleryImage.Update()
                    .WithoutUnsupportedDiskType(DiskSkuTypes.PremiumLRS)
                    .WithRecommendedMinimumCPUsCountForVirtualMachine(15)
                    .WithRecommendedMemoryForVirtualMachine(2200, 3200)
                    .Apply();

                    Assert.Equal(1, galleryImage.UnsupportedDiskTypes.Count);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.VCPUs);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.VCPUs.Max);
                    Assert.Equal(25, galleryImage.RecommendedVirtualMachineConfiguration.VCPUs.Max);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.VCPUs.Min);
                    Assert.Equal(15, galleryImage.RecommendedVirtualMachineConfiguration.VCPUs.Min);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.Memory);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.Memory.Max);
                    Assert.Equal(3200, galleryImage.RecommendedVirtualMachineConfiguration.Memory.Max);
                    Assert.NotNull(galleryImage.RecommendedVirtualMachineConfiguration.Memory.Min);
                    Assert.Equal(2200, galleryImage.RecommendedVirtualMachineConfiguration.Memory.Min);
                    //
                    // List images in the gallery
                    //
                    IEnumerable <IGalleryImage> images = azure.GalleryImages.ListByGallery(rgName, galleryName);

                    Assert.Single(images);
                    //
                    // Get image from gallery
                    //
                    galleryImage = azure.GalleryImages.GetByGallery(rgName, galleryName, galleryImageName);

                    Assert.NotNull(galleryImage);
                    Assert.NotNull(galleryImage.Inner);
                    //
                    // Delete an image from gallery
                    //
                    azure.GalleryImages.DeleteByGallery(rgName, galleryName, galleryImageName);
                }
                finally
                {
                    try
                    {
                        azure.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
        public void CanCreateGetListDelete()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var rgName       = TestUtilities.GenerateName("rgmsi");
                var identityName = TestUtilities.GenerateName("msitest");
                try
                {
                    var azure = TestHelper.CreateRollupClient();

                    var creatableRG = azure.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var identity = azure.Identities
                                   .Define(identityName)
                                   .WithRegion(region)
                                   .WithNewResourceGroup(creatableRG)
                                   .Create();

                    Assert.NotNull(identity);
                    Assert.NotNull(identity.Inner);
                    Assert.True(identityName.Equals(identity.Name, StringComparison.OrdinalIgnoreCase), $"{identityName} == {identity.Name}");
                    Assert.True(identity.ResourceGroupName.Equals(rgName, StringComparison.OrdinalIgnoreCase), $"{rgName} == {identity.ResourceGroupName}");
                    Assert.NotNull(identity.ClientId);
                    Assert.NotNull(identity.PrincipalId);
                    Assert.NotNull(identity.TenantId);
                    Assert.NotNull(identity.ClientSecretUrl);

                    identity = azure.Identities.GetById(identity.Id);

                    Assert.NotNull(identity);
                    Assert.NotNull(identity.Inner);

                    var identities = azure.Identities.ListByResourceGroup(rgName);
                    Assert.NotNull(identities);

                    var found = false;
                    foreach (var id in identities)
                    {
                        Assert.NotNull(id);
                        Assert.NotNull(id.Inner);
                        if (id.Name.Equals(identityName, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                        }
                        Assert.NotNull(identity.ClientId);
                        Assert.NotNull(identity.PrincipalId);
                        Assert.NotNull(identity.TenantId);
                        Assert.NotNull(identity.ClientSecretUrl);
                    }

                    Assert.True(found);

                    azure.Identities
                    .DeleteById(identity.Id);
                }
                finally
                {
                    try
                    {
                        var resourceManager = TestHelper.CreateResourceManager();
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #20
0
        public void CanSetMSIOnNewVMWithMultipleRoleAssignments()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var    groupName          = TestUtilities.GenerateName("rgmsi");
                var    storageAccountName = TestUtilities.GenerateName("ja");
                var    region             = Region.USEast2;
                var    vmName             = "javavm";
                IAzure azure = null;
                try
                {
                    azure = TestHelper.CreateRollupClient();


                    IStorageAccount storageAccount = azure.StorageAccounts
                                                     .Define(storageAccountName)
                                                     .WithRegion(region)
                                                     .WithNewResourceGroup(groupName)
                                                     .Create();

                    var resourceGroup = azure.ResourceGroups.GetByName(storageAccount.ResourceGroupName);

                    IVirtualMachine virtualMachine = azure.VirtualMachines
                                                     .Define(vmName)
                                                     .WithRegion(region)
                                                     .WithExistingResourceGroup(groupName)
                                                     .WithNewPrimaryNetwork("10.0.0.0/28")
                                                     .WithPrimaryPrivateIPAddressDynamic()
                                                     .WithoutPrimaryPublicIPAddress()
                                                     .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                                                     .WithRootUsername("Foo12")
                                                     .WithRootPassword("abc!@#F0orL")
                                                     .WithSize(VirtualMachineSizeTypes.StandardDS2V2)
                                                     .WithOSDiskCaching(CachingTypes.ReadWrite)
                                                     .WithSystemAssignedManagedServiceIdentity()
                                                     .WithSystemAssignedIdentityBasedAccessTo(resourceGroup.Id, BuiltInRole.Contributor)
                                                     .WithSystemAssignedIdentityBasedAccessTo(storageAccount.Id, BuiltInRole.Contributor)
                                                     .Create();

                    var authenticatedClient = TestHelper.CreateAuthenticatedClient();
                    // TODO: Renable the below code snippet: https://github.com/Azure/azure-libraries-for-net/issues/739
                    //
                    //  Comment out since the below code need external tennat.
                    //
                    ////
                    //IServicePrincipal servicePrincipal = authenticatedClient
                    //        .ServicePrincipals
                    //        .GetById(virtualMachineScaleSet.SystemAssignedManagedServiceIdentityPrincipalId);

                    //Assert.NotNull(servicePrincipal);
                    //Assert.NotNull(servicePrincipal.Inner);

                    // Ensure role assigned for resource group
                    //

                    var rgRoleAssignments = authenticatedClient.RoleAssignments.ListByScope(resourceGroup.Id);
                    Assert.NotNull(rgRoleAssignments);
                    bool found = false;
                    foreach (var roleAssignment in rgRoleAssignments)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(virtualMachine.SystemAssignedManagedServiceIdentityPrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.True(found, "Resource group should have a role assignment with virtual machine MSI principal");

                    // Ensure role assigned for storage account
                    //
                    var stgRoleAssignments = authenticatedClient.RoleAssignments.ListByScope(storageAccount.Id);
                    Assert.NotNull(stgRoleAssignments);
                    found = false;
                    foreach (var roleAssignment in stgRoleAssignments)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(virtualMachine.SystemAssignedManagedServiceIdentityPrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.True(found, "Storage account should have a role assignment with virtual machine MSI principal");
                }
                finally
                {
                    try
                    {
                        if (azure != null)
                        {
                            azure.ResourceGroups.BeginDeleteByName(groupName);
                        }
                    }
                    catch { }
                }
            }
        }
Exemple #21
0
        public void ContainerServiceCRUDTest()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var csName    = TestUtilities.GenerateName("cr");
                var saName    = TestUtilities.GenerateName("crsa");
                var dnsPrefix = TestUtilities.GenerateName("dns");
                var rgName    = TestUtilities.GenerateName("crRg");
                IContainerService containerService = null;
                var computeManager  = TestHelper.CreateComputeManager();
                var resourceManager = TestHelper.CreateResourceManager();

                try
                {
                    containerService = computeManager.ContainerServices.Define(csName)
                                       .WithRegion(Region.USWest)
                                       .WithNewResourceGroup(rgName)
                                       .WithDcosOrchestration()
                                       .WithDiagnostics()
                                       .WithLinux()
                                       .WithRootUsername("testusername")
                                       .WithSshKey(SshKey)
                                       .WithMasterNodeCount(ContainerServiceMasterProfileCount.MIN)
                                       .WithMasterLeafDomainLabel("mp1" + dnsPrefix)
                                       .DefineAgentPool("agentPool0" + csName)
                                       .WithVMCount(1)
                                       .WithVMSize(ContainerServiceVMSizeTypes.StandardA1)
                                       .WithLeafDomainLabel("ap0" + dnsPrefix)
                                       .Attach()
                                       .WithTag("tag1", "value1")
                                       .Create();
                    Assert.NotNull(containerService.Id);
                    Assert.Equal(containerService.Region, Region.USWest);
                    Assert.Equal(containerService.MasterNodeCount, (int)ContainerServiceMasterProfileCount.MIN);
                    Assert.Equal("testusername", containerService.LinuxRootUsername);
                    Assert.Equal(1, containerService.AgentPoolCount);
                    Assert.Equal(containerService.AgentPoolName, "agentPool0" + csName);
                    Assert.Equal(containerService.AgentPoolLeafDomainLabel, "ap0" + dnsPrefix);
                    Assert.Equal(containerService.AgentPoolVMSize, ContainerServiceVMSizeTypes.StandardA1);
                    Assert.Equal(ContainerServiceOrchestratorTypes.DCOS, containerService.OrchestratorType);
                    Assert.True(containerService.IsDiagnosticsEnabled);
                    Assert.True(containerService.Tags.ContainsKey("tag1"));


                    containerService = containerService.Update()
                                       .WithAgentVMCount(5)
                                       .WithTag("tag2", "value2")
                                       .WithTag("tag3", "value3")
                                       .WithoutTag("tag1")
                                       .Apply();

                    Assert.True(containerService.AgentPoolCount == 5);
                    Assert.True(containerService.Tags.ContainsKey("tag2"));
                    Assert.True(!containerService.Tags.ContainsKey("tag1"));
                }
                finally
                {
                    try
                    {
                        resourceManager.ResourceGroups.BeginDeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #22
0
        public void CanSetMSIOnExistingVMWithRoleAssignments()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var    groupName          = TestUtilities.GenerateName("rgmsi");
                var    storageAccountName = TestUtilities.GenerateName("ja");
                var    region             = Region.USEast2;
                var    vmName             = "javavm";
                IAzure azure = null;
                try
                {
                    azure = TestHelper.CreateRollupClient();
                    IVirtualMachine virtualMachine = azure.VirtualMachines
                                                     .Define(vmName)
                                                     .WithRegion(region)
                                                     .WithNewResourceGroup(groupName)
                                                     .WithNewPrimaryNetwork("10.0.0.0/28")
                                                     .WithPrimaryPrivateIPAddressDynamic()
                                                     .WithoutPrimaryPublicIPAddress()
                                                     .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)
                                                     .WithRootUsername("Foo12")
                                                     .WithRootPassword("abc!@#F0orL")
                                                     .WithSize(VirtualMachineSizeTypes.StandardDS2V2)
                                                     .WithOSDiskCaching(CachingTypes.ReadWrite)
                                                     .WithSystemAssignedManagedServiceIdentity()
                                                     .Create();

                    Assert.NotNull(virtualMachine);
                    Assert.NotNull(virtualMachine.Inner);
                    Assert.True(virtualMachine.IsManagedServiceIdentityEnabled);
                    Assert.NotNull(virtualMachine.SystemAssignedManagedServiceIdentityPrincipalId);
                    Assert.NotNull(virtualMachine.SystemAssignedManagedServiceIdentityTenantId);

                    var authenticatedClient = TestHelper.CreateAuthenticatedClient();
                    // Ensure NO role assigned for resource group
                    //
                    var resourceGroup      = azure.ResourceGroups.GetByName(virtualMachine.ResourceGroupName);
                    var rgRoleAssignments1 = authenticatedClient.RoleAssignments.ListByScope(resourceGroup.Id);
                    Assert.NotNull(rgRoleAssignments1);
                    bool found = false;
                    foreach (var roleAssignment in rgRoleAssignments1)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(virtualMachine.SystemAssignedManagedServiceIdentityPrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.False(found, "Resource group should not have a role assignment with virtual machine MSI principal");

                    virtualMachine.Update()
                    .WithSystemAssignedManagedServiceIdentity()
                    .WithSystemAssignedIdentityBasedAccessToCurrentResourceGroup(BuiltInRole.Contributor)
                    .Apply();

                    // Ensure role assigned for resource group
                    //
                    var roleAssignments2 = authenticatedClient.RoleAssignments.ListByScope(resourceGroup.Id);
                    Assert.NotNull(roleAssignments2);
                    foreach (var roleAssignment in roleAssignments2)
                    {
                        if (roleAssignment.PrincipalId != null && roleAssignment.PrincipalId.Equals(virtualMachine.SystemAssignedManagedServiceIdentityPrincipalId, StringComparison.OrdinalIgnoreCase))
                        {
                            found = true;
                            break;
                        }
                    }
                    Assert.True(found, "Resource group should have a role assignment with virtual machine MSI principal");

                    // Try adding the same role again, implementation should handle 'RoleAlreadyExists' error code and resume
                    //
                    virtualMachine.Update()
                    .WithSystemAssignedManagedServiceIdentity()
                    .WithSystemAssignedIdentityBasedAccessToCurrentResourceGroup(BuiltInRole.Contributor)
                    .Apply();
                }
                finally
                {
                    try
                    {
                        if (azure != null)
                        {
                            azure.ResourceGroups.BeginDeleteByName(groupName);
                        }
                    }
                    catch { }
                }
            }
        }
Exemple #23
0
        public void CanCreateImageFromManagedDisk()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                var vmName             = SdkContext.RandomResourceName("vm7-", 20);
                var storageAccountName = SdkContext.RandomResourceName("stg", 17);
                var uname           = "juser";
                var password        = TestUtilities.GenerateName("Pa5$");
                var resourceManager = TestHelper.CreateRollupClient();
                var computeManager  = TestHelper.CreateComputeManager();
                var storageManager  = TestHelper.CreateStorageManager();
                var rgName          = TestUtilities.GenerateName("rgfluentchash-");
                try
                {
                    var nativeVM = computeManager.VirtualMachines
                                   .Define(vmName)
                                   .WithRegion(Location)
                                   .WithNewResourceGroup(rgName)
                                   .WithNewPrimaryNetwork("10.0.0.0/28")
                                   .WithPrimaryPrivateIPAddressDynamic()
                                   .WithoutPrimaryPublicIPAddress()
                                   .WithLatestLinuxImage("Canonical", "UbuntuServer", "14.04.2-LTS")
                                   .WithRootUsername(uname)
                                   .WithRootPassword(password)
                                   .WithUnmanagedDisks()           /* UN-MANAGED OS and DATA DISKS */
                                   .DefineUnmanagedDataDisk("disk1")
                                   .WithNewVhd(100)
                                   .WithCaching(CachingTypes.ReadWrite)
                                   .Attach()
                                   .WithNewUnmanagedDataDisk(100)
                                   .WithSize(VirtualMachineSizeTypes.Parse("Standard_D2a_v4"))
                                   .WithNewStorageAccount(storageAccountName)
                                   .WithOSDiskCaching(CachingTypes.ReadWrite)
                                   .Create();

                    Assert.False(nativeVM.IsManagedDiskEnabled);
                    var osVhdUri = nativeVM.OSUnmanagedDiskVhdUri;
                    Assert.NotNull(osVhdUri);
                    var dataDisks = nativeVM.UnmanagedDataDisks;
                    Assert.Equal(2, dataDisks.Count);

                    computeManager.VirtualMachines.DeleteById(nativeVM.Id);

                    var osDiskName = SdkContext.RandomResourceName("dsk", 15);
                    // Create managed disk with Os from vm's Os disk
                    //
                    var managedOsDisk = computeManager.Disks.Define(osDiskName)
                                        .WithRegion(Location)
                                        .WithNewResourceGroup(rgName)
                                        .WithLinuxFromVhd(osVhdUri)
                                        .WithStorageAccountName(storageAccountName)
                                        .Create();

                    // Create managed disk with Data from vm's lun0 data disk
                    //
                    var storageAccount = storageManager.StorageAccounts.GetByResourceGroup(rgName, storageAccountName);

                    var dataDiskName1     = SdkContext.RandomResourceName("dsk", 15);
                    var vmNativeDataDisk1 = dataDisks[0];
                    var managedDataDisk1  = computeManager.Disks.Define(dataDiskName1)
                                            .WithRegion(Location)
                                            .WithNewResourceGroup(rgName)
                                            .WithData()
                                            .FromVhd(vmNativeDataDisk1.VhdUri)
                                            .WithStorageAccount(storageAccount)
                                            .Create();

                    // Create managed disk with Data from vm's lun1 data disk
                    //
                    var dataDiskName2     = SdkContext.RandomResourceName("dsk", 15);
                    var vmNativeDataDisk2 = dataDisks[1];
                    var managedDataDisk2  = computeManager.Disks.Define(dataDiskName2)
                                            .WithRegion(Location)
                                            .WithNewResourceGroup(rgName)
                                            .WithData()
                                            .FromVhd(vmNativeDataDisk2.VhdUri)
                                            .WithStorageAccountId(storageAccount.Id)
                                            .Create();

                    // Create an image from the above managed disks
                    // Note that this is not a direct user scenario, but including this as per CRP team request
                    //
                    var imageName   = SdkContext.RandomResourceName("img", 15);
                    var customImage = computeManager.VirtualMachineCustomImages.Define(imageName)
                                      .WithRegion(Location)
                                      .WithNewResourceGroup(rgName)
                                      .WithLinuxFromDisk(managedOsDisk, OperatingSystemStateTypes.Generalized)
                                      .DefineDataDiskImage()
                                      .WithLun(vmNativeDataDisk1.Lun)
                                      .FromManagedDisk(managedDataDisk1)
                                      .WithDiskCaching(vmNativeDataDisk1.CachingType)
                                      .WithDiskSizeInGB(vmNativeDataDisk1.Size + 10)
                                      .Attach()
                                      .DefineDataDiskImage()
                                      .WithLun(vmNativeDataDisk2.Lun)
                                      .FromManagedDisk(managedDataDisk2)
                                      .WithDiskSizeInGB(vmNativeDataDisk2.Size + 10)
                                      .Attach()
                                      .Create();

                    Assert.NotNull(customImage);
                    Assert.Equal(customImage.Name, imageName, ignoreCase: true);
                    Assert.NotNull(customImage.OSDiskImage);
                    Assert.Equal(OperatingSystemStateTypes.Generalized, customImage.OSDiskImage.OsState);
                    Assert.Equal(OperatingSystemTypes.Linux, customImage.OSDiskImage.OsType);
                    Assert.NotNull(customImage.DataDiskImages);
                    Assert.Equal(2, customImage.DataDiskImages.Count);
                    Assert.Equal(customImage.HyperVGeneration, HyperVGenerationTypes.V1);
                    Assert.Null(customImage.SourceVirtualMachineId);

                    Assert.True(customImage.DataDiskImages.ContainsKey(vmNativeDataDisk1.Lun));
                    Assert.Equal(customImage.DataDiskImages[vmNativeDataDisk1.Lun].Caching, vmNativeDataDisk1.CachingType);
                    Assert.True(customImage.DataDiskImages.ContainsKey(vmNativeDataDisk2.Lun));
                    Assert.Equal(CachingTypes.None, customImage.DataDiskImages[vmNativeDataDisk2.Lun].Caching);

                    foreach (var vmDisk in dataDisks.Values)
                    {
                        Assert.True(customImage.DataDiskImages.ContainsKey(vmDisk.Lun));
                        var diskImage = customImage.DataDiskImages[vmDisk.Lun];
                        Assert.Equal((long)diskImage.DiskSizeGB, vmDisk.Size + 10);
                        Assert.Null(diskImage.BlobUri);
                        Assert.NotNull(diskImage.ManagedDisk);
                        Assert.True(diskImage.ManagedDisk.Id.Equals(managedDataDisk1.Id, StringComparison.OrdinalIgnoreCase) ||
                                    diskImage.ManagedDisk.Id.Equals(managedDataDisk2.Id, StringComparison.OrdinalIgnoreCase));
                    }
                    computeManager.Disks.DeleteById(managedOsDisk.Id);
                    computeManager.Disks.DeleteById(managedDataDisk1.Id);
                    computeManager.Disks.DeleteById(managedDataDisk2.Id);
                    computeManager.VirtualMachineCustomImages.DeleteById(customImage.Id);
                }
                finally
                {
                    try
                    {
                        resourceManager.ResourceGroups.DeleteByName(rgName);
                    }
                    catch { }
                }
            }
        }
Exemple #24
0
        public void CanTroubleshootConnection()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                string newName        = SdkContext.RandomResourceName("nw", 6);
                var    groupName      = SdkContext.RandomResourceName("rg", 6);
                String gatewayName    = SdkContext.RandomResourceName("vngw", 8);
                String connectionName = SdkContext.RandomResourceName("vngwc", 8);

                try
                {
                    // Create network watcher
                    var manager = TestHelper.CreateNetworkManager();

                    // make sure Network Watcher is disabled in current subscription and region as only one can exist
                    EnsureNetworkWatcherNotExists(manager.NetworkWatchers);

                    var nw = manager.NetworkWatchers.Define(newName)
                             .WithRegion(REGION)
                             .WithNewResourceGroup(groupName)
                             .Create();

                    IVirtualNetworkGateway vngw1 = manager.VirtualNetworkGateways.Define(gatewayName)
                                                   .WithRegion(REGION)
                                                   .WithExistingResourceGroup(groupName)
                                                   .WithNewNetwork("10.11.0.0/16", "10.11.255.0/27")
                                                   .WithRouteBasedVpn()
                                                   .WithSku(VirtualNetworkGatewaySkuName.VpnGw1)
                                                   .Create();

                    IVirtualNetworkGateway vngw2 = manager.VirtualNetworkGateways.Define(gatewayName + "2")
                                                   .WithRegion(REGION)
                                                   .WithExistingResourceGroup(groupName)
                                                   .WithNewNetwork("10.41.0.0/16", "10.41.255.0/27")
                                                   .WithRouteBasedVpn()
                                                   .WithSku(VirtualNetworkGatewaySkuName.VpnGw1)
                                                   .Create();
                    IVirtualNetworkGatewayConnection connection1 = vngw1.Connections
                                                                   .Define(connectionName)
                                                                   .WithVNetToVNet()
                                                                   .WithSecondVirtualNetworkGateway(vngw2)
                                                                   .WithSharedKey("MySecretKey")
                                                                   .Create();

                    // Create storage account to store troubleshooting information
                    IStorageAccount storageAccount = EnsureStorageAccount(groupName);

                    // Troubleshoot connection
                    ITroubleshooting troubleshooting = nw.Troubleshoot()
                                                       .WithTargetResourceId(connection1.Id)
                                                       .WithStorageAccount(storageAccount.Id)
                                                       .WithStoragePath(storageAccount.EndPoints.Primary.Blob + "results")
                                                       .Execute();
                    Assert.Equal("UnHealthy", troubleshooting.Code);

                    // Create corresponding connection on second gateway to make it work
                    vngw2.Connections
                    .Define(connectionName + "2")
                    .WithVNetToVNet()
                    .WithSecondVirtualNetworkGateway(vngw1)
                    .WithSharedKey("MySecretKey")
                    .Create();
                    TestHelper.Delay(250000);
                    troubleshooting = nw.Troubleshoot()
                                      .WithTargetResourceId(connection1.Id)
                                      .WithStorageAccount(storageAccount.Id)
                                      .WithStoragePath(storageAccount.EndPoints.Primary.Blob + "results")
                                      .Execute();
                    Assert.Equal("Healthy", troubleshooting.Code);

                    manager.ResourceManager.ResourceGroups.DeleteByName(nw.ResourceGroupName);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(groupName);
                    }
                    catch { }
                }
            }
        }
Exemple #25
0
        public void CanCreateNamespaceThenCRUDOnTopic()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var rgName = TestUtilities.GenerateName("fluentnetsbmrg");
                try
                {
                    var    resourceManager   = TestHelper.CreateResourceManager();
                    var    serviceBusManager = TestHelper.CreateServiceBusManager();
                    Region region            = Region.USEast;

                    var rgCreatable = resourceManager.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    var namespaceDNSLabel = TestUtilities.GenerateName("netsbns");
                    var queueName         = TestUtilities.GenerateName("queue1-");
                    // Create NS with Queue
                    //
                    var nspace = serviceBusManager.Namespaces
                                 .Define(namespaceDNSLabel)
                                 .WithRegion(region)
                                 .WithNewResourceGroup(rgCreatable)
                                 .WithSku(NamespaceSku.Standard)
                                 .Create();

                    Assert.NotNull(nspace);
                    Assert.NotNull(nspace.Inner);

                    var topicName = TestUtilities.GenerateName("topic14444444444444444444444444444444444444444444555555555555");

                    var topic = nspace.Topics
                                .Define(topicName)
                                .Create();

                    Assert.NotNull(topic);
                    Assert.NotNull(topic.Inner);
                    Assert.NotNull(topic.Name);
                    Assert.Equal(topic.Name, topicName, ignoreCase: true);

                    var dupDetectionDuration = topic.DuplicateMessageDetectionHistoryDuration;
                    Assert.Equal(10, dupDetectionDuration.TotalMinutes);
                    // Default message TTL is TimeSpan.Max, assert parsing
                    //
                    Assert.Equal("10675199.02:48:05.4775807", topic.Inner.DefaultMessageTimeToLive);
                    var msgTtlDuration = topic.DefaultMessageTtlDuration;
                    // Assert the default ttl TimeSpan("10675199.02:48:05.4775807") parsing
                    //
                    Assert.Equal(10675199, msgTtlDuration.Days);
                    Assert.Equal(2, msgTtlDuration.Hours);
                    Assert.Equal(48, msgTtlDuration.Minutes);
                    // Assert the default max size In MB
                    //
                    Assert.Equal(1024, topic.MaxSizeInMB);

                    var topicsInNamespace = nspace.Topics.List();
                    Assert.NotNull(topicsInNamespace);
                    Assert.True(topicsInNamespace.Count() > 0);
                    ITopic foundTopic = topicsInNamespace.FirstOrDefault(t => t.Name.Equals(topic.Name, StringComparison.OrdinalIgnoreCase));
                    Assert.NotNull(foundTopic);
                    foundTopic = foundTopic.Update()
                                 .WithDefaultMessageTTL(new TimeSpan(0, 20, 0))
                                 .WithDuplicateMessageDetectionHistoryDuration(new TimeSpan(0, 15, 0))
                                 .WithDeleteOnIdleDurationInMinutes(25)
                                 .Apply();
                    var ttlDuration = foundTopic.DefaultMessageTtlDuration;
                    Assert.Equal(20, ttlDuration.Minutes);
                    var duplicateDetectDuration = foundTopic.DuplicateMessageDetectionHistoryDuration;
                    Assert.Equal(15, duplicateDetectDuration.Minutes);
                    Assert.Equal(25, foundTopic.DeleteOnIdleDurationInMinutes);
                    // Delete
                    nspace.Topics.DeleteByName(foundTopic.Name);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch
                    {
                    }
                }
            }
        }
Exemple #26
0
        public void CanWatchNetwork()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                string newName            = SdkContext.RandomResourceName("nw", 6);
                var    groupName          = SdkContext.RandomResourceName("rg", 6);
                var    resourcesGroupName = SdkContext.RandomResourceName("rg", 8);

                // Create network watcher
                var manager        = TestHelper.CreateNetworkManager();
                var computeManager = TestHelper.CreateComputeManager();

                try
                {
                    // make sure Network Watcher is disabled in current subscription and region as only one can exist
                    EnsureNetworkWatcherNotExists(manager.NetworkWatchers);

                    var nw = manager.NetworkWatchers.Define(newName)
                             .WithRegion(REGION)
                             .WithNewResourceGroup(groupName)
                             .Create();

                    // pre-create VMs to show topology on
                    ICreatedResources <IVirtualMachine> virtualMachines = EnsureNetwork(manager, computeManager, resourcesGroupName);
                    var       vm0      = virtualMachines.ElementAt(0);
                    ITopology topology = nw.Topology()
                                         .WithTargetResourceGroup(vm0.ResourceGroupName)
                                         .Execute();
                    Assert.Equal(11, topology.Resources.Count);
                    Assert.True(topology.Resources.ContainsKey(vm0.PrimaryNetworkInterfaceId));
                    Assert.Equal(4, topology.Resources[vm0.PrimaryNetworkInterfaceId].Associations.Count);

                    ISecurityGroupView sgViewResult = nw.GetSecurityGroupView(virtualMachines.ElementAt(0).Id);
                    Assert.Equal(1, sgViewResult.NetworkInterfaces.Count);
                    Assert.Equal(virtualMachines.ElementAt(0).PrimaryNetworkInterfaceId,
                                 sgViewResult.NetworkInterfaces.Keys.First());

                    IFlowLogSettings flowLogSettings =
                        nw.GetFlowLogSettings(vm0.GetPrimaryNetworkInterface().NetworkSecurityGroupId);
                    IStorageAccount storageAccount = EnsureStorageAccount(resourcesGroupName);
                    flowLogSettings.Update()
                    .WithLogging()
                    .WithStorageAccount(storageAccount.Id)
                    .WithRetentionPolicyDays(5)
                    .WithRetentionPolicyEnabled()
                    .Apply();
                    Assert.True(flowLogSettings.Enabled);
                    Assert.Equal(5, flowLogSettings.RetentionDays);
                    Assert.Equal(storageAccount.Id, flowLogSettings.StorageId);

                    INextHop nextHop = nw.NextHop().WithTargetResourceId(vm0.Id)
                                       .WithSourceIPAddress("10.0.0.4")
                                       .WithDestinationIPAddress("8.8.8.8")
                                       .Execute();
                    Assert.Equal("System Route", nextHop.RouteTableId);
                    Assert.Equal(NextHopType.Internet, nextHop.NextHopType);
                    Assert.Null(nextHop.NextHopIpAddress);

                    IVerificationIPFlow verificationIPFlow = nw.VerifyIPFlow()
                                                             .WithTargetResourceId(vm0.Id)
                                                             .WithDirection(Direction.Outbound)
                                                             .WithProtocol(IpFlowProtocol.TCP)
                                                             .WithLocalIPAddress("10.0.0.4")
                                                             .WithRemoteIPAddress("8.8.8.8")
                                                             .WithLocalPort("443")
                                                             .WithRemotePort("443")
                                                             .Execute();
                    Assert.Equal(Access.Allow, verificationIPFlow.Access);
                    Assert.Equal("defaultSecurityRules/AllowInternetOutBound", verificationIPFlow.RuleName);

                    // test packet capture
                    IEnumerable <IPacketCapture> packetCaptures = nw.PacketCaptures.List();
                    Assert.Empty(packetCaptures);
                    IPacketCapture packetCapture = nw.PacketCaptures
                                                   .Define("NewPacketCapture")
                                                   .WithTarget(vm0.Id)
                                                   .WithStorageAccountId(storageAccount.Id)
                                                   .WithTimeLimitInSeconds(1500)
                                                   .DefinePacketCaptureFilter()
                                                   .WithProtocol(PcProtocol.TCP)
                                                   .WithLocalIPAddresses(new List <string>()
                    {
                        "127.0.0.1", "127.0.0.5"
                    })
                                                   .Attach()
                                                   .Create();
                    packetCaptures = nw.PacketCaptures.List();
                    Assert.Single(packetCaptures);
                    Assert.Equal("NewPacketCapture", packetCapture.Name);
                    Assert.Equal(1500, packetCapture.TimeLimitInSeconds);
                    Assert.Equal(PcProtocol.TCP, packetCapture.Filters[0].Protocol);
                    Assert.Equal("127.0.0.1;127.0.0.5", packetCapture.Filters[0].LocalIPAddress);
                    //        Assert.assertEquals("Running", packetCapture.getStatus().packetCaptureStatus().toString());
                    packetCapture.Stop();
                    Assert.Equal("Stopped", packetCapture.GetStatus().PacketCaptureStatus.Value);
                    nw.PacketCaptures.DeleteByName(packetCapture.Name);
                    IConnectivityCheck connectivityCheck = nw.CheckConnectivity()
                                                           .ToDestinationResourceId(vm0.Id)
                                                           .ToDestinationPort(80)
                                                           .FromSourceVirtualMachine(virtualMachines.ElementAt(0).Id)
                                                           .Execute();
                    Assert.Equal("Reachable", connectivityCheck.ConnectionStatus.ToString());

                    computeManager.VirtualMachines.DeleteById(virtualMachines.ElementAt(1).Id);
                    topology.Execute();
                    Assert.Equal(10, topology.Resources.Count);

                    manager.ResourceManager.ResourceGroups.DeleteByName(nw.ResourceGroupName);
                    manager.ResourceManager.ResourceGroups.DeleteByName(resourcesGroupName);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(resourcesGroupName);
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(groupName);
                    }
                    catch { }
                }
            }
        }
Exemple #27
0
        public void CanPerformCRUDOnSubscriptions()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                var rgName = TestUtilities.GenerateName("fluentnetsbmrg");
                try
                {
                    var    resourceManager   = TestHelper.CreateResourceManager();
                    var    serviceBusManager = TestHelper.CreateServiceBusManager();
                    Region region            = Region.USEast;

                    var rgCreatable = resourceManager.ResourceGroups
                                      .Define(rgName)
                                      .WithRegion(region);

                    String namespaceDNSLabel = TestUtilities.GenerateName("netsbns");
                    String topicName         = TestUtilities.GenerateName("topic1-");
                    String subscriptionName  = TestUtilities.GenerateName("sub1-");
                    // Create NS with Topic
                    //
                    var nspace = serviceBusManager.Namespaces
                                 .Define(namespaceDNSLabel)
                                 .WithRegion(region)
                                 .WithNewResourceGroup(rgCreatable)
                                 .WithSku(NamespaceSku.Standard)
                                 .WithNewTopic(topicName, 1024)
                                 .Create();

                    Assert.NotNull(nspace);
                    Assert.NotNull(nspace.Inner);
                    // Create Topic subscriptions and list it
                    //
                    var topic        = nspace.Topics.GetByName(topicName);
                    var subscription = topic.Subscriptions
                                       .Define(subscriptionName)
                                       .WithSession()
                                       .WithDefaultMessageTTL(new TimeSpan(0, 20, 0))
                                       .Create();
                    Assert.NotNull(subscription);
                    Assert.NotNull(subscription.Inner);
                    Assert.Equal(20, subscription.DefaultMessageTtlDuration.Minutes);
                    subscription = topic.Subscriptions.GetByName(subscriptionName);
                    Assert.NotNull(subscription);
                    Assert.NotNull(subscription.Inner);
                    var subscriptionsInTopic = topic.Subscriptions.List();
                    Assert.True(subscriptionsInTopic.Count() > 0);
                    var foundSubscription = subscriptionsInTopic.Any(s => s.Name.Equals(subscription.Name, StringComparison.OrdinalIgnoreCase));
                    Assert.True(foundSubscription);
                    topic.Subscriptions.DeleteByName(subscriptionName);
                    subscriptionsInTopic = topic.Subscriptions.List();
                    Assert.True(subscriptionsInTopic.Count() == 0);
                    Assert.True(subscription.IsSessionEnabled);

                    subscription.Update().WithoutSession().Apply();
                    subscription.Refresh();
                    Assert.False(subscription.IsSessionEnabled);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(rgName);
                    }
                    catch
                    {
                    }
                }
            }
        }
        public void CanCRUDFunctionApp()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                string GroupName1   = TestUtilities.GenerateName("javacsmrg");
                string GroupName2   = TestUtilities.GenerateName("javacsmrg");
                string WebAppName1  = TestUtilities.GenerateName("java-webapp-");
                string WebAppName2  = TestUtilities.GenerateName("java-webapp-");
                string WebAppName3  = TestUtilities.GenerateName("java-webapp-");
                string StorageName1 = TestUtilities.GenerateName("javast");
                if (StorageName1.Length >= 23)
                {
                    StorageName1 = StorageName1.Substring(0, 20);
                }
                StorageName1 = StorageName1.Replace("-", string.Empty);

                var appServiceManager = TestHelper.CreateAppServiceManager();

                // Create with consumption plan
                var functionApp1 = appServiceManager.FunctionApps.Define(WebAppName1)
                                   .WithRegion(Region.USWest)
                                   .WithNewResourceGroup(GroupName1)
                                   .Create();
                Assert.NotNull(functionApp1);
                Assert.Equal(Region.USWest, functionApp1.Region);
                var plan1 = appServiceManager.AppServicePlans.GetById(functionApp1.AppServicePlanId);
                Assert.NotNull(plan1);
                Assert.Equal(Region.USWest, plan1.Region);
                Assert.Equal(new PricingTier("Dynamic", "Y1"), plan1.PricingTier);

                // Create in a new group with existing consumption plan
                var functionApp2 = appServiceManager.FunctionApps.Define(WebAppName2)
                                   .WithExistingAppServicePlan(plan1)
                                   .WithNewResourceGroup(GroupName2)
                                   .WithExistingStorageAccount(functionApp1.StorageAccount)
                                   .Create();
                Assert.NotNull(functionApp2);
                Assert.Equal(Region.USWest, functionApp2.Region);

                // Create with app service plan
                var functionApp3 = appServiceManager.FunctionApps.Define(WebAppName3)
                                   .WithRegion(Region.USWest)
                                   .WithExistingResourceGroup(GroupName2)
                                   .WithNewAppServicePlan(PricingTier.BasicB1)
                                   .WithExistingStorageAccount(functionApp1.StorageAccount)
                                   .Create();
                Assert.NotNull(functionApp3);
                Assert.Equal(Region.USWest, functionApp3.Region);

                // Get
                var functionApp = appServiceManager.FunctionApps.GetByResourceGroup(GroupName1, functionApp1.Name);
                Assert.Equal(functionApp1.Id, functionApp.Id);
                functionApp = appServiceManager.FunctionApps.GetById(functionApp2.Id);
                Assert.Equal(functionApp2.Name, functionApp.Name);

                // List
                var functionApps = appServiceManager.FunctionApps.ListByResourceGroup(GroupName1);
                Assert.Single(functionApps);
                functionApps = appServiceManager.FunctionApps.ListByResourceGroup(GroupName2);
                Assert.Equal(2, functionApps.Count());

                // Update
                functionApp2.Update()
                .WithNewStorageAccount(StorageName1, Microsoft.Azure.Management.Storage.Fluent.Models.SkuName.StandardGRS)
                .Apply();
                Assert.Equal(StorageName1, functionApp2.StorageAccount.Name);

                // Scale
                functionApp3.Update()
                .WithNewAppServicePlan(PricingTier.StandardS2)
                .Apply();
                var plan2 = appServiceManager.AppServicePlans.GetById(functionApp3.AppServicePlanId);
                Assert.NotNull(plan2);
                Assert.NotEqual(plan1.Id, plan2.Id);
                Assert.Equal(Region.USWest, plan2.Region);
                Assert.Equal(PricingTier.StandardS2, plan2.PricingTier);
            }
        }
Exemple #29
0
        public void CanCRUDSwapSlots()
        {
            using (var context = FluentMockContext.Start(this.GetType().FullName))
            {
                string GroupName          = TestUtilities.GenerateName("javacsmrg");
                string WebAppName         = TestUtilities.GenerateName("java-webapp-");
                string SlotName1          = TestUtilities.GenerateName("java-slot-");
                string SlotName2          = TestUtilities.GenerateName("java-slot-");
                string SlotName3          = TestUtilities.GenerateName("java-slot-");
                string AppServicePlanName = TestUtilities.GenerateName("java-asp-");

                var appServiceManager = TestHelper.CreateAppServiceManager();

                // Create function app
                var functionApp = appServiceManager.FunctionApps.Define(WebAppName)
                                  .WithRegion(Region.USWest)
                                  .WithNewResourceGroup(GroupName)
                                  .WithNewAppServicePlan(PricingTier.StandardS2)
                                  .WithAppSetting("appkey", "appvalue")
                                  .WithStickyAppSetting("stickykey", "stickyvalue")
                                  .WithConnectionString("connectionName", "connectionValue", ConnectionStringType.Custom)
                                  .WithStickyConnectionString("stickyName", "stickyValue", ConnectionStringType.Custom)
                                  .WithJavaVersion(JavaVersion.V7_51)
                                  .WithWebContainer(WebContainer.Tomcat7_0_50)
                                  .Create();
                Assert.NotNull(functionApp);
                Assert.Equal(Region.USWest, functionApp.Region);

                // Create a deployment slot with empty config
                var slot1 = functionApp.DeploymentSlots.Define(SlotName1)
                            .WithBrandNewConfiguration()
                            .WithPythonVersion(PythonVersion.V27)
                            .Create();
                Assert.NotNull(slot1);
                Assert.NotEqual(JavaVersion.V7_51, slot1.JavaVersion);
                Assert.Equal(PythonVersion.V27, slot1.PythonVersion);
                var appSettingMap = slot1.GetAppSettings();
                Assert.False(appSettingMap.ContainsKey("appkey"));
                Assert.False(appSettingMap.ContainsKey("stickykey"));
                var connectionStringMap = slot1.GetConnectionStrings();
                Assert.False(connectionStringMap.ContainsKey("connectionName"));
                Assert.False(connectionStringMap.ContainsKey("stickyName"));

                // Create a deployment slot with web app's config
                var slot2 = functionApp.DeploymentSlots.Define(SlotName2)
                            .WithConfigurationFromParent()
                            .Create();
                Assert.NotNull(slot2);
                Assert.Equal(JavaVersion.V7_51, slot2.JavaVersion);
                appSettingMap = slot2.GetAppSettings();
                Assert.Equal("appvalue", appSettingMap["appkey"].Value);
                Assert.False(appSettingMap["appkey"].Sticky);
                Assert.Equal("stickyvalue", appSettingMap["stickykey"].Value);
                Assert.True(appSettingMap["stickykey"].Sticky);
                connectionStringMap = slot2.GetConnectionStrings();
                Assert.Equal("connectionValue", connectionStringMap["connectionName"].Value);
                Assert.False(connectionStringMap["connectionName"].Sticky);
                Assert.Equal("stickyValue", connectionStringMap["stickyName"].Value);
                Assert.True(connectionStringMap["stickyName"].Sticky);

                // Update deployment slot
                slot2.Update()
                .WithoutJava()
                .WithPythonVersion(PythonVersion.V34)
                .WithAppSetting("slot2key", "slot2value")
                .WithStickyAppSetting("sticky2key", "sticky2value")
                .Apply();
                Assert.NotNull(slot2);
                Assert.Equal(JavaVersion.Off, slot2.JavaVersion);
                Assert.Equal(PythonVersion.V34, slot2.PythonVersion);
                appSettingMap = slot2.GetAppSettings();
                Assert.Equal("slot2value", appSettingMap["slot2key"].Value);

                // Create 3rd deployment slot with configuration from slot 2
                var slot3 = functionApp.DeploymentSlots.Define(SlotName3)
                            .WithConfigurationFromDeploymentSlot(slot2)
                            .Create();
                Assert.NotNull(slot3);
                Assert.Equal(JavaVersion.Off, slot3.JavaVersion);
                Assert.Equal(PythonVersion.V34, slot3.PythonVersion);
                appSettingMap = slot3.GetAppSettings();
                Assert.Equal("slot2value", appSettingMap["slot2key"].Value);

                // Get
                var deploymentSlot = functionApp.DeploymentSlots.GetByName(SlotName3);
                Assert.Equal(slot3.Id, deploymentSlot.Id);

                // List
                var deploymentSlots = functionApp.DeploymentSlots.List();
                Assert.Equal(3, deploymentSlots.Count());

                // Swap
                slot3.Swap(slot1.Name);
                slot1 = functionApp.DeploymentSlots.GetByName(SlotName1);
                Assert.Equal(JavaVersion.Off, slot1.JavaVersion);
                Assert.Equal(PythonVersion.V34, slot1.PythonVersion);
                Assert.Equal(PythonVersion.V27, slot3.PythonVersion);
                var appSettings1 = slot1.GetAppSettings();
                var appSettings3 = slot3.GetAppSettings();
                Assert.Equal("appvalue", appSettings1["appkey"].Value);
                Assert.Equal("slot2value", appSettings1["slot2key"].Value);
                Assert.Equal("sticky2value", appSettings3["sticky2key"].Value);
                Assert.Equal("stickyvalue", appSettings3["stickykey"].Value);
            }
        }
        public void CreateUpdate()
        {
            using (var context = FluentMockContext.Start(GetType().FullName))
            {
                string testId            = SdkContext.RandomResourceName("", 9);
                string resourceGroupName = "rg" + testId;
                string nsgName           = "nsg" + testId;
                string nicName           = "nic" + testId;
                Region region            = Region.USSouthCentral;

                try
                {
                    var manager = TestHelper.CreateNetworkManager();
                    var nsg     = manager.NetworkSecurityGroups.Define(nsgName)
                                  .WithRegion(region)
                                  .WithNewResourceGroup(resourceGroupName)
                                  .DefineRule("rule1")
                                  .AllowOutbound()
                                  .FromAnyAddress()
                                  .FromPort(80)
                                  .ToAnyAddress()
                                  .ToPort(80)
                                  .WithProtocol(SecurityRuleProtocol.Tcp)
                                  .Attach()
                                  .DefineRule("rule2")
                                  .AllowInbound()
                                  .FromAnyAddress()
                                  .FromAnyPort()
                                  .ToAnyAddress()
                                  .ToPortRange(22, 25)
                                  .WithAnyProtocol()
                                  .WithPriority(200)
                                  .WithDescription("foo!!")
                                  .Attach()
                                  .Create();

                    var nic = manager.NetworkInterfaces.Define(nicName)
                              .WithRegion(nsg.Region)
                              .WithExistingResourceGroup(nsg.ResourceGroupName)
                              .WithNewPrimaryNetwork("10.0.0.0/28")
                              .WithPrimaryPrivateIPAddressDynamic()
                              .WithExistingNetworkSecurityGroup(nsg)
                              .Create();

                    nsg.Refresh();

                    // Verify
                    Assert.True(nsg.Region.Equals(region));
                    Assert.True(nsg.SecurityRules.Count == 2);

                    // Confirm NIC association
                    Assert.Equal(1, nsg.NetworkInterfaceIds.Count);
                    Assert.True(nsg.NetworkInterfaceIds.Contains(nic.Id.ToLower()));

                    var resource = manager.NetworkSecurityGroups.GetByResourceGroup(resourceGroupName, nsgName);

                    resource = resource.Update()
                               .WithoutRule("rule1")
                               .WithTag("tag1", "value1")
                               .WithTag("tag2", "value2")
                               .DefineRule("rule3")
                               .AllowInbound()
                               .FromAnyAddress()
                               .FromAnyPort()
                               .ToAnyAddress()
                               .ToAnyPort()
                               .WithProtocol(SecurityRuleProtocol.Udp)
                               .Attach()
                               .WithoutRule("rule1")
                               .UpdateRule("rule2")
                               .DenyInbound()
                               .FromAddresses("100.0.0.0/29", "100.1.0.0/29")
                               .FromPortRanges("88-90")
                               .WithPriority(300)
                               .WithDescription("bar!!!")
                               .Parent()
                               .Apply();
                    Assert.True(resource.Tags.ContainsKey("tag1"));
                    INetworkSecurityRule rule2;
                    Assert.True(resource.SecurityRules.TryGetValue("rule2", out rule2));
                    Assert.Equal(0, rule2.SourceApplicationSecurityGroupIds.Count);
                    Assert.Null(rule2.SourceAddressPrefix);
                    Assert.Equal(2, rule2.SourceAddressPrefixes.Count);
                    Assert.True(rule2.SourceAddressPrefixes.Contains("100.1.0.0/29"));
                    Assert.Equal(1, rule2.SourcePortRanges.Count);
                    Assert.Equal("88-90", rule2.SourcePortRanges.ElementAt(0));

                    manager.NetworkSecurityGroups.DeleteById(resource.Id);
                    manager.ResourceManager.ResourceGroups.DeleteByName(resource.ResourceGroupName);
                }
                finally
                {
                    try
                    {
                        TestHelper.CreateResourceManager().ResourceGroups.DeleteByName(resourceGroupName);
                    }
                    catch { }
                }
            }
        }