Publish curated Unraid-AppOps-Gateway source from ba66029223865607deddc234e283c11127324eb8
This commit is contained in:
1 parent
820244dbb3
commit
8dd4b40252
52 files changed
+11814
-288
No files matched your search
@@ -180,19 +180,70 @@ def test_descriptor_can_select_primary_service_for_multi_service_project():
|
||||
assert contract is not None
|
||||
assert contract["applicationId"] == "api"
|
||||
assert contract["composeProject"] == "api"
|
||||
assert contract["primaryService"] == "api"
|
||||
assert contract["serviceNames"] == ["api", "worker"]
|
||||
assert contract["containers"] == ["api-api-1", "api-worker-1"]
|
||||
|
||||
|
||||
def test_descriptor_cannot_diverge_compose_project_from_application_id():
|
||||
with pytest.raises(ValueError, match="composeProject must equal applicationId"):
|
||||
def test_descriptor_separates_application_identity_compose_project_and_primary_service():
|
||||
descriptor = {
|
||||
"apiVersion": "itworx.deployment-target/v1",
|
||||
"applicationId": "quizmonitor",
|
||||
"composeProject": "quiz-monitor",
|
||||
"primaryService": "quiz-server",
|
||||
"composeFile": "docker-compose.yml",
|
||||
}
|
||||
service = FakeComposeInspection(
|
||||
[".itworx", "docker-compose.yml"],
|
||||
{
|
||||
".itworx/deployment-target.json": json.dumps(descriptor),
|
||||
"docker-compose.yml": "services:\n quiz-server:\n image: example/quiz-server:1\n",
|
||||
},
|
||||
)
|
||||
|
||||
contract = service._compose_contract(
|
||||
FakeClient(), repository_name="QuizMonitor", revision="d" * 40
|
||||
)
|
||||
|
||||
assert contract == {
|
||||
"applicationId": "quizmonitor",
|
||||
"composeFile": "docker-compose.yml",
|
||||
"composeProject": "quiz-monitor",
|
||||
"primaryService": "quiz-server",
|
||||
"containers": ["quiz-monitor-quiz-server-1"],
|
||||
"serviceNames": ["quiz-server"],
|
||||
"healthTimeout": 180,
|
||||
"verifyOciRevision": False,
|
||||
}
|
||||
|
||||
|
||||
def test_descriptor_rejects_invalid_compose_project_and_missing_primary_service():
|
||||
with pytest.raises(ValueError, match="composeProject is invalid"):
|
||||
GiteaProjectAutoRegistration._safe_descriptor(
|
||||
{
|
||||
"apiVersion": "itworx.deployment-target/v1",
|
||||
"applicationId": "api",
|
||||
"composeProject": "different",
|
||||
"applicationId": "quizmonitor",
|
||||
"composeProject": "../quiz-monitor",
|
||||
"primaryService": "quiz-server",
|
||||
},
|
||||
"Example",
|
||||
"QuizMonitor",
|
||||
)
|
||||
|
||||
service = FakeComposeInspection(
|
||||
[".itworx", "compose.yml"],
|
||||
{
|
||||
".itworx/deployment-target.json": json.dumps({
|
||||
"apiVersion": "itworx.deployment-target/v1",
|
||||
"applicationId": "quizmonitor",
|
||||
"composeProject": "quiz-monitor",
|
||||
"primaryService": "quiz-server",
|
||||
}),
|
||||
"compose.yml": "services:\n web:\n image: example/web:1\n",
|
||||
},
|
||||
)
|
||||
with pytest.raises(ValueError, match="primaryService must name a Compose service"):
|
||||
service._compose_contract(
|
||||
FakeClient(), repository_name="QuizMonitor", revision="e" * 40
|
||||
)
|
||||
|
||||
|
||||
@@ -236,6 +287,39 @@ def test_sync_catalogs_every_repo_but_only_activates_proven_compose_targets():
|
||||
assert all(item.voice == "blocked" for item in policies)
|
||||
|
||||
|
||||
def test_sync_registers_quizmonitor_identity_without_changing_compose_project_or_service():
|
||||
registry = FakeTargetRegistry()
|
||||
contract = {
|
||||
"applicationId": "quizmonitor",
|
||||
"composeFile": "docker-compose.yml",
|
||||
"composeProject": "quiz-monitor",
|
||||
"primaryService": "quiz-server",
|
||||
"containers": ["quiz-monitor-quiz-server-1"],
|
||||
"serviceNames": ["quiz-server"],
|
||||
"healthTimeout": 180,
|
||||
"verifyOciRevision": False,
|
||||
}
|
||||
service = FakeProjectSync(
|
||||
[repo("QuizMonitor")],
|
||||
{"QuizMonitor": contract},
|
||||
target_registry=registry,
|
||||
)
|
||||
|
||||
with make_session() as session:
|
||||
result = service.sync(session)
|
||||
catalog = GiteaProjectAutoRegistration.catalog(session)
|
||||
|
||||
assert result["summary"]["registered"] == 1
|
||||
assert len(registry.calls) == 1
|
||||
repository, revision, kwargs = registry.calls[0]
|
||||
assert repository == "jens/quizmonitor"
|
||||
assert kwargs["compose_project"] == "quiz-monitor"
|
||||
assert kwargs["containers"] == ["quiz-monitor-quiz-server-1"]
|
||||
assert catalog["projects"][0]["applicationId"] == "quizmonitor"
|
||||
assert catalog["projects"][0]["composeProject"] == "quiz-monitor"
|
||||
assert catalog["projects"][0]["primaryService"] == "quiz-server"
|
||||
|
||||
|
||||
def test_unchanged_catalog_entries_do_not_repeat_registration_work():
|
||||
registry = FakeTargetRegistry()
|
||||
repositories = [repo("Deployable")]
|
||||
|
||||
Reference in new issue
Block a user