Example #1
0
        static void CreateOSOnDisk(DiskDriver disk)
        {
            // create the operating system on disk if not present

            disk.TurnOn();

            // try to mount the disk, format if needed first
            FileSystem filesystem = new SimpleFS();

            try
            {
                filesystem.Mount(disk, "/");
            }
            catch (Exception)
            {
                filesystem.Format(disk);
                filesystem.Mount(disk, "/");
            }

            Directory rootDir = filesystem.GetRootDirectory();

            // password file for security subsystem if not present
            if (filesystem.Find("/passwd") == null)
            {
                rootDir.CreateFile("passwd");
            }

            // user home directory and files if not present
            if (filesystem.Find("/home") == null)
            {
                rootDir.CreateDirectory("home");
            }

            // root user if not present
            SecuritySystem security = new SimpleSecurity(filesystem, "passwd");

            try
            {
                security.AddUser("root");
            }
            catch (Exception)
            {
            }

            disk.TurnOff();
        }
Example #2
0
        static void TestLogicalFileSystem()
        {
            try
            {
                DiskDriver disk = new VolatileDisk(1);
                //DiskDriver disk = new PersistentDisk(1, "disk1");
                disk.TurnOn();

                FileSystem fs = new SimpleFS();
                fs.Format(disk);
                fs.Mount(disk, "/");

                Directory root = fs.GetRootDirectory();

                Directory dir1 = root.CreateDirectory("dir1");
                Directory dir2 = root.CreateDirectory("dir2");

                Random     r       = new Random();
                byte[]     bytes1  = CreateTestBytes(r, 1000);
                File       file2   = dir2.CreateFile("file2");
                FileStream stream1 = file2.Open();
                stream1.Write(0, bytes1);
                stream1.Close();

                File       file2_2 = (File)fs.Find("/dir2/file2");
                FileStream stream2 = file2_2.Open();
                byte[]     bytes2  = stream2.Read(0, 1000);
                stream2.Close();
                if (!Compare(bytes1, bytes2))
                {
                    throw new Exception("bytes read were not the same as written");
                }

                ValidateBadPath(fs, "");
                ValidateBadPath(fs, "//");
                ValidateBadPath(fs, "/dir2/nope");
                ValidateBadPath(fs, "dir2");
                ValidateBadPath(fs, "nope");
                ValidateBadPath(fs, "/dir2/file2/nope");

                ValidatePath(fs, "/");
                ValidatePath(fs, "/dir2");
                ValidatePath(fs, "/dir1/");


                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Moving file2 to dir1...");
                file2.Move(dir1);

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Renaming dir2 to renamed...");
                dir2.Rename("renamed");

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Deleting renamed...");
                dir2.Delete();

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();

                Console.WriteLine("Deleting dir1...");
                dir1.Delete();

                Console.WriteLine("Printing all directories...");
                RecursivelyPrintDirectories(root);
                Console.WriteLine();


                fs.Unmount("/");
                disk.TurnOff();
                Console.WriteLine("Logical file system success!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("LFS test failed: " + ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
        }