# 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