Ejemplo n.º 1
0
        public void SetContent_WhereContentIsLarge_ExecutesSet()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var testFile       = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter());
                    testFile.Directory = testDirectory.ToContract();

                    fixture.OnCondition(config, GatewayCapabilities.SetContent, () =>
                    {
                        gateway.SetContent(rootName, testFile.Id, new MemoryStream(largeContent), fixture.GetProgressReporter());

                        using (var result = gateway.GetContent(rootName, testFile.Id)) {
                            var buffer   = new byte[largeContent.Length];
                            int position = 0, bytesRead = 0;
                            do
                            {
                                position += bytesRead = result.Read(buffer, position, buffer.Length - position);
                            } while (bytesRead != 0);
                            Assert.AreEqual(buffer.Length, position, "Truncated result content");
                            Assert.AreEqual(-1, result.ReadByte(), "Excessive result content");
                            CollectionAssert.AreEqual(largeContent, buffer, "Mismatched result content");
                        }
                    });
                }
            }, 4);
        }
Ejemplo n.º 2
0
        public void RenameItem_WhereItemIsFile_ExecutesRename()
        {
            _fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, _fixture))
                {
                    gateway.GetDrive(rootName, config.ApiKey, _fixture.GetParameters(config));

                    var file       = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", _smallContent.ToStream(), _fixture.GetProgressReporter());
                    file.Directory = testDirectory.ToContract();

                    _fixture.OnCondition(config, GatewayCapabilities.RenameFileItem, () =>
                    {
                        gateway.RenameItem(rootName, file.Id, "File-Renamed.ext");

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.IsTrue(items.Any(i => i.Name == "File-Renamed.ext"), "Expected renamed file is missing");
                        using (var result = gateway.GetContent(rootName, ((FileInfoContract)items.Single(i => i.Name == "File-Renamed.ext")).Id))
                            using (var streamReader = new StreamReader(result))
                            {
                                Assert.AreEqual(_smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                        Assert.IsFalse(items.Any(i => i.Name == "File.ext"), "Excessive file found");
                    });
                }
            });
        }
Ejemplo n.º 3
0
        public void NewFileItem_WhereContentIsLarge_CreatesFile()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    fixture.OnCondition(config, GatewayCapabilities.NewFileItem, () =>
                    {
                        var newFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(largeContent), fixture.GetProgressReporter());

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.AreEqual(1, items.Count(i => i.Name == "File.ext"), "Expected file is missing");
                        Assert.AreEqual(items.Single(i => i.Name == "File.ext").Id, newFile.Id, "Mismatched file Id");
                        using (var result = gateway.GetContent(rootName, newFile.Id)) {
                            var buffer   = new byte[largeContent.Length];
                            int position = 0, bytesRead = 0;
                            do
                            {
                                position += bytesRead = result.Read(buffer, position, buffer.Length - position);
                            } while (bytesRead != 0);
                            Assert.AreEqual(buffer.Length, position, "Truncated result content");
                            Assert.AreEqual(-1, result.ReadByte(), "Excessive result content");
                            CollectionAssert.AreEqual(largeContent, buffer, "Mismatched result content");
                        }
                    });
                }
            }, 4);
        }
Ejemplo n.º 4
0
        public void CopyItem_WhereItemIsFile_ToDifferentDirectory_ExecutesCopy()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var fileOriginal    = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());
                    var directoryTarget = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Target");

                    fixture.OnCondition(config, GatewayCapabilities.CopyFileItem, () =>
                    {
                        var fileCopy = (FileInfoContract)gateway.CopyItem(rootName, fileOriginal.Id, "File-Copy.ext", directoryTarget.Id, false);

                        var items       = gateway.GetChildItem(rootName, testDirectory.Id);
                        var targetItems = gateway.GetChildItem(rootName, directoryTarget.Id);
                        Assert.AreEqual(targetItems.Single(i => i.Name == "File-Copy.ext").Id, fileCopy.Id, "Mismatched copied file Id");
                        Assert.IsNotNull(items.SingleOrDefault(i => i.Name == "File.ext"), "Original file is missing");
                        using (var result = gateway.GetContent(rootName, fileCopy.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                    });
                }
            });
        }
Ejemplo n.º 5
0
        public void MoveItem_WhereItemIsFile_ExecutesMove()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var directoryTarget    = gateway.NewDirectoryItem(rootName, testDirectory.Id, "DirectoryTarget");
                    directoryTarget.Parent = testDirectory.ToContract();
                    var fileOriginal       = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());

                    fixture.OnCondition(config, GatewayCapabilities.MoveFileItem, () =>
                    {
                        var fileMoved = (FileInfoContract)gateway.MoveItem(rootName, fileOriginal.Id, "File.ext", directoryTarget.Id);

                        var targetItems = gateway.GetChildItem(rootName, directoryTarget.Id);
                        Assert.AreEqual(targetItems.Single(i => i.Name == "File.ext").Id, fileMoved.Id, "Mismatched moved file Id");
                        var originalItems = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.IsNull(originalItems.SingleOrDefault(i => i.Name == "File.ext"), "Original file remains");
                        using (var result = gateway.GetContent(rootName, fileMoved.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                        if (!config.Exclusions.HasFlag(GatewayCapabilities.ItemId))
                        {
                            Assert.AreEqual(fileOriginal.Id, fileMoved.Id, "Mismatched moved file Id");
                        }
                    });
                }
            });
        }
Ejemplo n.º 6
0
        public void NewFileItemAsync_WhereNameContainsSpecialCharacters_CreatesFile()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait();

                    fixture.OnCondition(config, GatewayCapabilities.NewFileItem, () =>
                    {
                        using (var namesStream = File.OpenRead($"{nameof(GenericAsyncGatewayTests)}.SpecialCharacters.txt"))
                            using (var reader = new StreamReader(namesStream)) {
                                while (!reader.EndOfStream)
                                {
                                    var fileName = $"{reader.ReadLine().Split(new[] { ' ', '\t' }, 2)[0]}.txt";
                                    var newFile  = gateway.NewFileItemAsync(rootName, testDirectory.Id, fileName, smallContent.ToStream(), fixture.GetProgressReporter()).Result;

                                    var items = gateway.GetChildItemAsync(rootName, testDirectory.Id).Result;
                                    Assert.AreEqual(1, items.Count(i => i.Name == fileName), $"Expected file '{fileName}' is missing");
                                    Assert.AreEqual(items.Single(i => i.Name == fileName).Id, newFile.Id, $"Mismatched file Id for file '{fileName}'");
                                    using (var result = gateway.GetContentAsync(rootName, newFile.Id).Result)
                                        using (var streamReader = new StreamReader(result)) {
                                            Assert.AreEqual(smallContent, streamReader.ReadToEnd(), $"Mismatched content for file '{fileName}'");
                                        }
                                }
                            }
                    });
                }
            });
        }
Ejemplo n.º 7
0
        public void CopyItem_WhereItemIsDirectory_ToSameDirectoryExecutesCopy()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var directoryOriginal = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Directory");
                    var fileOriginal      = gateway.NewFileItem(rootName, directoryOriginal.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());

                    fixture.OnCondition(config, GatewayCapabilities.CopyDirectoryItem, () =>
                    {
                        var directoryCopy = (DirectoryInfoContract)gateway.CopyItem(rootName, directoryOriginal.Id, "Directory-Copy", testDirectory.Id, true);

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.AreEqual(items.Single(i => i.Name == "Directory-Copy").Id, directoryCopy.Id, "Mismatched copied directory Id");
                        Assert.IsNotNull(items.SingleOrDefault(i => i.Name == "Directory"), "Original directory is missing");
                        var copiedFile = (FileInfoContract)gateway.GetChildItem(rootName, directoryCopy.Id).SingleOrDefault(i => i.Name == "File.ext");
                        Assert.IsTrue(copiedFile != null, "Expected copied file is missing");
                        using (var result = gateway.GetContent(rootName, copiedFile.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                        Assert.AreNotEqual(fileOriginal.Id, copiedFile.Id, "Duplicate copied file Id");
                    });
                }
            });
        }
Ejemplo n.º 8
0
        public void SetContent_AfterGetContent_ExecutesSet()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var testFile       = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());
                    testFile.Directory = testDirectory.ToContract();

                    fixture.OnCondition(config, GatewayCapabilities.SetContent, () =>
                    {
                        using (var result = gateway.GetContent(rootName, testFile.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched initial content");
                            }

                        var changedContent = new string(smallContent.Reverse().ToArray());
                        gateway.SetContent(rootName, testFile.Id, changedContent.ToStream(), fixture.GetProgressReporter());

                        using (var result = gateway.GetContent(rootName, testFile.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(changedContent, streamReader.ReadToEnd(), "Mismatched updated content");
                            }
                    });
                }
            });
        }
Ejemplo n.º 9
0
        public void NewDirectoryItem_CreatesDirectory()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    fixture.OnCondition(config, GatewayCapabilities.NewDirectoryItem, () =>
                    {
                        var newDirectory = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Directory");

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.AreEqual(1, items.Count(i => i.Name == "Directory"), "Expected directory is missing");
                        Assert.AreEqual(items.Single(i => i.Name == "Directory").Id, newDirectory.Id, "Mismatched directory Id");
                    });
                }
            });
        }
Ejemplo n.º 10
0
        public void RemoveItem_WhereItemIsFile_ExecutesRemove()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var file = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());

                    fixture.OnCondition(config, GatewayCapabilities.RemoveItem, () =>
                    {
                        gateway.RemoveItem(rootName, file.Id, false);

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.IsFalse(items.Any(i => i.Name == "File.ext"), "Excessive file found");
                    });
                }
            });
        }
Ejemplo n.º 11
0
        public void GetContent_ReturnsResult()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var testFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());

                    fixture.OnCondition(config, GatewayCapabilities.GetContent, () =>
                    {
                        using (var result = gateway.GetContent(rootName, testFile.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                    });
                }
            });
        }
Ejemplo n.º 12
0
        public void RemoveItemAsync_WhereItemIsDirectory_ExecutesRemove()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait();

                    var directory = gateway.NewDirectoryItemAsync(rootName, testDirectory.Id, "Directory").Result;
                    gateway.NewFileItemAsync(rootName, directory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter()).Wait();

                    fixture.OnCondition(config, GatewayCapabilities.RemoveItem, () =>
                    {
                        gateway.RemoveItemAsync(rootName, directory.Id, true).Wait();

                        var items = gateway.GetChildItemAsync(rootName, testDirectory.Id).Result;
                        Assert.IsFalse(items.Any(i => i.Name == "Directory"), "Excessive directory found");
                    });
                }
            });
        }
Ejemplo n.º 13
0
        public void RenameItem_WhereItemIsDirectory_ExecutesRename()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var directory    = gateway.NewDirectoryItem(rootName, testDirectory.Id, "Directory");
                    directory.Parent = testDirectory.ToContract();

                    fixture.OnCondition(config, GatewayCapabilities.RenameDirectoryItem, () =>
                    {
                        gateway.RenameItem(rootName, directory.Id, "Directory-Renamed");

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.IsTrue(items.Any(i => i.Name == "Directory-Renamed"), "Expected renamed directory is missing");
                        Assert.IsFalse(items.Any(i => i.Name == "Directory"), "Excessive directory found");
                    });
                }
            });
        }
Ejemplo n.º 14
0
        public void GetChildItem_ReturnsResults()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    gateway.NewDirectoryItem(rootName, testDirectory.Id, "DirectoryContent");
                    gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter());

                    fixture.OnCondition(config, GatewayCapabilities.GetChildItem, () =>
                    {
                        var items = gateway.GetChildItem(rootName, testDirectory.Id).ToList();

                        Assert.AreEqual(2, items.Count, "Unexpected number of results");
                        Assert.IsTrue(items.OfType <DirectoryInfoContract>().Any(i => i.Name == "DirectoryContent"), "Expected directory is missing");
                        Assert.IsTrue(items.OfType <FileInfoContract>().Any(i => i.Name == "File.ext" && i.Size == 100), "Expected file is missing");
                    });
                }
            });
        }
Ejemplo n.º 15
0
        public void NewFileItem_CreatesFile()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    fixture.OnCondition(config, GatewayCapabilities.NewFileItem, () =>
                    {
                        var newFile = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", smallContent.ToStream(), fixture.GetProgressReporter());

                        var items = gateway.GetChildItem(rootName, testDirectory.Id);
                        Assert.AreEqual(1, items.Count(i => i.Name == "File.ext"), "Expected file is missing");
                        Assert.AreEqual(items.Single(i => i.Name == "File.ext").Id, newFile.Id, "Mismatched file Id");
                        using (var result = gateway.GetContent(rootName, newFile.Id))
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                    });
                }
            });
        }
Ejemplo n.º 16
0
        public void SetContentAsync_ExecutesSet()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait();

                    var testFile       = gateway.NewFileItemAsync(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter()).Result;
                    testFile.Directory = testDirectory.ToContract();

                    fixture.OnCondition(config, GatewayCapabilities.SetContent, () =>
                    {
                        gateway.SetContentAsync(rootName, testFile.Id, smallContent.ToStream(), fixture.GetProgressReporter(), () => new FileSystemInfoLocator(testFile)).Wait();

                        using (var result = gateway.GetContentAsync(rootName, testFile.Id).Result)
                            using (var streamReader = new StreamReader(result)) {
                                Assert.AreEqual(smallContent, streamReader.ReadToEnd(), "Mismatched content");
                            }
                    });
                }
            });
        }
Ejemplo n.º 17
0
        public void ClearContent_ExecutesClear()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDrive(rootName, config.ApiKey, fixture.GetParameters(config));

                    var testFile       = gateway.NewFileItem(rootName, testDirectory.Id, "File.ext", new MemoryStream(new byte[100]), fixture.GetProgressReporter());
                    testFile.Directory = testDirectory.ToContract();

                    fixture.OnCondition(config, GatewayCapabilities.ClearContent, () =>
                    {
                        gateway.ClearContent(rootName, testFile.Id);

                        var items = gateway.GetChildItem(rootName, testDirectory.Id).ToList();

                        testFile = (FileInfoContract)items.Single();
                        Assert.AreEqual("File.ext", testFile.Name, "Expected file is missing");
                        Assert.AreEqual(0, testFile.Size, "Mismatched content size");
                    });
                }
            });
        }
Ejemplo n.º 18
0
        public void NewDirectoryItemAsync_WhereNameContainsSpecialCharacters_CreatesDirectory()
        {
            fixture.ExecuteByConfiguration((gateway, rootName, config) => {
                using (var testDirectory = TestDirectoryFixture.CreateTestDirectory(gateway, config, fixture)) {
                    gateway.GetDriveAsync(rootName, config.ApiKey, fixture.GetParameters(config)).Wait();

                    fixture.OnCondition(config, GatewayCapabilities.NewDirectoryItem, () =>
                    {
                        using (var namesStream = File.OpenRead($"{nameof(GenericAsyncGatewayTests)}.SpecialCharacters.txt"))
                            using (var reader = new StreamReader(namesStream)) {
                                while (!reader.EndOfStream)
                                {
                                    var directoryName = reader.ReadLine().Split(new[] { ' ', '\t' }, 2)[0];
                                    var newDirectory  = gateway.NewDirectoryItemAsync(rootName, testDirectory.Id, directoryName).Result;

                                    var items = gateway.GetChildItemAsync(rootName, testDirectory.Id).Result;
                                    Assert.AreEqual(1, items.Count(i => i.Name == directoryName), $"Expected directory '{directoryName}' is missing");
                                    Assert.AreEqual(items.Single(i => i.Name == directoryName).Id, newDirectory.Id, $"Mismatched directory Id for directory '{directoryName}'");
                                }
                            }
                    });
                }
            });
        }