This topic was moved here from #containers > containerized-testing-suite by Philip Durbin π.
@Ash Manda I'm not sure if you want me to warm up this topic every time a JSF test fails or if I should create a new one but can you please take a look at https://github.com/IQSS/dataverse/pull/12614/changes#r3872417379 from a PR by @Florian Fritze?
I'll take a look at the videos
@Ash Manda Thank you!! ![]()
This is flakiness related to this issue: https://github.com/gdcc/dataverse-jsf-tests/issues/1
8062dd3ae4b393ec9666e53896eca3420d66087d.webm
Ok, so you think this is a case of flakiness? Not because a subfield was added?
This has been particularly difficult for me to diagnose because I have never seen it occur on my computer no matter how many times I run the test. But, for now I think any failure related to dataset actions can be safely skipped including this one
Philip Durbin π said:
Ok, so you think this is a case of flakiness? Not because a subfield was added?
Nope, this is 100% flakiness.
I am working on a hotfix right now, I'll keep y'all updated.
Amazing! Thanks! :heart:
I am going to submit a fix directly to gdcc/jsf tests, so nothing has to be merged into upstream
Sounds perfect. You can mark the PR to fix https://github.com/gdcc/dataverse-jsf-tests/issues/1 I assume.
Could you re-run the tests now? Dataset actions should be more reliable now.
Apologies for the noise this flaky test has caused upstream. The failure in 13-dataset-actions.spec.ts only surfaces in GitHub Actions. Locally the timing and hardware is forgiving enough that it passes consistently, which made it hard to catch and diagnose earlier.
The root cause seems to be a race condition: after saving metadata, the PrimeFaces DataTable AJAX cycle hadn't fully settled before we were interacting with the select-all checkbox. I've merged a PR with a fix that waits for network idle before the interaction and targets the correct inner PrimeFaces element. Should be stable going forward.
Sure! Re-running! https://github.com/IQSS/dataverse/pull/12614#discussion_r3873240802
![]()
Yay!
Passing! Thanks again,
@Ash Manda
!
Of course! Sorry I hadn't fixed this before, I just wasn't sure on what to fix
Hello! Heads up to the team. Over the past few months I have written about a dozen or so more tests and I even used some tests over from the QDR repository that I got access to, thanks to Jim. I am currently testing the stability of the new tests within GitHub Actions. Assuming they stay stable enough throughout this week, there will be a merge into gdcc/dataverse-jsf-tests next week and you will be seeing longer runtimes and more results for the JSF workflow in the main upstream dataverse repo.
I realize that IQSS is in a code-freeze right now, and this should be a relatively low risk time for the merge, but there's always a chance of seeing increased failures with tests. Please do let me know if you want me to postpone this or discuss this or anything.
Thank you!
As I mention whenever I can, I think we should move the JSF tests into the main repo, next to the JSF code.
I think the only downside is that installations might have their own tests. But they already fork the main repo so I think it would be more of the same.
I'm more than happy with that decision if the team is okay with it. From my side not much is going to change. I just want to make sure that this suite doesn't become a maintenance burden for the team
It's a gift! Free code! :tada:
Want me to make an issue about moving the code over?
Let me clear it with Don once
@Ash Manda thanks a ton for these tests
. While I was waiting for the API tests to complete, the JSF test failures already uncovered a problem in my latest PR. I was able to unravel the root cause from digging into the report and the logs. This is a huge step forward!
Let me be bold and suggest some improvements: it would be even much better if these tests would...
... be part of the regular chain (unit, integration, API + JSF).
... be easier to correlate. A failing frontend test and what may have gone wrong in the backend need to be put together manually. I understand this is a deep deep rabbit hole, but maybe it's worth looking into options how to make OpenTelemetry spans from Playwright propagate to the backend so we have end-to-end snapshots?
... have a nicer web UI access for their reports. Downloading the Playwright reports is slooooow and the ZIP is largeish. (1MB/s throughput, 118MB zipfile). Can we upload these HTML reports somewhere else?
Hi Oliver. Thank you so much for the suggestions! I have thought about all of these things at one point or another, and all of them are on my roadmap. My biggest worry with having the image be built exactly once and having the three tests run in line is state pollution. I was wondering if you had any thoughts on that?
That and if say an API test fails, we probably don't want it to block the pipeline and still have it run the JSF tests anyways. So I felt in the beginning it made a lot more sense to run them separately.
What kind of state pollution are you anticipating?
results from first tests being included while running the last tests. Like you know not depending on what happens in previous tests, if that makes sense. We faced some issues with this before I believe in the API tests where the count in one of the tests would go off. With so many tests run line by line, I might unintentionally start building my tests in a way that they would depend on previous ones.
Ash Manda said:
That and if say an API test fails, we probably don't want it to block the pipeline and still have it run the JSF tests anyways. So I felt in the beginning it made a lot more sense to run them separately.
Yes of course! Maybe this was ambigous above! From where I am standing, integration, API and JSF tests should be done in parallel, once compilation, unit tests and packaging is done. (integration tests don't need packaging of containers, so they can start early)
There's probably a way I can get the unit, integration, and JSF tests all run in parallel and produce the reports at the same time. Let me stew on this a bit.
My main point about an "overarching thing" was that once all these tests are done, we need to collate the different reports, merge them (in case of coverage) and do some more things like SonarCloud Analysis, etc
Github action's jobs are meant to be run in parallel. I'm already doing this in some of the existing pipelines.
I am not sure where we could upload the Playwright reports though. S3 maybe? But you pointed out the issue, these reports can't be statically served
so maybe some kind of lambda?
Jobs are only ever run sequentially once you define dependencies between them. Of course a jobs step are always sequential.
How does Sonar ingest its coverage metrics? Like how can I help use these test reports ingest into Sonar?
Ash Manda said:
results from first tests being included while running the last tests. Like you know not depending on what happens in previous tests, if that makes sense. We faced some issues with this before I believe in the API tests where the count in one of the tests would go off. With so many tests run line by line, I might unintentionally start building my tests in a way that they would depend on previous ones.
But these tests would still run within their own realm, right? I agree that we must take care of running each test in a clean environment. With the setup as is I don't see much danger to we'd be able to fall into that trap though. (Ephemeral, separated deployment using compose). This might change if we ever think about moving to use JUnit+Testcontainers to control our pipeline. But we're not there (yet)...?!
Even if we run the jobs in parallel, I was under the assumption that GitHub would reuse the same build.
Ash Manda said:
How does Sonar ingest its coverage metrics? Like how can I help use these test reports ingest into Sonar?
The sonarcloud job is defined here: https://github.com/IQSS/dataverse/blob/develop/.github/workflows/maven_unit_test.yml#L184-L220
It consumes the JaCoCo reports we put in place by downloading the artifacts from previous jobs. We configure the location in the POM.
Ash Manda said:
Even if we run the jobs in parallel, I was under the assumption that GitHub would reuse the same build.
No, that is not possible. Each job (which can be parallelized) runs in an ephemeral container, thus must either rebuild or download artifacts. This is very different to what you get from GitLab CI or Jenkins by default (depening on setup/flavor/runner type).
That's really cool, I didn't know that
Pipeline Engineering is a mess. :wink:
![]()
If I could make it 3% better than it was yesterday, that's a big win to me! Those Gremlins never go away!
Kaizen is a smart way to live and work. :slight_smile:
Ash Manda said:
Let me clear it with Don once
@Ash Manda any news? :smile:
Don wanted to know if it could be a submodule. And I was like it could, but its gonna change y'alls workflows going from git pull to git submodule add and whatever not. The final decision is his, I'll let him stew on it :smile:
Worst case, you move it into the main repo, and I set up a .sh script or a chron job to maintain a repository with just the tests so that others could extend it (which is what I do for our cloak setup anyways) so we gotchu covered?
We've been able to avoid submodules so far.
But I was told that Cypress was preferred right from the very beginning, are you sure you want a Playwright suite for JSF and maintain a Cypress suite for the frontend
Like I said, I don't want to create unnecessary maintenance burdens
Well, let me ask you a related question. Should developers be writing JSF tests when they change the JSF code?
In Theory yes, but its going to be a burden. Frontend tests are a lot of clicking around and waiting to see what happens. It takes a lot of time
Sure, so maybe it's optional.
but
The tools could be at hand, in the same repo.
Right now there are no tools. No patterns to follow.
to be frank, you could just go ahead and do it. Just copy the tests over. And the separate repo can still be there.
But there's a new batch of tests coming over, and rn they're sitting in a PR on the gdcc repo. So maybe a week or two?
Ha, sure. I'm just hoping for some help with the GitHub Actions. To get it working.
of course! It's going to be a minor change to the Actions. Just cd instead of git clone
Plus, I'd be happy for you to get credit for the commits. It's your code!
And we can git blame you. :crazy:
I'm always having fun, until it becomes my responsibility
just kidding
technically its the community's code now
definitely
a group effort
Ash Manda said:
But there's a new batch of tests coming over, and rn they're sitting in a PR on the gdcc repo. So maybe a week or two?
Is this timeline okay?
Then I will help with moving them over and setting up the Actions
Sure! I don't want to mess with the JSF tests in the middle of a release anyway! :sweat_smile:
if you ask me its probably the safest time, cuz no code changes, any faults with the test, its probably a bad test
no strong opinion
Iβm looking for a team that values collaboration, technical excellence, open communication, and continuous learning.
Just wanted to give a minor heads up. So far I've noted two tests (really three) tests that seem to be consistently failing on develop
Thanks for the heads up. I linked to it in Slack.
Do we have a video of not being able to create a dataset with custom terms?
Yes, we do!
b63ec6f9d32934703b26d1b23820addb886306dc.webm
Awesome. Thanks. Can you replicate it on https://beta.dataverse.org ?
I wouldn't be able to, cuz I'm not an admin
making a license default requires admin
Ok. But should we open an issue? Is it a legit bug?
this is a known bug iirc
Do we know its issue number? I'm looking.
me too, lemme find it
https://github.com/IQSS/dataverse/issues/12590
Yes! Thank you! Good find.
I'm running tests locally for the first time and getting a lot of failures. Does this look ok for my .env?
BASE_URL=http://localhost:8080
DV_USERNAME=dataverseAdmin
DV_PASSWORD=admin1
DV_FULL_NAME=Dataverse Admin
LOGIN_ADAPTER=builtin
Here's the report:
![]()
I'm on #12718 at the moment but I'm happy to switch to the develop branch.
could you try adding SKIP_PREFLIGHT=true
if that doesn't fix most of the failures, I'm happy to get on a Zoom call
Trying it! Thanks!
5 instead of 6 failures. Progress! :sweat_smile:
![]()
Have to investigate the videos and traces then. That's not normal
![]()
maΓ±ana :smile:
its 5pm, wanna do it tmr?
Philip Durbin π said:
maΓ±ana :smile:
nah I wouldn't be worried
tbh so far y'all have been assuming that if a test fails, code is wrong. But my incompetence is not entirely out of the question so.
@Ash Manda sure, I'm happy to do a call whenever. Do you want me to switch to develop first?
sure, a dry run on develop will give us a baseline!
Are you available at 10am?
Sure!
Should I delete my docker-dev-volumes before running the JSF tests? Or does it not matter?
it should not matter for the frontend tests at least
Ok, I deleted it anyway, just in case. :smile:
@Ash Manda are you rebuilding the base image for JSF tests on feature branches, too? Otherwise the updated Payara would not be included inside the test's app image.
Yes we've run into that exact issue before. It tries to pull the base image from Docker. If Payara has been upgraded, it wouldn't be able to pull, and it defaults to building the base image
Smart choice! :smile:
You can thank Phil for the idea!
It was born out of a real world failure, during the last Payara upgrade. :smile:
Switching to develop lowered the failure count from 5 to 4:
![]()
fyi, these failures occurred due to unintended behavior in the suite where it defaults the root dataverse to UNC's unless you explicitly tell it not to: https://github.com/gdcc/dataverse-jsf-tests/issues/7
Right. I'll probably switch to this:
ROOT_DATAVERSE="/dataverse/root"
To match what we use in CI: https://github.com/IQSS/dataverse/blob/0b292c798581d2f512818d7a9042ba27017f9caf/.github/workflows/dataverse_jsf_tests.yml#L230
"43 passed (23.2m)" :tada:
Philip Durbin π said:
It's a gift! Free code! :tada:
Want me to make an issue about moving the code over?
I checked with @Ash Manda about this and a decision should be made by UNC on Oct 2 about moving the JSF tests to the main/upstream repo.
Hello. Good afternoon. A merge commit was made into gdcc/dataverse-jsf-tests to introduce the new expanded test suite going from about ~40 tests across three browsers to about ~80 tests across three browsers.
Please let me know if you start noticing any new failures in the mainstream repo
The test development is now going to enter a freeze. Future updates anticipated:
I passed this along in Slack.
Just a gentle note for the team. The JSF tests are still in a very very early age of development, they're running in shadow mode right now, basically I'm trying to collect as much data as I can possible to stabilize them, please do not consider the failure of these tests a blocker for merging, for now at this stage, they're an early guide.
I opened a new PR to address some concerns raised by Oliver and some concerns that I myself had: https://github.com/IQSS/dataverse/pull/12783
For a quick summary: This PR combines the two container test workflows into one, "Containerized Tests for Dataverse". It builds the containers once and runs the API tests and the three JSF browsers in parallel, so JSF results arrive 46% sooner (about 27 minutes instead of 50) with the same test results.
The build each run tested against is now kept for 7 days, so anyone can start it locally to reproduce a failure; the old workflow files are deleted, and the docs and release note are updated.
I welcome all reviews and comments!
Added to "ready for triage"! Thanks for the PR, @Ash Manda and @Oliver Bertuch.
A little while ago I floated the idea of spinning up the containers once and running both sets of test so I'm glad to see you made it happen! :tada:
Have any changes been made to how we calculate code coverage? Perhaps I should start a new topic about code coverage.
Not yet, but I'm laying the groundwork for collecting all the stats we need
Just to clarify, both sets of tests don't run on the same dataverse instance. The containers are built exactly once. Four GitHub Runners download the built artifact and spin up four different instances of Dataverse and run their tests independently on those instances.
Oh, four instances, ok.
I kicked off a separate topic about code coverage: #dev > code coverage
Last updated: Nov 02 2026 at 07:01 UTC