Skip to content

1913 daps refactor foxx ci test scripts#1917

Merged
JoshuaSBrown merged 21 commits intodevelfrom
1913-DAPS-refactor-foxx-ci-test-scripts
Mar 27, 2026
Merged

1913 daps refactor foxx ci test scripts#1917
JoshuaSBrown merged 21 commits intodevelfrom
1913-DAPS-refactor-foxx-ci-test-scripts

Conversation

@JoshuaSBrown
Copy link
Copy Markdown
Collaborator

@JoshuaSBrown JoshuaSBrown commented Mar 27, 2026

Ticket

Description

How Has This Been Tested?

Artifacts (if appropriate):

Tasks

  • - A description of the PR has been provided, and a diagram included if it is a new feature.
  • - Formatter has been run
  • - CHANGELOG comment has been added
  • - Labels have been assigned to the pr
  • - A reviwer has been added
  • - A user has been assigned to work on the pr
  • - If new feature a unit test has been added

Summary by Sourcery

Make Foxx database and graph configuration environment-driven and safer for testing, while updating scripts, tests, and Docker/CI wiring to use a configurable test database by default.

Enhancements:

  • Allow Foxx ArangoDB database and graph names to be derived from the runtime database context instead of hard-coded values via new db_config and db_env helpers.
  • Add CMake options to configure the Foxx test database name and explicitly allow tests against the production database when needed.
  • Update Docker images and core configuration generation to respect DATAFED_DATABASE_NAME, defaulting to a test database in build/test stages and production in the runtime image.
  • Propagate the configured database name through setup and install scripts so arangosh and Foxx services target the correct database across environments.

CI:

  • Update GitLab end-to-end Foxx setup and client test jobs to pass database name and production-allow flags into containers, aligning CI with the new configurable database behavior.

Deployment:

  • Adjust Foxx Docker entrypoint to forward database test configuration flags into CMake, enabling configurable database names during containerized Foxx installation.

Tests:

  • Refine Foxx test CTest definitions to invoke the shared install_foxx.sh script with appropriate working directory and environment variables for the test database and production safety flag.
  • Harden Foxx test and fixture setup scripts to default to a test database, respect environment overrides, and refuse to run against the production database unless explicitly allowed.
  • Ensure Foxx tests and fixtures write database passwords to temporary files and honor configurable database hosts for local and CI runs.
  • Make end-to-end test setup pass the selected database name through to clear and install scripts so they operate on the intended database.

…ORNL/DataFed into 1913-DAPS-refactor-foxx-ci-test-scripts
…ORNL/DataFed into 1913-DAPS-refactor-foxx-ci-test-scripts
…ORNL/DataFed into 1913-DAPS-refactor-foxx-ci-test-scripts
@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai bot commented Mar 27, 2026

Reviewer's Guide

Refactors Foxx CI/test database handling to be environment-driven and safety-aware, introducing configurable test database names, shared db config modules, and updated Docker/CMake wiring while preventing accidental use of the production database by tests.

Sequence diagram for Foxx CI test setup with environment-driven database

sequenceDiagram
    participant CTest as CTest
    participant CMake as CMake_ctest_config
    participant Install as install_foxx_sh
    participant Arango as ArangoDB
    participant ArangoShell as arangosh_db_scripts

    CTest->>CMake: run test foxx_setup
    CMake->>Install: execute with
    Note right of CMake: WORKING_DIRECTORY=core/database/foxx
    Note right of Install: DATAFED_DATABASE_NAME=DATAFED_TEST_DATABASE_NAME<br/>ALLOW_PRODUCTION_DB=DATAFED_ALLOW_TESTING_PROD_DATABASE

    Install->>Install: read DATAFED_DATABASE_NAME
    Install->>Install: default local_DATABASE_NAME="sdms" if unset
    Install->>Install: safety check against production name
    alt name is sdms and ALLOW_PRODUCTION_DB not true
        Install-->>CTest: exit 1 (abort tests)
    else allowed or non-sdms name
        Install->>Arango: GET /_api/database
        Arango-->>Install: list of databases
        alt database exists
            Install-->>CTest: log "Database exists, do nothing"
        else database missing
            Install->>ArangoShell: run db_create_js with DATAFED_DATABASE_NAME
            ArangoShell->>Arango: create DB and graph
            ArangoShell-->>Install: done
        end

        Install->>Arango: deploy Foxx services in DB
        Install-->>CTest: success
    end
Loading

Class diagram for shared Foxx and arangosh database configuration modules

classDiagram
    class db_env_js {
        <<arangosh_module>>
        +string DB_NAME
        +string GRAPH_NAME
    }

    class db_config_js {
        <<foxx_module>>
        +string GRAPH_NAME
        +getGraph() object
    }

    class install_foxx_sh {
        <<script>>
        +string local_DATABASE_NAME
        +string local_allow_prod
        +runSafetyCheck()
        +ensureDatabaseExists()
        +deployFoxxServices()
    }

    class db_create_js {
        <<arangosh_script>>
        +createDatabase()
        +createGraph()
    }

    class db_clear_js {
        <<arangosh_script>>
        +truncateCollections()
    }

    db_env_js <.. db_create_js : uses
    db_env_js <.. db_clear_js : uses

    db_config_js <.. coll_router_js : used_by
    db_config_js <.. data_router_js : used_by
    db_config_js <.. group_router_js : used_by
    db_config_js <.. query_router_js : used_by
    db_config_js <.. repo_router_js : used_by
    db_config_js <.. schema_router_js : used_by
    db_config_js <.. support_js : used_by
    db_config_js <.. tasks_js : used_by
    db_config_js <.. user_router_js : used_by

    install_foxx_sh <.. db_env_js : sets DB_NAME
Loading

File-Level Changes

Change Details Files
Make Foxx tests and install scripts use environment-driven database names with safety checks to avoid accidentally targeting production.
  • Change foxx_setup CTest to call scripts/install_foxx.sh instead of a local test_setup.sh helper and set Foxx test working directory and DB env vars.
  • Update scripts/install_foxx.sh to read DATAFED_DATABASE_NAME with a default, enforce ALLOW_PRODUCTION_DB for the production name, export DB name for arangosh scripts, and use the selected DB for API URLs and config initialization.
  • Update Foxx test runner scripts (test_foxx.sh, test_fixture_setup.sh, end-to-end setup.sh) to read DATAFED_DATABASE_NAME with safer defaults, enforce production DB safety guardrails, and ensure DATAFED_DATABASE_HOST and password files are set consistently.
  • Introduce new CMake options DATAFED_TEST_DATABASE_NAME and DATAFED_ALLOW_TESTING_PROD_DATABASE and propagate them into test properties and docker/foxx entrypoint builds.
core/database/CMakeLists.txt
scripts/install_foxx.sh
core/database/tests/test_foxx.sh
core/database/tests/test_fixture_setup.sh
tests/end-to-end/setup.sh
CMakeLists.txt
docker/entrypoint_foxx.sh
Centralize database and graph naming for Foxx Arango scripts and services to support non-sdms database names.
  • Add db_env.js for arangosh scripts to derive DB_NAME and GRAPH_NAME from DATAFED_DATABASE_NAME, and update db_create.js, db_clear.js, and db_migrate_0_10.js to use it instead of hard-coded "sdms"/"sdmsg".
  • Introduce api/db_config.js to compute GRAPH_NAME from the runtime db and expose getGraph(), then replace direct _graph("sdmsg") calls across Foxx routers and helpers with db_config.getGraph().
core/database/foxx/db_env.js
core/database/foxx/db_create.js
core/database/foxx/db_clear.js
core/database/foxx/db_migrate_0_10.js
core/database/foxx/api/db_config.js
core/database/foxx/api/coll_router.js
core/database/foxx/api/data_router.js
core/database/foxx/api/group_router.js
core/database/foxx/api/query_router.js
core/database/foxx/api/repo_router.js
core/database/foxx/api/schema_router.js
core/database/foxx/api/support.js
core/database/foxx/api/tasks.js
core/database/foxx/api/user_router.js
Adjust Docker images and CI pipelines to default to test or production DB names appropriately and allow controlled testing against production if explicitly requested.
  • Set DATAFED_DATABASE_NAME=sdms_test in the core build Docker stage for easier test execution, and set DATAFED_DATABASE_NAME=sdms plus ALLOW_PRODUCTION_DB=true in the runtime core image.
  • Wire DATAFED_DATABASE_NAME/ALLOW_PRODUCTION_DB and DATAFED_ALLOW_TESTING_PROD_DATABASE into GitLab E2E jobs to allow running against sdms in CI where intended.
core/docker/Dockerfile
.gitlab/end_to_end.yml
Remove obsolete Foxx database setup shell script now superseded by install_foxx.sh.
  • Delete core/database/tests/test_setup.sh, which previously handled Foxx DB initialization but is no longer used now that CTest calls scripts/install_foxx.sh directly.
core/database/tests/test_setup.sh

Possibly linked issues

  • #unknown: The PR modifies docker/entrypoint_foxx.sh and related Foxx scripts to correctly define and pass previously unbound variables.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@JoshuaSBrown JoshuaSBrown linked an issue Mar 27, 2026 that may be closed by this pull request
@JoshuaSBrown JoshuaSBrown self-assigned this Mar 27, 2026
@JoshuaSBrown JoshuaSBrown added Component: Core Relates to core service Priority: Medium Above average priority Component: Scripts Helper scripts or admin scripts labels Mar 27, 2026
Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • The CMake set_tests_properties block now repeats the same ENVIRONMENT string for almost every Foxx test; consider factoring the common DATAFED_DATABASE_NAME/ALLOW_PRODUCTION_DB environment configuration into a foreach() or helper macro to reduce duplication and chances of drift.
  • The production-database safety checks (ALLOW_PRODUCTION_DB, defaulting database names, error messages) are duplicated across several scripts (install_foxx.sh, test_foxx.sh, test_fixture_setup.sh, etc.); extracting this logic into a shared helper or sourcing a common shell fragment would make it easier to keep behavior consistent.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The CMake `set_tests_properties` block now repeats the same `ENVIRONMENT` string for almost every Foxx test; consider factoring the common `DATAFED_DATABASE_NAME`/`ALLOW_PRODUCTION_DB` environment configuration into a `foreach()` or helper macro to reduce duplication and chances of drift.
- The production-database safety checks (`ALLOW_PRODUCTION_DB`, defaulting database names, error messages) are duplicated across several scripts (`install_foxx.sh`, `test_foxx.sh`, `test_fixture_setup.sh`, etc.); extracting this logic into a shared helper or sourcing a common shell fragment would make it easier to keep behavior consistent.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@JoshuaSBrown JoshuaSBrown merged commit 73309fc into devel Mar 27, 2026
12 checks passed
nedvedba added a commit that referenced this pull request Mar 31, 2026
* refactor: core server files refactored to support re-use in the mock implementation

* refactor: changed mock core server to work with proto3 and reusue abstractions from core server.

* fix: prevent defaults being set to undefined, and interpret numbers a… (#1861)

* fix: prevent defaults being set to undefined, and interpret numbers and enums as strings.

* chore: Auto-format JavaScript files with Prettier

* fix: version numbers from proto3 messages follow camel case. (#1868)

* docs: fix jsdoc error.

* [DAPS-1862] - fix allocation change failure (#1864)

* [DAPS-1663] Adding LogContext to dbGetRaw, Correlation_ID to dbMaintenance, metricThread and task_worker (#1885)

Co-authored-by: Joshua S Brown <joshbro42867@yahoo.com>
Co-authored-by: Joshua S Brown <brownjs@ornl.gov>

* fix: mock_core server build (#1890)

* [DAPS-1887] - refactor: facility fuse, remove dead code. (#1888)

* [DAPS-1857] - feature: python client, tests, support schema functions, to hit feature parity with web ser… (#1859)

* [DAPS-1855] - feature, core, add schema factory to decouple schema logic (#1891)

* [DAPS-1896] - feature: foxx, schema format and type added to schema create API (#1897)

* [DAPS-1893] - feature: common, proto3 add fields for schema type, format, and metadata format (#1894)

* [DAPS-1830-1] - core foxx refactored json schema integration 1 (#1892)

* [DAPS-1857-2] python client schema support (#1895)

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* [DAPS-1830-2] - core foxx refactored json schema integration (#1899)

* [DAPS-1902] - core, common, feat: get schema api client into compliance with API spec file. (#1903)

* [DAPS-1906-1] - feature: add core unit testing to CI (#1907)

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* [DAPS-1830-3] - core foxx refactored json schema integration 3 1827 (#1898)

* [DAPS-1910] - upgrade: playwright 1.51.1 version. (#1911)

* [DAPS-1914] - bug, web schema id name version mismatch (#1915)

* [DAPS-1913] - refactor: foxx ci test scripts consolidate database name and default to different database for tests (#1917)

* [DAPS-1916] - tests add integration test for schema client handler to cmake (#1918)

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: JoshuaSBrown <brownjs@ornl.gov>
Co-authored-by: Joshua S Brown <joshbro42867@yahoo.com>
Co-authored-by: Austin Hampton <44103380+megatnt1122@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
JoshuaSBrown added a commit that referenced this pull request Apr 1, 2026
* [DAPS-1663]   - feature: core, LogContext to dbGetRaw, Correlation_ID to dbMaintenance, metricThread and task_worker (#1885)
* [DAPS-1890]   - fix: test, mock_core server build (#1890)
* [DAPS-1887]   - refactor: facility fuse, remove dead code. (#1888)
* [DAPS-1857]   - feature: python client, tests, support schema functions, to hit feature parity with web ser… (#1859)
* [DAPS-1855]   - feature, core, add schema factory to decouple schema logic (#1891)
* [DAPS-1896]   - feature: foxx, schema format and type added to schema create API (#1897)
* [DAPS-1893]   - feature: common, proto3 add fields for schema type, format, and metadata format (#1894)
* [DAPS-1830-1] - refactor: core foxx refactored json schema integration 1 (#1892)
* [DAPS-1857-2] - feature: python client schema support (#1895)
* [DAPS-1830-2] - refactor: core foxx refactored json schema integration (#1899)
* [DAPS-1902]   - feature: core, common, get schema api client into compliance with API spec file. (#1903)
* [DAPS-1906-1] - feature: add core unit testing to CI (#1907)
* [DAPS-1830-3] - refactor: core foxx refactored json schema integration 3 1827 (#1898)
* [DAPS-1910]   - upgrade: playwright 1.51.1 version. (#1911)
* [DAPS-1914]   - fix: web, bug in schema id name version mismatch (#1915)
* [DAPS-1913]   - refactor: foxx ci test scripts consolidate database name and default to different database for tests (#1917)
* [DAPS-1916]   - tests: add integration test for schema client handler to cmake (#1918)
* [DAPS-1912]   - refactor: register linkml storage engine with schema handler (#1912)
* [DAPS-1919]   - feature: python, web support linkml schema (#1921)
* [DAPS-1923]   - update: version numbers bumped. (#1923)

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: Austin Hampton <amh107@latech.edu>
Co-authored-by: Blake Nedved <blakeanedved@gmail.com>
Co-authored-by: Polina Shpilker <infinite.loopholes@gmail.com>
Co-authored-by: JoshuaSBrown <brownjs@ornl.gov>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Component: Core Relates to core service Component: Scripts Helper scripts or admin scripts Priority: Medium Above average priority

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] - Multiple locations of initializing Foxx services

1 participant