Skip to content

feat(#66): boot Gremlin on a port set by the user's own gremlin-server.yaml in CI - #68

Merged
robfrank merged 1 commit into
mainfrom
feat/66-integration-test-gremlin-port-external
Oct 23, 2026
Merged

robfrank merged 1 commit into
mainfrom
feat/66-integration-test-gremlin-port-external

Conversation

@robfrank

@robfrank robfrank commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Closes #66

Adds a real-pod check for the second route to a non-default Gremlin port, arcadedb.plugins.gremlin.portManagedExternally: true (#52). Until now it had only helm-unittest coverage. The new job integration-gremlin-port-external installs a single node with the plugin on 8185 and runs ci/integration-test-gremlin-external.sh. The script covers both ways a user's own gremlin-server.yaml can reach the server. First it writes the file on the config volume and restarts the pod. Then it uses helm upgrade to mount a second file, with port: 8186, from a ConfigMap on <configDirectory>/gremlin-server.yaml. On each route it checks that config-seed logs keeping existing gremlin-server.yaml with no set port: line and no GREMLIN_PORT env, that the plugin listens on the file's port and not the previous one, and that a TCP connect through the Service succeeds. On the volume route it also checks that the file is unchanged byte for byte. The latest-image guard gets the same job as integration-latest-gremlin-port-external. The helpers shared with the #62 suite (retry, listening, service_connect, the probe pod, and so on) move to ci/gremlin-lib.sh. The reusable workflow gains a gremlinPortRoute input (write | external, default write, so existing jobs are unchanged).

Test plan

  • shellcheck -x on ci/gremlin-lib.sh, ci/integration-test-gremlin.sh, ci/integration-test-gremlin-external.sh: clean
  • actionlint .github/workflows/*.yml: clean
  • make lint: passes (chart untouched)
  • Local kind (jvm, 1 replica, portManagedExternally, port 8185): make test-integration-gremlin-external passes all of phases 1-4
  • Local kind regression for the refactor: make test-integration-gremlin on a writePortToConfig release with port 8183 still passes (8183 then 8184)
  • Negative control: the new suite run against a writePortToConfig release on 8185 fails in phase 1 (nothing listens on 8182), so it does detect the chart moving the port
  • CI: integration-gremlin-port-external and integration-gremlin-port green

Coverage

Invariant: with portManagedExternally: true, the Gremlin plugin binds the port that the user's own gremlin-server.yaml sets. config-seed never edits that file, and the Service reaches the port.

Entry point Status
User file on the config volume (PVC), kept by config-seed across a restart fixed here: phases 2-3
User file from a ConfigMap mounted on <configDirectory>/gremlin-server.yaml (the route the chart's own error message at _helpers.tpl:751 points to) fixed here: phase 4 (helm upgrade)
Chart port alone does not move the plugin (stays on 8182 before the user file exists) fixed here: phase 1
Upcoming image (latest) fixed here: integration-latest-gremlin-port-external
Native flavor not applicable: the chart refuses the Gremlin plugin on image.flavor=native (_helpers.tpl:152)
NetworkPolicy opening the port argued: kind's default CNI (kindnet in kind v0.23) does not enforce NetworkPolicy, so a real-pod check would pass with or without the rule. It stays covered by tests/gremlin_port_external_test.yaml
External Service (service.external.enabled) argued: it uses the same port list as the Service the suite connects through. Unit-tested in gremlin_port_external_test.yaml

Known gaps: None.

Adversarial pass

No subagent tool was available in this unattended run, so the Phase 1.5 independent pass did not run. I reviewed the work myself instead, and it found two things. First, the issue's suggested check covers only the on-volume file. The ConfigMap-mount route is a second real entry point, so it is covered here (phase 4). Second, NetworkPolicy and the native flavor cannot be tested on kind or do not apply; the evidence is in the table above.

Review cycles

Deferred items

None.

Final state: timeout (no reviewer responded). The developer owns review and merge.

🤖 Generated with Claude Code

…r.yaml in CI

Adds ci/integration-test-gremlin-external.sh and the integration-gremlin-port-external
job (and its latest-image twin) for arcadedb.plugins.gremlin.portManagedExternally.
The suite writes a gremlin-server.yaml with port: 8185 on the config volume and
restarts the pod, then mounts one with port: 8186 from a ConfigMap via helm upgrade.
On each it checks that config-seed keeps the file and sets no port, that the plugin
listens on the file's port and not the previous one, and that the Service reaches it.

The helpers shared with ci/integration-test-gremlin.sh move to ci/gremlin-lib.sh.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@robfrank
robfrank merged commit bf53fb8 into main Oct 23, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Integration test: boot Gremlin on a port set by the user's own gremlin-server.yaml (portManagedExternally, follow-up to #62)

1 participant