blob: 51e146929c08af1d12e03fae126318c8f57aa62d [file] [log] [blame]
# The MIT License
#
# Copyright (C) 2009 Erick Tryzelaar
#
# Copyright (C) 2008-2009 Abilisoft Ltd.
#
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import os
import unittest
import apphelper
import psi.arch
import psi.mount
class MountAttrTests(unittest.TestCase):
def setUp(self):
self.mounts = psi.mount.mounts()
for mount in psi.mount.mounts():
if mount.mountpoint == '/':
break
self.m = mount
if isinstance(psi.arch.arch_type(), psi.arch.ArchLinux):
fd = open('/etc/mtab')
mtab = fd.readlines()
fd.close()
for line in mtab:
if line.split()[1] == '/':
break
mount = line.split()
self.device = mount[0]
self.mountpoint = mount[1]
self.fstype = mount[2]
self.options = mount[3]
elif isinstance(psi.arch.arch_type(), psi.arch.ArchSunOS):
mounts = apphelper.run(['/usr/sbin/mount', '-p']).split('\n')
for line in mounts:
if line.split()[2] == '/':
break
mount = line.split()
self.device = mount[0]
self.mountpoint = mount[2]
self.fstype = mount[3]
if len(mount) >= 7:
self.options = mount[6]
else:
self.options = ''
# Special case to find dev=XXXXX option
if psi.arch.arch_type().release_info > (5, 8):
mounts = apphelper.run(['/usr/sbin/mount', '-v']).split('\n')
for line in mounts:
if line.split()[2] == '/':
break
opts = line.split()[5]
opts = opts.split('/')
for o in opts:
if o[:4] == 'dev=':
break
self.options += ',' + o
self.options = self.options.strip(',')
elif isinstance(psi.arch.arch_type(), psi.arch.ArchAIX):
mounts = apphelper.run(['/usr/sbin/mount']).split('\n')[2:]
for line in mounts:
if line.split()[1] == '/':
break
mount = line.split()
self.device = mount[0]
self.mountpoint = mount[1]
self.fstype = mount[2]
self.options = mount[-1]
elif isinstance(psi.arch.arch_type(), psi.arch.ArchDarwin):
mounts = apphelper.run(['/sbin/mount']).split('\n')
for line in mounts:
if line.split()[2] == '/':
break
mount = line.split()
self.device = mount[0]
self.mountpoint = mount[2]
self.fstype = mount[3][1:-1]
self.options = ','.join(line[line.find('('):line.find(')')].split(', ')[1:])
def test_enumerate(self):
self.assert_(hasattr(self.mounts, '__iter__'))
def test_len(self):
self.assert_(len(list(self.mounts)) > 0)
def test_type(self):
for m in self.mounts:
self.assert_(isinstance(m, psi.mount.MountBase))
def test_remote(self):
local = len(list(psi.mount.mounts()))
remote = len(list(psi.mount.mounts(True)))
self.assert_(remote >= local, '%d >= %d' % (remote, local))
def test_device(self):
self.assertEqual(self.m.device, self.device)
def test_fstype(self):
self.assertEqual(self.m.fstype, self.fstype)
def test_options(self):
self.assertEqual(self.m.options, self.options)
def test_mountpoint(self):
self.assertEqual(self.m.mountpoint, self.mountpoint)
def test_total(self):
self.assert_(self.m.total > 0)
def test_free(self):
self.assert_(self.m.free > 0)
self.assert_(self.m.total > self.m.free)
def test_available(self):
self.assert_(self.m.available > 0)
self.assert_(self.m.free >= self.m.available,
'%d > %d' % (self.m.free, self.m.available))
def test_inodes(self):
self.assert_(self.m.inodes > 0)
def test_free_inodes(self):
self.assert_(self.m.free_inodes > 0)
self.assert_(self.m.inodes > self.m.free_inodes)
def test_available_inodes(self):
self.assert_(self.m.available_inodes > 0)
self.assert_(self.m.free_inodes >= self.m.available_inodes,
'%d > %d' % (self.m.free_inodes, self.m.available_inodes))
class MountMethodsTests(unittest.TestCase):
def setUp(self):
for mount in psi.mount.mounts():
break
self.m = mount
def test_refresh(self):
mp = self.m.mountpoint
self.m.refresh()
self.assertEqual(mp, self.m.mountpoint)
if __name__ == '__main__':
unittest.main()