public async void PartialUnsealAfterInit()
        {
            var unsealKeys = TestUnsealKeys.ToArray();

            using (var client = new VaultClient(TestVaultAddress))
            {
                var sealStatus = await client.GetSealStatusAsync();

                //Assert.Equal(0, sealStatus.Progress);
                Assert.Equal(true, sealStatus.Sealed);
                Assert.Equal(unsealKeys.Length, sealStatus.SecretShares);
                Assert.True(sealStatus.SecretShares > sealStatus.SecretThreshold);

                var partialKeys = unsealKeys.Take(sealStatus.SecretThreshold - 1);
                foreach (var key in partialKeys)
                {
                    sealStatus = await client.DoUnsealAsync(new UnsealRequest { Key = key });

                    Assert.Equal(1, sealStatus.Progress);
                    Assert.Equal(true, sealStatus.Sealed);
                    Assert.Equal(unsealKeys.Length, sealStatus.SecretShares);
                    Assert.Equal(partialKeys.Count(), sealStatus.SecretThreshold - 1);
                }

                sealStatus = await client.DoUnsealAsync(new UnsealRequest { Reset = true });

                Assert.Equal(0, sealStatus.Progress);
                Assert.Equal(true, sealStatus.Sealed);
                Assert.Equal(unsealKeys.Length, sealStatus.SecretShares);
                Assert.Equal(partialKeys.Count(), sealStatus.SecretThreshold - 1);
            }
        }
 public async void ResetUnsealAfterInit()
 {
     using (var client = new VaultClient(TestVaultAddress))
     {
         await client.DoUnsealAsync(new UnsealRequest { Reset = true });
     }
 }
        public async void UnsealAfterInit()
        {
            var unsealKeys = TestUnsealKeys.ToArray();

            using (var client = new VaultClient(TestVaultAddress))
            {
                var sealStatus = await client.GetSealStatusAsync();

                Assert.Equal(0, sealStatus.Progress);
                Assert.Equal(true, sealStatus.Sealed);
                Assert.Equal(unsealKeys.Length, sealStatus.SecretShares);
                Assert.True(sealStatus.SecretShares > sealStatus.SecretThreshold);

                var partialKeys      = unsealKeys.Take(sealStatus.SecretThreshold);
                var expectedProgress = 1;
                foreach (var key in partialKeys)
                {
                    sealStatus = await client.DoUnsealAsync(new UnsealRequest { Key = key });

                    Assert.Equal(expectedProgress++, sealStatus.Progress);
                    Assert.Equal(true, sealStatus.Sealed);
                    Assert.Equal(unsealKeys.Length, sealStatus.SecretShares);
                    Assert.Equal(partialKeys.Count(), sealStatus.SecretThreshold);

                    if (expectedProgress == partialKeys.Count())
                    {
                        // Break just before the threshold keys submitted
                        break;
                    }
                }

                // The last key submitted of threshold count behaves differently
                sealStatus = await client.DoUnsealAsync(new UnsealRequest { Key = partialKeys.Last() });

                Assert.Equal(0, sealStatus.Progress);
                Assert.Equal(false, sealStatus.Sealed);
                Assert.Equal(unsealKeys.Length, sealStatus.SecretShares);
                Assert.Equal(partialKeys.Count(), sealStatus.SecretThreshold);

                sealStatus = await client.GetSealStatusAsync();

                Assert.Equal(0, sealStatus.Progress);
                Assert.Equal(false, sealStatus.Sealed);
            }
        }