| # test mod_md acme terms-of-service handling |
| |
| import pytest |
| |
| from .md_env import MDTestEnv |
| |
| |
| @pytest.mark.skipif(condition=not MDTestEnv.has_a2md(), reason="no a2md available") |
| @pytest.mark.skipif(condition=not MDTestEnv.has_acme_server(), |
| reason="no ACME test server configured") |
| class TestRegAdd: |
| |
| @pytest.fixture(autouse=True, scope='function') |
| def _method_scope(self, env): |
| env.purge_store() |
| |
| # test case: add a single dns managed domain |
| def test_md_100_000(self, env): |
| dns = "greenbytes.de" |
| jout1 = env.a2md(["add", dns]).json |
| env.check_json_contains(jout1['output'][0], { |
| "name": dns, |
| "domains": [dns], |
| "contacts": [], |
| "ca": { |
| "urls": [env.acme_url], |
| "proto": "ACME" |
| }, |
| "state": env.MD_S_INCOMPLETE |
| }) |
| assert env.a2md(["list"]).json == jout1 |
| |
| # test case: add > 1 dns managed domain |
| def test_md_100_001(self, env): |
| dns = ["greenbytes2.de", "www.greenbytes2.de", "mail.greenbytes2.de"] |
| jout1 = env.a2md(["add"] + dns).json |
| env.check_json_contains(jout1['output'][0], { |
| "name": dns[0], |
| "domains": dns, |
| "contacts": [], |
| "ca": { |
| "urls": [env.acme_url], |
| "proto": "ACME" |
| }, |
| "state": env.MD_S_INCOMPLETE |
| }) |
| assert env.a2md(["list"]).json == jout1 |
| |
| # test case: add second managed domain |
| def test_md_100_002(self, env): |
| dns1 = ["test100-002.com", "test100-002a.com", "test100-002b.com"] |
| env.a2md(["add"] + dns1) |
| # add second managed domain |
| dns2 = ["greenbytes2.de", "www.greenbytes2.de", "mail.greenbytes2.de"] |
| jout = env.a2md(["add"] + dns2).json |
| # assert: output covers only changed md |
| assert len(jout['output']) == 1 |
| env.check_json_contains(jout['output'][0], { |
| "name": dns2[0], |
| "domains": dns2, |
| "contacts": [], |
| "ca": { |
| "urls": [env.acme_url], |
| "proto": "ACME" |
| }, |
| "state": env.MD_S_INCOMPLETE |
| }) |
| assert len(env.a2md(["list"]).json['output']) == 2 |
| |
| # test case: add existing domain |
| def test_md_100_003(self, env): |
| dns = "greenbytes.de" |
| assert env.a2md(["add", dns]).exit_code == 0 |
| assert env.a2md(["add", dns]).exit_code == 1 |
| |
| # test case: add without CA URL |
| def test_md_100_004(self, env): |
| dns = "greenbytes.de" |
| jout1 = env.run([env.a2md_bin, "-d", env.store_dir, "-j", "add", dns]).json |
| assert len(jout1['output']) == 1 |
| env.check_json_contains(jout1['output'][0], { |
| "name": dns, |
| "domains": [dns], |
| "contacts": [], |
| "ca": { |
| "proto": "ACME" |
| }, |
| "state": env.MD_S_INCOMPLETE |
| }) |
| assert env.a2md(["list"]).json == jout1 |
| |
| # test case: add with invalid DNS |
| @pytest.mark.parametrize("invalid_dns", [ |
| "tld", "white sp.ace", "invalid.*.wildcard.com", "k\xc3ller.idn.com" |
| ]) |
| def test_md_100_005(self, env, invalid_dns): |
| assert env.a2md(["add", invalid_dns]).exit_code == 1 |
| assert env.a2md(["add", "test-100.de", invalid_dns]).exit_code == 1 |
| |
| # test case: add with invalid ACME URL |
| @pytest.mark.parametrize("invalid_url", [ |
| "no.schema/path", "http://white space/path", "http://bad.port:-1/path"]) |
| def test_md_100_006(self, env, invalid_url): |
| args = [env.a2md_bin, "-a", invalid_url, "-d", env.store_dir, "-j"] |
| dns = "greenbytes.de" |
| args.extend(["add", dns]) |
| assert env.run(args).exit_code == 1 |
| |
| # test case: add overlapping dns names |
| def test_md_100_007(self, env): |
| assert env.a2md(["add", "test-100.com", "test-101.com"]).exit_code == 0 |
| # 1: alternate DNS exists as primary name |
| assert env.a2md(["add", "greenbytes2.de", "test-100.com"]).exit_code == 1 |
| # 2: alternate DNS exists as alternate DNS |
| assert env.a2md(["add", "greenbytes2.de", "test-101.com"]).exit_code == 1 |
| # 3: primary name exists as alternate DNS |
| assert env.a2md(["add", "test-101.com"]).exit_code == 1 |
| |
| # test case: add subdomains as separate managed domain |
| def test_md_100_008(self, env): |
| assert env.a2md(["add", "test-100.com"]).exit_code == 0 |
| assert env.a2md(["add", "sub.test-100.com"]).exit_code == 0 |
| |
| # test case: add duplicate domain |
| def test_md_100_009(self, env): |
| dns1 = "test-100.com" |
| dns2 = "test-101.com" |
| jout = env.a2md(["add", dns1, dns2, dns1, dns2]).json |
| # DNS is only listed once |
| assert len(jout['output']) == 1 |
| md = jout['output'][0] |
| assert md['domains'] == [dns1, dns2] |
| |
| # test case: add pnuycode name |
| def test_md_100_010(self, env): |
| assert env.a2md(["add", "xn--kller-jua.punycode.de"]).exit_code == 0 |
| |
| # test case: don't sort alternate names |
| def test_md_100_011(self, env): |
| dns = ["test-100.com", "test-xxx.com", "test-aaa.com"] |
| jout = env.a2md(["add"] + dns).json |
| # DNS is only listed as specified |
| assert len(jout['output']) == 1 |
| md = jout['output'][0] |
| assert md['domains'] == dns |
| |
| # test case: add DNS wildcard |
| @pytest.mark.parametrize("wild_dns", [ |
| "*.wildcard.com" |
| ]) |
| def test_md_100_012(self, env, wild_dns): |
| assert env.a2md(["add", wild_dns]).exit_code == 0 |