예제 #1
0
  @Override
  public void process(CompoundContext context, nfs_resop4 result)
      throws ChimeraNFSException, IOException {
    final LOOKUP4res res = result.oplookup;

    String name = NameFilter.convertName(_args.oplookup.objname.value);

    Stat stat = context.getFs().getattr(context.currentInode());
    if (stat.type() == Stat.Type.SYMLINK) {
      throw new SymlinkException("parent not a symbolic link");
    }

    if (stat.type() != Stat.Type.DIRECTORY) {
      throw new NotDirException("parent not a directory");
    }

    Inode newInode = context.getFs().lookup(context.currentInode(), name);

    context.currentInode(newInode);
    context.currentStateid(Stateids.ZeroStateId());
    res.status = nfsstat.NFS_OK;
  }
 @Before
 public void setup() throws Exception {
   dirHandle = new FileHandle(0, 1, 0, new byte[] {0, 0, 0, 1}); // the dir we want to read
   dirInode = new Inode(dirHandle);
   dirStat = new Stat(); // the stat marking it as a dir
   //noinspection OctalInteger
   dirStat.setMode(Stat.S_IFDIR | 0755);
   dirStat.setMTime(System.currentTimeMillis());
   dirStat.setATime(System.currentTimeMillis());
   dirStat.setCTime(System.currentTimeMillis());
   dirStat.setGeneration(1);
   dirStat.setNlink(2);
   dirStat.setUid(1);
   dirStat.setGid(2);
   dirStat.setDev(1);
   dirStat.setFileid(1);
   dirStat.setSize(512);
   vfs = Mockito.mock(VirtualFileSystem.class); // the vfs serving it
   Mockito.when(vfs.getattr(Mockito.eq(dirInode))).thenReturn(dirStat);
   ExportFile exportFile =
       new ExportFile(this.getClass().getResource("simpleExports").toURI()); // same package as us
   nfsServer = new NfsServerV3(exportFile, vfs);
 }