public void TestLocalKeyCreation()
        {
            var key          = new LocalKmsCredentials(new byte[96]);
            var keyId        = new LocalKeyId();
            var cryptOptions = new CryptOptions(CreateCredentialsMap(key));

            using (var cryptClient = CryptClientFactory.Create(cryptOptions))
                using (var context =
                           cryptClient.StartCreateDataKeyContext(keyId))
                {
                    var(_, dataKeyDocument) = ProcessContextToCompletion(context);
                    dataKeyDocument.Should().NotBeNull();
                }
        }
        public void TestLocalKeyCreationStepwise()
        {
            var key          = new LocalKmsCredentials(new byte[96]);
            var keyId        = new LocalKeyId();
            var cryptOptions = new CryptOptions(CreateCredentialsMap(key));

            using (var cryptClient = CryptClientFactory.Create(cryptOptions))
                using (var context =
                           cryptClient.StartCreateDataKeyContext(keyId))
                {
                    var(state, _, dataKeyDocument) = ProcessState(context);
                    state.Should().Be(CryptContext.StateCode.MONGOCRYPT_CTX_READY);
                    dataKeyDocument.Should().NotBeNull();

                    (state, _, _) = ProcessState(context);
                    state.Should().Be(CryptContext.StateCode.MONGOCRYPT_CTX_DONE);
                }
        }
        public void TestLocalKeyCreationWithkeyAltNames()
        {
            var keyAltNames         = new[] { "KeyMaker", "Architect" };
            var keyAltNameDocuments = keyAltNames.Select(name => new BsonDocument("keyAltName", name));
            var keyAltNameBuffers   = keyAltNameDocuments.Select(BsonUtil.ToBytes);
            var key          = new LocalKmsCredentials(new byte[96]);
            var keyId        = new LocalKeyId(keyAltNameBuffers);
            var cryptOptions = new CryptOptions(CreateCredentialsMap(key));

            using (var cryptClient = CryptClientFactory.Create(cryptOptions))
                using (var context =
                           cryptClient.StartCreateDataKeyContext(keyId))
                {
                    var(_, dataKeyDocument) = ProcessContextToCompletion(context);
                    dataKeyDocument.Should().NotBeNull();
                    var actualKeyAltNames   = dataKeyDocument["keyAltNames"].AsBsonArray.Select(x => x.AsString);
                    var expectedKeyAltNames = keyAltNames.Reverse(); // https://jira.mongodb.org/browse/CDRIVER-3277?
                    actualKeyAltNames.Should().BeEquivalentTo(expectedKeyAltNames);
                }
        }