public void TestAutoPoolSpecificationUnboundConstraints() { const string idPrefix = "Bar"; const bool keepAlive = false; const PoolLifetimeOption poolLifetimeOption = PoolLifetimeOption.Job; PoolSpecification poolSpecification = new PoolSpecification(); AutoPoolSpecification autoPoolSpecification = new AutoPoolSpecification(); //Properties should start out as their defaults Assert.Equal(default(string), autoPoolSpecification.AutoPoolIdPrefix); Assert.Equal(default(bool?), autoPoolSpecification.KeepAlive); Assert.Equal(default(PoolLifetimeOption), autoPoolSpecification.PoolLifetimeOption); Assert.Equal(default(PoolSpecification), autoPoolSpecification.PoolSpecification); Assert.False(((IModifiable)autoPoolSpecification).HasBeenModified); //Should be able to set all properties autoPoolSpecification.AutoPoolIdPrefix = idPrefix; autoPoolSpecification.KeepAlive = keepAlive; autoPoolSpecification.PoolLifetimeOption = poolLifetimeOption; autoPoolSpecification.PoolSpecification = poolSpecification; Assert.True(((IModifiable)autoPoolSpecification).HasBeenModified); Protocol.Models.AutoPoolSpecification protoAutoPoolSpecification = autoPoolSpecification.GetTransportObject(); ((IReadOnly)autoPoolSpecification).IsReadOnly = true; //Forces read-onlyness //After MarkReadOnly, the original object should be unsettable Assert.Throws <InvalidOperationException>(() => autoPoolSpecification.AutoPoolIdPrefix = "bar"); Assert.Throws <InvalidOperationException>(() => autoPoolSpecification.KeepAlive = false); Assert.Throws <InvalidOperationException>(() => autoPoolSpecification.PoolLifetimeOption = PoolLifetimeOption.JobSchedule); InvalidOperationException e = Assert.Throws <InvalidOperationException>(() => autoPoolSpecification.PoolSpecification = new PoolSpecification()); this.testOutputHelper.WriteLine(e.ToString()); //After GetProtocolObject, the child objects should be unreadable too Assert.Throws <InvalidOperationException>(() => poolSpecification.TaskSlotsPerNode = 4); //The original data should be on the protocol specification Assert.Equal(idPrefix, protoAutoPoolSpecification.AutoPoolIdPrefix); Assert.Equal(keepAlive, protoAutoPoolSpecification.KeepAlive); Assert.Equal(poolLifetimeOption, UtilitiesInternal.MapEnum <Protocol.Models.PoolLifetimeOption, PoolLifetimeOption>(protoAutoPoolSpecification.PoolLifetimeOption)); }
public void TestAutoPoolSpecificationBoundConstraints() { Protocol.Models.AutoPoolSpecification protoAutoPoolSpecification = new Protocol.Models.AutoPoolSpecification { KeepAlive = true, PoolLifetimeOption = Protocol.Models.PoolLifetimeOption.JobSchedule, AutoPoolIdPrefix = "Matt", Pool = new Protocol.Models.PoolSpecification { CloudServiceConfiguration = new Protocol.Models.CloudServiceConfiguration( "4"), ResizeTimeout = TimeSpan.FromDays(1), StartTask = new Protocol.Models.StartTask { CommandLine = "Bar" } } }; AutoPoolSpecification autoPoolSpecification = new AutoPoolSpecification(protoAutoPoolSpecification); //Assert that the wrapped properties are equal as we expect Assert.Equal(protoAutoPoolSpecification.AutoPoolIdPrefix, autoPoolSpecification.AutoPoolIdPrefix); Assert.Equal(protoAutoPoolSpecification.KeepAlive, autoPoolSpecification.KeepAlive); Assert.Equal(UtilitiesInternal.MapEnum <Protocol.Models.PoolLifetimeOption, PoolLifetimeOption>(protoAutoPoolSpecification.PoolLifetimeOption), autoPoolSpecification.PoolLifetimeOption); Assert.NotNull(autoPoolSpecification.PoolSpecification); Assert.NotNull(protoAutoPoolSpecification.Pool.CloudServiceConfiguration); Assert.Equal(protoAutoPoolSpecification.Pool.CloudServiceConfiguration.OsFamily, autoPoolSpecification.PoolSpecification.CloudServiceConfiguration.OSFamily); Assert.Equal(protoAutoPoolSpecification.Pool.ResizeTimeout, autoPoolSpecification.PoolSpecification.ResizeTimeout); Assert.NotNull(autoPoolSpecification.PoolSpecification.StartTask); Assert.Equal(protoAutoPoolSpecification.Pool.StartTask.CommandLine, autoPoolSpecification.PoolSpecification.StartTask.CommandLine); //When we change a property on the underlying object PoolSpecification, AutoPoolSpecification should notice the change Assert.False(((IModifiable)autoPoolSpecification).HasBeenModified); autoPoolSpecification.PoolSpecification.ResizeTimeout = TimeSpan.FromSeconds(122); Assert.True(((IModifiable)autoPoolSpecification).HasBeenModified); }