Beispiel #1
0
    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");
    }
Beispiel #2
0
    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());
    }
Beispiel #3
0
    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());
    }
Beispiel #4
0
    /**
     * 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);
        }
    }
Beispiel #5
0
    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());
    }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
    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());
    }
Beispiel #8
0
    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);
        });
    }