public async void WrapRewrapUnwrap()
        {
            using (var client = new VaultClient(TestVaultAddress))
            {
                client.VaultToken = TestRootToken;

                var data1 = new TestClass
                {
                    SValue  = "Test Value",
                    IValue  = 42,
                    DTValue = DateTime.Now.AddSeconds(1234567),
                };

                // Create a wrapped response
                var wrapped1 = await client.WrapDataAsync(data1, "30s");

                Assert.Null(wrapped1.Data);
                Assert.NotNull(wrapped1.WrapInfo?.Token);

                // Verify it exists and we can look it up
                var lookup = await client.LookupWrappingAsync(wrapped1.WrapInfo.Token);

                Assert.Equal(wrapped1.WrapInfo.CreationPath, lookup.Data.CreationPath);
                Assert.Equal(wrapped1.WrapInfo.CreationTime, lookup.Data.CreationTime);
                Assert.Equal(wrapped1.WrapInfo.TTL, lookup.Data.CreationTtl);

                // Rewrap the wrapped response
                var wrapped2 = await client.RewrapDataAsync(wrapped1.WrapInfo.Token);

                Assert.NotNull(wrapped2.WrapInfo.Token);
                Assert.NotEqual(wrapped1.WrapInfo.Token, wrapped2.WrapInfo.Token);

                // Confirm the old wrapped token is gone
                var ex = await Assert.ThrowsAsync <VaultClientException>(async() =>
                                                                         await client.LookupWrappingAsync(wrapped1.WrapInfo.Token));

                Assert.Equal(HttpStatusCode.BadRequest, ex.StatusCode);
                Assert.Equal("wrapping token is not valid or does not exist",
                             ex.Errors?.Errors?.FirstOrDefault());

                // Verify the ne re-wrapped token exists and we can look it up
                lookup = await client.LookupWrappingAsync(wrapped2.WrapInfo.Token);

                Assert.Equal(wrapped2.WrapInfo.CreationPath, lookup.Data.CreationPath);
                Assert.Equal(wrapped2.WrapInfo.CreationTime, lookup.Data.CreationTime);
                Assert.Equal(wrapped2.WrapInfo.TTL, lookup.Data.CreationTtl);

                // Resolve and read the wrapped response for the wrapping token...
                var val1 = await client.UnwrapData <TestClass>(wrapped2.WrapInfo.Token);

                // ...and confirm the value
                Assert.Equal(JsonConvert.SerializeObject(data1),
                             JsonConvert.SerializeObject(val1.Data));

                // Confirm the read wrapped token is gone
                ex = await Assert.ThrowsAsync <VaultClientException>(async() =>
                                                                     await client.LookupWrappingAsync(wrapped2.WrapInfo.Token));

                Assert.Equal(HttpStatusCode.BadRequest, ex.StatusCode);
                Assert.Equal("wrapping token is not valid or does not exist",
                             ex.Errors?.Errors?.FirstOrDefault());
            }
        }