public void CanCopyRootDirectoryToExistingDirectory() { TargetVolume.CreateDirectory(VolumePath.FromString("/newdirectory")); Assert.IsTrue(volumeManager.Copy(GlobalPath.FromString("0:/"), GlobalPath.FromString("1:/newdirectory"))); CompareDirectories(GlobalPath.FromString("0:/"), GlobalPath.FromString("1:/newdirectory")); }
public override IDictionary <string, VolumeItem> List() { string[] files = Directory.GetFiles(volumePath); var filterHid = files.Where(f => (File.GetAttributes(f) & FileAttributes.Hidden) != 0); var filterSys = files.Where(f => (File.GetAttributes(f) & FileAttributes.System) != 0); var visFiles = files.Except(filterSys).Except(filterHid).ToArray(); string[] directories = Directory.GetDirectories(volumePath); Array.Sort(directories); Array.Sort(visFiles); var result = new Dictionary <string, VolumeItem>(); foreach (string directory in directories) { string directoryName = System.IO.Path.GetFileName(directory); result.Add(directoryName, new CliVolumeDirectory(volume, VolumePath.FromString(directoryName, Path))); } foreach (string file in visFiles) { string fileName = System.IO.Path.GetFileName(file); result.Add(fileName, new CliVolumeFile(volume, new FileInfo(file), VolumePath.FromString(fileName, Path))); } return(result); }
public override VolumeItem Open(VolumePath path, bool ksmDefault = false) { try { var fileSystemInfo = Search(path, ksmDefault); if (fileSystemInfo == null) { return(null); } else if (fileSystemInfo is FileInfo) { VolumePath filePath = VolumePath.FromString(fileSystemInfo.FullName.Substring(VolumeFolder.Length).Replace(Path.DirectorySeparatorChar, VolumePath.PathSeparator)); return(new CliVolumeFile(this, fileSystemInfo as FileInfo, filePath)); } else { // we can use 'path' here, default extensions are not added to directories return(new CliVolumeDirectory(this, path)); } } catch (Exception e) { throw new KOSPersistenceException("Could not open path: " + path, e); } }
public void CanDeleteFiles() { string parent1 = "/parent1"; string file1 = parent1 + "/sub1", file2 = parent1 + "/sub2"; TestVolume.CreateFile(VolumePath.FromString(file1)); TestVolume.CreateFile(VolumePath.FromString(file2)); Assert.IsTrue(TestVolume.Delete(VolumePath.FromString(file1))); VolumeDirectory dir = TestVolume.Open(VolumePath.FromString(parent1)) as VolumeDirectory; Assert.AreEqual(1, dir.List().Count); Assert.AreEqual(file2, dir.List()["sub2"].Path.ToString()); Assert.IsInstanceOf <VolumeFile>(dir.List()["sub2"]); TestVolume.CreateFile(VolumePath.FromString(file2 + ".ks")); Assert.IsTrue(TestVolume.Delete(VolumePath.FromString(file2 + ".ks"))); Assert.AreEqual(1, dir.List().Count); Assert.AreEqual(file2, dir.List()["sub2"].Path.ToString()); Assert.IsInstanceOf <VolumeFile>(dir.List()["sub2"]); TestVolume.CreateFile(VolumePath.FromString(file2 + ".ks")); Assert.IsTrue(TestVolume.Delete(VolumePath.FromString(file2))); Assert.AreEqual(1, dir.List().Count); Assert.AreEqual(file2 + ".ks", dir.List()["sub2.ks"].Path.ToString()); Assert.IsInstanceOf <VolumeFile>(dir.List()["sub2.ks"]); Assert.IsTrue(TestVolume.Delete(VolumePath.FromString(file2))); Assert.AreEqual(0, dir.List().Count); }
public void CanCreateFiles() { string parent1 = "/parent1", parent2 = "/parent2"; string file1 = parent1 + "/sub1/file", file2 = parent1 + "/sub2", file3 = parent2 + "/sub3"; TestVolume.CreateFile(VolumePath.FromString(file1)); TestVolume.CreateFile(VolumePath.FromString(file2)); TestVolume.CreateFile(VolumePath.FromString(file3)); Assert.AreEqual(2, TestVolume.Root.List().Count); Assert.AreEqual(parent1, TestVolume.Root.List()["parent1"].Path.ToString()); Assert.AreEqual(parent2, TestVolume.Root.List()["parent2"].Path.ToString()); VolumeDirectory dir = TestVolume.Open(VolumePath.FromString(parent1)) as VolumeDirectory; Assert.AreEqual(2, dir.List().Count); Assert.AreEqual("/parent1/sub1", dir.List()["sub1"].Path.ToString()); Assert.IsInstanceOf <VolumeDirectory>(dir.List()["sub1"]); Assert.AreEqual(file2, dir.List()["sub2"].Path.ToString()); Assert.IsInstanceOf <VolumeFile>(dir.List()["sub2"]); dir = TestVolume.Open(VolumePath.FromString("/parent1/sub1")) as VolumeDirectory; Assert.AreEqual(1, dir.List().Count); Assert.AreEqual("/parent1/sub1/file", dir.List()["file"].Path.ToString()); Assert.IsInstanceOf <VolumeFile>(dir.List()["file"]); dir = TestVolume.Open(VolumePath.FromString(parent2)) as VolumeDirectory; Assert.AreEqual(1, dir.List().Count); Assert.AreEqual(file3, dir.List()["sub3"].Path.ToString()); Assert.IsInstanceOf <VolumeFile>(dir.List()["sub3"]); }
private IEnumerable <VolumePath> BootDirectoryFiles() { var result = new List <VolumePath>(); var archive = new Archive(SafeHouse.ArchiveFolder); var path = VolumePath.FromString(BootDirectoryName); var bootDirectory = archive.Open(path) as VolumeDirectory; if (bootDirectory == null) { return(result); } var files = bootDirectory.List(); foreach (KeyValuePair <string, VolumeItem> pair in files) { if (pair.Value is VolumeFile && (pair.Value.Extension.Equals(Volume.KERBOSCRIPT_EXTENSION) || pair.Value.Extension.Equals(Volume.KOS_MACHINELANGUAGE_EXTENSION))) { result.Add(pair.Value.Path); } } return(result); }
public void CanReadAndWriteFiles() { string dir = "/content_parent/content_test"; string content = "some test content!@#$;\n\rtaenstałąż"; int contentLength = Encoding.UTF8.GetBytes(content).Length; VolumeFile volumeFile = TestVolume.CreateFile(VolumePath.FromString(dir)); Assert.AreEqual(0, volumeFile.ReadAll().Bytes.Length); Assert.AreEqual("", volumeFile.ReadAll().String); Assert.IsTrue(volumeFile.Write(content)); Assert.AreEqual(FileCategory.ASCII, volumeFile.ReadAll().Category); Assert.AreEqual(contentLength, TestVolume.Size); if (ExpectedCapacity != Volume.INFINITE_CAPACITY) { Assert.AreEqual(ExpectedCapacity - contentLength, TestVolume.FreeSpace); } else { Assert.AreEqual(Volume.INFINITE_CAPACITY, TestVolume.FreeSpace); } Assert.AreEqual(contentLength, volumeFile.Size); Assert.AreEqual(content, volumeFile.ReadAll().String); // we should be able to save the same file again Assert.IsTrue(TestVolume.SaveFile(volumeFile) != null); }
public void CanHandleSimplePath() { VolumePath path = VolumePath.FromString("/identifier"); Assert.AreEqual(1, path.Length); Assert.AreEqual(1, path.Depth); }
public void CanFailWhenSavingFileOverDirectory() { string parent1 = "/parent1"; string file1 = parent1 + "/sub1"; TestVolume.CreateDirectory(VolumePath.FromString(file1)); TestVolume.SaveFile(VolumePath.FromString(file1), new FileContent()); }
public void CanFailWhenCreatingFileInASubdirectoryThatIsAFile() { string parent = "/parent1"; string file = parent + "/file"; TestVolume.CreateFile(VolumePath.FromString(parent)); TestVolume.CreateFile(VolumePath.FromString(file)); }
public void CanFailWhenCreatingFileOverExistingFile() { string parent = "/parent1"; string file = parent + "/file"; TestVolume.CreateFile(VolumePath.FromString(file)); TestVolume.CreateFile(VolumePath.FromString(file)); }
public void CanDeleteNonExistingDirectories() { VolumePath path = VolumePath.FromString("/abc"); TestVolume.CreateDirectory(path); TestVolume.Delete(path); TestVolume.Delete(path); }
public void CanFailWhenCreatingDirectoryOverExistingDirectory() { string parent = "/parent1"; string dir = parent + "/sub1"; TestVolume.CreateDirectory(VolumePath.FromString(dir)); TestVolume.CreateDirectory(VolumePath.FromString(dir)); }
public void CanFailWhenCreatingDirectoryOverFile() { string parent1 = "/parent1"; string file1 = parent1 + "/sub1"; TestVolume.CreateFile(VolumePath.FromString(file1)); TestVolume.CreateDirectory(VolumePath.FromString(file1)); }
public void CanHandleTwoDots() { VolumePath parent = VolumePath.FromString("/parent/deeper/and_deeper"); VolumePath path = VolumePath.FromString("../../", parent); Assert.AreEqual(1, path.Depth); Assert.AreEqual(1, path.Length); }
public void CanHandleMultipleSlashes() { VolumePath path = VolumePath.FromString("//test//test2/"); Assert.AreEqual(2, path.Length); Assert.AreEqual(2, path.Depth); Assert.AreEqual("test2", path.Name); }
public void CanCopyDirectoryToExistingDirectoryTwice() { TargetVolume.CreateDirectory(VolumePath.FromString("/newdirectory")); Assert.IsTrue(volumeManager.Copy(dir1Path, GlobalPath.FromString("1:/newdirectory"))); Assert.IsTrue(volumeManager.Copy(dir1Path, GlobalPath.FromString("1:/newdirectory"))); CompareDirectories(dir1Path, GlobalPath.FromString("1:/newdirectory/" + dir1)); }
public void CanCombinePathsThatContainSlashes() { VolumePath path = VolumePath.FromString("/test"); VolumePath combined = path.Combine("sub1/sub2"); VolumePath combined2 = path.Combine("sub1/.."); Assert.AreEqual(3, combined.Depth); Assert.AreEqual(1, combined2.Depth); }
public void CanCombinePaths() { VolumePath path = VolumePath.FromString("/test"); VolumePath combined = path.Combine("sub1", "sub2"); VolumePath combined2 = path.Combine(".."); Assert.AreEqual(3, combined.Depth); Assert.AreEqual(0, combined2.Depth); }
public void CanHandleRootPath() { VolumePath path = VolumePath.FromString("/"); Assert.AreEqual(0, path.Length); Assert.AreEqual(0, path.Depth); Assert.AreEqual(string.Empty, path.Name); Assert.AreEqual(string.Empty, path.Extension); }
public void CanDeleteNonExistingFiles() { VolumePath path = VolumePath.FromString("/abc"); TestVolume.CreateFile(path); // Delete the file twice Assert.IsTrue(TestVolume.Delete(path)); Assert.IsFalse(TestVolume.Delete(path)); }
public void CanDeleteDirectories() { string parent1 = "/parent1", parent2 = "/parent2"; string dir1 = parent1 + "/sub1", dir2 = parent1 + "/sub2", dir3 = parent2 + "/sub3"; TestVolume.CreateDirectory(VolumePath.FromString(dir1)); TestVolume.CreateDirectory(VolumePath.FromString(dir2)); TestVolume.CreateDirectory(VolumePath.FromString(dir3)); VolumeDirectory parent = TestVolume.Open(VolumePath.FromString(parent1)) as VolumeDirectory; TestVolume.Delete(VolumePath.FromString(dir1)); Assert.AreEqual(1, parent.List().Count); Assert.AreEqual(dir2, parent.List()["sub2"].Path.ToString()); TestVolume.Delete(VolumePath.FromString(parent2)); Assert.AreEqual(1, TestVolume.Root.List().Count); Assert.AreEqual(parent1, TestVolume.Root.List()["parent1"].Path.ToString()); }
public void CanCreateDirectories() { string dir1 = "/testdir", dir2 = "/abc", dir3 = "/abc2", dir4 = "/abc/subdirectory"; Assert.AreEqual(0, TestVolume.Root.List().Count); TestVolume.CreateDirectory(VolumePath.FromString(dir1)); TestVolume.CreateDirectory(VolumePath.FromString(dir2)); TestVolume.CreateDirectory(VolumePath.FromString(dir3)); TestVolume.CreateDirectory(VolumePath.FromString(dir4)); Assert.AreEqual(3, TestVolume.Root.List().Count); Assert.AreEqual(dir2, TestVolume.Root.List()["abc"].Path.ToString()); Assert.AreEqual(dir3, TestVolume.Root.List()["abc2"].Path.ToString()); Assert.AreEqual(dir1, TestVolume.Root.List()["testdir"].Path.ToString()); Assert.AreEqual(1, (TestVolume.Root.List()["abc"] as VolumeDirectory).List().Values.Count); Assert.AreEqual(dir4, (TestVolume.Root.List()["abc"] as VolumeDirectory).List()["subdirectory"].Path.ToString()); }
public void CanFailWhenCreatingDirectoryOverRootDirectory() { TestVolume.CreateDirectory(VolumePath.FromString("/")); }
private static HarddiskDirectory ToHarddiskDirectory(this ConfigNode configNode, Harddisk harddisk, VolumePath path) { HarddiskDirectory directory = new HarddiskDirectory(harddisk, path); foreach (ConfigNode fileNode in configNode.GetNodes("file")) { directory.CreateFile(fileNode.GetValue(FilenameValueString), fileNode.ToHarddiskFile(harddisk, directory)); } foreach (ConfigNode dirNode in configNode.GetNodes("directory")) { string dirName = dirNode.GetValue(DirnameValueString); directory.CreateDirectory(dirName, dirNode.ToHarddiskDirectory(harddisk, VolumePath.FromString(dirName, path))); } return(directory); }
public void CanHandleOpeningNonExistingFiles() { Assert.IsNull(TestVolume.Open(VolumePath.FromString("/idonotexist"))); }
private void InitUI() { //Populate selector for boot scripts BaseField field = Fields["bootFile"]; var options = (UI_ChooseOption)field.uiControlEditor; var bootFiles = new List <VolumePath>(); bootFiles.AddRange(BootDirectoryFiles()); //no need to show the control if there are no available boot files options.controlEnabled = bootFiles.Count >= 1; field.guiActiveEditor = bootFiles.Count >= 1; var availableOptions = bootFiles.Select(e => e.ToString()).ToList(); var availableDisplays = bootFiles.Select(e => e.Name).ToList(); availableOptions.Insert(0, "None"); availableDisplays.Insert(0, "None"); var bootFilePath = BootFilePath; // store the selected path temporarily if (bootFilePath != null && !bootFiles.Contains(bootFilePath)) { // if the path is not null ("None", null, or empty) and if it isn't in list of files var archive = new Archive(SafeHouse.ArchiveFolder); var file = archive.Open(bootFilePath) as VolumeFile; // try to open the file as saved if (file == null) { // check the same file name, but in the boot directory. var path = VolumePath.FromString(BootDirectoryName).Combine(bootFilePath.Name); file = archive.Open(path) as VolumeFile; // try to open the new path if (file == null) { // try the file name without "boot" prefix var name = bootFilePath.Name; if (name.StartsWith("boot", StringComparison.OrdinalIgnoreCase) && name.Length > 4) { // strip the boot prefix and try that file name name = name.Substring(4); path = VolumePath.FromString(BootDirectoryName).Combine(name); file = name.StartsWith(".") ? null : archive.Open(path) as VolumeFile; // try to open the new path if (file == null) { // try the file name without "boot_" prefix if (name.StartsWith("_", StringComparison.OrdinalIgnoreCase) && name.Length > 1) { // only need to strip "_" here name = name.Substring(1); path = VolumePath.FromString(BootDirectoryName).Combine(name); file = name.StartsWith(".") ? null : archive.Open(path) as VolumeFile; // try to open the new path } } } } } // now, if we have a file object, use its values. if (file != null) { // store the boot file information bootFile = file.Path.ToString(); if (!bootFiles.Contains(file.Path)) { availableOptions.Insert(1, bootFile); availableDisplays.Insert(1, "*" + file.Path.Name); // "*" is indication the file is not normally available } } } SafeHouse.Logger.SuperVerbose("bootFile: " + bootFile); options.options = availableOptions.ToArray(); options.display = availableDisplays.ToArray(); //populate diskSpaceUI selector diskSpaceUI = diskSpace.ToString(); field = Fields["diskSpaceUI"]; options = (UI_ChooseOption)field.uiControlEditor; var sizeOptions = new string[3]; sizeOptions[0] = baseDiskSpace.ToString(); sizeOptions[1] = (baseDiskSpace * 2).ToString(); sizeOptions[2] = (baseDiskSpace * 4).ToString(); options.options = sizeOptions; }
public void CanHandlePathsThatPointOutside2() { VolumePath.FromString("/../test/test/test"); }
public void CanHandlePathsThatPointOutside1() { VolumePath.FromString("/.."); }
public void CanHandleAbsolutePathWithParent() { VolumePath parent = VolumePath.FromString("/parent"); VolumePath.FromString("/identifier", parent); }