コード例 #1
0
        public void AddPackageAsFiles()
        {
            string file1Content     = "file 1 content";
            string file2Content     = "file 2 content";
            Stream file1            = StreamsHelper.StreamFromString(file1Content);
            Stream file2            = StreamsHelper.StreamFromString(file2Content);
            string expectedFullhash = HashServiceHelper.Instance().FromString(
                HashServiceHelper.Instance().FromString("folder1/file1.txt") +
                HashServiceHelper.Instance().FromString(file1Content) +
                HashServiceHelper.Instance().FromString("folder2/file2.txt") +
                HashServiceHelper.Instance().FromString(file2Content));

            PackageCreateArguments postArgs = new PackageCreateArguments
            {
                Id    = Guid.NewGuid().ToString(),
                Files = new PackageCreateItem[]
                {
                    new PackageCreateItem(file1, "folder1/file1.txt"),
                    new PackageCreateItem(file2, "folder2/file2.txt")
                }
            };

            PackageCreateResult result = _packageService.CreatePackage(postArgs);

            Assert.True(result.Success);
            Assert.Equal(2, TestingWorkspace.Repository.Count());
            Assert.Empty(TestingWorkspace.Incoming);
            Assert.Equal(expectedFullhash, result.PackageHash);
        }
コード例 #2
0
        /// <summary>
        /// Generates given number of packages in the path. Wipes the target path
        /// </summary>
        /// <param name="count"></param>
        public void CreatePackages(int count, int maxFiles, int maxFileSize, string path)
        {
            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }

            Directory.CreateDirectory(path);
            List <string> packages = new List <string>();

            TRandom random = new TRandom();

            for (int i = 0; i < count; i++)
            {
                List <PackageCreateItem> files = new List <PackageCreateItem>();
                int filesToAdd = random.Next(0, maxFiles);
                for (int j = 0; j < filesToAdd; j++)
                {
                    byte[] buffer = new byte[maxFileSize];
                    random.NextBytes(buffer);
                    Stream file = new MemoryStream(buffer);
                    files.Add(new PackageCreateItem(file, $"folder{Guid.NewGuid()}/{Guid.NewGuid()}"));
                }
                PackageCreateArguments package = new PackageCreateArguments {
                    Id    = Guid.NewGuid().ToString(),
                    Files = files
                };
                _packageServices.CreatePackage(package);
                Console.WriteLine($"Generated package {package.Id}");
            }
        }
コード例 #3
0
        public void CreateWithNoArguments()
        {
            // empty argument list
            PackageCreateArguments args = new PackageCreateArguments();

            PackageCreateResult result = PackageCreate.CreatePackage(args);

            Assert.Equal(PackageCreateErrorTypes.MissingValue, result.ErrorType);
            Assert.Equal("Files collection is empty.", result.PublicError);
        }
コード例 #4
0
        public void AddPackageAsArchive()
        {
            Dictionary <string, string> files = new Dictionary <string, string>();
            string file1Content = "file 1 content";
            string file2Content = "file 2 content";

            string expectedFullhash = HashServiceHelper.Instance().FromString(
                HashServiceHelper.Instance().FromString("folder1/file1.txt") +
                HashServiceHelper.Instance().FromString(file1Content) +
                HashServiceHelper.Instance().FromString("folder2/file2.txt") +
                HashServiceHelper.Instance().FromString(file2Content));

            files.Add("folder1/file1.txt", file1Content);
            files.Add("folder2/file2.txt", file2Content);

            MemoryStream zipStream = new MemoryStream();

            using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
            {
                foreach (var file in files)
                {
                    ZipArchiveEntry fileEntry = archive.CreateEntry(file.Key);

                    using (var entryStream = fileEntry.Open())
                        using (var streamWriter = new StreamWriter(entryStream))
                        {
                            streamWriter.Write(file.Value);
                        }
                }
            }

            PackageCreateArguments postArgs = new PackageCreateArguments
            {
                Id        = Guid.NewGuid().ToString(),
                IsArchive = true,
                Files     = new PackageCreateItem[]
                {
                    new PackageCreateItem(zipStream, "folder/archive.zip")
                }
            };

            PackageCreateResult result = _packageService.CreatePackage(postArgs);

            if (!result.Success)
            {
                throw new Exception(result.PublicError);
            }

            Assert.True(result.Success);
            Assert.Equal(2, TestingWorkspace.Repository.Count());
            Assert.Empty(TestingWorkspace.Incoming);
            Assert.Equal(expectedFullhash, result.PackageHash);
        }
コード例 #5
0
        public void CreateWithNoName()
        {
            PackageCreateArguments args = new PackageCreateArguments();
            Stream fileStream           = StreamsHelper.StreamFromString("some text");

            args.Files.Add(new PackageCreateItem(fileStream, "folder/file"));


            PackageCreateResult result = PackageCreate.CreatePackage(args);

            Assert.Equal(PackageCreateErrorTypes.MissingValue, result.ErrorType);
            Assert.Equal("Id is required.", result.PublicError);
        }
コード例 #6
0
        public void CreateWithEmptyFiles()
        {
            PackageCreateArguments args = new PackageCreateArguments
            {
                // empty files list
                Files = new List <PackageCreateItem>()
            };

            PackageCreateResult result = PackageCreate.CreatePackage(args);

            Assert.Equal(PackageCreateErrorTypes.MissingValue, result.ErrorType);
            Assert.Equal("Files collection is empty.", result.PublicError);
        }
コード例 #7
0
        public void CreateBasic()
        {
            List <PackageCreateItem> files = new List <PackageCreateItem>();
            string fileContent             = "some file content";
            int    filesToAdd = 10;
            string packageId  = "my package";

            for (int i = 0; i < filesToAdd; i++)
            {
                Stream fileStream = StreamsHelper.StreamFromString(fileContent);
                files.Add(new PackageCreateItem(fileStream, $"folder{i}/file{i}"));
            }

            PackageCreateArguments package = new PackageCreateArguments
            {
                Id    = packageId,
                Files = files
            };

            PackageCreateResult result = PackageCreate.CreatePackage(package);

            Assert.True(result.Success);
            Assert.Null(result.PublicError);
            Assert.NotEmpty(result.PackageHash);
            Assert.Null(result.ErrorType);

            // check that package can be listed
            IEnumerable <string> packageIds = IndexReader.GetAllPackageIds();

            Assert.Contains(packageId, packageIds);
            Assert.Single(packageIds);

            // check that package can be retrieved as manifest
            Manifest manifest = IndexReader.GetManifest(packageId);

            Assert.NotNull(manifest);
            Assert.Equal(manifest.Files.Count, filesToAdd);

            // check that a file can be retrieved directly using manifest id
            GetFileResponse response = IndexReader.GetFile(manifest.Files[0].Id);

            using (StreamReader reader = new StreamReader(response.Content)) {
                string retrievedContent = reader.ReadToEnd();
                Assert.Equal(retrievedContent, fileContent);
            }

            // ensure that workspace has been cleaned up
            Assert.Empty(Directory.GetDirectories(base.Settings.TempPath));
        }
コード例 #8
0
        public void CreateWithAutoArchive()
        {
            this.Settings.AutoCreateArchiveOnPackageCreate = true;
            Stream fileStream = StreamsHelper.StreamFromString("some text");

            PackageCreateArguments package = new PackageCreateArguments
            {
                Id    = "mypackage",
                Files = new List <PackageCreateItem>()
                {
                    new PackageCreateItem(fileStream, "folder/file")
                }
            };

            PackageCreate.CreatePackage(package);
            Assert.True(File.Exists(Path.Join(Settings.ArchivePath, "mypackage.zip")));
        }
コード例 #9
0
        public void EnsureSingleFileWhenAddArchive()
        {
            Stream file = StreamsHelper.StreamFromString("some content");

            PackageCreateArguments postArgs = new PackageCreateArguments
            {
                Id        = Guid.NewGuid().ToString(),
                IsArchive = true,
                Files     = new PackageCreateItem[]
                {
                    new PackageCreateItem(file, "folder1/file.txt"),
                    new PackageCreateItem(file, "folder2/file.txt"),
                }
            };

            PackageCreateResult result = _packageService.CreatePackage(postArgs);

            Assert.False(result.Success);
            Assert.Equal(PackageCreateErrorTypes.InvalidFileCount, result.ErrorType);
        }
コード例 #10
0
        public void CreateArchiveWithTooManyFiles()
        {
            string packageId  = "my package";
            Stream fileStream = StreamsHelper.StreamFromString("some text");

            PackageCreateArguments package = new PackageCreateArguments
            {
                Id        = packageId,
                IsArchive = true,
                Files     = new List <PackageCreateItem>()
                {
                    new PackageCreateItem(fileStream, "folder/file"),
                    new PackageCreateItem(fileStream, "folder/file")
                }
            };

            PackageCreateResult result = PackageCreate.CreatePackage(package);

            Assert.False(result.Success);
            Assert.Equal(PackageCreateErrorTypes.InvalidFileCount, result.ErrorType);
        }
コード例 #11
0
        public void CreateDuplicatePackage()
        {
            string packageId  = "my package";
            Stream fileStream = StreamsHelper.StreamFromString("some text");

            PackageCreateArguments package = new PackageCreateArguments
            {
                Id    = packageId,
                Files = new List <PackageCreateItem>()
                {
                    new PackageCreateItem(fileStream, "folder/file")
                }
            };

            PackageCreateResult result = PackageCreate.CreatePackage(package);

            Assert.True(result.Success);

            // attempt to create package with same name
            result = PackageCreate.CreatePackage(package);
            Assert.False(result.Success);
            Assert.Equal(PackageCreateErrorTypes.PackageExists, result.ErrorType);
        }