# test mod_md acme terms-of-service handling
import re
import pytest
from .md_env
import MDTestEnv
def md_name(md):
return md[
'name' ]
@pytest.mark.skipif(condition=
not MDTestEnv.has_a2md(), reason=
"no a2md available" )
class TestStore:
@pytest.fixture(autouse=
True , scope=
'function' )
def _method_scope(self, env):
env.purge_store()
# verify expected binary version
def test_md_001_001(self, env: MDTestEnv):
r = env.run([env.a2md_bin,
"-V" ])
m = re.match(r
'version: (\d+\.\d+\.\d+)(-git)?$' , r.stdout)
assert m, f
"expected version info in '{r.stdout}'"
# verify that store is clean
def test_md_001_002(self, env: MDTestEnv):
r = env.run([
"find" , env.store_dir])
assert re.match(env.store_dir, r.stdout)
# test case: add a single dns managed domain
def test_md_001_100(self, env: MDTestEnv):
dns =
"greenbytes.de"
env.check_json_contains(
env.a2md([
"store" ,
"add" , dns]).json[
'output' ][0],
{
"name" : dns,
"domains" : [dns],
"contacts" : [],
"ca" : {
"urls" : [env.acme_url],
"proto" :
"ACME"
},
"state" : 0
})
# test case: add > 1 dns managed domain
def test_md_001_101(self, env: MDTestEnv):
dns = [
"greenbytes2.de" ,
"www.greenbytes2.de" ,
"mail.greenbytes2.de" ]
env.check_json_contains(
env.a2md([
"store" ,
"add" ] + dns).json[
'output' ][0],
{
"name" : dns[0],
"domains" : dns,
"contacts" : [],
"ca" : {
"urls" : [env.acme_url],
"proto" :
"ACME"
},
"state" : 0
})
# test case: add second managed domain
def test_md_001_102(self, env: MDTestEnv):
dns1 = [
"test000-102.com" ,
"test000-102a.com" ,
"test000-102b.com" ]
assert env.a2md([
"store" ,
"add" ] + dns1).exit_code == 0
#
# add second managed domain
dns2 = [
"greenbytes2.de" ,
"www.greenbytes2.de" ,
"mail.greenbytes2.de" ]
jout = env.a2md([
"store" ,
"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" : 0
})
# test case: add existing domain
def test_md_001_103(self, env: MDTestEnv):
dns =
"greenbytes.de"
assert env.a2md([
"store" ,
"add" , dns]).exit_code == 0
# add same domain again
assert env.a2md([
"store" ,
"add" , dns]).exit_code == 1
# test case: add without CA URL
def test_md_001_104(self, env: MDTestEnv):
dns =
"greenbytes.de"
args = [env.a2md_bin,
"-d" , env.store_dir,
"-j" ,
"store" ,
"add" , dns]
jout = env.run(args).json
assert len(jout[
'output' ]) == 1
env.check_json_contains(jout[
'output' ][0], {
"name" : dns,
"domains" : [dns],
"contacts" : [],
"ca" : {
"proto" :
"ACME"
},
"state" : 0
})
# test case: list empty store
def test_md_001_200(self, env: MDTestEnv):
assert env.a2md([
"store" ,
"list" ]).json == env.EMPTY_JOUT
# test case: list two managed domains
def test_md_001_201(self, env: MDTestEnv):
domains = [
[
"test000-201.com" ,
"test000-201a.com" ,
"test000-201b.com" ],
[
"greenbytes2.de" ,
"www.greenbytes2.de" ,
"mail.greenbytes2.de" ]
]
for dns
in domains:
assert env.a2md([
"store" ,
"add" ] + dns).exit_code == 0
#
# list all store content
jout = env.a2md([
"store" ,
"list" ]).json
assert len(jout[
'output' ]) == len(domains)
domains.reverse()
jout[
'output' ] = sorted(jout[
'output' ], key=md_name)
for i
in range(0, len(jout[
'output' ])):
env.check_json_contains(jout[
'output' ][i], {
"name" : domains[i][0],
"domains" : domains[i],
"contacts" : [],
"ca" : {
"urls" : [env.acme_url],
"proto" :
"ACME"
},
"state" : 0
})
# test case: remove managed domain
def test_md_001_300(self, env: MDTestEnv):
dns =
"test000-300.com"
assert env.a2md([
"store" ,
"add" , dns]).exit_code == 0
assert env.a2md([
"store" ,
"remove" , dns]).json == env.EMPTY_JOUT
assert env.a2md([
"store" ,
"list" ]).json == env.EMPTY_JOUT
# test case: remove from list of managed domains
def test_md_001_301(self, env: MDTestEnv):
dns1 = [
"test000-301.com" ,
"test000-301a.com" ,
"test000-301b.com" ]
assert env.a2md([
"store" ,
"add" ] + dns1).exit_code == 0
#
dns2 = [
"greenbytes2.de" ,
"www.greenbytes2.de" ,
"mail.greenbytes2.de" ]
jout1 = env.a2md([
"store" ,
"add" ] + dns2).json
# remove managed domain
assert env.a2md([
"store" ,
"remove" ,
"test000-301.com" ]).json == env.EMPTY_JOUT
# list store content
assert env.a2md([
"store" ,
"list" ]).json == jout1
# test case: remove nonexisting managed domain
def test_md_001_302(self, env: MDTestEnv):
dns1 =
"test000-302.com"
r = env.a2md([
"store" ,
"remove" , dns1])
assert r.exit_code == 1
assert r.json == {
'status' : 2,
'description' :
'No such file or directory' ,
'output' : []
}
# test case: force remove nonexisting managed domain
def test_md_001_303(self, env: MDTestEnv):
dns1 =
"test000-303.com"
assert env.a2md([
"store" ,
"remove" ,
"-f" , dns1]).json == env.EMPTY_JOUT
# test case: null change
def test_md_001_400(self, env: MDTestEnv):
dns =
"test000-400.com"
r1 = env.a2md([
"store" ,
"add" , dns])
assert env.a2md([
"store" ,
"update" , dns]).json == r1.json
# test case: add dns to managed domain
def test_md_001_401(self, env: MDTestEnv):
dns1 =
"test000-401.com"
env.a2md([
"store" ,
"add" , dns1])
dns2 =
"test-101.com"
args = [
"store" ,
"update" , dns1,
"domains" , dns1, dns2]
assert env.a2md(args).json[
'output' ][0][
'domains' ] == [dns1, dns2]
# test case: change CA URL
def test_md_001_402(self, env: MDTestEnv):
dns =
"test000-402.com"
args = [
"store" ,
"add" , dns]
assert env.a2md(args).json[
'output' ][0][
'ca' ][
'urls' ][0] == env.acme_url
nurl =
"https://foo.com/ "
args = [env.a2md_bin,
"-a" , nurl,
"-d" , env.store_dir,
"-j" ,
"store" ,
"update" , dns]
assert env.run(args).json[
'output' ][0][
'ca' ][
'urls' ][0] == nurl
# test case: update nonexisting managed domain
def test_md_001_403(self, env: MDTestEnv):
dns =
"test000-403.com"
assert env.a2md([
"store" ,
"update" , dns]).exit_code == 1
# test case: update domains, throw away md name
def test_md_001_404(self, env: MDTestEnv):
dns1 =
"test000-404.com"
dns2 =
"greenbytes.com"
args = [
"store" ,
"add" , dns1]
assert env.a2md(args).json[
'output' ][0][
'domains' ] == [dns1]
# override domains list
args = [
"store" ,
"update" , dns1,
"domains" , dns2]
assert env.a2md(args).json[
'output' ][0][
'domains' ] == [dns2]
# test case: update domains with empty dns list
def test_md_001_405(self, env: MDTestEnv):
dns1 =
"test000-405.com"
assert env.a2md([
"store" ,
"add" , dns1]).exit_code == 0
assert env.a2md([
"store" ,
"update" , dns1,
"domains" ]).exit_code == 1
Messung V0.5 in Prozent C=94 H=91 G=92
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-04-25)
¤
*© Formatika GbR, Deutschland