/src/Mobyle/Test/test_Admin.py

https://github.com/mobyle2-legacy/mobyle2.core · Python · 263 lines · 186 code · 25 blank · 52 comment · 4 complexity · 54549b8b16cab2b39c5c72ec00cc9e7f MD5 · raw file

  1. ########################################################################################
  2. # #
  3. # Author: Nicolas Joly #
  4. # Organization:'Biological Software and Databases' Group, Institut Pasteur, Paris. #
  5. # Distributed under GPLv2 Licence. Please refer to the COPYING.LIB document. #
  6. # #
  7. ########################################################################################
  8. import unittest2 as unittest
  9. import os, sys, stat
  10. import shutil
  11. from time import mktime
  12. MOBYLEHOME = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../"))
  13. os.environ['MOBYLEHOME'] = MOBYLEHOME
  14. if (MOBYLEHOME) not in sys.path:
  15. sys.path.append(MOBYLEHOME)
  16. if (os.path.join(MOBYLEHOME, 'Src')) not in sys.path:
  17. sys.path.append(os.path.join(MOBYLEHOME, 'Src'))
  18. import Mobyle.Test.MobyleTest
  19. from Mobyle.MobyleError import MobyleError
  20. from Mobyle.Admin import Admin
  21. class AdminTest(unittest.TestCase):
  22. def setUp(self):
  23. ## Config
  24. self.cfg = Mobyle.ConfigManager.Config()
  25. ## Inits
  26. shutil.rmtree(self.cfg.test_dir, ignore_errors=True)
  27. os.makedirs(self.cfg.test_dir)
  28. self.cwd = os.getcwd()
  29. os.chdir(self.cfg.test_dir)
  30. ## Admin
  31. self.adm = self._fakeadmin()
  32. def tearDown(self):
  33. os.chdir(self.cwd)
  34. shutil.rmtree(self.cfg.test_dir)
  35. def testAdmin(self):
  36. ## Check valid paths
  37. Admin(".")
  38. Admin(Admin.FILENAME)
  39. ## Check invalid paths
  40. adm_dir = "dummy"
  41. self.assertRaises(MobyleError, Admin, adm_dir)
  42. os.makedirs(adm_dir)
  43. self.assertRaises(MobyleError, Admin, adm_dir)
  44. ## Empty file (fails silently)
  45. open(Admin.FILENAME, 'w').close()
  46. Admin(Admin.FILENAME)
  47. ## Missing read permissions
  48. os.chmod(Admin.FILENAME, 0222)
  49. self.assertRaises(MobyleError, Admin, ".")
  50. def testcreate(self):
  51. ## Create a minimal admin file
  52. os.unlink(Admin.FILENAME)
  53. Admin.create(self.cfg.test_dir, None, None, None)
  54. ## Should fail if already exists
  55. self.assertTrue(os.access(Admin.FILENAME, os.F_OK))
  56. self.assertRaises(MobyleError, Admin.create, self.cfg.test_dir, None, None, None)
  57. ## Check alternate path
  58. altdir = os.path.join(self.cfg.test_dir, "alternate")
  59. os.makedirs(altdir)
  60. Admin.create(altdir, None, None, None)
  61. def testrefresh(self):
  62. adm_queue = 'mobyle'
  63. self.assertEqual(self.adm.getQueue(), None)
  64. adm = Admin(Admin.FILENAME)
  65. adm.setQueue(adm_queue)
  66. adm.commit()
  67. self.assertEqual(self.adm.getQueue(), None)
  68. self.adm.refresh()
  69. self.assertEqual(self.adm.getQueue(), adm_queue)
  70. def testcommit(self):
  71. ## Commit should update file
  72. bef = os.stat(Admin.FILENAME)
  73. adm = Admin(Admin.FILENAME)
  74. adm.commit()
  75. aft = os.stat(Admin.FILENAME)
  76. self.assertTrue(bef.st_ino != aft.st_ino and bef.st_mtime <= aft.st_mtime)
  77. ## Cannot create/rename temporary file
  78. mod = os.stat(".").st_mode
  79. os.chmod(".", mod & ~stat.S_IWUSR)
  80. self.assertRaises(MobyleError, adm.commit)
  81. os.chmod(".", mod)
  82. ## Nothing to save (fails silently)
  83. adm.me.clear()
  84. adm.commit()
  85. def testDate(self):
  86. ## Ensure this is a valid date
  87. date = self.adm.getDate()
  88. mktime(date)
  89. ## Missing key
  90. self.adm.me.clear()
  91. self.assertEqual(self.adm.getDate(), None)
  92. def testEmail(self):
  93. adm_email = "user@domain.fr"
  94. ## Created without email info
  95. os.unlink(Admin.FILENAME)
  96. Admin.create(self.cfg.test_dir, None, None, None)
  97. adm = Admin(Admin.FILENAME)
  98. self.assertEqual(adm.getEmail(), None)
  99. ## Created with email info
  100. os.unlink(Admin.FILENAME)
  101. Admin.create(self.cfg.test_dir, None, None, None, userEmail=adm_email)
  102. adm = Admin(".")
  103. self.assertEqual(adm.getEmail(), adm_email)
  104. ## Missing key
  105. adm.me.clear()
  106. self.assertEqual(adm.getEmail(), None)
  107. def testRemote(self):
  108. adm_remote = "127.0.0.1/localhost"
  109. ## Created without remote info
  110. os.unlink(Admin.FILENAME)
  111. Admin.create(self.cfg.test_dir, None, None, None)
  112. adm = Admin(Admin.FILENAME)
  113. self.assertEqual(adm.getRemote(), str(None))
  114. ## Created with remote info
  115. os.unlink(Admin.FILENAME)
  116. Admin.create(self.cfg.test_dir, adm_remote, None, None)
  117. adm = Admin(Admin.FILENAME)
  118. self.assertEqual(adm.getRemote(), adm_remote)
  119. ## Missing key
  120. adm.me.clear()
  121. self.assertEqual(adm.getRemote(), None)
  122. def testWorkflow(self):
  123. workflowID = "adm_dummy"
  124. ## Created without session info
  125. os.unlink(Admin.FILENAME)
  126. Admin.create(self.cfg.test_dir, None, None, None)
  127. adm = Admin(Admin.FILENAME)
  128. self.assertEqual(adm.getWorkflowID(), None)
  129. ## Created with session info
  130. os.unlink(Admin.FILENAME)
  131. Admin.create(self.cfg.test_dir , None, None, None, workflowID=workflowID)
  132. adm = Admin(Admin.FILENAME)
  133. self.assertEqual(adm.getWorkflowID(), workflowID)
  134. ## Missing key
  135. adm.me.clear()
  136. self.assertEqual(adm.getWorkflowID(), None)
  137. def testSession(self):
  138. adm_session = "adm_dummy"
  139. ## Created without session info
  140. os.unlink(Admin.FILENAME)
  141. Admin.create(self.cfg.test_dir, None, None, None)
  142. adm = Admin(Admin.FILENAME)
  143. self.assertEqual(adm.getSession(), None)
  144. ## Created with session info
  145. os.unlink(Admin.FILENAME)
  146. Admin.create(self.cfg.test_dir, None, None, None, sessionID=adm_session)
  147. adm = Admin(Admin.FILENAME)
  148. self.assertEqual(adm.getSession(), adm_session)
  149. ## Missing key
  150. adm.me.clear()
  151. self.assertEqual(adm.getSession(), None)
  152. def testJobName(self):
  153. adm_jobname = "adm_dummy"
  154. ## Created without job name info
  155. os.unlink(Admin.FILENAME)
  156. Admin.create(self.cfg.test_dir, None, None, None)
  157. adm = Admin(Admin.FILENAME)
  158. self.assertEqual(adm.getJobName(), str(None))
  159. ## Created with job name info
  160. os.unlink(Admin.FILENAME)
  161. Admin.create(self.cfg.test_dir, None, adm_jobname, None)
  162. adm = Admin(Admin.FILENAME)
  163. self.assertEqual(adm.getJobName(), adm_jobname)
  164. ## Missing key
  165. adm.me.clear()
  166. self.assertEqual(adm.getJobName(), None)
  167. def testJobID(self):
  168. adm_jobid = "adm_dummy"
  169. ## Created without job id info
  170. os.unlink(Admin.FILENAME)
  171. Admin.create(self.cfg.test_dir, None, None, None)
  172. adm = Admin(Admin.FILENAME)
  173. self.assertEqual(adm.getJobID(), str(None))
  174. ## Created with job id info
  175. os.unlink(Admin.FILENAME)
  176. Admin.create(self.cfg.test_dir, None, None, adm_jobid)
  177. adm = Admin(Admin.FILENAME)
  178. self.assertEqual(adm.getJobID(), adm_jobid)
  179. ## Missing key
  180. adm.me.clear()
  181. self.assertEqual(adm.getJobID(), None)
  182. def testMD5(self):
  183. adm_md5 = "adm_dummy"
  184. ## Default
  185. os.unlink(Admin.FILENAME)
  186. Admin.create(self.cfg.test_dir, None, None, None)
  187. adm = Admin(Admin.FILENAME)
  188. self.assertEqual(adm.getMd5(), None)
  189. ## Set value
  190. adm.setMd5(adm_md5)
  191. self.assertEqual(adm.getMd5(), adm_md5)
  192. ## Missing key
  193. adm.me.clear()
  194. self.assertEqual(adm.getMd5(), None)
  195. def testExecutionAlias(self):
  196. adm_executionalias = "adm_dummy"
  197. ## Default
  198. os.unlink(Admin.FILENAME)
  199. Admin.create(self.cfg.test_dir, None, None, None)
  200. adm = Admin(Admin.FILENAME)
  201. self.assertEqual(adm.getExecutionAlias(), None)
  202. ## Set value
  203. adm.setExecutionAlias(adm_executionalias)
  204. self.assertEqual(adm.getExecutionAlias(), adm_executionalias)
  205. ## Missing key
  206. adm.me.clear()
  207. self.assertEqual(adm.getExecutionAlias(), None)
  208. def testQueue(self):
  209. adm_queue = "adm_dummy"
  210. ## Default
  211. os.unlink(Admin.FILENAME)
  212. Admin.create(self.cfg.test_dir, None, None, None)
  213. adm = Admin(Admin.FILENAME)
  214. self.assertEqual(adm.getQueue(), None)
  215. ## Set value
  216. adm.setQueue(adm_queue)
  217. self.assertEqual(adm.getQueue(), adm_queue)
  218. ## Missing key
  219. adm.me.clear()
  220. self.assertEqual(adm.getQueue(), None)
  221. def testNumber(self):
  222. adm_number = "adm_dummy"
  223. ## Default
  224. os.unlink(Admin.FILENAME)
  225. Admin.create(self.cfg.test_dir, None, None, None)
  226. adm = Admin(Admin.FILENAME)
  227. self.assertEqual(adm.getNumber(), None)
  228. ## Set value
  229. adm.setNumber(adm_number)
  230. self.assertEqual(adm.getNumber(), adm_number)
  231. ## Missing key
  232. adm.me.clear()
  233. self.assertEqual(adm.getNumber(), None)
  234. def _fakeadmin(self):
  235. Admin.create(self.cfg.test_dir, None, None, None)
  236. return Admin(".")
  237. if __name__ == '__main__':
  238. unittest.main()