def testFunctionList(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse()
        resource = op._getPath(os.path.dirname(self.publicFileName))
        filelist = op._list(resource['document'], resource['model'])
        self.assertIn(os.path.basename(self.publicFileName), filelist)
        resource2 = op._getPath(
            os.path.dirname(os.path.dirname(self.publicFileName)))
        filelist = op._list(resource2['document'], resource2['model'])
        self.assertIn(os.path.basename(os.path.dirname(self.publicFileName)),
                      filelist)
        resource3 = op._getPath(os.path.dirname(self.adminFileName))
        filelist = op._list(resource3['document'], resource3['model'])
        self.assertIn(os.path.basename(self.adminFileName), filelist)
        resource4 = op._getPath(
            os.path.dirname(os.path.dirname(self.adminFileName)))
        filelist = op._list(resource4['document'], resource4['model'])
        self.assertIn(os.path.basename(os.path.dirname(self.adminFileName)),
                      filelist)
        resource5 = op._getPath(
            os.path.dirname(
                os.path.dirname(os.path.dirname(self.adminFileName))))
        filelist = op._list(resource5['document'], resource5['model'])
        self.assertIn(
            os.path.basename(
                os.path.dirname(os.path.dirname(self.adminFileName))),
            filelist)

        op = server_fuse.ServerFuse(user=self.user, force=False)
        resource6 = op._getPath(os.path.dirname(self.publicFileName))
        filelist = op._list(resource6['document'], resource6['model'])
        self.assertIn(os.path.basename(self.publicFileName), filelist)
        resource7 = op._getPath(
            os.path.dirname(os.path.dirname(self.publicFileName)))
        filelist = op._list(resource7['document'], resource7['model'])
        self.assertIn(os.path.basename(os.path.dirname(self.publicFileName)),
                      filelist)
        # If we somehow have a document that we aren't authorized for, it can
        # still list files and items, but not folders.
        filelist = op._list(resource3['document'], resource3['model'])
        self.assertIn(os.path.basename(self.adminFileName), filelist)
        filelist = op._list(resource4['document'], resource4['model'])
        self.assertIn(os.path.basename(os.path.dirname(self.adminFileName)),
                      filelist)
        filelist = op._list(resource5['document'], resource5['model'])
        self.assertNotIn(
            os.path.basename(
                os.path.dirname(os.path.dirname(self.adminFileName))),
            filelist)
    def testFunctionStat(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse(user=self.user2, force=False)
        resource = op._getPath(self.publicFileName)
        attr = op._stat(resource['document'], resource['model'])
        self.assertEqual(attr['st_ino'], -1)
        self.assertEqual(attr['st_nlink'], 1)
        self.assertGreater(attr['st_mtime'], time.time() - 1e5)
        self.assertEqual(attr['st_ctime'], attr['st_mtime'])
        self.assertEqual(attr['st_mode'], 0o400 | stat.S_IFREG)
        self.assertGreater(attr['st_size'],
                           len(self.knownPaths[self.publicFileName]))
        resource['document']['updated'] = datetime.datetime.utcfromtimestamp(
            time.time() + 1)
        File().save(resource['document'])
        oldmtime = attr['st_mtime']
        resource = op._getPath(self.publicFileName)
        attr = op._stat(resource['document'], resource['model'])
        self.assertGreater(attr['st_mtime'], oldmtime)

        resource = op._getPath(os.path.dirname(self.publicFileName))
        attr = op._stat(resource['document'], resource['model'])
        self.assertEqual(attr['st_mode'], 0o500 | stat.S_IFDIR)
        self.assertEqual(attr['st_size'], 0)
        resource = op._getPath(
            os.path.dirname(os.path.dirname(self.publicFileName)))
        attr = op._stat(resource['document'], resource['model'])
        self.assertEqual(attr['st_mode'], 0o500 | stat.S_IFDIR)
        self.assertEqual(attr['st_size'], 0)
    def testFunctionAccess(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse()
        self.assertEqual(op.access(self.publicFileName, os.F_OK), 0)
        self.assertEqual(
            op.access(self.publicFileName, os.R_OK | os.W_OK | os.X_OK), 0)
        self.assertEqual(op.access(self.adminFileName, os.F_OK), 0)
        self.assertEqual(op.access(self.adminFileName, os.R_OK), 0)
        op = server_fuse.ServerFuse(user=self.user, force=False)
        self.assertEqual(op.access(self.publicFileName, os.F_OK), 0)
        self.assertEqual(
            op.access(self.publicFileName, os.R_OK | os.W_OK | os.X_OK), 0)
        with self.assertRaises(fuse.FuseOSError):
            op.access(self.adminFileName, os.F_OK)
        with self.assertRaises(fuse.FuseOSError):
            op.access(self.adminFileName, os.R_OK)
    def testFunctionName(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse(user=self.user2, force=False)
        resource = op._getPath(self.publicFileName)
        name = op._name(resource['document'], resource['model'])
        self.assertEqual(name, os.path.basename(self.publicFileName))
        resource = op._getPath(os.path.dirname(self.publicFileName))
        name = op._name(resource['document'], resource['model'])
        self.assertEqual(
            name, os.path.basename(os.path.dirname(self.publicFileName)))
    def testFunctionRelease(self):
        from girder.plugins.fuse import server_fuse
        op = server_fuse.ServerFuse()

        fh = op.open(self.publicFileName, os.O_RDONLY)
        self.assertIn(fh, op.openFiles)
        self.assertEqual(op.release(self.publicFileName, fh), 0)
        self.assertNotIn(fh, op.openFiles)
        path = os.path.dirname(self.publicFileName)
        fh = op.open(path, os.O_RDONLY)
        self.assertNotIn(fh, op.openFiles)
        self.assertEqual(op.release(path, fh), 0)
    def testFunctionCall(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse(user=self.user2, force=False)
        self.assertEqual(op.__call__('access', self.publicFileName, os.F_OK),
                         0)
        with self.assertRaises(fuse.FuseOSError):
            op.__call__('access', self.privateFileName, os.F_OK)
        with self.assertRaises(fuse.FuseOSError):
            op.__call__('access', 'nosuchpath', os.F_OK)
        with self.assertRaises(fuse.FuseOSError):
            self.assertTrue(
                op.__call__('read', self.publicFileName, 10, 0, None))
    def testFunctionOpen(self):
        from girder.plugins.fuse import server_fuse
        op = server_fuse.ServerFuse()

        fh = op.open(self.publicFileName, os.O_RDONLY)
        self.assertTrue(isinstance(fh, int))
        self.assertIn(fh, op.openFiles)
        path = os.path.dirname(self.publicFileName)
        fh = op.open(path, os.O_RDONLY)
        self.assertTrue(isinstance(fh, int))
        self.assertNotIn(fh, op.openFiles)
        for flag in (os.O_APPEND, os.O_ASYNC, os.O_CREAT, os.O_DIRECTORY,
                     os.O_EXCL, os.O_RDWR, os.O_TRUNC, os.O_WRONLY):
            with self.assertRaises(fuse.FuseOSError):
                op.open(self.publicFileName, flag)
    def testFunctionReaddir(self):
        from girder.plugins.fuse import server_fuse
        path = os.path.dirname(self.publicFileName)

        op = server_fuse.ServerFuse()
        data = op.readdir(path, 0)
        self.assertIn(os.path.basename(self.publicFileName), data)
        data = op.readdir('/user', 0)
        self.assertIn('admin', data)
        data = op.readdir('', 0)
        self.assertIn('user', data)
        self.assertIn('collection', data)
        self.assertIn('.', data)
        self.assertIn('..', data)
        data = op.readdir('/collection', 0)
        self.assertEqual(len(data), 3)

        op = server_fuse.ServerFuse(user=self.user2, force=False)
        data = op.readdir(path, 0)
        self.assertIn(os.path.basename(self.publicFileName), data)
        data = op.readdir('/user', 0)
        self.assertIn('admin', data)
        data = op.readdir('/collection', 0)
        self.assertEqual(len(data), 3)
    def testFunctionGetattr(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse()
        attr = op.getattr('/user')
        self.assertEqual(attr['st_mode'], 0o500 | stat.S_IFDIR)
        self.assertEqual(attr['st_size'], 0)
        attr = op.getattr(self.publicFileName)
        self.assertEqual(attr['st_ino'], -1)
        self.assertEqual(attr['st_nlink'], 1)
        self.assertGreater(attr['st_mtime'], time.time() - 1e5)
        self.assertEqual(attr['st_ctime'], attr['st_mtime'])
        self.assertEqual(attr['st_mode'], 0o400 | stat.S_IFREG)
        self.assertGreater(attr['st_size'],
                           len(self.knownPaths[self.publicFileName]))
Exemple #10
0
    def testFunctionGetPath(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse(user=self.user2, force=False)
        resource = op._getPath(self.publicFileName)
        self.assertEqual(resource['model'], 'file')
        resource = op._getPath(os.path.dirname(self.publicFileName))
        self.assertEqual(resource['model'], 'item')
        resource = op._getPath(
            os.path.dirname(os.path.dirname(self.publicFileName)))
        self.assertEqual(resource['model'], 'folder')
        with self.assertRaises(fuse.FuseOSError):
            op._getPath(self.privateFileName)
        with self.assertRaises(fuse.FuseOSError):
            op._getPath('nosuchpath')
Exemple #11
0
    def testFunctionRead(self):
        from girder.plugins.fuse import server_fuse

        op = server_fuse.ServerFuse()
        fh = op.open(self.publicFileName, os.O_RDONLY)
        data = op.read(self.publicFileName, 200, 0, fh)
        if (isinstance(data, six.binary_type) and not isinstance(
                self.knownPaths[self.publicFileName], six.binary_type)):
            self.assertEqual(
                data.decode('utf8').strip(),
                self.knownPaths[self.publicFileName])
        else:
            self.assertEqual(data.strip(),
                             self.knownPaths[self.publicFileName])
        data2 = op.read(self.publicFileName, 4, 2, fh)
        self.assertEqual(data[2:6], data2)
        op.release(self.publicFileName, fh)
        with self.assertRaises(fuse.FuseOSError):
            op.read(self.publicFileName, 4, 2, fh)
Exemple #12
0
    def testFunctionDestroy(self):
        from girder.plugins.fuse import server_fuse
        op = server_fuse.ServerFuse()

        self.assertIsNone(op.destroy('/'))
Exemple #13
0
    def testFunctionCreate(self):
        from girder.plugins.fuse import server_fuse
        op = server_fuse.ServerFuse()

        with self.assertRaises(fuse.FuseOSError):
            op.create(self.publicFileName, 0)