public static ILoadBalancer CreateInternalLoadBalancer( IAzure azure, IResourceGroup resourceGroup, INetwork network, string id, Region location) { string loadBalancerName = TestUtilities.GenerateName("InternalLb" + id); string privateFrontEndName = loadBalancerName + "-FE1"; string backendPoolName1 = loadBalancerName + "-BAP1"; string backendPoolName2 = loadBalancerName + "-BAP2"; string natPoolName1 = loadBalancerName + "-INP1"; string natPoolName2 = loadBalancerName + "-INP2"; string subnetName = "subnet1"; ILoadBalancer loadBalancer = azure.LoadBalancers.Define(loadBalancerName) .WithRegion(location) .WithExistingResourceGroup(resourceGroup) // Add two rules that uses above backend and probe .DefineLoadBalancingRule("httpRule") .WithProtocol(TransportProtocol.Tcp) .FromFrontend(privateFrontEndName) .FromFrontendPort(1000) .ToBackend(backendPoolName1) .WithProbe("httpProbe") .Attach() .DefineLoadBalancingRule("httpsRule") .WithProtocol(TransportProtocol.Tcp) .FromFrontend(privateFrontEndName) .FromFrontendPort(1001) .ToBackend(backendPoolName2) .WithProbe("httpsProbe") .Attach() // Add two nat pools to enable direct VM connectivity to port 44 and 45 .DefineInboundNatPool(natPoolName1) .WithProtocol(TransportProtocol.Tcp) .FromFrontend(privateFrontEndName) .FromFrontendPortRange(8000, 8099) .ToBackendPort(44) .Attach() .DefineInboundNatPool(natPoolName2) .WithProtocol(TransportProtocol.Tcp) .FromFrontend(privateFrontEndName) .FromFrontendPortRange(9000, 9099) .ToBackendPort(45) .Attach() // Explicitly define the frontend .DefinePrivateFrontend(privateFrontEndName) .WithExistingSubnet(network, subnetName) .Attach() // Add two probes one per rule .DefineHttpProbe("httpProbe") .WithRequestPath("/") .Attach() .DefineHttpProbe("httpsProbe") .WithRequestPath("/") .Attach() .Create(); loadBalancer = azure.LoadBalancers.GetByResourceGroup(resourceGroup.Name, loadBalancerName); Assert.Empty(loadBalancer.PublicIPAddressIds); Assert.Equal(2, loadBalancer.Backends.Count()); ILoadBalancerBackend backend1 = null; Assert.True(loadBalancer.Backends.TryGetValue(backendPoolName1, out backend1)); ILoadBalancerBackend backend2 = null; Assert.True(loadBalancer.Backends.TryGetValue(backendPoolName2, out backend2)); ILoadBalancerHttpProbe httpProbe = null; Assert.True(loadBalancer.HttpProbes.TryGetValue("httpProbe", out httpProbe)); Assert.Single(httpProbe.LoadBalancingRules); ILoadBalancerHttpProbe httpsProbe = null; Assert.True(loadBalancer.HttpProbes.TryGetValue("httpsProbe", out httpsProbe)); Assert.Single(httpProbe.LoadBalancingRules); Assert.Equal(2, loadBalancer.InboundNatPools.Count()); return(loadBalancer); }
public void CanCRUDProbe() { using (var context = FluentMockContext.Start(GetType().FullName)) { string rgName = TestUtilities.GenerateName("rg"); string lbName = TestUtilities.GenerateName("lb"); string nwName = TestUtilities.GenerateName("nw"); Region region = Region.USEast; IAzure azure = null; try { azure = TestHelper.CreateRollupClient(); IResourceGroup resourceGroup = azure.ResourceGroups .Define(rgName) .WithRegion(region) .Create(); INetwork network = azure.Networks .Define(nwName) .WithRegion(region) .WithExistingResourceGroup(resourceGroup) .WithAddressSpace("172.18.0.0/28") .WithSubnet(subnetName1, "172.18.0.0/28") .Create(); ILoadBalancer loadBalancer = CreateLoadBalancer(azure, resourceGroup, network, lbName); // verify created probes loadBalancer.Refresh(); Assert.Equal(2, loadBalancer.LoadBalancingRules.Count); Assert.Empty(loadBalancer.TcpProbes); Assert.Single(loadBalancer.HttpProbes); Assert.Single(loadBalancer.HttpsProbes); ILoadBalancerHttpProbe httpProbe = null; Assert.True(loadBalancer.HttpProbes.TryGetValue(probeName1, out httpProbe)); Assert.Single(httpProbe.LoadBalancingRules); ILoadBalancerHttpProbe httpsProbe = null; Assert.True(loadBalancer.HttpsProbes.TryGetValue(probeName2, out httpsProbe)); Assert.Single(httpsProbe.LoadBalancingRules); // verify https probe Assert.Equal(ProbeProtocol.Https, httpsProbe.Protocol); Assert.Equal(443, httpsProbe.Port); Assert.Equal("/", httpsProbe.RequestPath); // update probe loadBalancer.Update() .UpdateHttpsProbe(probeName2) .WithIntervalInSeconds(60) .WithRequestPath("/health") .Parent().Apply(); // verify probe updated loadBalancer.Refresh(); Assert.True(loadBalancer.HttpProbes.TryGetValue(probeName1, out httpProbe)); Assert.True(loadBalancer.HttpsProbes.TryGetValue(probeName2, out httpsProbe)); Assert.Single(httpsProbe.LoadBalancingRules); Assert.Equal(ProbeProtocol.Https, httpsProbe.Protocol); Assert.Equal(443, httpsProbe.Port); Assert.Equal(60, httpsProbe.IntervalInSeconds); Assert.Equal("/health", httpsProbe.RequestPath); // delete probe loadBalancer.Update() .WithoutProbe(probeName2) .Apply(); // verify probe deleted (and deref from rule) loadBalancer.Refresh(); Assert.True(loadBalancer.HttpProbes.TryGetValue(probeName1, out httpProbe)); Assert.False(loadBalancer.HttpsProbes.TryGetValue(probeName2, out httpsProbe)); Assert.Null(loadBalancer.LoadBalancingRules[ruleName2].Probe); // add probe loadBalancer.Update() .DefineHttpsProbe(probeName2) .WithRequestPath("/") .Attach() .Apply(); // verify probe added loadBalancer.Refresh(); Assert.True(loadBalancer.HttpProbes.TryGetValue(probeName1, out httpProbe)); Assert.True(loadBalancer.HttpsProbes.TryGetValue(probeName2, out httpsProbe)); Assert.Empty(httpsProbe.LoadBalancingRules); } finally { try { azure?.ResourceGroups.BeginDeleteByName(rgName); } catch { } } } }