protected override IBlobStorage CreateBlobStorage(IConfiguration configuration)
        {
            var tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

            Directory.CreateDirectory(tempDirectory);
            return(FileSystemBlobStorage.CreateWithBasePath(tempDirectory));
        }
Esempio n. 2
0
        public void Setup()
        {
            var mimeTypeResolverMock = new Mock <IMimeTypeResolver>();
            var performanceLogMock   = new Mock <IPerformanceLog>();

            _blobStorage = new FileSystemBlobStorage(
                new FileSystemBlobStorageSettings(),
                JsonObjectSerializer.Default,
                mimeTypeResolverMock.Object,
                performanceLogMock.Object);
        }
Esempio n. 3
0
        public async Task Store_retrieve_flow()
        {
            var path    = Path.Combine(Path.GetTempPath(), "odachi-storage-filesystem-" + Guid.NewGuid());
            var storage = new FileSystemBlobStorage(path);

            try
            {
                using (var stream = new MemoryStream())
                {
                    stream.Write(new byte[] { 0x01, 0x02, 0x03, 0x04 }, 0, 4);

                    stream.Seek(0, SeekOrigin.Begin);
                    using (var blob = new StreamBlob("data.dat", stream))
                    {
                        await storage.StoreAsync("./data.dat", blob);
                    }
                }

                using (var stream = new MemoryStream())
                {
                    stream.Write(new byte[] { 0x01, 0x02, 0x03, 0x04 }, 0, 4);

                    stream.Seek(0, SeekOrigin.Begin);
                    using (var blob = new StreamBlob("data.dat", stream))
                    {
                        await storage.StoreAsync("./some/deep/path/data.dat", blob);
                    }
                }

                using (var stream = new MemoryStream())
                {
                    stream.Write(new byte[] { 0x01, 0x02, 0x03, 0x04 }, 0, 4);

                    stream.Seek(0, SeekOrigin.Begin);
                    await Assert.ThrowsAsync <IOException>(async() =>
                    {
                        using (var blob = new StreamBlob("data.dat", stream))
                        {
                            await storage.StoreAsync("./data.dat", blob);
                        }
                    });
                }

                Assert.True(File.Exists(Path.Combine(path, "data.dat")));
                Assert.True(File.Exists(Path.Combine(path, "some/deep/path/data.dat")));

                Assert.Equal(new byte[] { 0x01, 0x02, 0x03, 0x04 }, File.ReadAllBytes(Path.Combine(path, "data.dat")));
                Assert.Equal(new byte[] { 0x01, 0x02, 0x03, 0x04 }, File.ReadAllBytes(Path.Combine(path, "some/deep/path/data.dat")));

                Assert.True(await storage.ExistsAsync("./data.dat"));
                Assert.True(await storage.ExistsAsync("./some/deep/path/data.dat"));
                Assert.False(await storage.ExistsAsync("./nope.dat"));

                {
                    var retrieved = await storage.RetrieveAsync("./data.dat");

                    Assert.Equal("data.dat", retrieved.Name);
                    Assert.Equal("./data.dat", retrieved.Path);
                    Assert.Equal(4, retrieved.Length);

                    using (var retrievedStream = retrieved.OpenRead())
                    {
                        Assert.Equal(4, retrievedStream.Length);
                    }
                    using (var retrievedStream = await retrieved.OpenReadAsync())
                    {
                        Assert.Equal(4, retrievedStream.Length);
                    }
                }
                {
                    var retrieved = await storage.RetrieveAsync("./some/deep/path/data.dat");

                    Assert.Equal("data.dat", retrieved.Name);
                    Assert.Equal("./some/deep/path/data.dat", retrieved.Path);
                    Assert.Equal(4, retrieved.Length);

                    using (var retrievedStream = retrieved.OpenRead())
                    {
                        Assert.Equal(4, retrievedStream.Length);
                    }
                    using (var retrievedStream = await retrieved.OpenReadAsync())
                    {
                        Assert.Equal(4, retrievedStream.Length);
                    }
                }
                await Assert.ThrowsAsync <FileNotFoundException>(async() =>
                {
                    await storage.RetrieveAsync("./nope.dat");
                });
            }
            finally
            {
                Directory.Delete(path, true);
            }
        }