Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: set EDXAPP_TEST_MONGO_HOST=mongodb in openedx-dev #1083

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/20240624_105125_kyle_test_mongo_host.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[Improvement] Set `EDXAPP_TEST_MONGO_HOST` env var in the openedx-dev image so that it no longer needs to be set by hand when running edx-platform unit tests (by @kdmccormick).
Copy link
Contributor

Choose a reason for hiding this comment

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

do we need a changelog entry for this, considering this is only meant for dev/testing and wont impact the operators as such?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Since Tutor is both an operator tool and a developer tool, I think it is good to make not of the improvements we make for developers too.

1 change: 0 additions & 1 deletion docs/tutorials/edx-platform.rst
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@ Then, run unit tests with ``pytest`` commands::
# Run tests on common apps
unset DJANGO_SETTINGS_MODULE
unset SERVICE_VARIANT
export EDXAPP_TEST_MONGO_HOST=mongodb
pytest common
pytest openedx
pytest xmodule
Expand Down
3 changes: 3 additions & 0 deletions tutor/templates/build/openedx/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,9 @@ RUN pip install -e "/mnt/{{ name }}"
# Add ipdb as default PYTHONBREAKPOINT
ENV PYTHONBREAKPOINT=ipdb.set_trace

# Point unit tests at the MongoDB container
ENV EDXAPP_TEST_MONGO_HOST=mongodb
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we want to point to {{ MONGODB_HOST }}, and not "mongodb", in case MongoDB runs outside of Tutor. Same for MONGO_PORT_NUM = {{ MONGODB_PORT }}. But then, we don't want to make the image build depend on user configuration, so we should not store these settings here...

I don't have a better alternative to offer that does not break compatibility with devstack... I think that test settings should be overridable, and that xmodule/modulestore/tests/mongo_connection.py should not read EDXAPP_TEST_MONGO_HOST. But that would break the current behaviour.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

But then, we don't want to make the image build depend on user configuration, so we should not store these settings here...

I'm not sure I follow. There are several other points in the Dockerfile that depend on user configuration. As long as the setting has a reasonable default value that most people will use (i.e., mongodb), it seems fine to me to build that into the image, no?

I don't have a better alternative to offer that does not break compatibility with devstack... I think that test settings should be overridable, and that xmodule/modulestore/tests/mongo_connection.py should not read EDXAPP_TEST_MONGO_HOST. But that would break the current behaviour.

Agreed, the tests ought to use the MONGO_HOST and MONGO_PORT_NUM Django settings. The way that they currently ignore the settings and look up the env vars directly is so very wrong.

Devstack is deprecated, and starting right after that Sumac cut, we are no longer obligated to avoid breaking it. Regardless of whether you accept this PR, let's make the upstream fix this October.

Copy link
Contributor

@DawoudSheraz DawoudSheraz Jul 9, 2024

Choose a reason for hiding this comment

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

Régis has already added his comment/context. Once those are resolved, this will be good to go.

Copy link
Contributor

Choose a reason for hiding this comment

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

@kdmccormick Hi, what's plan for this PR?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@regisb

I think we want to point to {{ MONGODB_HOST }}, and not "mongodb", in case MongoDB runs outside of Tutor. Same for MONGO_PORT_NUM = {{ MONGODB_PORT }}.

Done 👍🏻

I don't have a better alternative to offer that does not break compatibility with devstack... I think that test settings should be overridable, and that xmodule/modulestore/tests/mongo_connection.py should not read EDXAPP_TEST_MONGO_HOST. But that would break the current behaviour.

I poked around at simplifying this. I think that the only proper fix is to drop the EDXAPP_TEST_MONGO_* env vars and get rid of the MONGO_* Django settings, as they are all only used in tests. What prod uses is DOC_STORE_CONFIG -- test settings should override pieces of that. Unfortunately that's too much for me to bite off right now, but I'm hoping I can address this (and other bad config patterns) in openedx/edx-platform#35146

In the meantime, I still think this simplification would be valuable to Tutor users. Can you re-review @regisb ?

kdmccormick marked this conversation as resolved.
Show resolved Hide resolved

# Recompile static assets: in development mode all static assets are stored in edx-platform,
# and the location of these files is stored in webpack-stats.json. If we don't recompile
# static assets, then production assets will be served instead.
Expand Down
Loading