def test_143596(self):
        # Cluster shared volumes are different than cluster disks
        # the status will be a string, not an int
        results = load_pickle_file(self, 'ClusterDataSourcePlugin_onSuccess_210137')[0]
        config = Mock()
        datasources = []
        for line in results.stdout:
            component = line.split('|')[0]
            datasource = Mock(
                params={
                    'eventlog': sentinel.eventlog,
                    'contexttitle': 'device',
                    'ownernode': 'IS-HVDRCL03-H04',
                    'cluster': 'IS-HVDRCL03.tcy.prv'
                },
                datasource='DataSource',
                component=component)
            datasources.append(datasource)

        config.datasources = datasources
        config.id = 'IS-HVDRCL03.tcy.prv'
        data = self.plugin.onSuccess(results, config)
        for k, v in RESULTS_143596.iteritems():
            self.assertEquals(data['values'][k]['freespace'], v)
            self.assertEquals(data['values'][k]['state'], 2)
        csvs = set(RESULTS_143596.keys())
        evts = [evt for evt in data['events'] if evt.get('component', '') in csvs]
        for evt in evts:
            self.assertEquals(
                evt['summary'],
                'Last state of component device was Online')
Beispiel #2
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     self.assertFalse(hasattr(self.results['Win32_ComputerSystem'][0], 'Name'))
     self.assertFalse(hasattr(self.results['Win32_ComputerSystem'][0], 'PrimaryOwnerName'))
     self.assertFalse(hasattr(self.results['Win32_ComputerSystem'][0], 'Caption'))
     self.assertFalse(hasattr(self.results['Win32_ComputerSystem'][0], 'DomainRole'))
     self.assertEquals(data[0].snmpDescr, 'Microsoft Windows Server 2016 Standard')
     self.assertEquals(data[0].snmpSysName, 'WIN2016-KDC-01')
     self.assertTrue(data[0].domain_controller)
 def testZPS1279(self):
     data = self.plugin.process(StringAttributeObject(), self.results, Mock())
     self.assertEquals(len(data.maps), 2)
     self.assertEquals(data.maps[0].serialNumber, '')
     self.assertEquals(data.maps[0].id, 'SCSI_DISK_VEN_VMWARE_PROD_VIRTUAL_DISK_4_3B5019BE_0_000000')
     self.assertEquals(data.maps[0].partitions, 2)
     self.assertEquals(data.maps[0].disk_ids, ['\\\\.\\PHYSICALDRIVE0',
                                               'SCSI\\DISK&VEN_VMWARE&PROD_VIRTUAL_DISK\\4&3B5019BE&0&000000'])
     self.assertEquals(data.maps[1].size, 0)
Beispiel #4
0
 def test_process(self):
     results = Mock(get=lambda *_: [DiskObject1(), DiskObject2()])
     data = self.plugin.process(StringAttributeObject(), results, Mock())
     self.assertEquals(len(data.maps), 4)
     d3 = data.maps[3]
     self.assertEquals(d3.blockSize, 100)
     self.assertEquals(d3.maxNameLen, 100)
     self.assertEquals(d3.drivetype, 'network drive')
     self.assertEquals(d3.mediatype, 'Fixed hard disk media')
     self.assertEquals(
         d3.mount, 'Name (Serial Number: VolumeSerialNumber) - VolumeName')
     self.assertEquals(d3.perfmonInstance, '\\LogicalDisk(Name)')
     self.assertEquals(d3.storageDevice, 'Name')
     self.assertEquals(
         d3.title, 'Name (Serial Number: VolumeSerialNumber) - VolumeName')
     self.assertEquals(d3.totalBlocks, 1)
     self.assertEquals(d3.totalFiles, 0)
     self.assertEquals(d3.type, 'FileSystem')
class TestServiceDataSourcePlugin(BaseTestCase):
    def setUp(self):
        self.success = load_pickle(self, 'results')
        self.config = load_pickle(self, 'config')
        self.plugin = ServicePlugin()
        self.context = {
            'modes': ['Auto'],
            'mode': 'Auto',
            'monitor': True,
            'severity': 3,
            'manual': False,
            'alertifnot': 'Running',
        }

        self.ds = [
            MagicMock(
                params={
                    'eventlog': sentinel.eventlog,
                    'winservices': self.context,
                    'usermonitor': False,
                    'servicename': 'aspnet_state',
                    'severity': 3,
                    'alertifnot': 'Running'
                })
        ]

    def test_onSuccess(self):
        data = self.plugin.onSuccess(
            self.success, MagicMock(
                id=sentinel.id,
                datasources=self.ds,
            ))
        self.assertEquals(len(data['events']), 2)
        self.assertEquals(
            data['events'][0]['summary'],
            'Service Alert: aspnet_state has changed to Stopped state')
        self.assertEquals(
            data['events'][1]['summary'],
            'Windows Service Check: successful service collection')

    @patch(
        'ZenPacks.zenoss.Microsoft.Windows.datasources.ServiceDataSource.log',
        Mock())
    def test_onError(self):
        f = None
        try:
            f = Failure('foo')
        except TypeError:
            f = Failure()
        data = self.plugin.onError(
            f, MagicMock(
                id=sentinel.id,
                datasources=self.ds,
            ))
        self.assertEquals(len(data['events']), 1)
        self.assertEquals(data['events'][0]['severity'], 4)
 def test_sql_no_counters(self):
     parms = load_pickle_file(self, 'ShellDataSourcePlugin_onSuccess_185726')[0]
     stdout = [u'db01 :counter: databasestatus :value: Normal',
               u'master :counter: databasestatus :value: Normal',
               u'msdb :counter: databasestatus :value: Normal',
               u'tempdb :counter: databasestatus :value: Normal',
               u'model :counter: databasestatus :value: Normal']
     sql_config = Mock()
     sql_config.datasources = parms[1]
     sql_config.id = sql_config.datasources[0].device
     results = (parms[0], parms[1], CommandResponse(stdout, [], 0))
     data = self.plugin.onSuccess(results, sql_config)
     self.assertEquals(len(data['values']), 5)
     self.assertEquals(len(data['events']), 15)
     # we should see status of databases even if no counters are returned.
     for x in xrange(5):
         self.assertEquals('The database is available.', data['events'][x]['message'])
     for x in xrange(5, 10):
         self.assertEquals(
             'winrs: successful collection', data['events'][x]['summary'])
Beispiel #7
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     self.assertEquals(len(data.maps), 15)
     for i in data.maps:
         self.assertTrue(i.supports_WorkingSetPrivate)
         self.assertTrue(
             i.id.startswith(
                 'zport_dmd_Processes_Zenoss_osProcessClasses_WIN_'))
         self.assertEquals(i.setOSProcessClass,
                           '/Processes/Zenoss/osProcessClasses/WIN')
         self.assertEquals(i.displayName, i.monitoredProcesses[0])
Beispiel #8
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     self.assertEquals(data.maps[0].id, 'Destination_24')
     self.assertEquals(data.maps[0].routemask, 24)
     self.assertEquals(data.maps[0].routeproto, 'local')
     self.assertEquals(data.maps[0].routetype, 'indirect')
     self.assertEquals(data.maps[0].setInterfaceIndex, 'InterfaceIndex')
     self.assertEquals(data.maps[0].setNextHopIp, 'NextHop')
     self.assertEquals(data.maps[0].setTarget, data.maps[0].title, 'Destination/24')
     for i in range(1, 5):
         self.assertEquals(getattr(data.maps[0], 'metric%d' % i), 'Metric%d' % i)
Beispiel #9
0
 def setUp(self):
     self.plugin = OperatingSystem()
     self.device = StringAttributeObject()
     self.results = StringAttributeObject()
     self.results.MSCluster = ()
     self.results.Win32_SystemEnclosure = [StringAttributeObject()]
     self.results.Win32_ComputerSystem = [StringAttributeObject({'blah': 'blah'})]
     self.results.Win32_OperatingSystem = [StringAttributeObject()]
     self.results.exchange_version = Mock(stdout=['15'])
     self.results.ActiveDirectory = [StringAttributeObject()]
     for k in ('TotalVisibleMemorySize', 'TotalVirtualMemorySize'):
         setattr(self.results.Win32_OperatingSystem[0], k, 1)
Beispiel #10
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     self.assertEquals(data.maps[0].id, 'Microsoft Report Viewer _ Visual Studio 2013')
     self.assertEquals(data.maps[0].setProductKey.args, ('Microsoft Report Viewer _ Visual Studio 2013', 'Microsoft Corporation'))
     self.assertEquals(data.maps[1].id, 'Visual Studio 2013_ Microsoft Report Viewer')
     self.assertEquals(data.maps[1].setProductKey.args, ('Visual Studio 2013_ Microsoft Report Viewer', 'Microsoft Corporation'))
     self.assertEquals(data.maps[2].id, 'Soft x86 - 1.0.0')
     self.assertEquals(data.maps[2].setInstallDate, '1970/01/01 00:00:00')
     self.assertTupleEqual(data.maps[2].setProductKey.args, ('Soft x86 - 1.0.0', 'Sunway Systems'))
     self.assertTupleEqual(data.maps[3].setProductKey.args, ('Soft x86 - 1.0.0', 'Unknown'))
     self.assertFalse(hasattr(data.maps[4], 'setInstallDate'))
     self.assertEquals(len(data.maps), 5)
 def test_nagios_parser(self):
     # OK status from Nagios and 4 datapoints
     # OK - no errors or warnings|default_lines=10 default_warnings=0 default_criticals=0 default_unknowns=0
     win_results = load_pickle_file(self, 'ShellDataSourcePlugin_onSuccess_141718')[0]
     nagios_ok = Mock()
     nagios_ok.datasources = win_results[1]
     nagios_ok.id = nagios_ok.datasources[0].device
     data = self.plugin.onSuccess(win_results, nagios_ok)
     self.assertEquals(len(data['values'][None]), 4)
     self.assertEquals(data['values'][None]['default_criticals'], (0.0, 'N'))
     self.assertEquals(len(data['events']), 8)
     self.assertEquals(data['events'][0]['severity'], 0)
     # now test nagios with a CRITICAL return code and exit_code of 2
     # CRITICAL - (11 errors) - testing ...|default_lines=12 default_warnings=0 default_criticals=11 default_unknowns=0
     # we should see datapoints and a ZenEventClasses.Critical event
     win_results = load_pickle_file(self, 'ShellDataSourcePlugin_onSuccess_143352')[0]
     nagios_critical = Mock()
     win_results[1][0].eventClass = '/Status/Nagios/Test'
     nagios_critical.datasources = win_results[1]
     nagios_critical.id = nagios_critical.datasources[0].device
     data = self.plugin.onSuccess(win_results, nagios_critical)
     self.assertEquals(len(data['values'][None]), 4)
     self.assertEquals(data['values'][None]['default_criticals'], (11.0, 'N'))
     self.assertEquals(len(data['events']), 8)
     self.assertEquals(data['events'][0]['severity'], 5)
     self.assertEquals(data['events'][0]['eventClass'], '/Status/Nagios/Test')
Beispiel #12
0
 def test_process_sys_name_unknown(self):
     device = Mock()
     device.id = 'win_device'
     device.snmpSysName = ''
     device.manageIp = '8.8.8.8'
     data = self.plugin.process(device, {}, Mock())
     self.assertEquals(data[0].snmpSysName, 'Unknown')
Beispiel #13
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     self.assertEquals(data[0].ip_and_hostname, ['8.8.8.8', 'FQDN'])
     self.assertEquals(data[0].domain_controller, False)
     self.assertEquals(data[0].msexchangeversion, 'MSExchange2013IS')
     self.assertEquals(data[0].setClusterMachines, [])
     self.assertEquals(data[0].snmpContact, 'PrimaryOwnerName')
     self.assertEquals(data[0].snmpDescr, 'Caption')
     self.assertEquals(data[0].snmpSysName, 'Name')
     self.assertEquals(data[1].serialNumber, 'SerialNumber')
     self.assertEquals(data[1].tag, 'Tag')
     self.assertEquals(data[1].totalMemory, 1024)
     self.assertEquals(data[2].totalSwap, 1024)
Beispiel #14
0
 def test_onSuccess(self):
     datasources = load_pickle_file(self, 'cluster_datasources')
     results = load_pickle_file(
         self, 'ClusterDataSourcePlugin_onSuccess_161027')[0]
     config = Mock()
     config.datasources = datasources
     config.id = datasources[0].device
     data = self.plugin.onSuccess(results, config)
     self.assertEquals(len(data['values']), 22)
     for comp, value in RESULTS.iteritems():
         try:
             num = int(value)
             value = cluster_disk_state_string(num)
             self.assertEquals(data['values'][comp]['state'], num)
         except Exception:
             self.assertEquals(data['values'][comp]['state'][0],
                               cluster_state_value(value),
                               'found {}'.format(value))
     self.assertEquals(len(data['events']), 27)
     # 24989663232 is the freespace in the pickle file
     self.assertEquals(
         data['values']['860caaf4-595a-44e6-be70-285a9bb3733d']
         ['freespace'], 24989663232)
Beispiel #15
0
    def test_process(self):
        data = self.plugin.process(self.device, RESULTS, Mock())
        self.assertEquals(len(data), 5)
        self.assertEquals(data[0].sqlhostname, 'dbhost0')

        # import pdb
        # pdb.set_trace()
        self.assertEquals(data[0].sqlhostname, 'dbhost0')

        self.assertEquals(data[1].maps[0].title, 'RTC')
        self.assertEquals(data[1].maps[0].instancename, 'RTC')

        self.assertEquals(data[2].maps[0].id, 'RTC$instancertc_rtc')
        self.assertEquals(data[2].maps[0].devicetype, 'Disk')
        self.assertEquals(data[2].maps[0].instancename, 'RTC$instance')
        self.assertEquals(data[2].maps[0].physicallocation,
                          'c:\\Backup\\rtc.bak')
        self.assertEquals(data[2].maps[0].status, 'Existing')
        self.assertEquals(data[2].maps[0].title, 'rtc_rtc')

        self.assertEquals(data[3].maps[0].cluster_node_server,
                          '//dbhost0\\RTC')
        self.assertEquals(data[3].maps[0].datecreated,
                          ' 5/26/2014 00:00:01 PM')
        self.assertEquals(data[3].maps[0].description,
                          'No description available.')
        self.assertEquals(data[3].maps[0].enabled, 'Yes')
        self.assertEquals(data[3].maps[0].id,
                          'aaee26a6-7970-4ffb-be57-cd49d0084c2d')
        self.assertEquals(data[3].maps[0].instancename, 'RTC$instance')
        self.assertEquals(data[3].maps[0].jobid,
                          'aaee26a6-7970-4ffb-be57-cd49d0084c2d')
        self.assertEquals(data[3].maps[0].title, 'syspolicy_purge_history')
        self.assertEquals(data[3].maps[0].username, 'sa')

        self.assertEquals(data[4].maps[0].cluster_node_server,
                          '//dbhost0\\RTC')
        self.assertEquals(data[4].maps[0].collation, 'Latin1_General_BIN')
        self.assertEquals(data[4].maps[0].createdate, '5/26/2014 7:47:57 PM')
        self.assertEquals(data[4].maps[0].defaultfilegroup, 'PRIMARY')
        self.assertEquals(data[4].maps[0].id, 'RTC$instance12')
        self.assertEquals(data[4].maps[0].instancename, 'RTC$instance')
        self.assertEquals(data[4].maps[0].isaccessible, 'True')
        self.assertIsNone(data[4].maps[0].lastbackupdate)
        self.assertEquals(data[4].maps[0].owner, 'sa')
        self.assertEquals(data[4].maps[0].primaryfilepath, 'C:\\rtc\\DbPath')
        self.assertEquals(data[4].maps[0].recoverymodel, 'Simple')
        self.assertEquals(data[4].maps[0].systemobject, 'False')
        self.assertEquals(data[4].maps[0].title, 'db0')
        self.assertEquals(data[4].maps[0].version, '706')
Beispiel #16
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     # getting second relationshipmap since first contains empty winservices
     rm = data[1]
     maps = rm.maps[0]
     self.assertEquals(maps.caption, 'Caption')
     self.assertEquals(maps.id, 'Name')
     self.assertEquals(maps.pathName, 'PathName')
     self.assertEquals(maps.serviceName, 'Name')
     self.assertEquals(maps.serviceType, 'ServiceType')
     self.assertEquals(maps.setServiceClass, {
         'description': 'Caption',
         'name': 'Name'
     })
     self.assertEquals(maps.startMode, 'StartMode')
Beispiel #17
0
 def test_sql_no_counters(self):
     parms = load_pickle_file(self,
                              'ShellDataSourcePlugin_onSuccess_185726')[0]
     stdout = [
         u'db01 :counter: databasestatus :value: Normal',
         u'master :counter: databasestatus :value: Normal',
         u'msdb :counter: databasestatus :value: Normal',
         u'tempdb :counter: databasestatus :value: Normal',
         u'model :counter: databasestatus :value: Normal'
     ]
     sql_config = Mock()
     sql_config.datasources = parms[1]
     sql_config.id = sql_config.datasources[0].device
     results = (parms[0], parms[1], CommandResponse(stdout, [], 0))
     data = self.plugin.onSuccess(results, sql_config)
     self.assertEquals(len(data['values']), 5)
     self.assertEquals(len(data['events']), 15)
     # we should see status of databases even if no counters are returned.
     for x in xrange(5):
         self.assertEquals('The database is available.',
                           data['events'][x]['message'])
     for x in xrange(5, 10):
         self.assertEquals('winrs: successful collection',
                           data['events'][x]['summary'])
Beispiel #18
0
    def setUp(self):
        self.plugin = Software()
        self.results = dict(software=Mock(stdout=['DisplayName=;InstallDate=;Vendor=|',
                                                  'DisplayName=?????????? Microsoft Report Viewer ??? Visual Studio 2013;'
                                                  'InstallDate=20150710;Vendor=Microsoft Corporation |',
                                                  'DisplayName=Visual Studio 2013? Microsoft Report Viewer ?? ??;'
                                                  'InstallDate=20150710;Vendor=Microsoft Corporation |',
                                                  'DisplayName=Soft x86 - 1.0.0;'
                                                  'InstallDate=19700101;'
                                                  'Vendor=Sunway Systems|',
                                                  'DisplayName=Soft x86 - 1.0.0;'
                                                  'InstallDate=19700101;'
                                                  'Vendor=Вендор|',
                                                  'DisplayName=;xxx;yyy|',
                                                  'DisplayName=Software;InstallDate=;Vendor=SoftCorp'
                                                  ]))

        self.device = StringAttributeObject()
Beispiel #19
0
    def test_process(self):
        data = self.plugin.process(self.device, self.results, Mock())
        self.assertEquals(data[0].setClusterHostMachines, ['node0', 'node1'])
        self.assertEquals(data[1].maps[0].id, 'id0')
        self.assertEquals(data[1].maps[0].description, 'description0')
        self.assertEquals(data[1].maps[0].domain, 'domain0')
        self.assertEquals(data[1].maps[0].ownernode, 'node0')
        self.assertEquals(data[1].maps[0].title, 'title0')
        self.assertEquals(data[4].maps[0].id, '2beb')
        self.assertEquals(data[4].maps[0].freespace, '1.85MB')
        self.assertEquals(data[4].maps[0].size, '2.05MB')
        self.assertEquals(data[4].maps[0].ownernode, 'node0')
        self.assertEquals(data[4].maps[0].partitionnumber, '1')
        self.assertEquals(data[4].maps[0].disknumber, '1')
        self.assertEquals(data[4].maps[0].domain, 'domain0')
        self.assertEquals(data[4].maps[0].title, 'disk1')
        self.assertEquals(data[4].maps[0].volumepath, 'Vol{2beb}')
        self.assertEquals(data[4].maps[0].assignedto, 'service')

        # Test for missing freespace ZEN-21242
        self.assertEquals(data[4].maps[1].freespace, 'N/A')
class TestShellDataSourcePlugin(BaseTestCase):
    def setUp(self):
        self.success = load_pickle(self, 'results')
        self.config = load_pickle(self, 'config')
        self.plugin = ShellDataSourcePlugin()

    def test_onSuccess(self):
        data = self.plugin.onSuccess(self.success, self.config)
        self.assertEquals(len(data['values']), 12)
        self.assertEquals(len(data['events']), 16)
        self.assertFalse(all(e['severity'] for e in data['events']))

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log',
           Mock())
    def test_onError(self):
        f = None
        try:
            f = Failure('foo')
        except TypeError:
            f = Failure()
        data = self.plugin.onError(f, sentinel)
        self.assertEquals(len(data['events']), 1)
        self.assertEquals(data['events'][0]['severity'], 3)
Beispiel #21
0
class TestOperatingSystem(BaseTestCase):
    def setUp(self):
        self.plugin = OperatingSystem()
        self.device = StringAttributeObject()
        self.results = StringAttributeObject()
        self.results.MSCluster = ()
        self.results.Win32_SystemEnclosure = [StringAttributeObject()]
        self.results.Win32_ComputerSystem = [StringAttributeObject({'blah': 'blah'})]
        self.results.Win32_OperatingSystem = [StringAttributeObject()]
        self.results.exchange_version = Mock(stdout=['15'])
        self.results.ActiveDirectory = [StringAttributeObject()]
        for k in ('TotalVisibleMemorySize', 'TotalVirtualMemorySize'):
            setattr(self.results.Win32_OperatingSystem[0], k, 1)

    @patch('socket.gethostbyaddr', Mock(return_value=("FQDN", [], ["8.8.8.8"])))
    def test_process(self):
        data = self.plugin.process(self.device, self.results, Mock())
        self.assertEquals(data[0].ip_and_hostname, ['8.8.8.8', 'FQDN'])
        self.assertEquals(data[0].domain_controller, False)
        self.assertEquals(data[0].msexchangeversion, 'MSExchange2013IS')
        self.assertEquals(data[0].setClusterMachines, [])
        self.assertEquals(data[0].snmpContact, 'PrimaryOwnerName')
        self.assertEquals(data[0].snmpDescr, 'Caption')
        self.assertEquals(data[0].snmpSysName, 'Name')
        self.assertEquals(data[1].serialNumber, 'SerialNumber')
        self.assertEquals(data[1].tag, 'Tag')
        self.assertEquals(data[1].totalMemory, 1024)
        self.assertEquals(data[2].totalSwap, 1024)

    def test_process_sys_name_from_device(self):
        device = Mock()
        device.id = 'win_device'
        device.snmpSysName = 'device_sys_name'
        device.manageIp = '8.8.8.8'
        data = self.plugin.process(device, {}, Mock())
        self.assertEquals(data[0].snmpSysName, 'device_sys_name')

    def test_process_sys_name_from_comp_system(self):
        device = Mock()
        device.id = 'win_device'
        device.snmpSysName = 'device_sys_name'
        device.manageIp = '8.8.8.8'
        computer_system = Mock()
        computer_system.Name = 'computer_sys_name'
        results = {
            'Win32_ComputerSystem': [computer_system]
        }
        data = self.plugin.process(device, results, Mock())
        self.assertEquals(data[0].snmpSysName, 'computer_sys_name')

    def test_process_sys_name_from_os_system(self):
        device = Mock()
        device.id = 'win_device'
        device.snmpSysName = 'device_sys_name'
        device.manageIp = '8.8.8.8'
        os_system = Mock()
        os_system.CSName = 'os_sys_name'
        os_system.TotalVisibleMemorySize = 1024
        os_system.TotalVirtualMemorySize = 1024
        os_system.Caption = 'Caption'
        results = {
            'Win32_OperatingSystem': [os_system]
        }
        data = self.plugin.process(device, results, Mock())
        self.assertEquals(data[0].snmpSysName, 'os_sys_name')

    def test_process_sys_name_unknown(self):
        device = Mock()
        device.id = 'win_device'
        device.snmpSysName = ''
        device.manageIp = '8.8.8.8'
        data = self.plugin.process(device, {}, Mock())
        self.assertEquals(data[0].snmpSysName, 'Unknown')
Beispiel #22
0
class TestShellDataSourcePlugin(BaseTestCase):
    def setUp(self):
        self.success = load_pickle(self, 'results')
        self.config = load_pickle(self, 'config')
        self.plugin = ShellDataSourcePlugin()

    @patch(
        'ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.ShellDataSourcePlugin.start',
        time.mktime(time.localtime()))
    def test_onSuccess(self):
        data = self.plugin.onSuccess(self.success, self.config)
        self.assertEquals(len(data['values']), 5)
        self.assertEquals(len(data['events']), 10)
        self.assertFalse(all(e['severity'] for e in data['events']))

    if CROCHET_AVAILABLE:

        @patch(
            'ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.createConnectionInfo'
        )
        @patch(
            'ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.SingleCommandClient'
        )
        @patch(
            'ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.queryUtility'
        )
        @crochet.wait_for(timeout=5.0)
        @inlineCallbacks
        def test_collect(self, queryUtility, SingleCommandClient,
                         createConnectionInfo):
            self.config.datasources[0].params['version'] = '2.9.3'
            self.config.datasources[0].params[
                'strategy'] = 'powershell MSSQL Job'
            self.config.datasources[0].cycletime = 500
            createConnectionInfo.return_value._replace.return_value = 15
            queryUtility.return_value.build_command_line.return_value = (
                'mocked command_line', 'mocked script')
            SingleCommandClient.return_value.run_command.return_value = 'mocked data'
            yield self.plugin.collect(self.config)
            self.assertEquals('call()._replace(timeout=495)',
                              str(createConnectionInfo.mock_calls[1]))

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log',
           Mock())
    def test_onError(self):
        f = None
        try:
            f = Failure('foo')
        except TypeError:
            f = Failure()
        data = self.plugin.onError(f, sentinel)
        self.assertEquals(len(data['events']), 1)
        self.assertEquals(data['events'][0]['severity'], 3)

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log',
           Mock())
    def test_onError_status(self):
        winrm_errors = [Exception(), Exception('foo')]
        kerberos_errors = map(Exception, [
            'kerberos authGSSClientStep failed',
            'Server not found in Kerberos database',
            'kinit error getting initial credentials'
        ])

        for err in winrm_errors:
            data = self.plugin.onError(Failure(err), self.config)
            self.assertEquals(data['events'][0]['eventClass'], '/Status')

        for err in kerberos_errors:
            data = self.plugin.onError(Failure(err), self.config)
            self.assertEquals(data['events'][0]['eventClass'],
                              '/Status/Kerberos')

    def test_clean_output(self):
        strategy = DCDiagStrategy()
        strategy.run_tests = {'testFoo', 'testBar', 'testBaz'}

        inp = [
            u'No Such Object',
            u'......................... COMP-NAME failed test', u'testFoo'
        ]
        out = strategy._clean_output(inp)
        self.assertEquals(out, [inp[0], inp[1] + ' ' + inp[2]])

        inp2 = [
            u'Missing Expected Value',
            u'......................... COMP-NAME failed test', u'testBar'
        ]
        out = strategy._clean_output(inp + inp2)
        self.assertEquals(
            out,
            [inp[0], inp[1] + ' ' + inp[2], inp2[0], inp2[1] + ' ' + inp2[2]])

        inp3 = [u'......................... COMP-NAME failed test testBaz']

        out = strategy._clean_output(inp + inp3)
        self.assertEquals(out, [inp[0], inp[1] + ' ' + inp[2]] + inp3)

        out = strategy._clean_output(inp3 + inp)
        self.assertEquals(out, inp3 + [inp[0], inp[1] + ' ' + inp[2]])

        out = strategy._clean_output(inp3)
        self.assertEquals(out, inp3)

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log',
           Mock())
    @patch(
        'ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.ShellDataSourcePlugin.start',
        time.mktime(time.localtime()))
    def test_nagios_parser(self):
        # OK status from Nagios and 4 datapoints
        # OK - no errors or warnings|default_lines=10 default_warnings=0 default_criticals=0 default_unknowns=0
        win_results = load_pickle_file(
            self, 'ShellDataSourcePlugin_onSuccess_141718')[0]
        nagios_ok = Mock()
        nagios_ok.datasources = win_results[1]
        nagios_ok.id = nagios_ok.datasources[0].device
        data = self.plugin.onSuccess(win_results, nagios_ok)
        self.assertEquals(len(data['values'][None]), 4)
        self.assertEquals(data['values'][None]['default_criticals'],
                          (0.0, 'N'))
        self.assertEquals(len(data['events']), 8)
        self.assertEquals(data['events'][0]['severity'], 0)
        # now test nagios with a CRITICAL return code and exit_code of 2
        # CRITICAL - (11 errors) - testing ...|default_lines=12 default_warnings=0 default_criticals=11 default_unknowns=0
        # we should see datapoints and a ZenEventClasses.Critical event
        win_results = load_pickle_file(
            self, 'ShellDataSourcePlugin_onSuccess_143352')[0]
        nagios_critical = Mock()
        win_results[1][0].eventClass = '/Status/Nagios/Test'
        nagios_critical.datasources = win_results[1]
        nagios_critical.id = nagios_critical.datasources[0].device
        data = self.plugin.onSuccess(win_results, nagios_critical)
        self.assertEquals(len(data['values'][None]), 4)
        self.assertEquals(data['values'][None]['default_criticals'],
                          (11.0, 'N'))
        self.assertEquals(len(data['events']), 8)
        self.assertEquals(data['events'][0]['severity'], 5)
        self.assertEquals(data['events'][0]['eventClass'],
                          '/Status/Nagios/Test')

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log',
           Mock())
    @patch(
        'ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.ShellDataSourcePlugin.start',
        time.mktime(time.localtime()))
    def test_sql_no_counters(self):
        parms = load_pickle_file(self,
                                 'ShellDataSourcePlugin_onSuccess_185726')[0]
        stdout = [
            u'db01 :counter: databasestatus :value: Normal',
            u'master :counter: databasestatus :value: Normal',
            u'msdb :counter: databasestatus :value: Normal',
            u'tempdb :counter: databasestatus :value: Normal',
            u'model :counter: databasestatus :value: Normal'
        ]
        sql_config = Mock()
        sql_config.datasources = parms[1]
        sql_config.id = sql_config.datasources[0].device
        results = (parms[0], parms[1], CommandResponse(stdout, [], 0))
        data = self.plugin.onSuccess(results, sql_config)
        self.assertEquals(len(data['values']), 5)
        self.assertEquals(len(data['events']), 15)
        # we should see status of databases even if no counters are returned.
        for x in xrange(5):
            self.assertEquals('The database is available.',
                              data['events'][x]['message'])
        for x in xrange(5, 10):
            self.assertEquals('winrs: successful collection',
                              data['events'][x]['summary'])

    def test_sqlConnection(self):
        sq = SqlConnection('instance', '*****@*****.**', 'sqlpassword',
                           True, 11)
        self.assertNotIn('sqlpassword', ' '.join(sq.sqlConnection),
                         sq.sqlConnection)
Beispiel #23
0
 def test_process(self):
     data = self.plugin.process(self.device, self.results, Mock())
     self.assertEquals(data[0].domain_controller, True)
Beispiel #24
0
class TestShellDataSourcePlugin(BaseTestCase):
    def setUp(self):
        self.success = load_pickle(self, 'results')
        self.config = load_pickle(self, 'config')
        self.plugin = ShellDataSourcePlugin()

    def test_onSuccess(self):
        data = self.plugin.onSuccess(self.success, self.config)
        self.assertEquals(len(data['values']), 12)
        self.assertEquals(len(data['events']), 29)
        self.assertFalse(all(e['severity'] for e in data['events']))

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log', Mock())
    def test_onError(self):
        f = None
        try:
            f = Failure('foo')
        except TypeError:
            f = Failure()
        data = self.plugin.onError(f, sentinel)
        self.assertEquals(len(data['events']), 1)
        self.assertEquals(data['events'][0]['severity'], 3)

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log', Mock())
    def test_onError_status(self):
        winrm_errors = [Exception(), Exception('foo')]
        kerberos_errors = map(Exception,
                              ['kerberos authGSSClientStep failed',
                               'Server not found in Kerberos database',
                               'kinit error getting initial credentials'])

        for err in winrm_errors:
            data = self.plugin.onError(Failure(err), self.config)
            self.assertEquals(data['events'][0]['eventClass'], '/Status')

        for err in kerberos_errors:
            data = self.plugin.onError(Failure(err), self.config)
            self.assertEquals(data['events'][0]['eventClass'], '/Status/Kerberos')

    def test_clean_output(self):
        strategy = DCDiagStrategy()
        strategy.run_tests = {'testFoo', 'testBar', 'testBaz'}

        inp = [u'No Such Object',
               u'......................... COMP-NAME failed test',
               u'testFoo']
        out = strategy._clean_output(inp)
        self.assertEquals(out, [inp[0], inp[1] + ' ' + inp[2]])

        inp2 = [u'Missing Expected Value',
                u'......................... COMP-NAME failed test',
                u'testBar']
        out = strategy._clean_output(inp + inp2)
        self.assertEquals(out, [inp[0], inp[1] + ' ' + inp[2],
                                inp2[0], inp2[1] + ' ' + inp2[2]])

        inp3 = [u'......................... COMP-NAME failed test testBaz']

        out = strategy._clean_output(inp + inp3)
        self.assertEquals(out, [inp[0], inp[1] + ' ' + inp[2]] + inp3)

        out = strategy._clean_output(inp3 + inp)
        self.assertEquals(out, inp3 + [inp[0], inp[1] + ' ' + inp[2]])

        out = strategy._clean_output(inp3)
        self.assertEquals(out, inp3)

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log', Mock())
    def test_nagios_parser(self):
        # OK status from Nagios and 4 datapoints
        # OK - no errors or warnings|default_lines=10 default_warnings=0 default_criticals=0 default_unknowns=0
        win_results = load_pickle_file(self, 'ShellDataSourcePlugin_onSuccess_141718')[0]
        nagios_ok = Mock()
        nagios_ok.datasources = win_results[1]
        nagios_ok.id = nagios_ok.datasources[0].device
        data = self.plugin.onSuccess(win_results, nagios_ok)
        self.assertEquals(len(data['values'][None]), 4)
        self.assertEquals(data['values'][None]['default_criticals'], (0.0, 'N'))
        self.assertEquals(len(data['events']), 8)
        self.assertEquals(data['events'][0]['severity'], 0)
        # now test nagios with a CRITICAL return code and exit_code of 2
        # CRITICAL - (11 errors) - testing ...|default_lines=12 default_warnings=0 default_criticals=11 default_unknowns=0
        # we should see datapoints and a ZenEventClasses.Critical event
        win_results = load_pickle_file(self, 'ShellDataSourcePlugin_onSuccess_143352')[0]
        nagios_critical = Mock()
        win_results[1][0].eventClass = '/Status/Nagios/Test'
        nagios_critical.datasources = win_results[1]
        nagios_critical.id = nagios_critical.datasources[0].device
        data = self.plugin.onSuccess(win_results, nagios_critical)
        self.assertEquals(len(data['values'][None]), 4)
        self.assertEquals(data['values'][None]['default_criticals'], (11.0, 'N'))
        self.assertEquals(len(data['events']), 8)
        self.assertEquals(data['events'][0]['severity'], 5)
        self.assertEquals(data['events'][0]['eventClass'], '/Status/Nagios/Test')

    @patch('ZenPacks.zenoss.Microsoft.Windows.datasources.ShellDataSource.log', Mock())
    def test_sql_no_counters(self):
        parms = load_pickle_file(self, 'ShellDataSourcePlugin_onSuccess_162846')[0]
        stdout = [u'databasename : db01',
                  u'databasestatus:Normal',
                  u'databasename:master',
                  u'databasestatus:Normal',
                  u'databasename : msdb',
                  u'databasestatus:Normal',
                  u'databasename : tempdb',
                  u'databasestatus:Normal',
                  u'databasename : model',
                  u'databasestatus:Normal']
        sql_config = Mock()
        sql_config.datasources = parms[1]
        sql_config.id = sql_config.datasources[0].device
        results = (parms[0], parms[1], CommandResponse(stdout, [], 0))
        data = self.plugin.onSuccess(results, sql_config)
        self.assertEquals(len(data['values']), 5)
        self.assertEquals(len(data['events']), 15)
        # we should see status of databases even if no counters are returned.
        for x in xrange(5):
            self.assertEquals('The database is available.', data['events'][x]['message'])
        for x in xrange(5, 10):
            self.assertEquals(
                'Error parsing data in powershell MSSQL strategy for "ActiveTransactions" datasource',
                data['events'][x]['summary'])
Beispiel #25
0
 def test_process_sys_name_from_os_system(self):
     device = Mock()
     device.id = 'win_device'
     device.snmpSysName = 'device_sys_name'
     device.manageIp = '8.8.8.8'
     os_system = Mock()
     os_system.CSName = 'os_sys_name'
     os_system.TotalVisibleMemorySize = 1024
     os_system.TotalVirtualMemorySize = 1024
     os_system.Caption = 'Caption'
     results = {
         'Win32_OperatingSystem': [os_system]
     }
     data = self.plugin.process(device, results, Mock())
     self.assertEquals(data[0].snmpSysName, 'os_sys_name')
Beispiel #26
0
class TestClusterDataSourcePlugin(BaseTestCase):
    def setUp(self):
        self.plugin = ClusterDataSourcePlugin()

    @patch(
        'ZenPacks.zenoss.Microsoft.Windows.datasources.ClusterDataSource.log',
        Mock())
    def test_onSuccess(self):
        config = load_pickle_file(self, 'cluster_config')
        results = CommandResponse(RAW_RESULTS['stdout'], RAW_RESULTS['stderr'],
                                  RAW_RESULTS['exit_code'])
        data = self.plugin.onSuccess(results, config)
        self.assertEquals(len(data['values']), 25)
        for comp, value in RESULTS.iteritems():
            try:
                num = int(value)
                value = cluster_disk_state_string(num)
                self.assertEquals(data['values'][comp]['state'], num)
            except Exception:
                self.assertEquals(data['values'][comp]['state'][0],
                                  cluster_state_value(value),
                                  'found {}'.format(value))
        self.assertEquals(len(data['events']), 28)
        # 24989663232 is the freespace in the pickle file
        self.assertEquals(
            data['values']['860caaf4-595a-44e6-be70-285a9bb3733d']
            ['freespace'], 24254611456)

        # test for ownerchange events
        results.stdout[11] = results.stdout[11].replace(
            'win2016-node-01', 'win2016-node-02')
        data = self.plugin.onSuccess(results, config)
        self.assertEquals(len(data['events']), 29)
        results.stdout[11] = results.stdout[11].replace(
            'win2016-node-02', 'win2016-node-01')
        results.stdout[12] = results.stdout[12].replace(
            'win2016-node-02', 'win2016-node-01')
        data = self.plugin.onSuccess(results, config)
        self.assertEquals(len(data['events']), 29)

    @patch(
        'ZenPacks.zenoss.Microsoft.Windows.datasources.ClusterDataSource.log',
        Mock())
    def test_143596(self):
        # Cluster shared volumes are different than cluster disks
        # the status will be a string, not an int
        results = load_pickle_file(
            self, 'ClusterDataSourcePlugin_onSuccess_210137')[0]
        config = Mock()
        datasources = []
        for line in results.stdout:
            component = line.split('|')[0]
            datasource = Mock(params={
                'eventlog': sentinel.eventlog,
                'contexttitle': 'device',
                'ownernode': 'IS-HVDRCL03-H04',
                'cluster': 'IS-HVDRCL03.tcy.prv'
            },
                              datasource='DataSource',
                              component=component)
            datasources.append(datasource)

        config.datasources = datasources
        config.id = 'IS-HVDRCL03.tcy.prv'
        data = self.plugin.onSuccess(results, config)
        for k, v in RESULTS_143596.iteritems():
            self.assertEquals(data['values'][k]['freespace'], v)
            self.assertEquals(data['values'][k]['state'], 2)
        csvs = set(RESULTS_143596.keys())
        evts = [
            evt for evt in data['events'] if evt.get('component', '') in csvs
        ]
        for evt in evts:
            self.assertEquals(evt['summary'],
                              'Last state of component device was Online')
Beispiel #27
0
 def setUp(self):
     self.device = Mock()
     self.log = Mock()
Beispiel #28
0
 def setUp(self):
     self.plugin = Services()
     self.results = Mock()
     self.results.get.return_value = [StringAttributeObject()]
     self.device = StringAttributeObject()