예제 #1
0
        public async void Able_To_Retrieve_Data_By_Id()
        {
            // Store so that we can retrieve
            var provider = new InMemoryFileStorageProvider();

            var testFile = new Dtos.File
            {
                Id       = Guid.NewGuid().ToString(),
                Data     = TestDataStream(),
                Metadata = TestMetadata(),
            };

            var success = await provider.StoreFileAsync(testFile);

            Assert.NotNull(success);
            Assert.IsType <bool>(success);
            Assert.True(success);

            // Now, proceed to retrieve.
            var retrievedFile = await provider.RetrieveFileAsync(testFile.Id);

            Assert.NotNull(retrievedFile);
            Assert.NotEmpty(retrievedFile.Metadata); // expect 1 entry
            Assert.True(retrievedFile.Data.Length > 0);
        }
        public async Task <bool> StoreFileAsync(Dtos.File file)
        {
            // Validate:

            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            if (file.Id == null)
            {
                throw new ArgumentNullException("file.Id");
            }

            if (file.Data == null)
            {
                throw new ArgumentNullException("file.Data");
            }

            // (file.Metadata can be null)

            // Continue:

            var fileData = file.Data;

            // Copy to local memory stream and get raw bytes to store
            var memStream = new MemoryStream();
            await fileData.CopyToAsync(memStream);

            var rawData = memStream.ToArray();

            try
            {
                _data.TryAdd(file.Id, new Dtos.InMemoryFile
                {
                    Id       = file.Id,
                    Data     = rawData,
                    Metadata = file.Metadata,
                });

                return(true);
            }
            catch (OverflowException e)
            {
                // The dictionary is full.
                return(false);
            }
        }
예제 #3
0
        public async void Able_To_Store_File()
        {
            var provider = new InMemoryFileStorageProvider();

            var testFile = new Dtos.File
            {
                Id       = Guid.NewGuid().ToString(),
                Data     = TestDataStream(),
                Metadata = TestMetadata(),
            };

            var success = await provider.StoreFileAsync(testFile);

            Assert.NotNull(success);
            Assert.IsType <bool>(success);
            Assert.True(success);
        }