From f16489f762f3e0dd50f010850e9b61c7d01db4df Mon Sep 17 00:00:00 2001 From: Jacob Hoffman-Andrews Date: Sun, 11 Oct 2015 12:19:39 -0700 Subject: [PATCH] Go back to hasattr and add a test. --- .../letsencrypt_nginx/tests/parser_test.py | 12 ++++++++++-- letsencrypt-nginx/letsencrypt_nginx/tests/util.py | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/letsencrypt-nginx/letsencrypt_nginx/tests/parser_test.py b/letsencrypt-nginx/letsencrypt_nginx/tests/parser_test.py index a22d33e9c..40ef37e2f 100644 --- a/letsencrypt-nginx/letsencrypt_nginx/tests/parser_test.py +++ b/letsencrypt-nginx/letsencrypt_nginx/tests/parser_test.py @@ -131,12 +131,14 @@ class NginxParserTest(util.NginxTest): ssl_re = re.compile(r'\n\s+ssl_certificate /etc/ssl/cert.pem') dump = nginxparser.dumps(nparser.parsed[nparser.abs_path('nginx.conf')]) self.assertEqual(1, len(re.findall(ssl_re, dump))) - nparser.add_server_directives(nparser.abs_path('server.conf'), + + server_conf = nparser.abs_path('server.conf') + nparser.add_server_directives(server_conf, set(['alias', 'another.alias', 'somename']), [['foo', 'bar'], ['ssl_certificate', '/etc/ssl/cert2.pem']]) - self.assertEqual(nparser.parsed[nparser.abs_path('server.conf')], + self.assertEqual(nparser.parsed[server_conf], [['ssl_certificate', '/etc/ssl/cert2.pem'], ['foo', 'bar'], ['server_name', 'somename alias another.alias']]) @@ -152,6 +154,12 @@ class NginxParserTest(util.NginxTest): self.assertTrue(util.contains_at_depth(root, ['http'], 1)) self.assertTrue(util.contains_at_depth(root, block, 2)) + # Check that our server block got inserted first among all server + # blocks. + http_block = filter(lambda x: x[0] == ['http'], root)[0][1] + server_blocks = filter(lambda x: x[0] == ['server'], http_block) + self.assertEqual(server_blocks[0], block) + def test_replace_server_directives(self): nparser = parser.NginxParser(self.config_path, self.ssl_options) target = set(['.example.com', 'example.*']) diff --git a/letsencrypt-nginx/letsencrypt_nginx/tests/util.py b/letsencrypt-nginx/letsencrypt_nginx/tests/util.py index 9cfa6a1a1..953c5d367 100644 --- a/letsencrypt-nginx/letsencrypt_nginx/tests/util.py +++ b/letsencrypt-nginx/letsencrypt_nginx/tests/util.py @@ -93,7 +93,9 @@ def contains_at_depth(haystack, needle, n): Return true if the needle is present in one of the sub-iterables in haystack at depth n. Haystack must be an iterable. """ - if not isinstance(haystack, collections.Iterable): + # Specifically use hasattr rather than isinstance(..., collections.Iterable) + # because we want to include lists but reject strings. + if not hasattr(haystack, '__iter__'): return False if n == 0: return needle in haystack