diff options
author | Rob Austein <sra@hactrn.net> | 2011-12-14 04:01:52 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2011-12-14 04:01:52 +0000 |
commit | fc2941d92286ca1e01400c3a46abbd88b411f6f8 (patch) | |
tree | 0affd828b74cf0a33f0a928662666e191c0dc8f9 /rpkid/tests | |
parent | 3437696dc1da196ba5f5cbf747c576377250b495 (diff) |
Start hacking replacement for myrpki comamnd (rpkic) which uses the
new Django-model-based entitydb and IRDB.
svn path=/branches/tk100/; revision=4121
Diffstat (limited to 'rpkid/tests')
-rw-r--r-- | rpkid/tests/smoketest.py | 12 | ||||
-rw-r--r-- | rpkid/tests/sql-cleaner.py | 33 | ||||
-rw-r--r-- | rpkid/tests/yamltest.py | 40 |
3 files changed, 52 insertions, 33 deletions
diff --git a/rpkid/tests/smoketest.py b/rpkid/tests/smoketest.py index 189f6d6a..4c888f67 100644 --- a/rpkid/tests/smoketest.py +++ b/rpkid/tests/smoketest.py @@ -1269,16 +1269,12 @@ def mangle_sql(filename): """ Mangle an SQL file into a sequence of SQL statements. """ - - # There is no pretty way to do this. Just shut your eyes, it'll be - # over soon. - + words = [] f = open(filename) - statements = " ".join(" ".join(word for word in line.expandtabs().split(" ") if word) - for line in [line.strip(" \t\n") for line in f.readlines()] - if line and not line.startswith("--")).rstrip(";").split(";") + for line in f: + words.extend(line.partition("--")[0].split()) f.close() - return [stmt.strip() for stmt in statements] + return " ".join(words).strip(";").split(";") bpki_cert_fmt_1 = '''\ [ req ] diff --git a/rpkid/tests/sql-cleaner.py b/rpkid/tests/sql-cleaner.py index 5c772bc4..5d11781f 100644 --- a/rpkid/tests/sql-cleaner.py +++ b/rpkid/tests/sql-cleaner.py @@ -3,7 +3,7 @@ $Id$ -Copyright (C) 2009--2010 Internet Systems Consortium ("ISC") +Copyright (C) 2009--2011 Internet Systems Consortium ("ISC") Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -18,7 +18,8 @@ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ -import subprocess, rpki.config +import rpki.config, rpki.sql_schemas +from rpki.mysql_import import MySQLdb cfg = rpki.config.parser(None, "yamltest", allow_missing = True) @@ -26,8 +27,30 @@ for name in ("rpkid", "irdbd", "pubd"): username = cfg.get("%s_sql_username" % name, name[:4]) password = cfg.get("%s_sql_password" % name, "fnord") + + schema = [] + for line in getattr(rpki.sql_schemas, name).splitlines(): + schema.extend(line.partition("--")[0].split()) + schema = " ".join(schema).strip(";").split(";") + schema = [statement.strip() for statement in schema if "DROP TABLE" not in statement] for i in xrange(12): - subprocess.check_call( - ("mysql", "-u", username, "-p" + password, "%s%d" % (name[:4], i)), - stdin = open("../%s.sql" % name)) + + database = "%s%d" % (name[:4], i) + + db = MySQLdb.connect(user = username, db = database, passwd = password) + cur = db.cursor() + + cur.execute("SHOW TABLES") + tables = [r[0] for r in cur.fetchall()] + + cur.execute("SET foreign_key_checks = 0") + for table in tables: + cur.execute("DROP TABLE %s" % table) + cur.execute("SET foreign_key_checks = 1") + + for statement in schema: + cur.execute(statement) + + cur.close() + db.close() diff --git a/rpkid/tests/yamltest.py b/rpkid/tests/yamltest.py index ecd00af2..403076f1 100644 --- a/rpkid/tests/yamltest.py +++ b/rpkid/tests/yamltest.py @@ -1,6 +1,6 @@ """ Test framework, using the same YAML test description format as -smoketest.py, but using the myrpki.py tool to do all the back-end +smoketest.py, but using the rpkic.py tool to do all the back-end work. Reads YAML file, generates .csv and .conf files, runs daemons and waits for one of them to exit. @@ -10,7 +10,7 @@ Still to do: - Implement smoketest.py-style delta actions, that is, modify the allocation database under control of the YAML file, dump out new - .csv files, and run myrpki.py again to feed resulting changes into + .csv files, and run rpkic.py again to feed resulting changes into running daemons. $Id$ @@ -46,7 +46,7 @@ PERFORMANCE OF THIS SOFTWARE. """ import subprocess, re, os, getopt, sys, yaml, signal, time -import rpki.resource_set, rpki.sundial, rpki.config, rpki.log, rpki.myrpki +import rpki.resource_set, rpki.sundial, rpki.config, rpki.log, rpki.rpkic # Nasty regular expressions for parsing config files. Sadly, while # the Python ConfigParser supports writing config files, it does so in @@ -67,7 +67,7 @@ this_dir = os.getcwd() test_dir = cleanpath(this_dir, "yamltest.dir") rpkid_dir = cleanpath(this_dir, "..") -prog_myrpki = cleanpath(rpkid_dir, "myrpki.py") +prog_rpkic = cleanpath(rpkid_dir, "rpkic.py") prog_rpkid = cleanpath(rpkid_dir, "rpkid.py") prog_irdbd = cleanpath(rpkid_dir, "irdbd.py") prog_pubd = cleanpath(rpkid_dir, "pubd.py") @@ -154,7 +154,7 @@ class allocation_db(list): class allocation(object): """ One entity in our allocation database. Every entity in the database - is assumed to hold resources, so needs at least myrpki services. + is assumed to hold resources, so needs at least rpkic services. Entities that don't have the hosted_by property run their own copies of rpkid, irdbd, and pubd, so they also need myirbe services. """ @@ -290,12 +290,12 @@ class allocation(object): def csvout(self, fn): """ Open and log a CSV output file. We use delimiter and dialect - settings imported from the myrpki module, so that we automatically + settings imported from the rpkic module, so that we automatically write CSV files in the right format. """ path = self.path(fn) print "Writing", path - return rpki.myrpki.csv_writer(path) + return rpki.rpkic.csv_writer(path) def up_down_url(self): """ @@ -465,20 +465,20 @@ class allocation(object): print "%s is hosted, skipping configure_daemons" % self.name else: files = [h.path("myrpki.xml") for h in self.hosts] - self.run_myrpki("configure_daemons", *[f for f in files if os.path.exists(f)]) + self.run_rpkic("configure_daemons", *[f for f in files if os.path.exists(f)]) def run_configure_resources(self): """ Run configure_resources for this entity. """ - self.run_myrpki("configure_resources") + self.run_rpkic("configure_resources") - def run_myrpki(self, *args): + def run_rpkic(self, *args): """ - Run myrpki.py for this entity. + Run rpkic.py for this entity. """ - print 'Running "%s" for %s' % (" ".join(("myrpki",) + args), self.name) - subprocess.check_call((sys.executable, prog_myrpki) + args, cwd = self.path()) + print 'Running "%s" for %s' % (" ".join(("rpkic",) + args), self.name) + subprocess.check_call((sys.executable, prog_rpkic) + args, cwd = self.path()) def run_python_daemon(self, prog): """ @@ -623,7 +623,7 @@ try: # Initialize BPKI and generate self-descriptor for each entity. for d in db: - d.run_myrpki("initialize") + d.run_rpkic("initialize") # Create publication directories. @@ -660,19 +660,19 @@ try: print "Configuring", d.name print if d.is_root(): - d.run_myrpki("configure_publication_client", d.path("entitydb", "repositories", "%s.xml" % d.name)) + d.run_rpkic("configure_publication_client", d.path("entitydb", "repositories", "%s.xml" % d.name)) print - d.run_myrpki("configure_repository", d.path("entitydb", "pubclients", "%s.xml" % d.name)) + d.run_rpkic("configure_repository", d.path("entitydb", "pubclients", "%s.xml" % d.name)) print else: - d.parent.run_myrpki("configure_child", d.path("entitydb", "identity.xml")) + d.parent.run_rpkic("configure_child", d.path("entitydb", "identity.xml")) print - d.run_myrpki("configure_parent", d.parent.path("entitydb", "children", "%s.xml" % d.name)) + d.run_rpkic("configure_parent", d.parent.path("entitydb", "children", "%s.xml" % d.name)) print publisher, path = d.find_pubd() - publisher.run_myrpki("configure_publication_client", d.path("entitydb", "repositories", "%s.xml" % d.parent.name)) + publisher.run_rpkic("configure_publication_client", d.path("entitydb", "repositories", "%s.xml" % d.parent.name)) print - d.run_myrpki("configure_repository", publisher.path("entitydb", "pubclients", "%s.xml" % path)) + d.run_rpkic("configure_repository", publisher.path("entitydb", "pubclients", "%s.xml" % path)) print parent_host = d.parent.find_host() if d.parent is not parent_host: |