Skip to content

feat(core, postgres): Add RunFunctionWaitStrategy and use it in pg - #908

Closed
jankatins wants to merge 2 commits into
testcontainers:mainfrom
jankatins:feat/add-RunFunctionWaitStrategy-and-use-it-in-pg
Closed

feat(core, postgres): Add RunFunctionWaitStrategy and use it in pg#908
jankatins wants to merge 2 commits into
testcontainers:mainfrom
jankatins:feat/add-RunFunctionWaitStrategy-and-use-it-in-pg

Conversation

@jankatins

@jankatinsjankatins commented Oct 18, 2025

Copy link
Copy Markdown
Contributor

I found no way to convert the current container.exec() based check function to any of the currently existing WaitStartegies and so I added RunFunctionWaitStrategy which can be used to convert such container.exec() based checks.

Helps with: #874
Closes: #883

@jankatins
jankatinsforce-pushed the feat/add-RunFunctionWaitStrategy-and-use-it-in-pg branch from b4ea0ee to d2b2200CompareOctober 18, 2025 15:15
result = self.func(container)
if result:
return result
except tuple(self._transient_exceptions) as e:

@jankatinsjankatinsOct 18, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I actually found no reason why this shouldn't be a tuple already on self -> might be an nice refactoring on WaitStrategy and where it's used.

]
)
if result.exit_code:
raise ConnectionError("pg_isready is not ready yet")

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I assume that the pg_isready is some missing change in an older commit. I haven't investigated more...

return returns.pop(0)

strategy = RunFunctionWaitStrategy(func).with_poll_interval(0)
strategy.wait_until_ready(mock_container) # type: ignore[arg-type]

@jankatinsjankatinsOct 18, 2025

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For some reason mypy didn't like passing in the mock and I had to add the ignore despite other places in the same file not having this problem with mock. No idea why :-(

@codecov

codecovBot commented Oct 18, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.25%. Comparing base (f608df9) to head (202c8f4).
⚠️ Report is 30 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #908 +/- ##
==========================================
+ Coverage 79.78% 80.25% +0.46% 
==========================================
Files 14 14 Lines 1182 1200 +18 Branches 184 186 +2 ==========================================
+ Hits 943 963 +20 + Misses 197 195 -2 
Partials 42 42 

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jankatins
jankatinsforce-pushed the feat/add-RunFunctionWaitStrategy-and-use-it-in-pg branch 3 times, most recently from 8c1e4f9 to 531934aCompareOctober 18, 2025 22:11
This is usefull for converting old wait_container_is_ready
which use container.exec() to check for a condition to become True.
This gets rid of a annoying depcreation warning.
@jankatins
jankatinsforce-pushed the feat/add-RunFunctionWaitStrategy-and-use-it-in-pg branch from 394bc31 to 202c8f4CompareNovember 3, 2025 21:00
@jankatins

Copy link
Copy Markdown
ContributorAuthor

I guess this can be closed after #935 was merged?

Sign up for freeto 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.

2 participants

@jankatins@alexanderankin