Example #1
0
        public async Task Test_Serialize_WritesToStream()
        {
            // Arrange
            var writeStream = new MemoryStream();
            var testData    = "ABC";

            // Act
            await serializer.SerializeAsync(
                stream : writeStream,
                data : testData
                );

            // Assert
            Assert.IsNotEmpty(writeStream.ToArray());
        }
        async Task IDocumentSerializer.SerializeAsync <T>(Stream stream, T data) where T : class
        {
            if (stream is null)
            {
                throw new System.ArgumentNullException(nameof(stream));
            }
            if (data is null)
            {
                throw new System.ArgumentNullException(nameof(data));
            }

            using var rijndael = Rijndael.Create();
            var encryptor = rijndael.CreateEncryptor(options.Key.ToArray(), options.IV.ToArray());

            using var cryptoStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write);

            try
            {
                await serializer.SerializeAsync(cryptoStream, data).ConfigureAwait(false);

                await stream.FlushAsync().ConfigureAwait(false);
            }
            catch (CryptographicException ex)
            {
                throw new SerializationException("Decryption failed. Make sure to use correct key.", ex);
            }
        }
Example #3
0
        /// <summary>Creates persistence for a document.</summary>
        /// <typeparam name="TDocument">A type of a document.</typeparam>
        /// <param name="document">An object that represents a document, for which it is required to create persistence.</param>
        /// <param name="cancellationToken">A value that propagates notification that operations should be canceled.</param>
        /// <returns>An object that represents an async operation.</returns>
        public async Task <TDocument> InsertAsync <TDocument>(
            TDocument document, CancellationToken cancellationToken) where TDocument : DocumentBase
        {
            using (var stream = _streamManager.GetStream())
            {
                await _serializer.SerializeAsync(stream, document, cancellationToken);

                stream.Seek(0, SeekOrigin.Begin);

                using (var responseMessage = await _container.CreateItemStreamAsync(
                           stream, new PartitionKey(document.PartitionId), null, cancellationToken))
                {
                    responseMessage.EnsureSuccessStatusCode();

                    document = await _serializer.DeserializeAsync <TDocument>(
                        responseMessage.Content, cancellationToken);

                    return(document);
                }
            }
        }
Example #4
0
        public async Task Test_Serialize_WritesToStream(int keyLength, int ivLength)
        {
            // Arrange
            Mock.Get(internalSerializerMock)
            .SetReturnsDefault(Task.CompletedTask);

            serializer = GetSerializer(
                Enumerable.Repeat((byte)0, keyLength),
                Enumerable.Repeat((byte)0, ivLength)
                );

            var writeStream = new MemoryStream();
            var testData    = "ABC";

            // Act
            await serializer.SerializeAsync(
                stream : writeStream,
                data : testData
                );

            // Assert
            Assert.IsNotEmpty(writeStream.ToArray());
        }