Ejemplo n.º 1
0
    def _create_test_instance(self, name_of_atom, number):
        """ Create a TestAtom instance.  """

        weight = _atomic_weights[name_of_atom]
        #new_instance['char16Prop']  = 
        #new_instance['char16Propa'] = Null
        new_instance = pywbem.CIMInstance('TestAtom')
        new_instance['Name'] = name_of_atom
        new_instance['boolProp']     = False
        new_instance['dateProp']     = self.time
        new_instance['real32Prop']   = pywbem.Real32(weight)
        new_instance['real32Propa']  = [pywbem.Real32(weight), \
                                        pywbem.Real32(weight), \
                                        pywbem.Real32(weight)]
        new_instance['real64Prop']   = pywbem.Real64(weight)
        new_instance['real64Propa']  = [pywbem.Real64(weight), \
                                        pywbem.Real64(weight), \
                                        pywbem.Real64(weight)]
        new_instance['sint16Prop']   = pywbem.Sint16(number)
        new_instance['sint16Propa']  = [pywbem.Sint16(number), \
                                        pywbem.Sint16(number), \
                                        pywbem.Sint16(number)]
        new_instance['sint32Prop']   = pywbem.Sint32(number)
        new_instance['sint32Propa']  = [pywbem.Sint32(number), \
                                        pywbem.Sint32(number), \
                                        pywbem.Sint32(number)]
        new_instance['sint64Prop']   = pywbem.Sint64(number)
        new_instance['sint64Propa']  = [pywbem.Sint64(number), \
                                        pywbem.Sint64(number), \
                                        pywbem.Sint64(number)]
        new_instance['sint8prop']    = pywbem.Sint8(number)
        new_instance['sint8Propa']   = [pywbem.Sint8(number), \
                                        pywbem.Sint8(number), \
                                        pywbem.Sint8(number)]
        new_instance['stringProp']   = name_of_atom
        new_instance['stringPropa']  = ['proton', 'electron', 'neutron']
        new_instance['uint16Prop']   = pywbem.Uint16(number)
        new_instance['uint16Propa']  = [pywbem.Uint16(number), \
                                        pywbem.Uint16(number), \
                                        pywbem.Uint16(number)]
        new_instance['uint32Prop']   = pywbem.Uint32(number)
        new_instance['uint32Propa']  = [pywbem.Uint32(number), \
                                        pywbem.Uint32(number), \
                                        pywbem.Uint32(number)]
        new_instance['uint64Prop']   = pywbem.Uint64(number)
        new_instance['uint64Propa']  = [pywbem.Uint64(number), \
                                        pywbem.Uint64(number), \
                                        pywbem.Uint64(number)]
        new_instance['uint8Prop']    = pywbem.Uint64(number)
        new_instance['uint8Propa']   = [pywbem.Uint64(number), \
                                        pywbem.Uint64(number), \
                                        pywbem.Uint64(number)]

        try:
            cipath = self.conn.CreateInstance(new_instance)
            new_instance.path = cipath
            self.inst_paths.append(cipath)

        except pywbem.CIMError, arg:
            return None, arg
Ejemplo n.º 2
0
def _typed_randrange(lo, hi, type):
    if type == 'sint8':
        return pywbem.Sint8(
            random.randrange(pywbem.Sint8(lo), pywbem.Sint8(hi)))
    elif type == 'sint16':
        return pywbem.Sint16(
            random.randrange(pywbem.Sint16(lo), pywbem.Sint16(hi)))
    elif type == 'sint32':
        return pywbem.Sint32(
            random.randrange(pywbem.Sint32(lo), pywbem.Sint32(hi)))
    elif type == 'sint64':
        return pywbem.Sint64(
            random.randrange(pywbem.Sint64(lo), pywbem.Sint64(hi)))
    elif type == 'uint8':
        return pywbem.Uint8(
            random.randrange(pywbem.Uint8(lo), pywbem.Uint8(hi)))
    elif type == 'uint16':
        return pywbem.Uint16(
            random.randrange(pywbem.Uint16(lo), pywbem.Uint16(hi)))
    elif type == 'uint32':
        return pywbem.Uint32(
            random.randrange(pywbem.Uint32(lo), pywbem.Uint32(hi)))
    elif type == 'uint64':
        return pywbem.Uint64(
            random.randrange(pywbem.Uint64(lo), pywbem.Uint64(hi)))
    elif type == 'real32':
        return pywbem.Real32(
            random.randrange(pywbem.Real32(lo), pywbem.Real32(hi)))
    elif type == 'real64':
        return pywbem.Real64(
            random.randrange(pywbem.Real64(lo), pywbem.Real64(hi)))
Ejemplo n.º 3
0
 def cim_method_delobjects(self, env, object_name, method, param_paths):
     logger = env.get_logger()
     logger.log_debug('Entering %s.cim_method_delobjects()' \
             % self.__class__.__name__)
     rval = pywbem.Sint32(0)
     for path in param_paths:
         id = path['id']
         if id not in g_insts:
             rval = pywbem.Sint32(pywbem.CIM_ERR_NOT_FOUND)
         else:
             del g_insts[id]
     return (rval, {})
Ejemplo n.º 4
0
    def run(self):
        log = self.env.get_logger()
        log.log_debug('##### IndicationThread.run entered...')
        self.shuttingdown = False
        ch = self.env.get_cimom_handle()
        while not self.shuttingdown:
            # Acquire the lock on the condition variable before we wait on it
            self._cond.acquire()
            # We'll wait on the condition for 5 seconds. Then we'll
            # wake up and generate an indication
            l = self._cond.wait(5.0)
            self._cond.release()
            # If we're shutting down, just break out of this loop
            if self.shuttingdown:
                break

            # Modify 'Key2' of _PyFooInsts and generate a CIM_InstModification
            # life cycle indication

            k = 'Key2'
            v = _PyFooInsts[k]
            cipath = pywbem.CIMInstanceName('PyIndFoo', {'TheKey': k},
                                            namespace='root/cimv2')
            pci = pywbem.CIMInstance('PyIndFoo', {
                'TheKey': k,
                'TheValue': pywbem.Sint32(v)
            },
                                     path=cipath)
            v += 1
            _PyFooInsts[k] = v
            sci = pywbem.CIMInstance('PyIndFoo', {
                'TheKey': k,
                'TheValue': pywbem.Sint32(v)
            },
                                     path=cipath)

            self.count += 1

            ci = pywbem.CIMInstance('CIM_InstModification')
            ci['PreviousInstance'] = pci
            ci['SourceInstance'] = sci
            ci['SourceInstanceModelPath'] = cipath
            ci['IndicationIdentifier'] = 'PyTestInd:%s' % self.count
            ci['IndicationTime'] = pywbem.CIMDateTime.now()
            ci['PerceivedSeverity'] = pywbem.Uint16(2)
            ch.export_indication(ci, 'root/cimv2')

        log.log_debug('##### IndicationThread.run returning')
Ejemplo n.º 5
0
    def cim_method_foomethod(self, env, object_name, method, param_i, param_s):
        """Implements PyFoo.FooMethod()

            Test method
            
        Keyword arguments:
        env -- Provider Environment
        object_name -- A CIMInstanceName or CIMCLassName specifying the 
            object on which the method %(mname)s should be invoked
        method -- A CIMMethod representing the method meta-data
        param_i --  The input parameter i (type sint32) 
        param_s --  The input parameter s (type string) 

        Returns a two-tuple containing the return value (type string)
        and a dictionary with the out-parameters

        Output parameters:
        i -- (type sint32) 
        sa -- (type string[]) 

        """

        out_params = {}
        out_params['i'] = pywbem.Sint32(-param_i)
        out_params['sa'] = ['some', 'string', 'array']
        rval = 'executed on %s. s: %s' % ( ` object_name `, param_s)
        return (rval, out_params)
Ejemplo n.º 6
0
    def cim_method_getobjectpath(self, env, object_name, method):
        logger = env.get_logger()
        logger.log_debug('Entering %s.cim_method_getobjectpath()' \
                % self.__class__.__name__)

        if not g_insts:
            path = None
            rval = pywbem.Sint32(pywbem.CIM_ERR_NOT_FOUND)
        else:
            path = pywbem.CIMInstanceName(
                'TestMethod',
                namespace=object_name.namespace,
                keybindings={'id': g_insts.keys()[0]})
            rval = pywbem.Sint32(0)
        out_params = {}
        out_params['path'] = path
        return (rval, out_params)
Ejemplo n.º 7
0
    def cim_method_strsplit(self, env, object_name, method, param_str,
                            param_sep):
        logger = env.get_logger()
        logger.log_debug('Entering %s.cim_method_strsplit()' \
                % self.__class__.__name__)

        elems = param_str.split(param_sep)
        out_params = {}
        out_params['nelems'] = pywbem.Sint32(len(elems))
        out_params['elems'] = elems
        rval = True
        return (rval, out_params)
Ejemplo n.º 8
0
    def cim_method_getdates(self, env, object_name, method, param_datestrs):

        logger = env.get_logger()
        logger.log_debug('Entering %s.cim_method_getdates()' \
                % self.__class__.__name__)

        out_params = {}
        elems = [pywbem.CIMDateTime(s) for s in param_datestrs]
        out_params['nelems'] = pywbem.Sint32(len(elems))
        out_params['elems'] = elems
        rval = True
        return (rval, out_params)
Ejemplo n.º 9
0
    def cim_method_getobjectpaths(self, env, object_name, method):
        logger = env.get_logger()
        logger.log_debug('Entering %s.cim_method_getobjectpaths()' \
                % self.__class__.__name__)

        paths = []
        for key in g_insts.keys():
            paths.append(
                pywbem.CIMInstanceName('TestMethod',
                                       namespace=object_name.namespace,
                                       keybindings={'id': key}))
        out_params = {}
        out_params['paths'] = paths
        rval = pywbem.Sint32(0)
        return (rval, out_params)
Ejemplo n.º 10
0
 def test_iname_str2pywbem_correct_path2(self):
     path = iname_str2pywbem(props,
             """LMI_YawnTest.StringProperty="short \\ \\"\\\\ string\\"","""
             """Sint32Property=-10,BooleanProperty=FALSE""")
     self.assertIsInstance(path, pywbem.CIMInstanceName)
     self.assertIs(None, path.namespace)
     self.assertEqual("LMI_YawnTest", path.classname)
     self.assertIsInstance(path.keybindings, (dict, pywbem.NocaseDict))
     self.assertEqual(3, len(path.keybindings))
     self.assertIn("StringProperty", path)
     self.assertIn("Sint32Property", path)
     self.assertIn("BooleanProperty", path)
     self.assertEqual('short  "\\ string"', path["StringProperty"])
     self.assertIsInstance(path['Sint32Property'], pywbem.Sint32)
     self.assertEqual(pywbem.Sint32(-10), path['Sint32Property'])
     self.assertEqual(False, path['BooleanProperty'])
Ejemplo n.º 11
0
 def get_value(string):
     vtype, value = string.split(',', 1)
     if vtype == 'str':
         return str(value)
     elif vtype == 'uint8':
         return pywbem.Uint8(value)
     elif vtype == 'sint8':
         return pywbem.Sint8(value)
     elif vtype == 'uint16':
         return pywbem.Uint16(value)
     elif vtype == 'sint16':
         return pywbem.Sint16(value)
     elif vtype == 'uint32':
         return pywbem.Uint32(value)
     elif vtype == 'sint32':
         return pywbem.Sint32(value)
     elif vtype == 'uint64':
         return pywbem.Uint64(value)
     elif vtype == 'sint64':
         return pywbem.Sint64(value)
     else:
         print "Input value is invalid : %s" % string
         sys.exit(1)
Ejemplo n.º 12
0
"""Python Provider for PyTut_Foo

Instruments the CIM class PyTut_Foo

"""

import pywbem
from pywbem.cim_provider2 import CIMProvider2

_FooInsts = {
    'Key1': pywbem.Sint32(1),
    'Key2': pywbem.Sint32(2),
    'Key3': pywbem.Sint32(3)
}
_FooComps = {
    'TheKey1': 'Key1',
    'TheKey2': 'Key2',
    'TheKey3': 'Key3',
    'TheKey4': 'Key1',
    'TheKey5': 'Key1'
}


class PyTut_Foo(CIMProvider2):
    """Instrument the CIM class PyTut_Foo 

    """
    def __init__(self, env):
        logger = env.get_logger()
        logger.log_debug('Initializing provider %s from %s' \
                % (self.__class__.__name__, __file__))
Ejemplo n.º 13
0
 def cim_method_foomethod(self, env, object_name, method, param_i, param_s):
     out_params = {}
     out_params['i'] = pywbem.Sint32(param_i and -param_i or 0)
     out_params['sa'] = param_s and param_s.split() or ['Nothing']
     rval = 'executed on %s. s: %s' % ( ` object_name `, param_s)
     return (rval, out_params)
Ejemplo n.º 14
0
 def cim_method_foomethod(self, env, object_name, method, param_i, param_s):
     out_params = {}
     out_params['i'] = pywbem.Sint32(-param_i)
     out_params['sa'] = ['some', 'string', 'array']
     rval = 'executed on %s. s: %s' % ( ` object_name `, param_s)
     return (rval, out_params)
Ejemplo n.º 15
0
class TestMethods(unittest.TestCase):

    limits = {
        'sint8_min': pywbem.Sint8(-128),
        'sint8_max': pywbem.Sint8(127),
        'sint16_min': pywbem.Sint16(-32768),
        'sint16_max': pywbem.Sint16(32767),
        'sint32_min': pywbem.Sint32(-2147483648),
        'sint32_max': pywbem.Sint32(2147483647),
        'sint64_min': pywbem.Sint64(-92233736854775808L),
        'sint64_max': pywbem.Sint64(9223372036854775807L),
        'uint8_min': pywbem.Uint8(0),
        'uint8_max': pywbem.Uint8(0xFF),
        'uint16_min': pywbem.Uint16(0),
        'uint16_max': pywbem.Uint16(0xFFFF),
        'uint32_min': pywbem.Uint32(0),
        'uint32_max': pywbem.Uint32(0xFFFFFFFF),
        'uint64_min': pywbem.Uint64(0L),
        'uint64_max': pywbem.Uint64(0x7FFFFFFFFFFFFFFFL),
        'real32_min': pywbem.Real32(-123456.78),
        'real32_max': pywbem.Real32(123456.78),
        'real64_min': pywbem.Real64(-12345678987654.32),
        'real64_max': pywbem.Real64(12345678987654.32)
    }
    # note: the last Uint64 value should be 0xFFFFFFFFFFFFFFFF but there is a bug somewhere...

    inttypes = [
        'sint8', 'sint16', 'sint32', 'sint64', 'uint8', 'uint16', 'uint32',
        'uint64'
    ]

    realtypes = ['real32', 'real64']

    zeros = {
        'sint8': pywbem.Sint8(0),
        'sint16': pywbem.Sint16(0),
        'sint32': pywbem.Sint32(0),
        'sint64': pywbem.Sint64(0),
        'uint8': pywbem.Uint8(0),
        'uint16': pywbem.Uint16(0),
        'uint32': pywbem.Uint32(0),
        'uint64': pywbem.Uint64(0),
        'real32': pywbem.Real32(0),
        'real64': pywbem.Real64(0)
    }

    ones = {
        'sint8': pywbem.Sint8(1),
        'sint16': pywbem.Sint16(1),
        'sint32': pywbem.Sint32(1),
        'sint64': pywbem.Sint64(1),
        'uint8': pywbem.Uint8(1),
        'uint16': pywbem.Uint16(1),
        'uint32': pywbem.Uint32(1),
        'uint64': pywbem.Uint64(1),
        'real32': pywbem.Real32(0),
        'real64': pywbem.Real64(0)
    }

    tens = {
        'sint8': pywbem.Sint8(10),
        'sint16': pywbem.Sint16(10),
        'sint32': pywbem.Sint32(10),
        'sint64': pywbem.Sint64(10),
        'uint8': pywbem.Uint8(10),
        'uint16': pywbem.Uint16(10),
        'uint32': pywbem.Uint32(10),
        'uint64': pywbem.Uint64(10),
        'real32': pywbem.Real32(10),
        'real64': pywbem.Real64(10)
    }

    twenties = {
        'sint8': pywbem.Sint8(20),
        'sint16': pywbem.Sint16(20),
        'sint32': pywbem.Sint32(20),
        'sint64': pywbem.Sint64(20),
        'uint8': pywbem.Uint8(20),
        'uint16': pywbem.Uint16(20),
        'uint32': pywbem.Uint32(20),
        'uint64': pywbem.Uint64(20),
        'real32': pywbem.Real32(20),
        'real64': pywbem.Real64(20)
    }

    numlists = {
        'sint8': [
            pywbem.Sint8(8),
            pywbem.Sint8(2),
            pywbem.Sint8(5),
            pywbem.Sint8(6),
            pywbem.Sint8(3),
            pywbem.Sint8(9),
            pywbem.Sint8(7),
            pywbem.Sint8(1),
            pywbem.Sint8(4)
        ],
        'sint16': [
            pywbem.Sint16(8),
            pywbem.Sint16(2),
            pywbem.Sint16(5),
            pywbem.Sint16(6),
            pywbem.Sint16(3),
            pywbem.Sint16(9),
            pywbem.Sint16(7),
            pywbem.Sint16(1),
            pywbem.Sint16(4)
        ],
        'sint32': [
            pywbem.Sint32(8),
            pywbem.Sint32(2),
            pywbem.Sint32(5),
            pywbem.Sint32(6),
            pywbem.Sint32(3),
            pywbem.Sint32(9),
            pywbem.Sint32(7),
            pywbem.Sint32(1),
            pywbem.Sint32(4)
        ],
        'sint64': [
            pywbem.Sint64(8),
            pywbem.Sint64(2),
            pywbem.Sint64(5),
            pywbem.Sint64(6),
            pywbem.Sint64(3),
            pywbem.Sint64(9),
            pywbem.Sint64(7),
            pywbem.Sint64(1),
            pywbem.Sint64(4)
        ],
        'uint8': [
            pywbem.Uint8(8),
            pywbem.Uint8(2),
            pywbem.Uint8(5),
            pywbem.Uint8(6),
            pywbem.Uint8(3),
            pywbem.Uint8(9),
            pywbem.Uint8(7),
            pywbem.Uint8(1),
            pywbem.Uint8(4)
        ],
        'uint16': [
            pywbem.Uint16(8),
            pywbem.Uint16(2),
            pywbem.Uint16(5),
            pywbem.Uint16(6),
            pywbem.Uint16(3),
            pywbem.Uint16(9),
            pywbem.Uint16(7),
            pywbem.Uint16(1),
            pywbem.Uint16(4)
        ],
        'uint32': [
            pywbem.Uint32(8),
            pywbem.Uint32(2),
            pywbem.Uint32(5),
            pywbem.Uint32(6),
            pywbem.Uint32(3),
            pywbem.Uint32(9),
            pywbem.Uint32(7),
            pywbem.Uint32(1),
            pywbem.Uint32(4)
        ],
        'uint64': [
            pywbem.Uint64(8),
            pywbem.Uint64(2),
            pywbem.Uint64(5),
            pywbem.Uint64(6),
            pywbem.Uint64(3),
            pywbem.Uint64(9),
            pywbem.Uint64(7),
            pywbem.Uint64(1),
            pywbem.Uint64(4)
        ],
        'real32': [
            pywbem.Real32(8),
            pywbem.Real32(2),
            pywbem.Real32(5),
            pywbem.Real32(6),
            pywbem.Real32(3),
            pywbem.Real32(9),
            pywbem.Real32(7),
            pywbem.Real32(1),
            pywbem.Real32(4)
        ],
        'real64': [
            pywbem.Real64(8),
            pywbem.Real64(2),
            pywbem.Real64(5),
            pywbem.Real64(6),
            pywbem.Real64(3),
            pywbem.Real64(9),
            pywbem.Real64(7),
            pywbem.Real64(1),
            pywbem.Real64(4)
        ]
    }

    def _dbgPrint(self, msg=''):
        if self._verbose:
            if len(msg):
                print('\t -- %s --' % msg)
            else:
                print('')

    def setUp(self):
        unittest.TestCase.setUp(self)
        wconn = wbem_connection.wbem_connection()
        self.conn = wconn._WBEMConnFromOptions(_g_opts)
        for iname in self.conn.EnumerateInstanceNames('TestMethod'):
            self.conn.DeleteInstance(iname)
        self._verbose = _g_opts.verbose
        self._dbgPrint()

    def tearDown(self):
        unittest.TestCase.tearDown(self)
        for iname in self.conn.EnumerateInstanceNames('TestMethod'):
            self.conn.DeleteInstance(iname)

    def _run_and_validate_getrand(self,
                                  type,
                                  methodName,
                                  min,
                                  max,
                                  expectedReturnValue=None,
                                  minReturnValue=None,
                                  maxReturnValue=None):
        isRealType = False
        if type.startswith('real'):
            isRealType = True
        if isRealType:
            self._dbgPrint('Testing %s invocation with min=%f, max=%f' %
                           (methodName, min, max))
        else:
            self._dbgPrint('Testing %s invocation with min=%d, max=%d' %
                           (methodName, min, max))
        (rv, oparams) = self.conn.InvokeMethod(methodName,
                                               'TestMethod',
                                               min=min,
                                               max=max)
        if not oparams['success']:
            self.fail(
                '"Success" reported as false for invocation of method %s' %
                methodName)
        if expectedReturnValue is not None:
            if isRealType:
                self._dbgPrint(
                    'Verifying return value (%f) equal to expected return value %f...'
                    % (rv, expectedReturnValue))
                if abs(expectedReturnValue - rv) > real_tolerance:
                    self.fail(
                        'Return value not as expected for invocation of method %s'
                        % methodName)
            else:
                self._dbgPrint(
                    'Verifying return value (%d) equal to expected return value %d...'
                    % (rv, expectedReturnValue))
                if expectedReturnValue != rv:
                    self.fail(
                        'Return value not as expected for invocation of method %s'
                        % methodName)
            self._dbgPrint('Return value is as expected.')
        if minReturnValue is not None:
            if isRealType:
                self._dbgPrint('Verifying return value (%f) >= %f' %
                               (rv, minReturnValue))
            else:
                self._dbgPrint('Verifying return value (%d) >= %d' %
                               (rv, minReturnValue))
            if rv < minReturnValue:
                self.fail(
                    'Return value less than expected for invocation of method %s'
                    % methodName)
            self._dbgPrint('Return value is as expected.')
        if maxReturnValue is not None:
            if isRealType:
                self._dbgPrint('Verifying return value (%f) <= %f' %
                               (rv, maxReturnValue))
            else:
                self._dbgPrint('Verifying return value (%d) <= %d' %
                               (rv, maxReturnValue))
            if rv > maxReturnValue:
                self.fail(
                    'Return value greater than expected for invocation of method %s'
                    % methodName)
            self._dbgPrint('Return value is as expected.')

    def _run_and_validate_getrandlist(self, type, methodName, min, max,
                                      nelems):
        isRealType = False
        if type.startswith('real'):
            isRealType = True
        if isRealType:
            self._dbgPrint('Testing %s invocation with min=%f, max=%f' %
                           (methodName, min, max))
        else:
            self._dbgPrint('Testing %s invocation with min=%d, max=%d' %
                           (methodName, min, max))
        (rv, oparams) = self.conn.InvokeMethod(methodName,
                                               'TestMethod',
                                               lo=min,
                                               hi=max,
                                               nelems=nelems)
        if not rv:
            self.fail('Invocation of %s returned false success value.' %
                      methodName)
        self._dbgPrint('Invocation of %s returned successfully.' % methodName)
        if isRealType:
            self._dbgPrint('Validating lo (%f) and hi (%f) outparams...' %
                           (min, max))
            if abs(oparams['lo'] - min) > real_tolerance:
                self.fail(
                    'Returned low range value (%f) not equal to specified value (%f).'
                    % (oparams['lo'], min))
            if abs(oparams['hi'] - max) > real_tolerance:
                self.fail(
                    'Returned high range value (%f) not equal to specified value (%f).'
                    % (oparams['hi'], max))
        else:
            self._dbgPrint('Validating lo (%d) and hi (%d) outparams...' %
                           (min, max))
            if oparams['lo'] != min:
                self.fail(
                    'Returned low range value (%d) not equal to specified value (%d).'
                    % (oparams['lo'], min))
            if oparams['hi'] != max:
                self.fail(
                    'Returned high range value (%d) not equal to specified value (%d).'
                    % (oparams['hi'], max))
        self._dbgPrint('Lo and hi outparams validated successfully.')
        self._dbgPrint('Validating random list values...')
        if oparams['nlist'] is None:
            self.fail('Expected a list of values but got none.')
        if len(oparams['nlist']) != nelems:
            self.fail('Expected a list of %d items but got %d items instead.' %
                      (nelems, len(oparams['nlist'])))
        minkey = '%s_min' % type
        maxkey = '%s_max' % type
        for num in oparams['nlist']:
            if num < TestMethods.limits[minkey] or \
                    num > TestMethods.limits[maxkey]:
                if isRealType:
                    self.fail(
                        'List element %f not in expected range for type %s.' %
                        (num, type))
                else:
                    self.fail(
                        'List element %d not in expected range for type %s.' %
                        (num, type))
        self._dbgPrint('Random list values validated successfully.')

    def _run_and_validate_minmedmax(self, type, methodName, numlist):
        self._dbgPrint('Testing %s invocation' % methodName)
        (rv, oparams) = self.conn.InvokeMethod(methodName,
                                               'TestMethod',
                                               numlist=numlist)
        if not rv:
            self.fail('Invocation of %s returned false success value.' %
                      methodName)
        self._dbgPrint('Invocation of %s returned successfully.' % methodName)
        self._dbgPrint('Validating min, median, and max outparams...')
        if oparams['min'] != 1:
            self.fail('Expected min of 1 but instead got %d' % oparams['min'])
        if oparams['max'] != 9:
            self.fail('Expected max of 9 but instead got %d' % oparams['max'])
        if oparams['med'] != 5:
            self.fail('Expected median of 5 but instead got %d' %
                      oparams['med'])
        self._dbgPrint('Min, median, and max values validated successfully.')

    def _run_numeric_type_tests(self, typelist):
        gr = self._run_and_validate_getrand
        grl = self._run_and_validate_getrandlist
        mmm = self._run_and_validate_minmedmax
        for type in typelist:
            method = 'genRand_%s' % type
            minkey = '%s_min' % type
            maxkey = '%s_max' % type
            min = TestMethods.limits[minkey]
            max = TestMethods.limits[maxkey]
            gr(type, method, min, max, None, min, max)
            gr(type, method, min, min, min)
            gr(type, method, max, max, max)
            if min != 0:
                gr(type, method, TestMethods.zeros[type],
                   TestMethods.zeros[type], TestMethods.zeros[type])
            gr(type, method, TestMethods.tens[type],
               TestMethods.twenties[type], None, TestMethods.tens[type],
               TestMethods.twenties[type])
            # the next two should cause exceptions; getting a TypeError exception is not an error in this case.
            try:
                gr(type, method, min - 1, min - 1, min - 1)
            except TypeError:
                pass
            try:
                gr(type, method, max + 1, max + 1, max + 1)
            except TypeError:
                pass

            method = 'genRandList_%s' % type
            nelems = _typed_randrange(TestMethods.tens[type],
                                      TestMethods.twenties[type], type)
            grl(type, method, min, max, nelems)
            grl(type, method, min, max, TestMethods.ones[type])
            grl(type, method, min, max, TestMethods.zeros[type])
            if min != 0:
                grl(type, method, TestMethods.zeros[type], max, nelems)
            else:
                grl(type, method, min, TestMethods.zeros[type], nelems)
            grl(type, method, TestMethods.tens[type],
                TestMethods.twenties[type], nelems)
            grl(type, method, TestMethods.tens[type],
                TestMethods.twenties[type], TestMethods.ones[type])
            grl(type, method, TestMethods.tens[type],
                TestMethods.twenties[type], TestMethods.zeros[type])

            method = 'minmedmax_%s' % type
            mmm(type, method, TestMethods.numlists[type])

    def test_integer_types(self):
        self._run_numeric_type_tests(TestMethods.inttypes)

    def test_real_types(self):
        self._run_numeric_type_tests(TestMethods.realtypes)

    def test_refs(self):
        inst = pywbem.CIMInstance('TestMethod',
                                  properties={
                                      'id': 'one',
                                      'p_str': 'One',
                                      'p_sint32': pywbem.Sint32(1)
                                  })
        self.conn.CreateInstance(inst)

        iname = pywbem.CIMInstanceName('TestMethod',
                                       namespace='root/cimv2',
                                       keybindings={'id': 'one'})
        rv, outs = self.conn.InvokeMethod('getStrProp', iname)
        self.assertEquals(rv, 'One')

        rv, outs = self.conn.InvokeMethod('setStrProp', iname, value='won')
        self.assertFalse(outs)
        self.assertEquals(rv, 'One')
        rv, outs = self.conn.InvokeMethod('getStrProp', iname)
        self.assertEquals(rv, 'won')
        inst = self.conn.GetInstance(iname)
        self.assertEquals(inst['p_str'], 'won')

        rv, outs = self.conn.InvokeMethod('getIntProp', iname)
        self.assertEquals(rv, 1)
        self.assertTrue(isinstance(rv, pywbem.Sint32))
        self.assertEquals(inst['p_sint32'], 1)
        rv, outs = self.conn.InvokeMethod('setIntProp',
                                          iname,
                                          value=pywbem.Sint32(2))
        self.assertTrue(isinstance(rv, pywbem.Sint32))
        self.assertEquals(rv, 1)
        self.assertFalse(outs)
        rv, outs = self.conn.InvokeMethod('getIntProp', iname)
        self.assertEquals(rv, 2)
        self.assertTrue(isinstance(rv, pywbem.Sint32))
        inst = self.conn.GetInstance(iname)
        self.assertEquals(inst['p_sint32'], 2)

        rv, outs = self.conn.InvokeMethod('getObjectPath', 'TestMethod')
        self.assertTrue(isinstance(outs['path'], pywbem.CIMInstanceName))
        self.assertEquals(outs['path']['id'], 'one')

        inst = pywbem.CIMInstance('TestMethod',
                                  properties={
                                      'id': 'two',
                                      'p_str': 'Two',
                                      'p_sint32': pywbem.Sint32(2)
                                  })
        self.conn.CreateInstance(inst)

        rv, outs = self.conn.InvokeMethod('getObjectPaths', 'TestMethod')
        self.assertEquals(len(outs['paths']), 2)
        self.assertTrue(isinstance(outs['paths'][0], pywbem.CIMInstanceName))
        to_delete = outs['paths']

        inst = pywbem.CIMInstance('TestMethod',
                                  properties={
                                      'id': 'three',
                                      'p_str': 'Three',
                                      'p_sint32': pywbem.Sint32(3)
                                  })
        self.conn.CreateInstance(inst)

        iname = pywbem.CIMInstanceName('TestMethod',
                                       namespace='root/cimv2',
                                       keybindings={'id': 'three'})

        inames = self.conn.EnumerateInstanceNames('TestMethod')
        self.assertEquals(len(inames), 3)
        rv, outs = self.conn.InvokeMethod('delObject',
                                          'TestMethod',
                                          path=iname)

        inames = self.conn.EnumerateInstanceNames('TestMethod')
        self.assertEquals(len(inames), 2)

        self.conn.CreateInstance(inst)
        '''  # OpenWBEM is broken!  uncomment this for Pegasus.  '''
        rv, outs = self.conn.InvokeMethod('delObjects',
                                          'TestMethod',
                                          paths=to_delete)

        inames = self.conn.EnumerateInstanceNames('TestMethod')
        self.assertEquals(len(inames), 1)
        self.assertEquals(inames[0]['id'], 'three')

    def test_mkUniStr_sint8(self):
        s = 'Scrum Rocks!'
        l = [pywbem.Sint8(ord(x)) for x in s]
        rv, outs = self.conn.InvokeMethod('mkUniStr_sint8',
                                          'TestMethod',
                                          cArr=l)
        self.assertFalse(outs)
        self.assertEquals(rv, s)
        rv, outs = self.conn.InvokeMethod('mkUniStr_sint8',
                                          'TestMethod',
                                          cArr=[])
        self.assertEquals(rv, '')

    def test_strCat(self):
        ra = ['one', 'two', 'three', 'four']
        rv, outs = self.conn.InvokeMethod('strCat',
                                          'TestMethod',
                                          strs=ra,
                                          sep=',')
        self.assertEquals(rv, ','.join(ra))
        self.assertFalse(outs)

    def test_strSplit(self):
        ra = 'one,two,three,four'
        rv, outs = self.conn.InvokeMethod('strSplit',
                                          'TestMethod',
                                          str=ra,
                                          sep=',')
        self.assertEquals(outs['elems'], ra.split(','))
        self.assertTrue(ra)

    def test_getDate(self):
        dt = pywbem.CIMDateTime.now()
        rv, outs = self.conn.InvokeMethod('getDate',
                                          'TestMethod',
                                          datestr=str(dt))
        self.assertFalse(outs)
        self.assertEquals(rv, dt)
        self.assertEquals(str(rv), str(dt))
        self.assertTrue(isinstance(rv, pywbem.CIMDateTime))

    def test_getDates(self):
        dt = pywbem.CIMDateTime.now()
        s1 = str(dt)
        ra = [s1]
        dt = pywbem.CIMDateTime(pywbem.datetime.now() + \
                pywbem.timedelta(seconds=10))
        s2 = str(dt)
        ra.append(s2)
        dt = pywbem.CIMDateTime(pywbem.datetime.now() + \
                pywbem.timedelta(seconds=10))
        s3 = str(dt)
        ra.append(s3)

        rv, outs = self.conn.InvokeMethod('getDates',
                                          'TestMethod',
                                          datestrs=ra)
        self.assertTrue(rv)
        self.assertTrue(isinstance(rv, bool))
        self.assertEquals(outs['nelems'], len(ra))
        self.assertTrue(isinstance(outs['nelems'], pywbem.Sint32))

        for i in range(0, len(ra)):
            self.assertTrue(isinstance(outs['elems'][i], pywbem.CIMDateTime))
            self.assertEquals(str(outs['elems'][i]), ra[i])

    def test_minmedmax(self):
        for tstr in [
                'Sint8', 'Uint8', 'Sint16', 'Uint16', 'Sint32', 'Uint32',
                'Sint64', 'Uint64', 'Real32', 'Real64'
        ]:
            dt = getattr(pywbem, tstr)
            method = 'minmedmax_%s' % tstr
            numlist = [
                dt(2),
                dt(5),
                dt(8),
                dt(1),
                dt(9),
                dt(6),
                dt(4),
                dt(7),
                dt(3),
            ]
            rv, outs = self.conn.InvokeMethod(method,
                                              'TestMethod',
                                              numlist=numlist)
            self.assertTrue(rv)
            self.assertTrue(isinstance(rv, bool))
            self.assertTrue(isinstance(outs['min'], dt))
            self.assertTrue(isinstance(outs['med'], dt))
            self.assertTrue(isinstance(outs['max'], dt))
            self.assertEquals(outs['min'], 1)
            self.assertEquals(outs['max'], 9)
            self.assertEquals(outs['med'], 5)
Ejemplo n.º 16
0
    def test_refs(self):
        inst = pywbem.CIMInstance('TestMethod',
                                  properties={
                                      'id': 'one',
                                      'p_str': 'One',
                                      'p_sint32': pywbem.Sint32(1)
                                  })
        self.conn.CreateInstance(inst)

        iname = pywbem.CIMInstanceName('TestMethod',
                                       namespace='root/cimv2',
                                       keybindings={'id': 'one'})
        rv, outs = self.conn.InvokeMethod('getStrProp', iname)
        self.assertEquals(rv, 'One')

        rv, outs = self.conn.InvokeMethod('setStrProp', iname, value='won')
        self.assertFalse(outs)
        self.assertEquals(rv, 'One')
        rv, outs = self.conn.InvokeMethod('getStrProp', iname)
        self.assertEquals(rv, 'won')
        inst = self.conn.GetInstance(iname)
        self.assertEquals(inst['p_str'], 'won')

        rv, outs = self.conn.InvokeMethod('getIntProp', iname)
        self.assertEquals(rv, 1)
        self.assertTrue(isinstance(rv, pywbem.Sint32))
        self.assertEquals(inst['p_sint32'], 1)
        rv, outs = self.conn.InvokeMethod('setIntProp',
                                          iname,
                                          value=pywbem.Sint32(2))
        self.assertTrue(isinstance(rv, pywbem.Sint32))
        self.assertEquals(rv, 1)
        self.assertFalse(outs)
        rv, outs = self.conn.InvokeMethod('getIntProp', iname)
        self.assertEquals(rv, 2)
        self.assertTrue(isinstance(rv, pywbem.Sint32))
        inst = self.conn.GetInstance(iname)
        self.assertEquals(inst['p_sint32'], 2)

        rv, outs = self.conn.InvokeMethod('getObjectPath', 'TestMethod')
        self.assertTrue(isinstance(outs['path'], pywbem.CIMInstanceName))
        self.assertEquals(outs['path']['id'], 'one')

        inst = pywbem.CIMInstance('TestMethod',
                                  properties={
                                      'id': 'two',
                                      'p_str': 'Two',
                                      'p_sint32': pywbem.Sint32(2)
                                  })
        self.conn.CreateInstance(inst)

        rv, outs = self.conn.InvokeMethod('getObjectPaths', 'TestMethod')
        self.assertEquals(len(outs['paths']), 2)
        self.assertTrue(isinstance(outs['paths'][0], pywbem.CIMInstanceName))
        to_delete = outs['paths']

        inst = pywbem.CIMInstance('TestMethod',
                                  properties={
                                      'id': 'three',
                                      'p_str': 'Three',
                                      'p_sint32': pywbem.Sint32(3)
                                  })
        self.conn.CreateInstance(inst)

        iname = pywbem.CIMInstanceName('TestMethod',
                                       namespace='root/cimv2',
                                       keybindings={'id': 'three'})

        inames = self.conn.EnumerateInstanceNames('TestMethod')
        self.assertEquals(len(inames), 3)
        rv, outs = self.conn.InvokeMethod('delObject',
                                          'TestMethod',
                                          path=iname)

        inames = self.conn.EnumerateInstanceNames('TestMethod')
        self.assertEquals(len(inames), 2)

        self.conn.CreateInstance(inst)
        '''  # OpenWBEM is broken!  uncomment this for Pegasus.  '''
        rv, outs = self.conn.InvokeMethod('delObjects',
                                          'TestMethod',
                                          paths=to_delete)

        inames = self.conn.EnumerateInstanceNames('TestMethod')
        self.assertEquals(len(inames), 1)
        self.assertEquals(inames[0]['id'], 'three')
Ejemplo n.º 17
0
    def cim_method_methodtest(self, env, object_name, method, param_paths,
                              param_embedded, param_nullparam,
                              param_uint8array, param_s, param_embedded_a,
                              param_io16):
        """Implements Py_LotsOfDataTypes.MethodTest()

        Keyword arguments:
        env -- Provider Environment
        object_name -- A CIMInstanceName or CIMCLassName specifying the 
            object on which the method %(mname)s should be invoked
        method -- A CIMMethod representing the method meta-data
        param_paths --  The input parameter paths (type REF CIM_System (CIMInstanceName)[]) 
        param_embedded --  The input parameter embedded (type string) 
        param_nullparam --  The input parameter nullParam (type datetime) 
        param_uint8array --  The input parameter uint8array (type uint8[]) 
        param_s --  The input parameter s (type string) (Required)
        param_embedded_a --  The input parameter embedded_a (type string[]) 
        param_io16 --  The input parameter io16 (type sint16) 

        Returns a two-tuple containing the return value (type string)
        and a dictionary with the out-parameters

        Output parameters:
        paths -- (type REF CIM_System (CIMInstanceName)[]) 
        b -- (type boolean) 
        embedded -- (type string) 
        nullParam -- (type datetime) 
        embedded_a -- (type string[]) 
        io16 -- (type sint16) 
        r64 -- (type real64) 
        msg -- (type string) 

        """

        # TODO do something
        insts = [
            pywbem.CIMInstance(classname='PyFoo',
                               properties={
                                   'FooValue': pywbem.Sint32(3),
                                   'FooKey': 'Key3'
                               },
                               path=pywbem.CIMInstanceName(
                                   classname='PyFoo', namespace='root/cimv2')),
            pywbem.CIMInstance(classname='PyFoo',
                               properties={
                                   'FooValue': pywbem.Sint32(2),
                                   'FooKey': 'Key2'
                               },
                               path=pywbem.CIMInstanceName(
                                   classname='PyFoo', namespace='root/cimv2'))
        ]

        out_params = {}
        out_params['paths'] = param_paths
        out_params['b'] = True
        if param_embedded is not None:
            out_params['embedded'] = param_embedded
        else:
            out_params['embedded'] = insts[0]
        out_params['nullparam'] = None
        if param_embedded_a is not None:
            out_params['embedded_a'] = param_embedded_a
        else:
            out_params['embedded_a'] = insts
        out_params['io16'] = pywbem.Sint16(16)
        out_params['r64'] = pywbem.Real64(3.14159)
        out_params['msg'] = 'A message'
        rval = 'Return' + ` out_params `
        return (rval, out_params)
Ejemplo n.º 18
0
def _create_test_instance(ch, name_of_atom, number, time):
    """ Create a TestAtom instance.  """
    global _inst_paths

    new_instance = pywbem.CIMInstance('TestAtom')
    new_instance['Name'] = name_of_atom
    new_instance['boolProp'] = False
    #new_instance['char16Prop']  =
    #new_instance['char16Propa'] = Null
    new_instance['dateProp'] = time
    new_instance['real32Prop'] = pywbem.Real32(number)
    #new_instance['real32Propa'] = pywbem.CIMProperty('Real32Propa', \ type='Real32', is_array=True, value=None)
    new_instance['real32Propa']  = [pywbem.Real32(number), \
                                    pywbem.Real32(number), \
                                    pywbem.Real32(number)]
    new_instance['real64Prop'] = pywbem.Real64(number)
    new_instance['real64Propa']  = [pywbem.Real64(number), \
                                    pywbem.Real64(number), \
                                    pywbem.Real64(number)]
    new_instance['sint16Prop'] = pywbem.Sint16(number)
    new_instance['sint16Propa']  = [pywbem.Sint16(number), \
                                    pywbem.Sint16(number), \
                                    pywbem.Sint16(number)]
    new_instance['sint32Prop'] = pywbem.Sint32(number)
    new_instance['sint32Propa']  = [pywbem.Sint32(number), \
                                    pywbem.Sint32(number), \
                                    pywbem.Sint32(number)]
    new_instance['sint64Prop'] = pywbem.Sint64(number)
    new_instance['sint64Propa']  = [pywbem.Sint64(number), \
                                    pywbem.Sint64(number), \
                                    pywbem.Sint64(number)]
    new_instance['sint8prop'] = pywbem.Sint8(number)
    new_instance['sint8Propa']   = [pywbem.Sint8(number), \
                                    pywbem.Sint8(number), \
                                    pywbem.Sint8(number)]
    new_instance['stringProp'] = name_of_atom
    new_instance['stringPropa'] = ['proton', 'electron', 'neutron']
    new_instance['uint16Prop'] = pywbem.Uint16(number)
    new_instance['uint16Propa']  = [pywbem.Uint16(number), \
                                    pywbem.Uint16(number), \
                                    pywbem.Uint16(number)]
    new_instance['uint32Prop'] = pywbem.Uint32(number)
    new_instance['uint32Propa']  = [pywbem.Uint32(number), \
                                    pywbem.Uint32(number), \
                                    pywbem.Uint32(number)]
    new_instance['uint64Prop'] = pywbem.Uint64(number)
    new_instance['uint64Propa']  = [pywbem.Uint64(number), \
                                    pywbem.Uint64(number), \
                                    pywbem.Uint64(number)]
    new_instance['uint8Prop'] = pywbem.Uint8(number)
    new_instance['uint8Propa']   = [pywbem.Uint8(number), \
                                    pywbem.Uint8(number), \
                                    pywbem.Uint8(number)]

    try:
        msg = ''
        cipath = ch.CreateInstance(new_instance)
        new_instance.path = cipath
        _inst_paths.append(cipath)

    except pywbem.CIMError, arg:
        raise