Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
PSI / tests / _psi_test.py
Size: Mime:
# The MIT License
#
# Copyright (C) 2008-2009 Floris Bruynooghe
#
# 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 time
import unittest

import psi


class ExceptionsTests(unittest.TestCase):
    def test_attr_subclass(self):
        self.assert_(issubclass(psi.AttrNotAvailableError, AttributeError))
        self.assert_(issubclass(psi.AttrInsufficientPrivsError, AttributeError))
        self.assert_(issubclass(psi.AttrNotImplementedError, AttributeError))

    def test_attr_instances(self):
        na = psi.AttrNotAvailableError()
        ip = psi.AttrInsufficientPrivsError()
        ni = psi.AttrNotImplementedError()
        self.assert_(isinstance(na, AttributeError))
        self.assert_(isinstance(ip, AttributeError))
        self.assert_(isinstance(ni, AttributeError))

    def test_resource_subclass(self):
        self.assert_(issubclass(psi.MissingResourceError, Exception))

    def test_resource_instance(self):
        mr = psi.MissingResourceError()
        self.assert_(isinstance(mr, Exception))


class LoadavgTests(unittest.TestCase):
    def test_type(self):
        loadavg = psi.loadavg()
        self.failUnless(isinstance(loadavg, tuple))

    def test_len(self):
        loadavg = psi.loadavg()
        self.assertEqual(len(loadavg), 3)

    def test_value_types(self):
        loadavg = psi.loadavg()
        for v in loadavg:
            self.failUnless(isinstance(v, float))

    def test_values(self):
        psiavg = psi.loadavg()
        if hasattr(os, 'getloadavg'):
            osavg = os.getloadavg()
            for i, j in zip(psiavg, osavg):
                self.assertAlmostEqual(i, j)
        else:
            for l in psiavg:
                self.assert_(0.0 <= l < 1000.0, '0.0 < %f < 1000.0'%l)


class BoottimeTests(unittest.TestCase):
    def test_timespec(self):
        self.assert_(isinstance(psi.boottime(), psi.TimeSpec))

    def test_gt_epoch(self):
        bt = psi.boottime()
        self.assert_(bt.timestamp() > 0, '%s > 0' % bt.timestamp())

    def test_lt_now(self):
        bt = psi.boottime()
        now = time.time()
        self.assert_(bt.timestamp() < now, '%s < %s' % (bt.timestamp(), now))

    def test_boottime_calc(self):
        psi_bt = psi.boottime()
        calc_bt = time.time() - psi.uptime().timestamp()
        calc_min = calc_bt - 2
        calc_max = calc_bt + 2
        self.assert_(calc_min < psi_bt.timestamp() < calc_max,
                     '%s < %s < %s' % (calc_min, psi_bt.timestamp(), calc_max))


class UptimeTests(unittest.TestCase):
    def test_timedelta(self):
        ut = psi.uptime()
        self.assert_(isinstance(ut, psi.TimeSpec))

    def test_uptime_gt_null(self):
        self.assert_(psi.uptime().timestamp() > 0)

    def test_uptime_calc(self):
        psi_uptime = psi.uptime().timestamp()
        calc_uptime = time.time() - psi.boottime().timestamp()
        calc_min = calc_uptime - 2
        calc_max = calc_uptime + 2
        self.assert_(calc_min < psi_uptime < calc_max,
                     "%s < %s < %s" % (calc_min, psi_uptime, calc_max))


if hasattr(psi, 'getzoneid'):
    class SolarisZonesTests(unittest.TestCase):
        def test_getzoneid(self):
            id = psi.getzoneid()
            self.assert_(0 >= id)

        def test_getzonenamebyid(self):
            name = psi.getzonenamebyid(0)
            self.assertEqual(name, 'global')

        def test_getzonenamebyid_exception(self):
            self.assertRaises(ValueError, psi.getzonenamebyid, -1)

        def test_getzoneidbyname(self):
            id = psi.getzoneidbyname('global')
            self.assertEqual(id, 0)

        def test_getzoneidbyname_exception(self):
            # XXX This is brittle.
            self.assertRaises(ValueError, psi.getzoneidbyname, 'foobar')


if __name__ == '__main__':
    unittest.main()