using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using Packaging.Targets.IO; using System; using System.Collections.Generic; using System.IO; using Xunit; namespace Packaging.Targets.Tests { /// /// Tests the class. /// public class ArchiveBuilderTests { /// /// Tests the method /// [Fact] public void FromDirectoryTest() { ArchiveBuilder builder = new ArchiveBuilder(); var entries = builder.FromDirectory("archive", null, "/opt/demo", Array.Empty()); Assert.Equal(2, entries.Count); var readme = entries[0]; Assert.Equal("root", readme.Group); Assert.Equal(1L, readme.Inode); Assert.False(readme.IsAscii); Assert.Equal(string.Empty, readme.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode); Assert.Equal("root", readme.Owner); Assert.False(readme.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "README.md"), readme.SourceFilename); Assert.Equal("/opt/demo/README.md", readme.TargetPath); Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, readme.Type); var script = entries[1]; Assert.Equal("root", script.Group); Assert.Equal(2L, script.Inode); Assert.False(script.IsAscii); Assert.Equal(string.Empty, script.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "script.sh"), script.SourceFilename); Assert.Equal("/opt/demo/script.sh", script.TargetPath); Assert.Equal("/opt/demo/script.sh", script.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, script.Type); } /// /// Tests the method /// [Fact] public void FromDirectoryWithMetadataTest() { ArchiveBuilder builder = new ArchiveBuilder(); Dictionary metadata = new Dictionary() { { "CopyToPublishDirectory", "Always" }, { "LinuxPath", "/bin/script.sh" }, { "LinuxFileMode", "755" }, }; var taskItem = new TaskItem("script.sh", metadata); var taskItems = new ITaskItem[] { taskItem }; var entries = builder.FromDirectory("archive", null, "/opt/demo", taskItems); Assert.Equal(2, entries.Count); var readme = entries[0]; Assert.Equal("root", readme.Group); Assert.Equal(1L, readme.Inode); Assert.False(readme.IsAscii); Assert.Equal(string.Empty, readme.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode); Assert.Equal("root", readme.Owner); Assert.False(readme.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "README.md"), readme.SourceFilename); Assert.Equal("/opt/demo/README.md", readme.TargetPath); Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, readme.Type); var script = entries[1]; Assert.Equal("root", script.Group); Assert.Equal(2L, script.Inode); Assert.False(script.IsAscii); Assert.Equal(string.Empty, script.LinkTo); // -rwxr-xr-x Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "script.sh"), script.SourceFilename); Assert.Equal("/bin/script.sh", script.TargetPath); Assert.Equal("/bin/script.sh", script.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, script.Type); } /// /// Tests the method /// [Fact] public void FromDirectoryWithAppHost() { ArchiveBuilder builder = new ArchiveBuilder(); var entries = builder.FromDirectory("archive", "demo", "/opt/demo", Array.Empty()); Assert.Equal(3, entries.Count); var readme = entries[0]; Assert.Equal("root", readme.Group); Assert.Equal(1L, readme.Inode); Assert.False(readme.IsAscii); Assert.Equal(string.Empty, readme.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, readme.Mode); Assert.Equal("root", readme.Owner); Assert.False(readme.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "README.md"), readme.SourceFilename); Assert.Equal("/opt/demo/README.md", readme.TargetPath); Assert.Equal("/opt/demo/README.md", readme.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, readme.Type); var script = entries[1]; Assert.Equal("root", script.Group); Assert.Equal(2L, script.Inode); Assert.False(script.IsAscii); Assert.Equal(string.Empty, script.LinkTo); Assert.Equal(LinuxFileMode.S_IROTH | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFREG, script.Mode); Assert.Equal("root", script.Owner); Assert.False(script.RemoveOnUninstall); Assert.Equal(Path.Combine("archive", "script.sh"), script.SourceFilename); Assert.Equal("/opt/demo/script.sh", script.TargetPath); Assert.Equal("/opt/demo/script.sh", script.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, script.Type); var symlink = entries[2]; Assert.Equal("root", symlink.Group); Assert.Equal(3L, symlink.Inode); Assert.False(symlink.IsAscii); Assert.Equal("/opt/demo/demo", symlink.LinkTo); Assert.Equal(LinuxFileMode.S_IXOTH | LinuxFileMode.S_IROTH | LinuxFileMode.S_IXGRP | LinuxFileMode.S_IRGRP | LinuxFileMode.S_IXUSR | LinuxFileMode.S_IWUSR | LinuxFileMode.S_IRUSR | LinuxFileMode.S_IFLNK, symlink.Mode); Assert.Equal("root", symlink.Owner); Assert.False(symlink.RemoveOnUninstall); Assert.Null(symlink.SourceFilename); Assert.Equal("/usr/local/bin/demo", symlink.TargetPath); Assert.Equal("/usr/local/bin/demo", symlink.TargetPathWithFinalSlash); Assert.Equal(ArchiveEntryType.None, symlink.Type); } } }