TestHardware.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #!/usr/bin/env python
  2. '''
  3. Licensed to the Apache Software Foundation (ASF) under one
  4. or more contributor license agreements. See the NOTICE file
  5. distributed with this work for additional information
  6. regarding copyright ownership. The ASF licenses this file
  7. to you under the Apache License, Version 2.0 (the
  8. "License"); you may not use this file except in compliance
  9. with the License. You may obtain a copy of the License at
  10. http://www.apache.org/licenses/LICENSE-2.0
  11. Unless required by applicable law or agreed to in writing, software
  12. distributed under the License is distributed on an "AS IS" BASIS,
  13. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. See the License for the specific language governing permissions and
  15. limitations under the License.
  16. '''
  17. from unittest import TestCase
  18. from mock.mock import patch
  19. import unittest
  20. import platform
  21. from only_for_platform import only_for_platform, PLATFORM_LINUX
  22. with patch("platform.linux_distribution", return_value = ('Suse','11','Final')):
  23. from ambari_agent import hostname
  24. from ambari_agent.Hardware import Hardware
  25. from ambari_agent.Facter import Facter, FacterLinux
  26. from ambari_commons import OSCheck
  27. @only_for_platform(PLATFORM_LINUX)
  28. @patch.object(platform,"linux_distribution", new = ('Suse','11','Final'))
  29. class TestHardware(TestCase):
  30. @patch.object(OSCheck, "get_os_type")
  31. @patch.object(OSCheck, "get_os_version")
  32. def test_build(self, get_os_version_mock, get_os_type_mock):
  33. get_os_type_mock.return_value = "suse"
  34. get_os_version_mock.return_value = "11"
  35. hardware = Hardware()
  36. result = hardware.get()
  37. osdisks = hardware.osdisks()
  38. for dev_item in result['mounts']:
  39. self.assertTrue(dev_item['available'] >= 0)
  40. self.assertTrue(dev_item['used'] >= 0)
  41. self.assertTrue(dev_item['percent'] != None)
  42. self.assertTrue(dev_item['device'] != None)
  43. self.assertTrue(dev_item['mountpoint'] != None)
  44. self.assertTrue(dev_item['type'] != None)
  45. self.assertTrue(dev_item['size'] > 0)
  46. for os_disk_item in osdisks:
  47. self.assertTrue(os_disk_item['available'] >= 0)
  48. self.assertTrue(os_disk_item['used'] >= 0)
  49. self.assertTrue(os_disk_item['percent'] != None)
  50. self.assertTrue(os_disk_item['device'] != None)
  51. self.assertTrue(os_disk_item['mountpoint'] != None)
  52. self.assertTrue(os_disk_item['type'] != None)
  53. self.assertTrue(os_disk_item['size'] > 0)
  54. self.assertTrue(len(result['mounts']) == len(osdisks))
  55. def test_extractMountInfo(self):
  56. outputLine = "device type size used available percent mountpoint"
  57. result = Hardware.extractMountInfo(outputLine)
  58. self.assertEquals(result['device'], 'device')
  59. self.assertEquals(result['type'], 'type')
  60. self.assertEquals(result['size'], 'size')
  61. self.assertEquals(result['used'], 'used')
  62. self.assertEquals(result['available'], 'available')
  63. self.assertEquals(result['percent'], 'percent')
  64. self.assertEquals(result['mountpoint'], 'mountpoint')
  65. outputLine = ""
  66. result = Hardware.extractMountInfo(outputLine)
  67. self.assertEquals(result, None)
  68. outputLine = "device type size used available percent"
  69. result = Hardware.extractMountInfo(outputLine)
  70. self.assertEquals(result, None)
  71. outputLine = "device type size used available percent mountpoint info"
  72. result = Hardware.extractMountInfo(outputLine)
  73. self.assertEquals(result, None)
  74. @patch.object(hostname,"hostname")
  75. @patch.object(FacterLinux, "getFqdn")
  76. @patch.object(OSCheck, "get_os_type")
  77. @patch.object(OSCheck, "get_os_version")
  78. def test_fqdnDomainHostname(self, get_os_version_mock, get_os_type_mock, facter_getFqdn_mock, hostname_mock):
  79. facter_getFqdn_mock.return_value = "ambari.apache.org"
  80. hostname_mock.return_value = 'ambari'
  81. get_os_type_mock.return_value = "suse"
  82. get_os_version_mock.return_value = "11"
  83. result = Facter().facterInfo()
  84. self.assertEquals(result['hostname'], "ambari")
  85. self.assertEquals(result['domain'], "apache.org")
  86. self.assertEquals(result['fqdn'], (result['hostname'] + '.' + result['domain']))
  87. @patch.object(FacterLinux, "setDataUpTimeOutput")
  88. @patch.object(OSCheck, "get_os_type")
  89. @patch.object(OSCheck, "get_os_version")
  90. def test_uptimeSecondsHoursDays(self, get_os_version_mock, get_os_type_mock, facter_setDataUpTimeOutput_mock):
  91. # 3 days + 1 hour + 13 sec
  92. facter_setDataUpTimeOutput_mock.return_value = "262813.00 123.45"
  93. get_os_type_mock.return_value = "suse"
  94. get_os_version_mock.return_value = "11"
  95. result = Facter().facterInfo()
  96. self.assertEquals(result['uptime_seconds'], '262813')
  97. self.assertEquals(result['uptime_hours'], '73')
  98. self.assertEquals(result['uptime_days'], '3')
  99. @patch.object(FacterLinux, "setMemInfoOutput")
  100. @patch.object(OSCheck, "get_os_type")
  101. @patch.object(OSCheck, "get_os_version")
  102. def test_facterMemInfoOutput(self, get_os_version_mock, get_os_type_mock, facter_setMemInfoOutput_mock):
  103. facter_setMemInfoOutput_mock.return_value = '''
  104. MemTotal: 1832392 kB
  105. MemFree: 868648 kB
  106. HighTotal: 0 kB
  107. HighFree: 0 kB
  108. LowTotal: 1832392 kB
  109. LowFree: 868648 kB
  110. SwapTotal: 2139592 kB
  111. SwapFree: 1598676 kB
  112. '''
  113. get_os_type_mock.return_value = "suse"
  114. get_os_version_mock.return_value = "11"
  115. result = Facter().facterInfo()
  116. self.assertEquals(result['memorysize'], 1832392)
  117. self.assertEquals(result['memorytotal'], 1832392)
  118. self.assertEquals(result['memoryfree'], 868648)
  119. self.assertEquals(result['swapsize'], '2.04 GB')
  120. self.assertEquals(result['swapfree'], '1.52 GB')
  121. @patch.object(FacterLinux, "setDataIfConfigOutput")
  122. @patch.object(OSCheck, "get_os_type")
  123. @patch.object(OSCheck, "get_os_version")
  124. def test_facterDataIfConfigOutput(self, get_os_version_mock, get_os_type_mock, facter_setDataIfConfigOutput_mock):
  125. facter_setDataIfConfigOutput_mock.return_value = '''
  126. eth0 Link encap:Ethernet HWaddr 08:00:27:C9:39:9E
  127. inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
  128. inet6 addr: fe80::a00:27ff:fec9:399e/64 Scope:Link
  129. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  130. RX packets:7575 errors:0 dropped:0 overruns:0 frame:0
  131. TX packets:3463 errors:0 dropped:0 overruns:0 carrier:0
  132. collisions:0 txqueuelen:1000
  133. RX bytes:9383574 (8.9 MiB) TX bytes:231609 (226.1 KiB)
  134. eth1 Link encap:Ethernet HWaddr 08:00:27:9A:9A:45
  135. inet addr:192.168.64.101 Bcast:192.168.64.255 Mask:255.255.255.0
  136. inet6 addr: fe80::a00:27ff:fe9a:9a45/64 Scope:Link
  137. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  138. RX packets:180 errors:0 dropped:0 overruns:0 frame:0
  139. TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
  140. collisions:0 txqueuelen:1000
  141. RX bytes:18404 (17.9 KiB) TX bytes:17483 (17.0 KiB)
  142. lo Link encap:Local Loopback
  143. inet addr:127.0.0.1 Mask:255.0.0.0
  144. inet6 addr: ::1/128 Scope:Host
  145. UP LOOPBACK RUNNING MTU:16436 Metric:1
  146. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  147. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  148. collisions:0 txqueuelen:0
  149. RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
  150. '''
  151. get_os_type_mock.return_value = "suse"
  152. get_os_version_mock.return_value = "11"
  153. result = Facter().facterInfo()
  154. self.assertEquals(result['ipaddress'], '10.0.2.15')
  155. self.assertEquals(result['netmask'], '255.255.255.0')
  156. self.assertEquals(result['interfaces'], 'eth0,eth1,lo')
  157. @patch.object(OSCheck, "get_os_type")
  158. @patch.object(OSCheck, "get_os_family")
  159. @patch.object(OSCheck, "get_os_version")
  160. def test_facterDataOperatingsystemVsFamily(self, get_os_version_mock, get_os_family_mock, get_os_type_mock):
  161. get_os_type_mock.return_value = "some_type_of_os"
  162. get_os_version_mock.return_value = "11"
  163. get_os_family_mock.return_value = "redhat"
  164. result = Facter().facterInfo()
  165. self.assertEquals(result['operatingsystem'], 'some_type_of_os')
  166. self.assertEquals(result['osfamily'], 'redhat')
  167. get_os_family_mock.return_value = "ubuntu"
  168. result = Facter().facterInfo()
  169. self.assertEquals(result['operatingsystem'], 'some_type_of_os')
  170. self.assertEquals(result['osfamily'], 'ubuntu')
  171. get_os_family_mock.return_value = "suse"
  172. result = Facter().facterInfo()
  173. self.assertEquals(result['operatingsystem'], 'some_type_of_os')
  174. self.assertEquals(result['osfamily'], 'suse')
  175. get_os_family_mock.return_value = "My_new_family"
  176. result = Facter().facterInfo()
  177. self.assertEquals(result['operatingsystem'], 'some_type_of_os')
  178. self.assertEquals(result['osfamily'], 'My_new_family')
  179. if __name__ == "__main__":
  180. unittest.main()