153 lines
5.5 KiB
Python
153 lines
5.5 KiB
Python
# 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
|