diff --git a/experiments/Azure.Experiments/Azure.Experiments/AzureObject.cs b/experiments/Azure.Experiments/Azure.Experiments/AzureObject.cs index e1551c6f016d..232dc9b0a30f 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/AzureObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/AzureObject.cs @@ -26,8 +26,9 @@ protected AzureObject(string name, IEnumerable dependencies) } } - public abstract class AzureObject : AzureObject + public abstract class AzureObject : AzureObject where T: class + where P: struct, IInfoPolicy { public T Info { get; private set; } diff --git a/experiments/Azure.Experiments/Azure.Experiments/Compute/ComputePolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/Compute/ComputePolicy.cs new file mode 100644 index 000000000000..a2009cffc7f3 --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/Compute/ComputePolicy.cs @@ -0,0 +1,11 @@ +using Microsoft.Azure.Management.Compute.Models; + +namespace Azure.Experiments.Compute +{ + public struct ComputePolicy : IInfoPolicy + where T : Resource + { + public string GetLocation(T value) + => value.Location; + } +} diff --git a/experiments/Azure.Experiments/Azure.Experiments/VmObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachineObject.cs similarity index 90% rename from experiments/Azure.Experiments/Azure.Experiments/VmObject.cs rename to experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachineObject.cs index 57c060d6230b..17198f99a279 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/VmObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachineObject.cs @@ -1,13 +1,14 @@ -using Microsoft.Azure.Management.Compute; +using Azure.Experiments.Network; +using Microsoft.Azure.Management.Compute; using Microsoft.Azure.Management.Compute.Models; using System.Threading.Tasks; -namespace Azure.Experiments +namespace Azure.Experiments.Compute { - public sealed class VmObject - : ResourceObject + public sealed class VirtualMachineObject + : ResourceObject> { - public VmObject( + public VirtualMachineObject( Context c, string name, ResourceGroupObject rg, diff --git a/experiments/Azure.Experiments/Azure.Experiments/IInfoPolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/IInfoPolicy.cs new file mode 100644 index 000000000000..3f9f66574ccc --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/IInfoPolicy.cs @@ -0,0 +1,7 @@ +namespace Azure.Experiments +{ + public interface IInfoPolicy + { + string GetLocation(T value); + } +} diff --git a/experiments/Azure.Experiments/Azure.Experiments/NetworkInterfaceObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkInterfaceObject.cs similarity index 95% rename from experiments/Azure.Experiments/Azure.Experiments/NetworkInterfaceObject.cs rename to experiments/Azure.Experiments/Azure.Experiments/Network/NetworkInterfaceObject.cs index 7059a923e417..e1974f3a05a7 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/NetworkInterfaceObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkInterfaceObject.cs @@ -2,10 +2,10 @@ using Microsoft.Azure.Management.Network.Models; using System.Threading.Tasks; -namespace Azure.Experiments +namespace Azure.Experiments.Network { public sealed class NetworkInterfaceObject - : ResourceObject + : NetworkObject { public NetworkInterfaceObject( INetworkManagementClient client, diff --git a/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkObject.cs new file mode 100644 index 000000000000..4c086f76e470 --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkObject.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using Microsoft.Azure.Management.Network.Models; + +namespace Azure.Experiments.Network +{ + public abstract class NetworkObject : ResourceObject> + where T : Resource + { + protected NetworkObject(string name, ResourceGroupObject rg) : base(name, rg) + { + } + + protected NetworkObject( + string name, + ResourceGroupObject rg, + IEnumerable dependencies) : base(name, rg, dependencies) + { + } + } +} diff --git a/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkPolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkPolicy.cs new file mode 100644 index 000000000000..1ef5d56d0835 --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkPolicy.cs @@ -0,0 +1,11 @@ +using Microsoft.Azure.Management.Network.Models; + +namespace Azure.Experiments.Network +{ + public struct NetworkPolicy : IInfoPolicy + where T : Resource + { + public string GetLocation(T value) + => value.Location; + } +} diff --git a/experiments/Azure.Experiments/Azure.Experiments/NetworkSecurityGroup.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkSecurityGroup.cs similarity index 91% rename from experiments/Azure.Experiments/Azure.Experiments/NetworkSecurityGroup.cs rename to experiments/Azure.Experiments/Azure.Experiments/Network/NetworkSecurityGroup.cs index 600c08f16fdc..b04aa22abd88 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/NetworkSecurityGroup.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/NetworkSecurityGroup.cs @@ -2,10 +2,10 @@ using Microsoft.Azure.Management.Network.Models; using System.Threading.Tasks; -namespace Azure.Experiments +namespace Azure.Experiments.Network { public sealed class NetworkSecurityGroupObject - : ResourceObject + : NetworkObject { public NetworkSecurityGroupObject( INetworkManagementClient client, diff --git a/experiments/Azure.Experiments/Azure.Experiments/PublicIpAddressObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/PublicIpAddressObject.cs similarity index 91% rename from experiments/Azure.Experiments/Azure.Experiments/PublicIpAddressObject.cs rename to experiments/Azure.Experiments/Azure.Experiments/Network/PublicIpAddressObject.cs index 7d03416f67a8..23ff54596669 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/PublicIpAddressObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/PublicIpAddressObject.cs @@ -2,10 +2,10 @@ using Microsoft.Azure.Management.Network.Models; using System.Threading.Tasks; -namespace Azure.Experiments +namespace Azure.Experiments.Network { public sealed class PublicIpAddressObject : - ResourceObject + NetworkObject { public PublicIpAddressObject( INetworkManagementClient client, diff --git a/experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/SubnetObject.cs similarity index 91% rename from experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs rename to experiments/Azure.Experiments/Azure.Experiments/Network/SubnetObject.cs index 1b01e3a3a327..92503e72c8d4 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/SubnetObject.cs @@ -3,9 +3,9 @@ using System.Linq; using System.Threading.Tasks; -namespace Azure.Experiments +namespace Azure.Experiments.Network { - public sealed class SubnetObject : AzureObject + public sealed class SubnetObject : AzureObject { public string AddressPrefix { get; } diff --git a/experiments/Azure.Experiments/Azure.Experiments/Network/SubnetPolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/SubnetPolicy.cs new file mode 100644 index 000000000000..5ea39290e792 --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/SubnetPolicy.cs @@ -0,0 +1,9 @@ +using Microsoft.Azure.Management.Network.Models; + +namespace Azure.Experiments +{ + public struct SubnetPolicy : IInfoPolicy + { + public string GetLocation(Subnet value) => null; + } +} diff --git a/experiments/Azure.Experiments/Azure.Experiments/VirtualNetworkObject.cs b/experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkObject.cs similarity index 94% rename from experiments/Azure.Experiments/Azure.Experiments/VirtualNetworkObject.cs rename to experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkObject.cs index 57e64aaa0bbd..4c30f0eb17b9 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/VirtualNetworkObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkObject.cs @@ -2,10 +2,10 @@ using Microsoft.Azure.Management.Network.Models; using System.Threading.Tasks; -namespace Azure.Experiments +namespace Azure.Experiments.Network { public sealed class VirtualNetworkObject : - ResourceObject + NetworkObject { public VirtualNetworkObject( INetworkManagementClient client, diff --git a/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupObject.cs b/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupObject.cs index e830fcfd3918..3750790642e1 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupObject.cs @@ -5,7 +5,7 @@ namespace Azure.Experiments { public sealed class ResourceGroupObject : AzureObject< - ResourceGroup> + ResourceGroup, ResourceGroupPolicy> { public ResourceGroupObject(Context client, string name) : base(name, NoDependencies) diff --git a/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupPolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupPolicy.cs new file mode 100644 index 000000000000..607cb375a54b --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/ResourceGroupPolicy.cs @@ -0,0 +1,10 @@ +using Microsoft.Azure.Management.ResourceManager.Models; + +namespace Azure.Experiments +{ + public struct ResourceGroupPolicy : IInfoPolicy + { + public string GetLocation(ResourceGroup value) + => value.Location; + } +} diff --git a/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs b/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs index 2b5a4190a0e8..756cd2f080ca 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs @@ -3,8 +3,9 @@ namespace Azure.Experiments { - public abstract class ResourceObject : AzureObject + public abstract class ResourceObject : AzureObject where T : class + where P : struct, IInfoPolicy { public string ResourceGroupName { get; } diff --git a/experiments/Azure.Experiments/Tests/ComputeTest.cs b/experiments/Azure.Experiments/Tests/ComputeTest.cs index 93162d58aab6..44a43f401527 100644 --- a/experiments/Azure.Experiments/Tests/ComputeTest.cs +++ b/experiments/Azure.Experiments/Tests/ComputeTest.cs @@ -1,6 +1,8 @@ using Xunit; using Microsoft.Azure.Management.Compute; using System.Threading.Tasks; +using Azure.Experiments.Network; +using Azure.Experiments.Compute; namespace Azure.Experiments.Tests { @@ -79,7 +81,7 @@ public async Task VmObject() var pia = new PublicIpAddressObject(network, "MyVM", rg); var nsg = new NetworkSecurityGroupObject(network, "MyVM", rg); var ni = new NetworkInterfaceObject(network, "MyVM", rg, subnet, pia, nsg); - var vm = new VmObject(c, "MyVM", rg, ni, "MyVMUser", "@3as54dDd"); + var vm = new VirtualMachineObject(c, "MyVM", rg, ni, "MyVMUser", "@3as54dDd"); var info = await vm.GetOrCreateAsync(); } diff --git a/experiments/Azure.Experiments/Tests/UnitTests.cs b/experiments/Azure.Experiments/Tests/UnitTests.cs index 32f7cef409fb..296b552a633f 100644 --- a/experiments/Azure.Experiments/Tests/UnitTests.cs +++ b/experiments/Azure.Experiments/Tests/UnitTests.cs @@ -1,4 +1,6 @@ -using Microsoft.Rest; +using Azure.Experiments.Compute; +using Azure.Experiments.Network; +using Microsoft.Rest; using Xunit; namespace Azure.Experiments.Tests @@ -8,14 +10,14 @@ public class UnitTests private static Context C { get; } = new Context(new TokenCredentials("a"), string.Empty); - //[Fact] + [Fact] public void ResourceGroupObjectTest() { var rg = new ResourceGroupObject(C, "My"); Assert.Equal(0, rg.Priority); } - //[Fact] + [Fact] public void VirtualNetworkObjectTest() { var rg = new ResourceGroupObject(C, "My1"); @@ -23,7 +25,7 @@ public void VirtualNetworkObjectTest() Assert.Equal(1, vn.Priority); } - //[Fact] + [Fact] public void PublicIpAddressObjectTest() { var rg = new ResourceGroupObject(C, "MyPIA"); @@ -72,7 +74,7 @@ public void VmObjectTest() var pia = new PublicIpAddressObject(network, "MyVM", rg); var nsg = new NetworkSecurityGroupObject(network, "MyVM", rg); var ni = new NetworkInterfaceObject(network, "MyVM", rg, subnet, pia, nsg); - var vm = new VmObject(C, "MyVM", rg, ni, "MyVMUser", "@3as54dDd"); + var vm = new VirtualMachineObject(C, "MyVM", rg, ni, "MyVMUser", "@3as54dDd"); Assert.Equal(4, vm.Priority); } }