blob: 682b932ee3c788c694e90f57e35e266bb5d97e6f [file] [log] [blame]
#!/usr/bin/env python
'''
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
'''
from unittest import TestCase
from ambari_agent import hostname
from ambari_agent.Hardware import Hardware
from mock.mock import patch
from ambari_agent.Facter import Facter
import unittest
class TestHardware(TestCase):
def test_build(self):
hardware = Hardware()
result = hardware.get()
osdisks = hardware.osdisks()
for dev_item in result['mounts']:
self.assertTrue(dev_item['available'] >= 0)
self.assertTrue(dev_item['used'] >= 0)
self.assertTrue(dev_item['percent'] != None)
self.assertTrue(dev_item['device'] != None)
self.assertTrue(dev_item['mountpoint'] != None)
self.assertTrue(dev_item['type'] != None)
self.assertTrue(dev_item['size'] > 0)
for os_disk_item in osdisks:
self.assertTrue(os_disk_item['available'] >= 0)
self.assertTrue(os_disk_item['used'] >= 0)
self.assertTrue(os_disk_item['percent'] != None)
self.assertTrue(os_disk_item['device'] != None)
self.assertTrue(os_disk_item['mountpoint'] != None)
self.assertTrue(os_disk_item['type'] != None)
self.assertTrue(os_disk_item['size'] > 0)
self.assertTrue(len(result['mounts']) == len(osdisks))
def test_extractMountInfo(self):
outputLine = "device type size used available percent mountpoint"
result = Hardware.extractMountInfo(outputLine)
self.assertEquals(result['device'], 'device')
self.assertEquals(result['type'], 'type')
self.assertEquals(result['size'], 'size')
self.assertEquals(result['used'], 'used')
self.assertEquals(result['available'], 'available')
self.assertEquals(result['percent'], 'percent')
self.assertEquals(result['mountpoint'], 'mountpoint')
outputLine = ""
result = Hardware.extractMountInfo(outputLine)
self.assertEquals(result, None)
outputLine = "device type size used available percent"
result = Hardware.extractMountInfo(outputLine)
self.assertEquals(result, None)
outputLine = "device type size used available percent mountpoint info"
result = Hardware.extractMountInfo(outputLine)
self.assertEquals(result, None)
@patch.object(hostname,"hostname")
@patch.object(Facter, "getFqdn")
def test_fqdnDomainHostname(self, facter_getFqdn_mock, hostname_mock):
facter_getFqdn_mock.return_value = "ambari.apache.org"
hostname_mock.return_value = 'ambari'
result = Facter().facterInfo()
self.assertEquals(result['hostname'], "ambari")
self.assertEquals(result['domain'], "apache.org")
self.assertEquals(result['fqdn'], (result['hostname'] + '.' + result['domain']))
@patch.object(Facter, "setDataUpTimeOutput")
def test_uptimeSecondsHoursDays(self, facter_setDataUpTimeOutput_mock):
# 3 days + 1 hour + 13 sec
facter_setDataUpTimeOutput_mock.return_value = "262813.00 123.45"
result = Facter().facterInfo()
self.assertEquals(result['uptime_seconds'], '262813')
self.assertEquals(result['uptime_hours'], '73')
self.assertEquals(result['uptime_days'], '3')
@patch.object(Facter, "setMemInfoOutput")
def test_facterMemInfoOutput(self, facter_setMemInfoOutput_mock):
facter_setMemInfoOutput_mock.return_value = '''
MemTotal: 1832392 kB
MemFree: 868648 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 1832392 kB
LowFree: 868648 kB
SwapTotal: 2139592 kB
SwapFree: 1598676 kB
'''
result = Facter().facterInfo()
self.assertEquals(result['memorysize'], 1832392)
self.assertEquals(result['memorytotal'], 1832392)
self.assertEquals(result['memoryfree'], 868648)
self.assertEquals(result['swapsize'], '2.04 GB')
self.assertEquals(result['swapfree'], '1.52 GB')
@patch.object(Facter, "setDataIfConfigOutput")
def test_facterDataIfConfigOutput(self, facter_setDataIfConfigOutput_mock):
facter_setDataIfConfigOutput_mock.return_value = '''
eth0 Link encap:Ethernet HWaddr 08:00:27:C9:39:9E
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fec9:399e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7575 errors:0 dropped:0 overruns:0 frame:0
TX packets:3463 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9383574 (8.9 MiB) TX bytes:231609 (226.1 KiB)
eth1 Link encap:Ethernet HWaddr 08:00:27:9A:9A:45
inet addr:192.168.64.101 Bcast:192.168.64.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe9a:9a45/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:180 errors:0 dropped:0 overruns:0 frame:0
TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:18404 (17.9 KiB) TX bytes:17483 (17.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
'''
result = Facter().facterInfo()
self.assertEquals(result['ipaddress'], '10.0.2.15')
self.assertEquals(result['netmask'], '255.255.255.0')
self.assertEquals(result['interfaces'], 'eth0,eth1,lo')
if __name__ == "__main__":
unittest.main()