test_oozie_server.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  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 mock.mock import MagicMock, call, patch
  18. from stacks.utils.RMFTestCase import *
  19. class TestOozieServer(RMFTestCase):
  20. def test_configure_default(self):
  21. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  22. classname = "OozieServer",
  23. command = "configure",
  24. config_file="default.json"
  25. )
  26. self.assert_configure_default()
  27. self.assertNoMoreResources()
  28. @patch("os.path.isfile")
  29. def test_start_default(self, isfile_mock):
  30. isfile_mock.return_value = True
  31. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  32. classname = "OozieServer",
  33. command = "start",
  34. config_file="default.json"
  35. )
  36. self.assert_configure_default()
  37. self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/ooziedb.sh create -sqlfile oozie.sql -run',
  38. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  39. ignore_failures = True,
  40. user = 'oozie',
  41. )
  42. self.assertResourceCalled('Execute', ' hadoop --config /etc/hadoop/conf dfs -put /usr/lib/oozie/share /user/oozie ; hadoop --config /etc/hadoop/conf dfs -chmod -R 755 /user/oozie/share',
  43. not_if = " hadoop --config /etc/hadoop/conf dfs -ls /user/oozie/share | awk 'BEGIN {count=0;} /share/ {count++} END {if (count > 0) {exit 0} else {exit 1}}'",
  44. user = 'oozie',
  45. path = ['/usr/bin:/usr/bin'],
  46. )
  47. self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-start.sh',
  48. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  49. user = 'oozie',
  50. )
  51. self.assertNoMoreResources()
  52. def test_stop_default(self):
  53. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  54. classname = "OozieServer",
  55. command = "stop",
  56. config_file="default.json"
  57. )
  58. self.assertResourceCalled('Execute', "su -s /bin/bash - oozie -c 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-stop.sh' && rm -f /var/run/oozie/oozie.pid",
  59. only_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  60. )
  61. self.assertNoMoreResources()
  62. def test_configure_secured(self):
  63. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  64. classname = "OozieServer",
  65. command = "configure",
  66. config_file="secured.json"
  67. )
  68. self.assert_configure_secured()
  69. self.assertNoMoreResources()
  70. @patch("os.path.isfile")
  71. def test_start_secured(self, isfile_mock):
  72. isfile_mock.return_value = True
  73. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  74. classname = "OozieServer",
  75. command = "start",
  76. config_file="secured.json"
  77. )
  78. self.assert_configure_secured()
  79. self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/ooziedb.sh create -sqlfile oozie.sql -run',
  80. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  81. ignore_failures = True,
  82. user = 'oozie',
  83. )
  84. self.assertResourceCalled('Execute', '/usr/bin/kinit -kt /etc/security/keytabs/oozie.service.keytab oozie/c6402.ambari.apache.org@EXAMPLE.COM; hadoop --config /etc/hadoop/conf dfs -put /usr/lib/oozie/share /user/oozie ; hadoop --config /etc/hadoop/conf dfs -chmod -R 755 /user/oozie/share',
  85. not_if = "/usr/bin/kinit -kt /etc/security/keytabs/oozie.service.keytab oozie/c6402.ambari.apache.org@EXAMPLE.COM; hadoop --config /etc/hadoop/conf dfs -ls /user/oozie/share | awk 'BEGIN {count=0;} /share/ {count++} END {if (count > 0) {exit 0} else {exit 1}}'",
  86. user = 'oozie',
  87. path = ['/usr/bin:/usr/bin'],
  88. )
  89. self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-start.sh',
  90. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  91. user = 'oozie',
  92. )
  93. self.assertNoMoreResources()
  94. def test_stop_secured(self):
  95. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  96. classname = "OozieServer",
  97. command = "stop",
  98. config_file="secured.json"
  99. )
  100. self.assertResourceCalled('Execute', "su -s /bin/bash - oozie -c 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-stop.sh' && rm -f /var/run/oozie/oozie.pid",
  101. only_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  102. )
  103. self.assertNoMoreResources()
  104. def assert_configure_default(self):
  105. self.assertResourceCalled('HdfsDirectory', '/user/oozie',
  106. security_enabled = False,
  107. keytab = UnknownConfigurationMock(),
  108. conf_dir = '/etc/hadoop/conf',
  109. hdfs_user = 'hdfs',
  110. kinit_path_local = '/usr/bin/kinit',
  111. mode = 0775,
  112. owner = 'oozie',
  113. bin_dir = '/usr/bin',
  114. action = ['create'],
  115. )
  116. self.assertResourceCalled('Directory', '/etc/oozie/conf',
  117. owner = 'oozie',
  118. group = 'hadoop',
  119. recursive = True
  120. )
  121. self.assertResourceCalled('XmlConfig', 'oozie-site.xml',
  122. owner = 'oozie',
  123. group = 'hadoop',
  124. mode = 0664,
  125. conf_dir = '/etc/oozie/conf',
  126. configurations = self.getConfig()['configurations']['oozie-site'],
  127. configuration_attributes = self.getConfig()['configuration_attributes']['oozie-site']
  128. )
  129. self.assertResourceCalled('File', '/etc/oozie/conf/oozie-env.sh',
  130. owner = 'oozie',
  131. content = InlineTemplate(self.getConfig()['configurations']['oozie-env']['content'])
  132. )
  133. self.assertResourceCalled('File', '/etc/oozie/conf/oozie-log4j.properties',
  134. owner = 'oozie',
  135. group = 'hadoop',
  136. mode = 0644,
  137. content = 'log4jproperties\nline2'
  138. )
  139. self.assertResourceCalled('File', '/etc/oozie/conf/adminusers.txt',
  140. owner = 'oozie',
  141. group = 'hadoop',
  142. )
  143. self.assertResourceCalled('File', '/etc/oozie/conf/hadoop-config.xml',
  144. owner = 'oozie',
  145. group = 'hadoop',
  146. )
  147. self.assertResourceCalled('File', '/etc/oozie/conf/oozie-default.xml',
  148. owner = 'oozie',
  149. group = 'hadoop',
  150. )
  151. self.assertResourceCalled('Directory', '/etc/oozie/conf/action-conf',
  152. owner = 'oozie',
  153. group = 'hadoop',
  154. )
  155. self.assertResourceCalled('File', '/etc/oozie/conf/action-conf/hive.xml',
  156. owner = 'oozie',
  157. group = 'hadoop',
  158. )
  159. self.assertResourceCalled('File', '/var/run/oozie/oozie.pid',
  160. action=["delete"],
  161. not_if="ls {pid_file} >/dev/null 2>&1 && !(ps `cat {pid_file}` >/dev/null 2>&1)"
  162. )
  163. self.assertResourceCalled('Directory', '/var/run/oozie',
  164. owner = 'oozie',
  165. group = 'hadoop',
  166. recursive = True,
  167. mode = 0755,
  168. )
  169. self.assertResourceCalled('Directory', '/var/log/oozie',
  170. owner = 'oozie',
  171. group = 'hadoop',
  172. recursive = True,
  173. mode = 0755,
  174. )
  175. self.assertResourceCalled('Directory', '/var/tmp/oozie',
  176. owner = 'oozie',
  177. group = 'hadoop',
  178. recursive = True,
  179. mode = 0755,
  180. )
  181. self.assertResourceCalled('Directory', '/hadoop/oozie',
  182. owner = 'oozie',
  183. group = 'hadoop',
  184. recursive = True,
  185. mode = 0755,
  186. )
  187. self.assertResourceCalled('Directory', '/hadoop/oozie/data',
  188. owner = 'oozie',
  189. group = 'hadoop',
  190. recursive = True,
  191. mode = 0755,
  192. )
  193. self.assertResourceCalled('Directory', '/var/lib/oozie/',
  194. owner = 'oozie',
  195. group = 'hadoop',
  196. recursive = True,
  197. mode = 0755,
  198. )
  199. self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server/webapps/',
  200. owner = 'oozie',
  201. group = 'hadoop',
  202. recursive = True,
  203. mode = 0755,
  204. )
  205. self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server/conf',
  206. owner = 'oozie',
  207. group = 'hadoop',
  208. recursive = True,
  209. mode = 0755,
  210. )
  211. self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server',
  212. owner = 'oozie',
  213. group = 'hadoop',
  214. recursive = True,
  215. mode = 0755,
  216. )
  217. self.assertResourceCalled('Execute', 'cd /usr/lib/oozie && tar -xvf oozie-sharelib.tar.gz',
  218. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  219. )
  220. self.assertResourceCalled('Execute', 'cd /usr/lib/oozie && mkdir -p /var/tmp/oozie',
  221. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  222. )
  223. self.assertResourceCalled('Execute', 'cd /usr/lib/oozie && chown oozie:hadoop /var/tmp/oozie && mkdir -p /usr/lib/oozie/libext && cp /usr/share/HDP-oozie/ext-2.2.zip /usr/lib/oozie/libext && chown oozie:hadoop /usr/lib/oozie/libext/ext-2.2.zip && chown -RL oozie:hadoop /var/lib/oozie/oozie-server/conf && cp /usr/lib/falcon/oozie/ext/falcon-oozie-el-extension-*.jar /usr/lib/oozie/libext && chown oozie:hadoop /usr/lib/oozie/libext/falcon-oozie-el-extension-*.jar',
  224. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  225. )
  226. self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war',
  227. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  228. user = 'oozie',
  229. )
  230. def assert_configure_secured(self):
  231. self.assertResourceCalled('HdfsDirectory', '/user/oozie',
  232. security_enabled = True,
  233. keytab = '/etc/security/keytabs/hdfs.headless.keytab',
  234. conf_dir = '/etc/hadoop/conf',
  235. hdfs_user = 'hdfs',
  236. kinit_path_local = '/usr/bin/kinit',
  237. mode = 0775,
  238. owner = 'oozie',
  239. bin_dir = '/usr/bin',
  240. action = ['create'],
  241. )
  242. self.assertResourceCalled('Directory', '/etc/oozie/conf',
  243. owner = 'oozie',
  244. group = 'hadoop',
  245. recursive = True
  246. )
  247. self.assertResourceCalled('XmlConfig', 'oozie-site.xml',
  248. owner = 'oozie',
  249. group = 'hadoop',
  250. mode = 0664,
  251. conf_dir = '/etc/oozie/conf',
  252. configurations = self.getConfig()['configurations']['oozie-site'],
  253. configuration_attributes = self.getConfig()['configuration_attributes']['oozie-site']
  254. )
  255. self.assertResourceCalled('File', '/etc/oozie/conf/oozie-env.sh',
  256. owner = 'oozie',
  257. content = InlineTemplate(self.getConfig()['configurations']['oozie-env']['content'])
  258. )
  259. self.assertResourceCalled('File', '/etc/oozie/conf/oozie-log4j.properties',
  260. owner = 'oozie',
  261. group = 'hadoop',
  262. mode = 0644,
  263. content = 'log4jproperties\nline2'
  264. )
  265. self.assertResourceCalled('File', '/etc/oozie/conf/adminusers.txt',
  266. owner = 'oozie',
  267. group = 'hadoop',
  268. )
  269. self.assertResourceCalled('File', '/etc/oozie/conf/hadoop-config.xml',
  270. owner = 'oozie',
  271. group = 'hadoop',
  272. )
  273. self.assertResourceCalled('File', '/etc/oozie/conf/oozie-default.xml',
  274. owner = 'oozie',
  275. group = 'hadoop',
  276. )
  277. self.assertResourceCalled('Directory', '/etc/oozie/conf/action-conf',
  278. owner = 'oozie',
  279. group = 'hadoop',
  280. )
  281. self.assertResourceCalled('File', '/etc/oozie/conf/action-conf/hive.xml',
  282. owner = 'oozie',
  283. group = 'hadoop',
  284. )
  285. self.assertResourceCalled('File', '/var/run/oozie/oozie.pid',
  286. action=["delete"],
  287. not_if="ls {pid_file} >/dev/null 2>&1 && !(ps `cat {pid_file}` >/dev/null 2>&1)"
  288. )
  289. self.assertResourceCalled('Directory', '/var/run/oozie',
  290. owner = 'oozie',
  291. group = 'hadoop',
  292. recursive = True,
  293. mode = 0755,
  294. )
  295. self.assertResourceCalled('Directory', '/var/log/oozie',
  296. owner = 'oozie',
  297. group = 'hadoop',
  298. recursive = True,
  299. mode = 0755,
  300. )
  301. self.assertResourceCalled('Directory', '/var/tmp/oozie',
  302. owner = 'oozie',
  303. group = 'hadoop',
  304. recursive = True,
  305. mode = 0755,
  306. )
  307. self.assertResourceCalled('Directory', '/hadoop/oozie',
  308. owner = 'oozie',
  309. group = 'hadoop',
  310. recursive = True,
  311. mode = 0755,
  312. )
  313. self.assertResourceCalled('Directory', '/hadoop/oozie/data',
  314. owner = 'oozie',
  315. group = 'hadoop',
  316. recursive = True,
  317. mode = 0755,
  318. )
  319. self.assertResourceCalled('Directory', '/var/lib/oozie/',
  320. owner = 'oozie',
  321. group = 'hadoop',
  322. recursive = True,
  323. mode = 0755,
  324. )
  325. self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server/webapps/',
  326. owner = 'oozie',
  327. group = 'hadoop',
  328. recursive = True,
  329. mode = 0755,
  330. )
  331. self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server/conf',
  332. owner = 'oozie',
  333. group = 'hadoop',
  334. recursive = True,
  335. mode = 0755,
  336. )
  337. self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server',
  338. owner = 'oozie',
  339. group = 'hadoop',
  340. recursive = True,
  341. mode = 0755,
  342. )
  343. self.assertResourceCalled('Execute', 'cd /usr/lib/oozie && tar -xvf oozie-sharelib.tar.gz',
  344. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  345. )
  346. self.assertResourceCalled('Execute', 'cd /usr/lib/oozie && mkdir -p /var/tmp/oozie',
  347. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  348. )
  349. self.assertResourceCalled('Execute', 'cd /usr/lib/oozie && chown oozie:hadoop /var/tmp/oozie && mkdir -p /usr/lib/oozie/libext && cp /usr/share/HDP-oozie/ext-2.2.zip /usr/lib/oozie/libext && chown oozie:hadoop /usr/lib/oozie/libext/ext-2.2.zip && chown -RL oozie:hadoop /var/lib/oozie/oozie-server/conf && cp /usr/lib/falcon/oozie/ext/falcon-oozie-el-extension-*.jar /usr/lib/oozie/libext && chown oozie:hadoop /usr/lib/oozie/libext/falcon-oozie-el-extension-*.jar',
  350. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  351. )
  352. self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war',
  353. not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1',
  354. user = 'oozie',
  355. )
  356. def test_configure_default_hdp22(self):
  357. config_file = "stacks/2.0.6/configs/default.json"
  358. with open(config_file, "r") as f:
  359. default_json = json.load(f)
  360. default_json['hostLevelParams']['stack_version']= '2.2'
  361. self.executeScript("2.0.6/services/OOZIE/package/scripts/oozie_server.py",
  362. classname = "OozieServer",
  363. command = "configure",
  364. config_file="default.json"
  365. )
  366. self.assert_configure_default()
  367. self.assertResourceCalled('Directory', '/etc/oozie/conf/action-conf/hive',
  368. owner = 'oozie',
  369. group = 'hadoop',
  370. recursive = True
  371. )
  372. self.assertResourceCalled('XmlConfig', 'hive-site',
  373. owner = 'oozie',
  374. group = 'hadoop',
  375. mode = 0664,
  376. conf_dir = '/etc/oozie/conf/action-conf/hive',
  377. configurations = self.getConfig()['configurations']['hive-site'],
  378. configuration_attributes = self.getConfig()['configuration_attributes']['hive-site']
  379. )
  380. self.assertResourceCalled('XmlConfig', 'tez-site',
  381. owner = 'oozie',
  382. group = 'hadoop',
  383. mode = 0664,
  384. conf_dir = '/etc/oozie/conf/action-conf/hive',
  385. configurations = self.getConfig()['configurations']['tez-site'],
  386. configuration_attributes = self.getConfig()['configuration_attributes']['tez-site']
  387. )
  388. self.assertNoMoreResources()