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')
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)
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'])
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])
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)
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)
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')
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')
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_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)
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')
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')
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 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()
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)
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')
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)
def test_process(self): data = self.plugin.process(self.device, self.results, Mock()) self.assertEquals(data[0].domain_controller, True)
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'])
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')
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')
def setUp(self): self.device = Mock() self.log = Mock()
def setUp(self): self.plugin = Services() self.results = Mock() self.results.get.return_value = [StringAttributeObject()] self.device = StringAttributeObject()