From 381a9869cab09630e4f778b7a86722938612dc09 Mon Sep 17 00:00:00 2001 From: Sergey Shandar Date: Tue, 14 Nov 2017 14:24:56 -0800 Subject: [PATCH] Unit tests. --- ...ons.cs => CreateOrUpdateAsyncOperation.cs} | 4 +- .../{CurrentState.cs => GetAsyncOperation.cs} | 4 +- .../Network/VirtualNetworkPolicy.cs | 15 ++++- .../Old/Compute/VirtualMachineObject.cs | 1 + .../Azure.Experiments/Old/Context.cs | 22 ++----- .../Old/ResourceGroupObject.cs | 1 + .../{CreateParameters.cs => Parameters.cs} | 15 ++++- .../Azure.Experiments/ResourcePolicy.cs | 1 + .../Tests/AuthenticationResponse.cs | 2 +- experiments/Azure.Experiments/Tests/Client.cs | 36 ++++++++++++ .../Azure.Experiments/Tests/Configuration.cs | 2 +- .../Azure.Experiments/Tests/Credentials.cs | 2 +- .../Azure.Experiments/Tests/KeyValuePair.cs | 2 +- .../Tests/{ => Old}/ComputeTest.cs | 32 +++++------ .../Tests/{ => Old}/UnitTests.cs | 3 +- .../Tests/ResourceGroupTest.cs | 57 +++++++++++++++++++ .../Azure.Experiments/Tests/Tests.csproj | 2 +- .../Azure.Experiments/Tests/TokenProvider.cs | 2 +- .../Tests/VirtualNetworkTest.cs | 29 ++++++++++ 19 files changed, 184 insertions(+), 48 deletions(-) rename experiments/Azure.Experiments/Azure.Experiments/{ResourceOperations.cs => CreateOrUpdateAsyncOperation.cs} (94%) rename experiments/Azure.Experiments/Azure.Experiments/{CurrentState.cs => GetAsyncOperation.cs} (94%) rename experiments/Azure.Experiments/Azure.Experiments/{CreateParameters.cs => Parameters.cs} (76%) create mode 100644 experiments/Azure.Experiments/Tests/Client.cs rename experiments/Azure.Experiments/Tests/{ => Old}/ComputeTest.cs (82%) rename experiments/Azure.Experiments/Tests/{ => Old}/UnitTests.cs (96%) create mode 100644 experiments/Azure.Experiments/Tests/ResourceGroupTest.cs create mode 100644 experiments/Azure.Experiments/Tests/VirtualNetworkTest.cs diff --git a/experiments/Azure.Experiments/Azure.Experiments/ResourceOperations.cs b/experiments/Azure.Experiments/Azure.Experiments/CreateOrUpdateAsyncOperation.cs similarity index 94% rename from experiments/Azure.Experiments/Azure.Experiments/ResourceOperations.cs rename to experiments/Azure.Experiments/Azure.Experiments/CreateOrUpdateAsyncOperation.cs index e29f7b92074b..85b9bc0acd3e 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/ResourceOperations.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/CreateOrUpdateAsyncOperation.cs @@ -4,9 +4,9 @@ namespace Microsoft.Azure.Experiments { - public static class ResourceOperations + public static class CreateOrUpdateAsyncOperation { - public static async Task CreateAsync( + public static async Task CreateOrUpdateAsync( this IResourceConfig config, IClient client, IState current, diff --git a/experiments/Azure.Experiments/Azure.Experiments/CurrentState.cs b/experiments/Azure.Experiments/Azure.Experiments/GetAsyncOperation.cs similarity index 94% rename from experiments/Azure.Experiments/Azure.Experiments/CurrentState.cs rename to experiments/Azure.Experiments/Azure.Experiments/GetAsyncOperation.cs index abd21e97892e..f34282ea2529 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/CurrentState.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/GetAsyncOperation.cs @@ -6,9 +6,9 @@ namespace Microsoft.Azure.Experiments { - public static class CurrentState + public static class GetAsyncOperation { - public static async Task GetState( + public static async Task GetAsync( this IResourceConfig resourceConfig, IClient client, CancellationToken cancellationToken) diff --git a/experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkPolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkPolicy.cs index cbc858c3f558..cf77501bbdab 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkPolicy.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkPolicy.cs @@ -16,7 +16,18 @@ public static class VirtualNetworkPolicy p.ResourceGroupName, p.Name, p.Config, p.CancellationToken)); public static ResourceConfig CreateVirtualNetworkConfig( - this ResourceConfig resourceGroup, string name) - => Policy.CreateConfig(resourceGroup, name); + this ResourceConfig resourceGroup, + string name, + string addressPrefix) + => Policy.CreateConfig( + resourceGroup, + name, + _ => new VirtualNetwork + { + AddressSpace = new AddressSpace + { + AddressPrefixes = new[] { addressPrefix } + } + }); } } diff --git a/experiments/Azure.Experiments/Azure.Experiments/Old/Compute/VirtualMachineObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Old/Compute/VirtualMachineObject.cs index 25edce685283..c06392b45db0 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/Old/Compute/VirtualMachineObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Old/Compute/VirtualMachineObject.cs @@ -1,4 +1,5 @@ using Azure.Experiments.Network; +using Microsoft.Azure.Experiments; using Microsoft.Azure.Management.Compute; using Microsoft.Azure.Management.Compute.Models; using System.Threading.Tasks; diff --git a/experiments/Azure.Experiments/Azure.Experiments/Old/Context.cs b/experiments/Azure.Experiments/Azure.Experiments/Old/Context.cs index d1c9f2e8b0e6..80c8f469c9f6 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/Old/Context.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Old/Context.cs @@ -1,24 +1,14 @@ -using Microsoft.Azure.Management.Network; -using Microsoft.Rest; +using Microsoft.Azure.Experiments; +using Microsoft.Azure.Management.Network; namespace Azure.Experiments { - public class Context + public static class ContextEx { - public Context(ServiceClientCredentials credentials, string subscriptionId) - { - Credentials = credentials; - SubscriptionId = subscriptionId; - } - - public ServiceClientCredentials Credentials { get; } - - public string SubscriptionId { get; } - - public NetworkManagementClient CreateNetwork() - => new NetworkManagementClient(Credentials) + public static NetworkManagementClient CreateNetwork(this Context context) + => new NetworkManagementClient(context.Credentials) { - SubscriptionId = SubscriptionId + SubscriptionId = context.SubscriptionId }; } } diff --git a/experiments/Azure.Experiments/Azure.Experiments/Old/ResourceGroupObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Old/ResourceGroupObject.cs index 624cba53c884..1d5a0d04f233 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/Old/ResourceGroupObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Old/ResourceGroupObject.cs @@ -1,6 +1,7 @@ using Microsoft.Azure.Management.ResourceManager.Models; using Microsoft.Azure.Management.ResourceManager; using System.Threading.Tasks; +using Microsoft.Azure.Experiments; namespace Azure.Experiments { diff --git a/experiments/Azure.Experiments/Azure.Experiments/CreateParameters.cs b/experiments/Azure.Experiments/Azure.Experiments/Parameters.cs similarity index 76% rename from experiments/Azure.Experiments/Azure.Experiments/CreateParameters.cs rename to experiments/Azure.Experiments/Azure.Experiments/Parameters.cs index c24baedf4b77..47fa5c929f15 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/CreateParameters.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Parameters.cs @@ -1,11 +1,13 @@ -using System.Collections.Concurrent; +using System.Linq; namespace Microsoft.Azure.Experiments { public static class Parameters { public static IState GetParameters( - string subscription, string location, IResourceConfig config) + this IResourceConfig config, + string subscription, + string location) where Config : class { var visitor = new Visitor(subscription, location); @@ -21,12 +23,19 @@ public Visitor(string subscription, string location) Location = location; } + public object GetUntyped(IResourceConfig config) + => Result.GetOrAddUntyped(config, () => config.Apply(this)); + public Config Get(IResourceConfig config) where Config : class - => Result.GetOrAdd(config, () => config.Apply(this) as Config); + => GetUntyped(config) as Config; public object Visit(ResourceConfig config) where Config : class { + foreach (var d in config.Dependencies) + { + GetUntyped(d); + } var p = config.CreateConfig(Subscription); config.Policy.SetLocation(p, Location); return p; diff --git a/experiments/Azure.Experiments/Azure.Experiments/ResourcePolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/ResourcePolicy.cs index 832c0cf4f6f6..baa93ab21f7d 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/ResourcePolicy.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/ResourcePolicy.cs @@ -24,6 +24,7 @@ public ResourcePolicy( Func getLocation, Action setLocation) { + GetId = getId; GetAsync = getAsync; CreateOrUpdateAsync = createOrUpdateAsync; GetLocation = getLocation; diff --git a/experiments/Azure.Experiments/Tests/AuthenticationResponse.cs b/experiments/Azure.Experiments/Tests/AuthenticationResponse.cs index e570fac03049..dc15f0456c2b 100644 --- a/experiments/Azure.Experiments/Tests/AuthenticationResponse.cs +++ b/experiments/Azure.Experiments/Tests/AuthenticationResponse.cs @@ -1,4 +1,4 @@ -namespace Azure.Experiments.Tests +namespace Microsoft.Azure.Experiments.Tests { internal sealed class AuthenticationResponse { diff --git a/experiments/Azure.Experiments/Tests/Client.cs b/experiments/Azure.Experiments/Tests/Client.cs new file mode 100644 index 000000000000..96741ac9f074 --- /dev/null +++ b/experiments/Azure.Experiments/Tests/Client.cs @@ -0,0 +1,36 @@ +using Microsoft.Azure.Management.Network; +using Microsoft.Azure.Management.ResourceManager; +using System; + +namespace Microsoft.Azure.Experiments.Tests +{ + class Client : IClient + { + public Client(Context context) + { + Context = context; + } + + public Context Context { get; } + + public T GetClient() + where T: class, IDisposable + { + if (typeof(T) == typeof(INetworkManagementClient)) + { + return new NetworkManagementClient(Context.Credentials) + { + SubscriptionId = Context.SubscriptionId + } as T; + } + else if (typeof(T) == typeof(IResourceManagementClient)) + { + return new ResourceManagementClient(Context.Credentials) + { + SubscriptionId = Context.SubscriptionId + } as T; + } + throw new Exception("unknown client type"); + } + } +} diff --git a/experiments/Azure.Experiments/Tests/Configuration.cs b/experiments/Azure.Experiments/Tests/Configuration.cs index 1fc17c306c4e..16183a8ee5ed 100644 --- a/experiments/Azure.Experiments/Tests/Configuration.cs +++ b/experiments/Azure.Experiments/Tests/Configuration.cs @@ -1,4 +1,4 @@ -namespace Azure.Experiments.Tests +namespace Microsoft.Azure.Experiments.Tests { internal sealed class Configuration { diff --git a/experiments/Azure.Experiments/Tests/Credentials.cs b/experiments/Azure.Experiments/Tests/Credentials.cs index 33de6fb084e0..d54d7a59ebf3 100644 --- a/experiments/Azure.Experiments/Tests/Credentials.cs +++ b/experiments/Azure.Experiments/Tests/Credentials.cs @@ -2,7 +2,7 @@ using Newtonsoft.Json; using System.IO; -namespace Azure.Experiments.Tests +namespace Microsoft.Azure.Experiments.Tests { internal static class Credentials { diff --git a/experiments/Azure.Experiments/Tests/KeyValuePair.cs b/experiments/Azure.Experiments/Tests/KeyValuePair.cs index 7e793571fe5d..003ac3175fdc 100644 --- a/experiments/Azure.Experiments/Tests/KeyValuePair.cs +++ b/experiments/Azure.Experiments/Tests/KeyValuePair.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Azure.Experiments.Tests +namespace Microsoft.Azure.Experiments.Tests { internal static class KeyValuePair { diff --git a/experiments/Azure.Experiments/Tests/ComputeTest.cs b/experiments/Azure.Experiments/Tests/Old/ComputeTest.cs similarity index 82% rename from experiments/Azure.Experiments/Tests/ComputeTest.cs rename to experiments/Azure.Experiments/Tests/Old/ComputeTest.cs index fd09add5b9ec..2aa10d361269 100644 --- a/experiments/Azure.Experiments/Tests/ComputeTest.cs +++ b/experiments/Azure.Experiments/Tests/Old/ComputeTest.cs @@ -8,10 +8,10 @@ namespace Azure.Experiments.Tests { public class ComputeTest { - [Fact] + //[Fact] public async Task ResourceGroupTest() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var rg = new ResourceGroupObject(c, "My"); // var info = await rg.GetOrNullAsync(); @@ -19,10 +19,10 @@ public async Task ResourceGroupTest() // await rg.DeleteAsync(c); } - [Fact] + //[Fact] public async Task VirtualNetworkTest() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var rg = new ResourceGroupObject(c, "My1"); var vn = new VirtualNetworkObject(c.CreateNetwork(), "My1", rg, "192.168.0.0/16"); // @@ -30,39 +30,39 @@ public async Task VirtualNetworkTest() var infoCreate = await vn.GetOrCreateAsync(); } - [Fact] + //[Fact] public async Task PublicIpAddressTest() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var rg = new ResourceGroupObject(c, "MyPIA"); var pia = new PublicIpAddressObject(c.CreateNetwork(), "MyPIA", rg); // var info = await pia.GetOrCreateAsync(); } - [Fact] + //[Fact] public async Task NetworkSecurityGroupTest() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var rg = new ResourceGroupObject(c, "MyNSG"); var nsg = new NetworkSecurityGroupObject(c.CreateNetwork(), "MyNSG", rg); var info = await nsg.GetOrCreateAsync(); } - [Fact] + //[Fact] public async Task SubnetTest() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var rg = new ResourceGroupObject(c, "MySubnet"); var vn = new VirtualNetworkObject(c.CreateNetwork(), "MySubnet", rg, "192.168.0.0/16"); var subnet = new SubnetObject("MySubnet", vn, "192.168.1.0/24"); var info = await subnet.GetOrCreateAsync(); } - [Fact] + //[Fact] public async Task NetworkInterfaceObject() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var network = c.CreateNetwork(); var rg = new ResourceGroupObject(c, "MyNI"); var vn = new VirtualNetworkObject(network, "MyNI", rg, "192.168.0.0/16"); @@ -73,10 +73,10 @@ public async Task NetworkInterfaceObject() var info = await ni.GetOrCreateAsync(); } - [Fact] + //[Fact] public async Task VmObject() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var network = c.CreateNetwork(); var rg = new ResourceGroupObject(c, "MyVM"); var vn = new VirtualNetworkObject(network, "MyVM", rg, "192.168.0.0/16"); @@ -88,10 +88,10 @@ public async Task VmObject() var info = await vm.GetOrCreateAsync(); } - [Fact] + //[Fact] public async Task Test1() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var client = new ComputeManagementClient(c.Credentials) { SubscriptionId = c.SubscriptionId diff --git a/experiments/Azure.Experiments/Tests/UnitTests.cs b/experiments/Azure.Experiments/Tests/Old/UnitTests.cs similarity index 96% rename from experiments/Azure.Experiments/Tests/UnitTests.cs rename to experiments/Azure.Experiments/Tests/Old/UnitTests.cs index 3012120b4b2a..7caeaf594c01 100644 --- a/experiments/Azure.Experiments/Tests/UnitTests.cs +++ b/experiments/Azure.Experiments/Tests/Old/UnitTests.cs @@ -1,5 +1,6 @@ using Azure.Experiments.Compute; using Azure.Experiments.Network; +using Microsoft.Azure.Experiments; using Microsoft.Rest; using Xunit; @@ -36,7 +37,7 @@ public void PublicIpAddressObjectTest() //[Fact] public void NetworkSecurityGroupTest() { - var c = Credentials.Get(); + var c = Microsoft.Azure.Experiments.Tests.Credentials.Get(); var rg = new ResourceGroupObject(c, "MyNSG"); var nsg = new NetworkSecurityGroupObject(c.CreateNetwork(), "MyNSG", rg); Assert.Equal(2, nsg.Priority); diff --git a/experiments/Azure.Experiments/Tests/ResourceGroupTest.cs b/experiments/Azure.Experiments/Tests/ResourceGroupTest.cs new file mode 100644 index 000000000000..3e5e70acfffc --- /dev/null +++ b/experiments/Azure.Experiments/Tests/ResourceGroupTest.cs @@ -0,0 +1,57 @@ +using Microsoft.Azure.Experiments.ResourceManager; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Azure.Experiments.Tests +{ + public class ResourceGroupTest + { + [Fact] + public void CreateConfigTest() + { + var rg = ResourceGroupPolicy.CreateResourceGroupConfig("new"); + var id = rg.GetId("12345").IdToString(); + Assert.Equal("/subscriptions/12345/resourceGroups/new", id); + } + + [Fact] + public async Task GetAsyncTest() + { + var rg = ResourceGroupPolicy.CreateResourceGroupConfig("new"); + var client = new Client(Credentials.Get()); + var state = await rg.GetAsync(client, new CancellationToken()); + var location = state.GetLocation(rg); + Assert.Null(location); + } + + [Fact] + public async Task CreateParameterTest() + { + var rg = ResourceGroupPolicy.CreateResourceGroupConfig("new"); + var client = new Client(Credentials.Get()); + var state = await rg.GetAsync(client, new CancellationToken()); + var location = state.GetLocation(rg); + var parameters = rg.GetParameters(client.Context.SubscriptionId, "eastus"); + var rgc = parameters.GetOrNull(rg); + Assert.Equal("eastus", rgc.Location); + } + + [Fact] + public async Task CreateAsyncTest() + { + var rg = ResourceGroupPolicy.CreateResourceGroupConfig("new1"); + var client = new Client(Credentials.Get()); + var state = await rg.GetAsync(client, new CancellationToken()); + var location = state.GetLocation(rg); + var parameters = rg.GetParameters(client.Context.SubscriptionId, "eastus"); + var rgc = parameters.GetOrNull(rg); + var createState = await rg.CreateOrUpdateAsync( + client, state, parameters, new CancellationToken()); + var rgcc = createState.GetOrNull(rg); + Assert.Equal("eastus", rgcc.Location); + Assert.Equal("new1", rgcc.Name); + Assert.Equal(rg.GetId(client.Context.SubscriptionId).IdToString(), rgcc.Id); + } + } +} diff --git a/experiments/Azure.Experiments/Tests/Tests.csproj b/experiments/Azure.Experiments/Tests/Tests.csproj index e1763e006be8..daf903087c4a 100644 --- a/experiments/Azure.Experiments/Tests/Tests.csproj +++ b/experiments/Azure.Experiments/Tests/Tests.csproj @@ -7,7 +7,7 @@ Tests - Azure.Experiments.Tests + Microsoft.Azure.Experiments.Tests diff --git a/experiments/Azure.Experiments/Tests/TokenProvider.cs b/experiments/Azure.Experiments/Tests/TokenProvider.cs index d3839cebc64e..41fc440cd6f1 100644 --- a/experiments/Azure.Experiments/Tests/TokenProvider.cs +++ b/experiments/Azure.Experiments/Tests/TokenProvider.cs @@ -6,7 +6,7 @@ using System; using Newtonsoft.Json; -namespace Azure.Experiments.Tests +namespace Microsoft.Azure.Experiments.Tests { sealed class TokenProvider : ITokenProvider { diff --git a/experiments/Azure.Experiments/Tests/VirtualNetworkTest.cs b/experiments/Azure.Experiments/Tests/VirtualNetworkTest.cs new file mode 100644 index 000000000000..6bab692cf91c --- /dev/null +++ b/experiments/Azure.Experiments/Tests/VirtualNetworkTest.cs @@ -0,0 +1,29 @@ +using Microsoft.Azure.Experiments.Network; +using Microsoft.Azure.Experiments.ResourceManager; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Azure.Experiments.Tests +{ + public class VirtualNetworkTest + { + [Fact] + public async Task CreateAsyncTest() + { + var rg = ResourceGroupPolicy.CreateResourceGroupConfig("vnnew"); + var vn = rg.CreateVirtualNetworkConfig("vn", "192.168.0.0/16"); + var client = new Client(Credentials.Get()); + var state = await vn.GetAsync(client, new CancellationToken()); + var location = state.GetLocation(rg); + var parameters = vn.GetParameters(client.Context.SubscriptionId, "eastus"); + var vnc = parameters.GetOrNull(vn); + var createState = await vn.CreateOrUpdateAsync( + client, state, parameters, new CancellationToken()); + var vncc = createState.GetOrNull(vn); + Assert.Equal("eastus", vncc.Location); + Assert.Equal("vn", vncc.Name); + Assert.Equal(vn.GetId(client.Context.SubscriptionId).IdToString(), vncc.Id); + } + } +}