Document canonical plugin architecture
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from dns_sync.registry import (
|
||||
configured_adapter_endpoints,
|
||||
load_adapter,
|
||||
)
|
||||
|
||||
|
||||
class PluginTemplateTests(unittest.TestCase):
|
||||
def test_template_loads_as_external_plugin(self):
|
||||
source = Path("examples/plugin_template")
|
||||
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = Path(directory)
|
||||
plugin = root / "example"
|
||||
|
||||
shutil.copytree(
|
||||
source,
|
||||
plugin,
|
||||
)
|
||||
|
||||
with patch.dict(
|
||||
os.environ,
|
||||
{
|
||||
"ENABLED_PLUGINS": "example",
|
||||
"DNS_SYNC_PLUGIN_PATH": directory,
|
||||
"EXAMPLE_ENDPOINTS": "example.test",
|
||||
},
|
||||
clear=True,
|
||||
):
|
||||
config = SimpleNamespace()
|
||||
|
||||
endpoints = configured_adapter_endpoints(
|
||||
"example",
|
||||
config,
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
tuple(
|
||||
endpoint.identity
|
||||
for endpoint in endpoints
|
||||
),
|
||||
("example://example.test:443",),
|
||||
)
|
||||
|
||||
adapter = load_adapter(
|
||||
"example",
|
||||
config,
|
||||
endpoints[0],
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
adapter.name,
|
||||
"example",
|
||||
)
|
||||
self.assertEqual(
|
||||
adapter.endpoint,
|
||||
endpoints[0],
|
||||
)
|
||||
self.assertEqual(
|
||||
adapter.client.endpoint,
|
||||
endpoints[0],
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user