mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-08-21 07:43:08 +02:00
Merge pull request #3 in TM/task from ~UNODE/task:2.4.0 to 2.4.0
* commit '08c11da702
':
Testing
Testing
Testing certificates
Unittesting basemodule
This commit is contained in:
commit
14bfbb80b3
10 changed files with 438 additions and 2 deletions
|
@ -110,7 +110,7 @@ class BaseTestCase(unittest.TestCase):
|
||||||
command = ["./task"]
|
command = ["./task"]
|
||||||
command.extend(args)
|
command.extend(args)
|
||||||
|
|
||||||
p = Popen(command, stdin=stdin, stdout=PIPE, stderr=STDOUT)
|
p = Popen(command, stdin=stdin, stdout=PIPE, stderr=stderr)
|
||||||
out, err = p.communicate(input)
|
out, err = p.communicate(input)
|
||||||
# In python3 we will be able use the following instead of the previous
|
# In python3 we will be able use the following instead of the previous
|
||||||
# line to avoid locking if task is unexpectedly waiting for input
|
# line to avoid locking if task is unexpectedly waiting for input
|
||||||
|
@ -120,7 +120,6 @@ class BaseTestCase(unittest.TestCase):
|
||||||
# p.kill()
|
# p.kill()
|
||||||
# out, err = proc.communicate()
|
# out, err = proc.communicate()
|
||||||
|
|
||||||
|
|
||||||
return p.returncode, out, err
|
return p.returncode, out, err
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
186
test/basetest/taskd.py
Normal file
186
test/basetest/taskd.py
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import shutil
|
||||||
|
import signal
|
||||||
|
from time import sleep
|
||||||
|
from subprocess import Popen
|
||||||
|
from .utils import find_unused_port, release_port, port_used, run_cmd_wait
|
||||||
|
|
||||||
|
try:
|
||||||
|
from subprocess import DEVNULL
|
||||||
|
except ImportError:
|
||||||
|
DEVNULL = open(os.devnull, 'w')
|
||||||
|
|
||||||
|
# Location relative to current script location
|
||||||
|
_curdir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
DEFAULT_CERT_PATH = os.path.abspath(os.path.join(_curdir, "..", "test_certs"))
|
||||||
|
|
||||||
|
|
||||||
|
class TaskdServer(object):
|
||||||
|
"""Manage a taskd instance
|
||||||
|
|
||||||
|
A temporary folder is used as data store of taskd.
|
||||||
|
This class can be instanciated multiple times if multiple taskd servers are
|
||||||
|
needed.
|
||||||
|
|
||||||
|
This class implements mechanisms to automatically select an available port
|
||||||
|
and prevent assigning the same port to different instances.
|
||||||
|
|
||||||
|
A server can be stopped and started multiple times, but should not be
|
||||||
|
started or stopped after being destroyed.
|
||||||
|
"""
|
||||||
|
def __init__(self, taskd="taskd", certpath=None, address="127.0.0.1"):
|
||||||
|
"""Initialize a Task server that runs in the background and stores data
|
||||||
|
in a temporary folder
|
||||||
|
|
||||||
|
:arg taskd: Taskd binary to launch the server (defaults: taskd in PATH)
|
||||||
|
:arg certpath: Folder where to find all certificates needed for taskd
|
||||||
|
:arg address: Address to bind to
|
||||||
|
"""
|
||||||
|
self.taskd = taskd
|
||||||
|
# Will hold the taskd subprocess if it's running
|
||||||
|
self.proc = None
|
||||||
|
self.datadir = tempfile.mkdtemp()
|
||||||
|
self.tasklog = os.path.join(self.datadir, "taskd.log")
|
||||||
|
self.taskpid = os.path.join(self.datadir, "taskd.pid")
|
||||||
|
|
||||||
|
# Make sure no TASKDDATA is defined
|
||||||
|
try:
|
||||||
|
del os.environ["TASKDDATA"]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if certpath is None:
|
||||||
|
certpath = DEFAULT_CERT_PATH
|
||||||
|
self.certpath = certpath
|
||||||
|
|
||||||
|
self.address = address
|
||||||
|
self.port = find_unused_port()
|
||||||
|
|
||||||
|
# Keep all certificate paths public for access by TaskClients
|
||||||
|
self.client_cert = os.path.join(self.certpath, "client.cert.pem")
|
||||||
|
self.client_key = os.path.join(self.certpath, "client.key.pem")
|
||||||
|
self.server_cert = os.path.join(self.certpath, "server.cert.pem")
|
||||||
|
self.server_key = os.path.join(self.certpath, "server.key.pem")
|
||||||
|
self.server_crl = os.path.join(self.certpath, "server.crl.pem")
|
||||||
|
self.ca_cert = os.path.join(self.certpath, "ca.cert.pem")
|
||||||
|
|
||||||
|
# Initialize taskd
|
||||||
|
cmd = (self.taskd, "init", "--data", self.datadir)
|
||||||
|
run_cmd_wait(cmd)
|
||||||
|
|
||||||
|
self.config("server", "{0}:{1}".format(self.address, self.port))
|
||||||
|
self.config("log", self.tasklog)
|
||||||
|
self.config("pid.file", self.taskpid)
|
||||||
|
self.config("root", self.datadir)
|
||||||
|
self.config("client.allow", "^task [2-9]")
|
||||||
|
|
||||||
|
# Setup all necessary certificates
|
||||||
|
self.config("client.cert", self.client_cert)
|
||||||
|
self.config("client.key", self.client_key)
|
||||||
|
self.config("server.cert", self.server_cert)
|
||||||
|
self.config("server.key", self.server_key)
|
||||||
|
self.config("server.crl", self.server_crl)
|
||||||
|
self.config("ca.cert", self.ca_cert)
|
||||||
|
|
||||||
|
def config(self, var, value):
|
||||||
|
"""Run setup `var` as `value` in taskd config
|
||||||
|
"""
|
||||||
|
cmd = (self.taskd, "config", "--force", "--data", self.datadir, var,
|
||||||
|
value)
|
||||||
|
run_cmd_wait(cmd)
|
||||||
|
|
||||||
|
# If server is running send a SIGHUP to force config reload
|
||||||
|
if self.proc is not None:
|
||||||
|
try:
|
||||||
|
self.proc.send_signal(signal.SIGHUP)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def status(self):
|
||||||
|
"""Check the status of the server by checking if it's still running and
|
||||||
|
listening for connections
|
||||||
|
:returns: True if running and listening, False otherwise (including
|
||||||
|
crashed and not started)
|
||||||
|
"""
|
||||||
|
if self.proc is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if self.proc.poll() is not None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not port_used(port=self.port):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
"""Start the taskd server if it's not running.
|
||||||
|
If it's already running OSError will be raised
|
||||||
|
"""
|
||||||
|
if self.proc is None:
|
||||||
|
cmd = (self.taskd, "server", "--data", self.datadir)
|
||||||
|
self.proc = Popen(cmd, stdout=DEVNULL, stdin=DEVNULL)
|
||||||
|
else:
|
||||||
|
raise OSError("Taskd server is still running or crashed")
|
||||||
|
|
||||||
|
# Wait for server to listen by checking connectivity in the port
|
||||||
|
# Wait up to 5 minutes checking once second
|
||||||
|
minutes = 5
|
||||||
|
for i in range(minutes * 60):
|
||||||
|
if not self.status():
|
||||||
|
sleep(1)
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
raise OSError("Task server failed to start and listen on port {0}"
|
||||||
|
" after {1} minutes".format(self.port, minutes))
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
"""Stop the server by sending a SIGTERM and SIGKILL if fails to
|
||||||
|
terminate.
|
||||||
|
If it's already stopped OSError will be raised
|
||||||
|
"""
|
||||||
|
if self.proc is None:
|
||||||
|
raise OSError("Taskd server is not running")
|
||||||
|
|
||||||
|
self.proc.send_signal(signal.SIGTERM)
|
||||||
|
|
||||||
|
# Wait ~1 sec for taskd to finish and send a SIGKILL if still running
|
||||||
|
kill = True
|
||||||
|
for i in range(10):
|
||||||
|
sleep(0.1)
|
||||||
|
if self.proc.poll() is not None:
|
||||||
|
kill = False
|
||||||
|
break
|
||||||
|
|
||||||
|
if kill:
|
||||||
|
self.proc.kill()
|
||||||
|
|
||||||
|
# Wait for process to end to avoid zombies
|
||||||
|
self.proc.wait()
|
||||||
|
|
||||||
|
# Unset the process to inform that no process is running
|
||||||
|
self.proc = None
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
"""Cleanup the data folder and release server port for other instances
|
||||||
|
"""
|
||||||
|
# Ensure server is stopped first
|
||||||
|
if self.proc is not None:
|
||||||
|
self.stop()
|
||||||
|
|
||||||
|
try:
|
||||||
|
shutil.rmtree(self.datadir)
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno == 2:
|
||||||
|
# Directory no longer exists
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
release_port(self.port)
|
||||||
|
|
||||||
|
# vim: ai sts=4 et sw=4
|
68
test/basetest/utils.py
Normal file
68
test/basetest/utils.py
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import socket
|
||||||
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
|
USED_PORTS = set()
|
||||||
|
|
||||||
|
|
||||||
|
def run_cmd_wait(cmd):
|
||||||
|
"Run a subprocess and wait for it to finish"
|
||||||
|
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
|
||||||
|
out, err = p.communicate()
|
||||||
|
|
||||||
|
if p.returncode != 0:
|
||||||
|
raise IOError("Failed to run '{0}', exit code was '{1}', stdout"
|
||||||
|
" '{2}' and stderr '{3}'".format(cmd, p.returncode,
|
||||||
|
out, err))
|
||||||
|
|
||||||
|
|
||||||
|
def port_used(addr="localhost", port=None):
|
||||||
|
"Return True if port is in use, False otherwise"
|
||||||
|
if port is None:
|
||||||
|
raise TypeError("Argument 'port' may not be None")
|
||||||
|
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
result = s.connect_ex((addr, port))
|
||||||
|
s.close()
|
||||||
|
# result == 0 if connection was successful
|
||||||
|
return result == 0
|
||||||
|
|
||||||
|
|
||||||
|
def find_unused_port(addr="localhost", start=53589, track=True):
|
||||||
|
"""Find an unused port starting at `port`
|
||||||
|
|
||||||
|
If track=False the returned port will not be marked as in-use and the code
|
||||||
|
will rely entirely on the ability to connect to addr:port as detection
|
||||||
|
mechanism. Note this may cause problems if ports are assigned but not used
|
||||||
|
immediately
|
||||||
|
"""
|
||||||
|
maxport = 65535
|
||||||
|
unused = None
|
||||||
|
|
||||||
|
for port in xrange(start, maxport):
|
||||||
|
if not port_used(addr, port):
|
||||||
|
if track and port in USED_PORTS:
|
||||||
|
continue
|
||||||
|
|
||||||
|
unused = port
|
||||||
|
break
|
||||||
|
|
||||||
|
if unused is None:
|
||||||
|
raise ValueError("No available port in the range {0}-{1}".format(
|
||||||
|
start, maxport))
|
||||||
|
|
||||||
|
if track:
|
||||||
|
USED_PORTS.add(unused)
|
||||||
|
|
||||||
|
return unused
|
||||||
|
|
||||||
|
|
||||||
|
def release_port(port):
|
||||||
|
"""Forget that given port was marked as'in-use
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
USED_PORTS.remove(port)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# vim: ai sts=4 et sw=4
|
24
test/test_certs/ca.cert.pem
Normal file
24
test/test_certs/ca.cert.pem
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEGzCCAtOgAwIBAgIEU3emwDANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJT
|
||||||
|
RTEeMBwGA1UECgwVR8O2dGVib3JnIEJpdCBGYWN0b3J5MRIwEAYDVQQHDAlHw7Z0
|
||||||
|
ZWJvcmcxGjAYBgNVBAgMEVbDpHN0cmEgR8O2dGFsYW5kMR4wHAYDVQQDDBVHw7Z0
|
||||||
|
ZWJvcmcgQml0IEZhY3RvcnkwHhcNMTQwNTE3MTgxMzIwWhcNMTUwNTE3MTgxMzIw
|
||||||
|
WjB9MQswCQYDVQQGEwJTRTEeMBwGA1UECgwVR8O2dGVib3JnIEJpdCBGYWN0b3J5
|
||||||
|
MRIwEAYDVQQHDAlHw7Z0ZWJvcmcxGjAYBgNVBAgMEVbDpHN0cmEgR8O2dGFsYW5k
|
||||||
|
MR4wHAYDVQQDDBVHw7Z0ZWJvcmcgQml0IEZhY3RvcnkwggFSMA0GCSqGSIb3DQEB
|
||||||
|
AQUAA4IBPwAwggE6AoIBMQDCQyFXOUPIymI7+4nY1T7yNfe1b+vzznJgtJpPOZxW
|
||||||
|
gPJSiT0yVPmKAYpitn9x1ADncO61FmqTowaZKauwifLhAp8cC/r5N6Y/yppxSEZ+
|
||||||
|
czybasCNB/bsmpBB0OeTDAAZ6BF8zLzzFC/54g3JVhsSGwtYKfQlqUlfp89BeCrg
|
||||||
|
qzO1YO+uJ0K2dXPuyuFjH+Vwr6QLcVKRDvgc/I/C7lx+JKXd/lmiNS5uOc9RhFyD
|
||||||
|
0xtqCnyhWpa8Ed26Y0B8CAhHWdJWEU33iWLpvlLcfYvFus4cPnEjuIu/Ql64cgIW
|
||||||
|
xeQQ4lPZYLXVOh/2LeYwbTIBBtvNZdQb8S6VSJG9zex/nzrBq/4M9qlA9kpRW6TA
|
||||||
|
1G/eInMBzUp2LPW8V4HhspPqFo5SP2sfbaE5Pp2neCWPAgMBAAGjQzBBMA8GA1Ud
|
||||||
|
EwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcEADAdBgNVHQ4EFgQUDZvEvP9T4ftv
|
||||||
|
3cVT711JQT5wPWswDQYJKoZIhvcNAQELBQADggExAC+aizDsErZVIuuSFZ0pI1+c
|
||||||
|
fsUdC7vKum/B+ANCLOezUgGzfHkohaVd1aY9Qvt7/0q0aTCd7ssiZ7pGZArx2ZEw
|
||||||
|
3vvKvU0xgwE5YZucExXDrdYqMYtjSDQ4Q+OwS4Q0AiADXpUDtjkIFcuXr7wf/5RN
|
||||||
|
M+wzl5W3fuNofAoXY6cE8MwrlgXZcjzKzkq0H2hR0ifwJ00uf1tQ0kgUHrKlTfHC
|
||||||
|
xnTD2IXcfhUNJtAutxV8eKOjmrT7X/hT2Hur2Xgp/a1K+95QaNJIc7PtdbOvfh4o
|
||||||
|
Kb4wGVy8fQNYaZXxYQgvfr8trgraTn73Vr7jYkeQAgn3yOdk5qyS14Dhnrvht2VX
|
||||||
|
DaoDPz3glAzNY6/oL3ElGbL7CVKBXUk/OdURlgyoXzKm7EPgp4zAHg8KiNtKrYk=
|
||||||
|
-----END CERTIFICATE-----
|
32
test/test_certs/ca.key.pem
Normal file
32
test/test_certs/ca.key.pem
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
chM11UKgKHb19nNDCl34
|
||||||
|
-----END RSA PRIVATE KEY-----
|
24
test/test_certs/client.cert.pem
Normal file
24
test/test_certs/client.cert.pem
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEETCCAsmgAwIBAgIEU3emwTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJT
|
||||||
|
RTEeMBwGA1UECgwVR8O2dGVib3JnIEJpdCBGYWN0b3J5MRIwEAYDVQQHDAlHw7Z0
|
||||||
|
ZWJvcmcxGjAYBgNVBAgMEVbDpHN0cmEgR8O2dGFsYW5kMR4wHAYDVQQDDBVHw7Z0
|
||||||
|
ZWJvcmcgQml0IEZhY3RvcnkwHhcNMTQwNTE3MTgxMzIxWhcNMTUwNTE3MTgxMzIx
|
||||||
|
WjBAMR4wHAYDVQQKDBVHw7Z0ZWJvcmcgQml0IEZhY3RvcnkxHjAcBgNVBAMMFUfD
|
||||||
|
tnRlYm9yZyBCaXQgRmFjdG9yeTCCAVIwDQYJKoZIhvcNAQEBBQADggE/ADCCAToC
|
||||||
|
ggExAO6f5rY86ZHF7MxsvX03waVX7epxqPtaJHFjWByqnRl3k25nqakVUXYWWqhv
|
||||||
|
N1asRJQEPTteDqdhfWs6+Qut/5a6H/Jbco/MYqinLLEgoeot7N32bjchpQRWKTzg
|
||||||
|
fKcvfChC2Bce7QmJes4PTDMGQdSMSEbkpJFACzrsges56UW6t85/yipPJkkHBeG5
|
||||||
|
I+bXjpmXkQPwp+cKsA8HvMrn/jdfMSbhJIhApwPoQqgjKEbKxVu4gy430Q1nRN0j
|
||||||
|
/0k0BN8PLNDnEuAE0cd7+jvR/RZvfpFVkc7JCG2Mhm//DBMue12juAuPLcw/KwJ4
|
||||||
|
joNYPWoUzOv6HS8fVs90k5gUCEeKR8zkhTlKWLlz2jsWjhHqovYKi8720ZBAzuR1
|
||||||
|
Tp+dr9/+x+ujCq3lZ5jo/BHgyY8CAwEAAaN2MHQwDAYDVR0TAQH/BAIwADATBgNV
|
||||||
|
HSUEDDAKBggrBgEFBQcDAjAPBgNVHQ8BAf8EBQMDB6AAMB0GA1UdDgQWBBRysTeC
|
||||||
|
R7WPMegs0+3S+ofbHnCxIDAfBgNVHSMEGDAWgBQNm8S8/1Ph+2/dxVPvXUlBPnA9
|
||||||
|
azANBgkqhkiG9w0BAQsFAAOCATEAUxK/EELzmDJCawzDPIK0wRraozCLfnyUZHC+
|
||||||
|
D6doLzi1xNH70wQS2WowA/zE7HLpVPfA/VrhE/xTPtWcoQx57AvcYnPYH2wkBdoR
|
||||||
|
ExpA6tPlL/g25tn90wByafQ6TnaVWClLRPkfqOYg5yV/31xp7Q5A5/8tA0vomGRI
|
||||||
|
X/U3wAkpsmwo0EhawYGNuzflsBl91EvWgEYDE3Xv1fgfsgL/mNRmIj5kFLGUbafc
|
||||||
|
iB7bl5vyD04HUuPRb86e+wrnxzmaPXA116YGb1PZolT7avCP+twjjbPA6lMCxRxR
|
||||||
|
Tv3h/Cgp2zaTRzHuMt22JSc6CPKd+KAeCsnMDNXpchpj5d7W0fjelMW9gNTIlKxz
|
||||||
|
hgG3zhyC2CXtkZyE8IK0hFCgdBfQpjv6AMmH2SNlsN0rBy71RA==
|
||||||
|
-----END CERTIFICATE-----
|
32
test/test_certs/client.key.pem
Normal file
32
test/test_certs/client.key.pem
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
4vIwLFDO8/bpjIDJrqjMgg==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
25
test/test_certs/server.cert.pem
Normal file
25
test/test_certs/server.cert.pem
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEMzCCAuugAwIBAgIEU3emwDANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJT
|
||||||
|
RTEeMBwGA1UECgwVR8O2dGVib3JnIEJpdCBGYWN0b3J5MRIwEAYDVQQHDAlHw7Z0
|
||||||
|
ZWJvcmcxGjAYBgNVBAgMEVbDpHN0cmEgR8O2dGFsYW5kMR4wHAYDVQQDDBVHw7Z0
|
||||||
|
ZWJvcmcgQml0IEZhY3RvcnkwHhcNMTQwNTE3MTgxMzIwWhcNMTUwNTE3MTgxMzIw
|
||||||
|
WjBAMR4wHAYDVQQKDBVHw7Z0ZWJvcmcgQml0IEZhY3RvcnkxHjAcBgNVBAMMFUfD
|
||||||
|
tnRlYm9yZyBCaXQgRmFjdG9yeTCCAVIwDQYJKoZIhvcNAQEBBQADggE/ADCCAToC
|
||||||
|
ggExAM2soV1TPLKp8SjqTtxBHj+Uu9SJM56eyHaK6kwCN6DQyA8dea+cqNJLRWKw
|
||||||
|
dIyK0HqAdE9xf0Q9VkR5JuGCHB80802c3AkwnXdE3syFYEGISqTbFZr14V0m87fn
|
||||||
|
axnGHZ0dyKWoRQbJ2purbWpQ23jZIUZQUhTD4e84aqnUco9aUCyzJ3gkvDgFeBg9
|
||||||
|
EwHMlaavkddJa+In5qOcSrTNJq+XmNrMly0ifr/CA/LfWAk7LEvqk/JjaLS5DWs+
|
||||||
|
VnLaQSSD82CEorypFqo4mR1u/Q5G7+AWXatJEbnf4SbI0agcU/IZMLzPPhfNvNEL
|
||||||
|
jPelfrrXi3LqI+Y53w85PvdEd2S/SeS6QN1rK3KHQ8b/2QjekROfxCRBNn/SZCgN
|
||||||
|
PqcD/kwzDxSdRrqECaMcmxIVsJMCAwEAAaOBlzCBlDAMBgNVHRMBAf8EAjAAMB4G
|
||||||
|
A1UdEQQXMBWCDXRhc2t0b29scy5vcmeHBGFrjWswEwYDVR0lBAwwCgYIKwYBBQUH
|
||||||
|
AwEwDwYDVR0PAQH/BAUDAwegADAdBgNVHQ4EFgQU/CLd6IX4ns73IW9JtetxKjEz
|
||||||
|
GOcwHwYDVR0jBBgwFoAUDZvEvP9T4ftv3cVT711JQT5wPWswDQYJKoZIhvcNAQEL
|
||||||
|
BQADggExADjPCZnLCxWYK5YklECLa8avBedw5p0Z17Fu38ZkAmhnUEqpyzqy/ZQ/
|
||||||
|
P0FrZpqs0KNnPgYm7tRqWqYKc/kPHLfJO5HZGyeMzMLc5xGKH92YNRPMJHtiGOKf
|
||||||
|
KAf9N+OIdfyzasMX+4JoVIuRiawilldJY/kolHewBBMTR8r+UK/KqfhBRFQCWAbh
|
||||||
|
/kOn/nHd0/uSYZY3AgpEePpJLZ2uVvZWRfic+JjLhqHDNYn2Xc8CViWDqjC6R6ZJ
|
||||||
|
XFovWXBcs8R4C3kWoaJOisyPNFGCg/nCELSpm2BehcUwr76TRVtMU+Ge3aOTBWjP
|
||||||
|
DoHbp2VvC2L2PI6lcksfH+nnnHAgxIqKgnP11seB6t55ecwtTiaoKrYMUd1E++iH
|
||||||
|
8hCm7ND5cJb4yJ+clGCdpXoOq+bN83k=
|
||||||
|
-----END CERTIFICATE-----
|
14
test/test_certs/server.crl.pem
Normal file
14
test/test_certs/server.crl.pem
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN X509 CRL-----
|
||||||
|
MIICKTCB4gIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJTRTEeMBwGA1UE
|
||||||
|
CgwVR8O2dGVib3JnIEJpdCBGYWN0b3J5MRIwEAYDVQQHDAlHw7Z0ZWJvcmcxGjAY
|
||||||
|
BgNVBAgMEVbDpHN0cmEgR8O2dGFsYW5kMR4wHAYDVQQDDBVHw7Z0ZWJvcmcgQml0
|
||||||
|
IEZhY3RvcnkXDTE0MDUxNzE4MTMyMFoXDTE1MDUxNzE4MTMyMFowAKAvMC0wHwYD
|
||||||
|
VR0jBBgwFoAUDZvEvP9T4ftv3cVT711JQT5wPWswCgYDVR0UBAMCAQAwDQYJKoZI
|
||||||
|
hvcNAQEFBQADggExAJRdlrW0zbhr2R9iScc9bkflv7x2f8Cha/M+To8fik8OsDs0
|
||||||
|
xmNOSTfbisA60YvFudBSGXwUzGyx8nAoYJgFrpIrG3gco8uCPnFPW5f2yvumelxA
|
||||||
|
KYGLic2iAIHb290UttfcM+ft/5eILciFaPkycSyppA5ZBRnJ7N20ppat071bFZOo
|
||||||
|
c+jT6+DLI3ondy6HPBkuCyfUjjVd8bJFEx2JjBFd6rjOgwlPN/j1Pb83oZ5A8ETV
|
||||||
|
JSdxADBf0DLMW7zE+J8OU4Q7aAW2bwdDqxZglBT8lNvGDkD4/BsFYAmaSvdm9JRM
|
||||||
|
iCbnTxgbFVHwR4d0x2bQ1Qy2l1CALRHlhmvha3mWdOGDNKanQRT3Xb7iOL0N02le
|
||||||
|
+1vZMtwH7W03eqTimSPH7nmgWUP7cvCA4ErldD4=
|
||||||
|
-----END X509 CRL-----
|
32
test/test_certs/server.key.pem
Normal file
32
test/test_certs/server.key.pem
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
PXsW0Mtrlz2wCGhkcaQffA==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
Loading…
Add table
Add a link
Reference in a new issue