PageRenderTime 49ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/test/dnslsusergroup_test.py

http://roster-dns-management.googlecode.com/
Python | 320 lines | 258 code | 28 blank | 34 comment | 2 complexity | 5a8770abe4591ba920a8aa8551726fb3 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. #!/usr/bin/python
  2. # Copyright (c) 2009, Purdue University
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions are met:
  7. #
  8. # Redistributions of source code must retain the above copyright notice, this
  9. # list of conditions and the following disclaimer.
  10. #
  11. # Redistributions in binary form must reproduce the above copyright notice, this
  12. # list of conditions and the following disclaimer in the documentation and/or
  13. # other materials provided with the distribution.
  14. #
  15. # Neither the name of the Purdue University nor the names of its contributors
  16. # may be used to endorse or promote products derived from this software without
  17. # specific prior written permission.
  18. #
  19. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  20. # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  22. # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  23. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  25. # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  26. # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  27. # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. """Regression test for dnslsusergroup
  30. Make sure you are running this against a database that can be destroyed.
  31. DO NOT EVER RUN THIS TEST AGAINST A PRODUCTION DATABASE.
  32. """
  33. __copyright__ = 'Copyright (C) 2009, Purdue University'
  34. __license__ = 'BSD'
  35. __version__ = '#TRUNK#'
  36. import os
  37. import sys
  38. import socket
  39. import threading
  40. import time
  41. import getpass
  42. import unittest
  43. import roster_core
  44. import roster_server
  45. from roster_user_tools import roster_client_lib
  46. USER_CONFIG = 'test_data/roster_user_tools.conf'
  47. CONFIG_FILE = 'test_data/roster.conf' # Example in test_data
  48. SCHEMA_FILE = '../roster-core/data/database_schema.sql'
  49. DATA_FILE = 'test_data/test_data.sql'
  50. HOST = u'localhost'
  51. USERNAME = u'sharrell'
  52. PASSWORD = u'test'
  53. KEYFILE=('test_data/dnsmgmt.key.pem')
  54. CERTFILE=('test_data/dnsmgmt.cert.pem')
  55. CREDFILE='%s/.dnscred' % os.getcwd()
  56. EXEC = '../roster-user-tools/scripts/dnslsusergroup'
  57. class options(object):
  58. password = u'test'
  59. username = u'sharrell'
  60. server = None
  61. ldap = u'ldaps://ldap.cs.university.edu:636'
  62. credfile = CREDFILE
  63. view_name = None
  64. ip_address = None
  65. target = u'machine1'
  66. ttl = 64
  67. class DaemonThread(threading.Thread):
  68. def __init__(self, config_instance, port):
  69. threading.Thread.__init__(self)
  70. self.config_instance = config_instance
  71. self.port = port
  72. self.daemon_instance = None
  73. def run(self):
  74. self.daemon_instance = roster_server.Server(self.config_instance, KEYFILE,
  75. CERTFILE)
  76. self.daemon_instance.Serve(port=self.port)
  77. class Testdnslsusergroup(unittest.TestCase):
  78. def setUp(self):
  79. def PickUnusedPort():
  80. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  81. s.bind((HOST, 0))
  82. addr, port = s.getsockname()
  83. s.close()
  84. return port
  85. self.config_instance = roster_core.Config(file_name=CONFIG_FILE)
  86. db_instance = self.config_instance.GetDb()
  87. db_instance.CreateRosterDatabase()
  88. data = open(DATA_FILE, 'r').read()
  89. db_instance.StartTransaction()
  90. db_instance.cursor.execute(data)
  91. db_instance.EndTransaction()
  92. db_instance.close()
  93. self.port = PickUnusedPort()
  94. self.server_name = 'https://%s:%s' % (HOST, self.port)
  95. self.daemon_thread = DaemonThread(self.config_instance, self.port)
  96. self.daemon_thread.daemon = True
  97. self.daemon_thread.start()
  98. self.core_instance = roster_core.Core(USERNAME, self.config_instance)
  99. self.password = 'test'
  100. time.sleep(1)
  101. roster_client_lib.GetCredentials(USERNAME, u'test', credfile=CREDFILE,
  102. server_name=self.server_name)
  103. def tearDown(self):
  104. if( os.path.exists(CREDFILE) ):
  105. os.remove(CREDFILE)
  106. def testListUserGroupUserGroupAssignments(self):
  107. output = os.popen('python %s assignment -s %s -u %s -p %s '
  108. '--config-file %s' % (
  109. EXEC, self.server_name, USERNAME, PASSWORD, USER_CONFIG))
  110. self.assertEqual(output.read(),
  111. 'username groups\n'
  112. '---------------\n'
  113. 'shuey bio,cs\n'
  114. 'sharrell cs\n\n')
  115. output.close()
  116. output = os.popen('python %s assignment -n sharrell -s %s -u %s -p %s '
  117. '--config-file %s' % (
  118. EXEC, self.server_name, USERNAME,
  119. PASSWORD, USER_CONFIG))
  120. self.assertEqual(output.read(), 'username groups\n'
  121. '---------------\n'
  122. 'sharrell cs\n\n')
  123. output.close()
  124. output = os.popen('python %s assignment -g cs -s %s -u %s -p %s '
  125. '--config-file %s' % (
  126. EXEC, self.server_name, USERNAME, PASSWORD,
  127. USER_CONFIG))
  128. self.assertEqual(output.read(), 'username groups\n'
  129. '---------------\n'
  130. 'shuey cs\n'
  131. 'sharrell cs\n\n')
  132. output.close()
  133. def testListGroup(self):
  134. output = os.popen('python %s group -s %s -u %s -p %s '
  135. '--config-file %s' % (
  136. EXEC, self.server_name, USERNAME, PASSWORD,
  137. USER_CONFIG))
  138. self.assertEqual(output.read(), 'group\n'
  139. '-----\n'
  140. 'bio\n'
  141. 'cs\n'
  142. 'eas\n\n')
  143. output.close()
  144. output = os.popen('python %s group -g eas -s %s -u %s -p %s '
  145. '--config-file %s' % (
  146. EXEC, self.server_name, USERNAME, PASSWORD,
  147. USER_CONFIG))
  148. self.assertEqual(output.read(), 'group\n'
  149. '-----\n'
  150. 'eas\n\n')
  151. output.close()
  152. def testListUser(self):
  153. output = os.popen('python %s user -s %s -u %s -p %s '
  154. '--config-file %s' % (
  155. EXEC, self.server_name, USERNAME, PASSWORD,
  156. USER_CONFIG))
  157. self.assertEqual(output.read(), 'username access_level\n'
  158. '-----------------------------\n'
  159. 'shuey 64\n'
  160. 'jcollins 32\n'
  161. 'tree_export_user 0\n'
  162. 'sharrell 128\n\n')
  163. output.close()
  164. output = os.popen('python %s user -n tree_export_user -s %s -u %s -p %s '
  165. '--config-file %s' % (
  166. EXEC, self.server_name, USERNAME, PASSWORD,
  167. USER_CONFIG))
  168. self.assertEqual(output.read(), 'username access_level\n'
  169. '-----------------------------\n'
  170. 'tree_export_user 0\n\n')
  171. output.close()
  172. output = os.popen('python %s user -a 128 -s %s -u %s -p %s '
  173. '--config-file %s' % (
  174. EXEC, self.server_name, USERNAME, PASSWORD,
  175. USER_CONFIG))
  176. self.assertEqual(output.read(), 'username access_level\n'
  177. '---------------------\n'
  178. 'sharrell 128\n\n')
  179. output.close()
  180. def testListReverseRangePermissions(self):
  181. self.core_instance.MakeGroup(u'group1')
  182. self.core_instance.MakeReverseRangePermission(u'10/8', u'group1', [u'ptr'])
  183. output = os.popen('python %s reverse -s %s -u %s -p %s '
  184. '--config-file %s' % (
  185. EXEC, self.server_name, USERNAME, PASSWORD,
  186. USER_CONFIG))
  187. self.assertEqual(
  188. output.read(),
  189. 'group cidr_block group_permission\n'
  190. '--------------------------------------\n'
  191. 'cs 192.168.0.0/24 [\'cname\', \'ns\', \'ptr\', \'soa\']\n'
  192. 'bio 192.168.0.0/24 [\'cname\', \'ptr\']\n'
  193. 'bio 192.168.1.0/24 [\'ptr\']\n'
  194. 'group1 10/8 [\'ptr\']\n\n')
  195. output.close()
  196. output = os.popen('python %s reverse -g bio -s %s -u %s -p %s '
  197. '--config-file %s' % (
  198. EXEC, self.server_name, USERNAME, PASSWORD,
  199. USER_CONFIG))
  200. self.assertEqual(output.read(),
  201. 'group cidr_block group_permission\n'
  202. '-------------------------------------\n'
  203. 'bio 192.168.0.0/24 [\'cname\', \'ptr\']\n'
  204. 'bio 192.168.1.0/24 [\'ptr\']\n\n')
  205. output.close()
  206. output = os.popen('python %s reverse --cidr-block 192.168.0.0/24 -s %s '
  207. '-u %s -p %s '
  208. '--config-file %s' % (
  209. EXEC, self.server_name, USERNAME, PASSWORD,
  210. USER_CONFIG))
  211. self.assertEqual(
  212. output.read(),
  213. 'group cidr_block group_permission\n'
  214. '-------------------------------------\n'
  215. 'cs 192.168.0.0/24 [\'cname\', \'ns\', \'ptr\', \'soa\']\n'
  216. 'bio 192.168.0.0/24 [\'cname\', \'ptr\']\n\n')
  217. output.close()
  218. output = os.popen('python %s reverse --group-permission ptr -s %s '
  219. '-u %s -p %s --config-file %s' % (
  220. EXEC, self.server_name, USERNAME, PASSWORD,
  221. USER_CONFIG))
  222. self.assertEqual(output.read(),
  223. 'group cidr_block group_permission\n'
  224. '--------------------------------------\n'
  225. 'bio 192.168.1.0/24 [\'ptr\']\n'
  226. 'group1 10/8 [\'ptr\']\n\n')
  227. output.close()
  228. self.core_instance.MakeGroup(u'group2')
  229. self.core_instance.MakeReverseRangePermission(u'10/8', u'group2', [])
  230. output = os.popen('python %s reverse -s %s -u %s -p %s '
  231. '--config-file %s' % (
  232. EXEC, self.server_name, USERNAME, PASSWORD,
  233. USER_CONFIG))
  234. self.assertEqual(
  235. output.read(),
  236. 'group cidr_block group_permission\n'
  237. '--------------------------------------\n'
  238. 'cs 192.168.0.0/24 [\'cname\', \'ns\', \'ptr\', \'soa\']\n'
  239. 'bio 192.168.0.0/24 [\'cname\', \'ptr\']\n'
  240. 'bio 192.168.1.0/24 [\'ptr\']\n'
  241. 'group1 10/8 [\'ptr\']\n'
  242. 'group2 10/8 []\n\n')
  243. output.close()
  244. def testForwardZonePermission(self):
  245. output = os.popen('python %s forward -s %s '
  246. '-u %s -p %s '
  247. '--config-file %s' % (
  248. EXEC, self.server_name, USERNAME, PASSWORD,
  249. USER_CONFIG))
  250. self.assertEqual(
  251. output.read(),
  252. 'group zone_name group_permission\n'
  253. '-----------------------------------------\n'
  254. 'cs cs.university.edu [\'a\', \'aaaa\', \'cname\', \'ns\', \'soa\']\n'
  255. 'cs eas.university.edu [\'a\', \'aaaa\', \'cname\']\n'
  256. 'bio bio.university.edu [\'a\', \'aaaa\']\n\n')
  257. output.close()
  258. output = os.popen('python %s forward -g bio -s %s '
  259. '-u %s -p %s '
  260. '--config-file %s' % (
  261. EXEC, self.server_name, USERNAME, PASSWORD,
  262. USER_CONFIG))
  263. self.assertEqual(
  264. output.read(), 'group zone_name group_permission\n'
  265. '-----------------------------------------\n'
  266. 'bio bio.university.edu [\'a\', \'aaaa\']\n\n')
  267. output.close()
  268. output = os.popen('python %s forward -z bio.university.edu -s %s '
  269. '-u %s -p %s '
  270. '--config-file %s' % (
  271. EXEC, self.server_name, USERNAME, PASSWORD,
  272. USER_CONFIG))
  273. self.assertEqual(
  274. output.read(), 'group zone_name group_permission\n'
  275. '-----------------------------------------\n'
  276. 'bio bio.university.edu [\'a\', \'aaaa\']\n\n')
  277. output.close()
  278. output = os.popen('python %s forward --group-permission a,aaaa,cname -s %s '
  279. '-u %s -p %s '
  280. '--config-file %s' % (
  281. EXEC, self.server_name, USERNAME, PASSWORD,
  282. USER_CONFIG))
  283. self.assertEqual(
  284. output.read(),
  285. 'group zone_name group_permission\n'
  286. '-----------------------------------------\n'
  287. 'cs eas.university.edu [\'a\', \'aaaa\', \'cname\']\n\n')
  288. output.close()
  289. if( __name__ == '__main__' ):
  290. unittest.main()