public void Validate(HiveDefinition hiveDefinition) { Covenant.Requires <ArgumentNullException>(hiveDefinition != null); if (string.IsNullOrWhiteSpace(Version)) { throw new HiveDefinitionException($"Invalid version [{nameof(VaultOptions)}.{nameof(Version)}={Version}]."); } if (!System.Version.TryParse(Version, out var version)) { throw new HiveDefinitionException($"Invalid version [{nameof(VaultOptions)}.{nameof(Version)}={Version}]."); } if (version < minVersion) { throw new HiveDefinitionException($"Minumim acceptable [{nameof(VaultOptions)}.{nameof(Version)}={minVersion}]."); } if (KeyCount <= 0) { throw new HiveDefinitionException($"[{nameof(VaultOptions)}.{nameof(KeyCount)}] must be greater than zero."); } if (KeyThreshold <= 0) { throw new HiveDefinitionException($"[{nameof(VaultOptions)}.{nameof(KeyThreshold)}] must be greater than zero."); } if (KeyThreshold > KeyCount) { throw new HiveDefinitionException($"[{nameof(VaultOptions)}.{nameof(KeyThreshold)}] cannot be greater than [{nameof(VaultOptions)}.{nameof(KeyCount)}]."); } if (!GoTimeSpan.TryParse(MaximimLease, out var goMaximumLease)) { throw new HiveDefinitionException($"[{nameof(VaultOptions)}.{nameof(MaximimLease)}={MaximimLease}] is not a valid GO duration."); } if (!GoTimeSpan.TryParse(DefaultLease, out var goDefaultLease)) { throw new HiveDefinitionException($"[{nameof(VaultOptions)}.{nameof(DefaultLease)}={DefaultLease}] is not a valid GO duration."); } // Treat zero lease values as essentially unlimited. if (goMaximumLease.TimeSpan == TimeSpan.Zero) { goMaximumLease = GoTimeSpan.MaxValue; MaximimLease = goMaximumLease.ToString(); } if (goDefaultLease.TimeSpan == TimeSpan.Zero) { goDefaultLease = GoTimeSpan.MaxValue; DefaultLease = goDefaultLease.ToString(); } if (goDefaultLease.TimeSpan > goMaximumLease.TimeSpan) { throw new HiveDefinitionException($"[{nameof(VaultOptions)}.{nameof(DefaultLease)}= {DefaultLease}] is greater than [{nameof(MaximimLease)}={MaximimLease}]."); } }
public void Parse() { // Verify valid input. Assert.Equal(0.0, GoTimeSpan.Parse("0").TimeSpan.TotalHours); Assert.Equal(GoTimeSpan.MinValue.TimeSpan, GoTimeSpan.Parse("-2562047h47m16s854ms775us808ns").TimeSpan); Assert.Equal(GoTimeSpan.MaxValue.TimeSpan, GoTimeSpan.Parse("2562047h47m16s854ms775us807ns").TimeSpan); var max = GoTimeSpan.MaxValue.ToString(); var min = GoTimeSpan.MinValue.ToString(); Assert.Equal(10.0, GoTimeSpan.Parse("10h").TotalHours); Assert.Equal(10.0, GoTimeSpan.Parse("10H").TotalHours); Assert.Equal(10.0, GoTimeSpan.Parse("+10h").TotalHours); Assert.Equal(-10.0, GoTimeSpan.Parse("-10h").TotalHours); Assert.Equal(1.5, GoTimeSpan.Parse("1.5h").TotalHours); Assert.Equal(123.0, GoTimeSpan.Parse("123m").TotalMinutes); Assert.Equal(123.0, GoTimeSpan.Parse("123M").TotalMinutes); Assert.Equal(123.0, GoTimeSpan.Parse("+123m").TotalMinutes); Assert.Equal(-123.0, GoTimeSpan.Parse("-123m").TotalMinutes); Assert.Equal(1.6, GoTimeSpan.Parse("1.6m").TotalMinutes); Assert.Equal(5.0, GoTimeSpan.Parse("5s").TotalSeconds); Assert.Equal(5.0, GoTimeSpan.Parse("5S").TotalSeconds); Assert.Equal(5.0, GoTimeSpan.Parse("+5s").TotalSeconds); Assert.Equal(-5.0, GoTimeSpan.Parse("-5s").TotalSeconds); Assert.Equal(1.7, GoTimeSpan.Parse("1.7s").TotalSeconds); Assert.Equal(5.0, GoTimeSpan.Parse("5ms").TotalMilliseconds); Assert.Equal(5.0, GoTimeSpan.Parse("5MS").TotalMilliseconds); Assert.Equal(5.0, GoTimeSpan.Parse("+5ms").TotalMilliseconds); Assert.Equal(-5.0, GoTimeSpan.Parse("-5ms").TotalMilliseconds); Assert.True(AreClose(1.7, GoTimeSpan.Parse("1.7ms").TotalMilliseconds)); Assert.Equal(5.0, GoTimeSpan.Parse("5us").TotalMilliseconds * 1000); Assert.Equal(5.0, GoTimeSpan.Parse("5US").TotalMilliseconds * 1000); Assert.Equal(5.0, GoTimeSpan.Parse("+5us").TotalMilliseconds * 1000); Assert.Equal(-5.0, GoTimeSpan.Parse("-5us").TotalMilliseconds * 1000); Assert.True(AreClose(1.7, GoTimeSpan.Parse("1.7us").TotalMilliseconds * 1000)); Assert.Equal(5.0, GoTimeSpan.Parse("5µs").TotalMilliseconds * 1000); Assert.Equal(5.0, GoTimeSpan.Parse("5µS").TotalMilliseconds * 1000); Assert.Equal(5.0, GoTimeSpan.Parse("+5µs").TotalMilliseconds * 1000); Assert.Equal(-5.0, GoTimeSpan.Parse("-5µs").TotalMilliseconds * 1000); Assert.True(AreClose(1.7, GoTimeSpan.Parse("1.7µs").TotalMilliseconds * 1000)); Assert.Equal(100, GoTimeSpan.Parse("100ns").Ticks); Assert.Equal(1000, GoTimeSpan.Parse("1000NS").Ticks); Assert.Equal(150, GoTimeSpan.Parse("+150ns").Ticks); Assert.Equal(-1000, GoTimeSpan.Parse("-1000ns").Ticks); Assert.Equal(1000, GoTimeSpan.Parse("1000.5ns").Ticks); // No nanosecond fractions Assert.Equal(1000.5, GoTimeSpan.Parse("1000h30m").TotalHours); Assert.Equal(-1000.5, GoTimeSpan.Parse("-1000h30m").TotalHours); // Verify invalid inputs. GoTimeSpan gts; Assert.False(GoTimeSpan.TryParse(null, out gts)); Assert.False(GoTimeSpan.TryParse(string.Empty, out gts)); Assert.False(GoTimeSpan.TryParse(" ", out gts)); Assert.False(GoTimeSpan.TryParse("10", out gts)); Assert.False(GoTimeSpan.TryParse("1000000000h", out gts)); // Out of range Assert.False(GoTimeSpan.TryParse("-1000000000h", out gts)); // Out of range }