public void CanSetContents() { FileSystem fs = new FileSystem(); Assert.IsNotNull(fs); EditableFile f = fs.createFile("test.txt"); Assert.AreEqual(f.getContents(), ""); f.setContents("hello world"); Assert.AreEqual(f.getContents(), "hello world"); }
public void BasicFileTest() { FileSystem fs = new FileSystem(); Assert.IsNotNull(fs); EditableFile f = fs.createFile("test.txt"); Assert.IsNotNull(f); Assert.AreEqual("test.txt", f.getFullName()); Assert.AreEqual("test", f.getName()); Assert.AreEqual("txt", f.getExtension()); Assert.AreEqual("/test.txt", f.getPath()); Assert.AreEqual(fs.root, f.getParent()); }
public void DoesMoveFileWorkBasic() { FileSystem fs = new FileSystem(); Assert.IsNotNull(fs); EditableFile f = fs.createFile("test.txt"); Directory dir = fs.createDirectory("testing"); Assert.AreEqual(f.getParent(), fs.root); Assert.AreEqual(f.getPath(), "/test.txt"); Assert.AreEqual(dir.getPath(), "/testing"); fs.moveFile(f, dir); Assert.AreEqual(f.getParent(), dir); Assert.AreEqual(f.getPath(), dir.getPath() + "/" + f.getFullName()); Assert.AreEqual("/testing/test.txt", dir.getPath() + "/" + f.getFullName()); }
/** * In this case, "name" includes the full path. Thus, * createFile("/home/test/pass.txt") is equivalent to createFile("pass.txt", test). * * TODO: simplify this code a bit more. (ditto for directory below) */ public EditableFile createFile(string name) { if (name == null || name.Length == 0) { throw new InvalidFileException("Invalid file name (null or 0 length)."); } if (getFile(name) != null) { throw new InvalidFileException("File already exists!"); } // This is a file to be placed in the root directory. if (!name.Contains("/")) { if (!isValidFullFileName(name)) { throw new InvalidFileException("Invalid file name."); } EditableFile file = new EditableFile(this, root, name); return(file); } else { // Otherwise, try to get the directory we're placing this into. string path = name.Substring(0, name.LastIndexOf("/")); string filename = name.Substring(name.LastIndexOf("/") + 1); File dir = getFile(path); if (path == null || !(dir is Directory)) { // TODO: Can change this to generate the required path instead of failing. throw new InvalidFileException("Cannot create file: path \"" + path + "\" does not exist."); } if (!isValidFullFileName(filename)) { throw new InvalidFileException("Invalid file name."); } EditableFile file = new EditableFile(this, dir as Directory, filename); return(file); } }
public void CanNonadminUsersModifyRightPermissions() { FileSystem fs = new FileSystem(); EditableFile fi = fs.createFile("hello.txt"); fs.setPermissions(fi, 000); // Make a nonadmin user fs.addUser("meow", "pass", SECURITY_LEVEL.NONADMIN); Assert.AreEqual(2, fs.allUsers.Count); fs.changeUser("meow", "pass"); // Can't read Assert.Throws(typeof(InvalidUserException), delegate { fi.getContents(); }); // Can't write Assert.Throws(typeof(InvalidUserException), delegate { fi.setContents("hello world!"); }); // Can't set root permissions Assert.Throws(typeof(InvalidUserException), delegate { fs.setPermissions(fi, 700); }); // Can't set admin permissions Assert.Throws(typeof(InvalidUserException), delegate { fs.setPermissions(fi, 070); }); // Can set nonadmin permissions fs.setPermissions(fi, 007); fi.setContents("meowmeow"); Assert.AreEqual("meowmeow", fi.getContents()); }
public override string execute(params string[] args) { NetworkNode node = GameManager.currentHost; if (!(node is IFileSystem)) { throw new ExecutionException("The current node does not support a file system."); } FileSystem currentFileSystem = (node as IFileSystem).fileSystem; string currentPath = GameManager.currentPath; string filename = args [1]; File newFile = currentFileSystem.getFile(currentPath + "/" + filename); if (newFile == null) { throw new ExecutionException("File \"" + filename + "\" does not exist."); } if (newFile is Directory) { throw new ExecutionException("Can't cat file: is directory."); } if (!(newFile is EditableFile)) { throw new ExecutionException("Can't cat file: contents are unreadable."); } EditableFile newFileE = newFile as EditableFile; try { return("Contents of file \"" + newFileE.getFullName() + "\":\n" + newFileE.getContents()); } catch (InvalidUserException iue) { throw new ExecutionException(iue.Message); } }
public void CanRootUsersModifyRightPermissions() { FileSystem fs = new FileSystem(); // We are root user, so we can change all permissions. // Try making something we can't read or write to. EditableFile fi = fs.createFile("hello.txt"); fs.setPermissions(fi, 000); Assert.AreEqual(000, fi.getPermissions()); // Can't read Assert.Throws(typeof(InvalidUserException), delegate { fi.getContents(); }); // Can't write Assert.Throws(typeof(InvalidUserException), delegate { fi.setContents("hello world!"); }); // Can set any permissions fs.setPermissions(fi, 700); Assert.AreEqual(700, fi.getPermissions()); fs.setPermissions(fi, 770); Assert.AreEqual(770, fi.getPermissions()); fs.setPermissions(fi, 777); Assert.AreEqual(777, fi.getPermissions()); fs.setPermissions(fi, 700); Assert.AreEqual(700, fi.getPermissions()); // Can read + write now Assert.AreEqual("", fi.getContents()); fi.setContents("hello!"); Assert.AreEqual("hello!", fi.getContents()); }
public void DoesMoveFileWorkAdvanced() { FileSystem fs = new FileSystem(); Assert.IsNotNull(fs); Directory dir = fs.createDirectory("testing"); Directory dir2 = fs.createDirectory("testing2"); EditableFile f = fs.createFile("test.txt"); Assert.AreEqual(f.getParent(), fs.root); Assert.AreEqual(f.getPath(), "/test.txt"); Assert.AreEqual(dir.getPath(), "/testing"); Assert.AreEqual(dir2.getPath(), "/testing2"); fs.moveFile(dir2, dir); Assert.AreEqual(dir2.getParent(), dir); Assert.AreEqual(dir2.getPath(), dir.getPath() + "/" + dir2.getFullName()); fs.moveFile(f, dir2); Assert.AreEqual(f.getParent(), dir2); Assert.AreEqual(f.getParent().getParent(), dir); Assert.AreEqual(f.getPath(), dir2.getPath() + "/" + f.getFullName()); Assert.AreEqual(f.getPath(), dir.getPath() + "/" + dir2.getFullName() + "/" + f.getFullName()); Assert.AreEqual(dir.getNumFiles(), 1); Assert.AreEqual(dir2.getNumFiles(), 1); Directory dir3 = fs.createDirectory(dir2.getPath() + "/" + "testing3"); Assert.AreEqual(dir3.getPath(), dir2.getPath() + "/" + dir3.getFullName()); Assert.AreEqual(dir2.getNumFiles(), 2); fs.moveFile(dir3, dir2); Assert.AreEqual(dir3.getPath(), dir2.getPath() + "/" + dir3.getFullName()); Assert.AreEqual(dir2.getNumFiles(), 2); fs.moveFile(f, dir3); Assert.AreEqual(f.getParent(), dir3); Assert.AreEqual(f.getPath(), dir3.getPath() + "/" + f.getFullName()); Assert.AreEqual("/testing/testing2/testing3/test.txt", f.getPath()); Assert.AreEqual(dir.getNumFiles(), 1); Assert.AreEqual(dir2.getNumFiles(), 1); Assert.AreEqual(dir3.getNumFiles(), 1); // Can't move files to/from null locations Assert.Throws(typeof(InvalidFileException), delegate { fs.moveFile(null, dir3); }); Assert.Throws(typeof(InvalidFileException), delegate { fs.moveFile(dir3, null); }); Assert.AreEqual(dir3.getParent(), dir2); // Can't move directory inside itself Assert.Throws(typeof(InvalidFileException), delegate { fs.moveFile(dir3, dir3); }); // Can't move directories inside children of themselves Assert.Throws(typeof(InvalidFileException), delegate { fs.moveFile(dir2, dir3); }); }