From 4e2fecbae2e9d6594d662689f31950478d75cb8a Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Fri, 24 Oct 2025 19:33:58 -0500 Subject: [PATCH 1/8] blog post --- content/blogs/cbialorucki-tests-2.md | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 content/blogs/cbialorucki-tests-2.md diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md new file mode 100644 index 0000000..4cb5df5 --- /dev/null +++ b/content/blogs/cbialorucki-tests-2.md @@ -0,0 +1,65 @@ +--- +title: "Progress update: fixing the ReactOS test suite" +author: "Carl Bialorucki" +date: 2025-07-04 +tags: [ "newsletter", "tests", "test-suite" ] +--- +For many years, the ReactOS test suite was neglected. +It was a random collection of our own tests and old Wine tests that were only checked against Windows Server 2003 and sometimes a random newer version of Windows up to the discretion of the contributor. +The Wine tests we imported were heavily modified and the changes made weren’t always well documented. + +I’m here to clean up this mess. + +I’ve been deeply involved with the ReactOS project since 2023 and in May of 2024 I became an official project developer. +In May of 2025, I was contracted to clean up the test suite and in August the contract was extended through the month of December. +Let’s take a look at what I’ve been doing for ReactOS with this contract. + +## Our tests +Since I began this contract, I’ve merged fixes for 55 of our own test modules and wrote 5 new test modules. +These fixes were tested against the latest versions of Windows Server 2003, Windows Vista, Windows 7, Windows 8.1, and Windows 10 build 1607; for both x86 and x64; and for tests compiled using GCC and MSVC. +As you can imagine, verifying fixes took a lot of time for testing. + +Some of our test suite includes kernel mode tests, we call them “kmtests”. +Several of these kmtests were invalid for Vista and newer Windows versions. Running these tests would cause bugchecks (BSoDs) on newer Windows versions. +With these merged fixes, we can now run our full test suite on Windows Vista without experiencing a bugcheck. + +## Wine tests +After working on our own tests, I turned my attention towards where most of our test failures were coming from: the tests that we share or ‘sync’ with the Wine project. +As a project, we’ve been working to improve the quality of our Wine syncs. +We decided to focus on syncing as many Wine projects as possible to Wine 10.0 and to cleanly document our changes to the Wine code using C preprocessor guards. +Wine 10.0 is not the latest version of Wine, but using a common version across the board can help simplify future Wine syncs. + +One difficulty with using code from the Wine project is that Wine’s headers are not compatible with Microsoft’s headers used in the public Windows SDK. +For years, our headers were trying to accommodate both, and because of that our headers weren’t compatible with either Microsoft’s headers or Wine’s headers. +This necessitated several definition hacks for Wine code, our own code, and code we sync with other projects that expect the official Microsoft headers. +As part of my syncing efforts for the Wine tests, I created a new directory for Wine headers and separated our headers from the Wine headers. +Moving forward, we will use up-to-date Wine headers for Wine code and our Microsoft-compatible headers for everything else. +To reinforce this separation of headers, I also rewrote several of our headers that originated from Wine. +This header separation helps reduce the number of changes to Wine and other code we would otherwise need to apply. +In addition, this header separation opens up the possibility of distributing an MIT-licensed SDK separate from ReactOS in the future. + +Despite the new header initiative, many Wine tests still need several patches to pass and not crash on Windows Server 2003, Windows Vista, Windows 7, Windows 8.1 and even early versions of Windows 10. +Wine also doesn’t write their tests with MSVC compiler in mind, so I sometimes have to write more patches for MSVC builds. +After the Wine tests pass on Windows without failures, I then see if the test crashes on ReactOS. +Additional test failures on ReactOS are a good thing, they show where we can fix bugs; but when a test crashes, we can’t use it to tell if ReactOS is getting better or getting worse. +After ensuring synced tests don’t crash on ReactOS, I open a pull request that is then reviewed by other core developers and eventually it gets merged. + +## What’s next? +ReactOS Deutschland e.V. pays for my contract and to host our infrastructure, which includes our website, our wiki, our bug tracker, and our test bots. +To view the results of test bot runs, we developed a tool called Testman that is integrated into our website. +Testman was also neglected and now has several issues. +For example, the tool was developed back when we used SVN for version control and the search interface was designed for that. +Now that we migrated to git, searching is broken on Testman. +Test results shown in Testman are also sometimes incorrect, especially when a test spawns child processes. +I plan to fix these issues with Testman during my contract. + +Eventually I would like to see our test bots become part of our CI/CD pipeline. +Currently we use GitHub Actions to ensure each pull request can be compiled using all the targets we currently support. +No plans are formalized at this time on integrating test bots in our CI/CD pipeline. + +If you’d like to see more ReactOS progress, [donate at reactos.org/donate](https://reactos.org/donate) or [contribute at github.com/reactos/reactos](https://github.com/reactos/reactos). +Every dollar and every pull request helps us move towards a free and open-source future with a Windows-compatible operating system for everyone. + +Gratefully, + +Carl Bialorucki From 5b988a5879f5df774328cfda656c989790fe5bba Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Fri, 24 Oct 2025 19:37:11 -0500 Subject: [PATCH 2/8] oops --- content/blogs/cbialorucki-tests-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md index 4cb5df5..5619ced 100644 --- a/content/blogs/cbialorucki-tests-2.md +++ b/content/blogs/cbialorucki-tests-2.md @@ -1,7 +1,7 @@ --- title: "Progress update: fixing the ReactOS test suite" author: "Carl Bialorucki" -date: 2025-07-04 +date: 2025-11-04 tags: [ "newsletter", "tests", "test-suite" ] --- For many years, the ReactOS test suite was neglected. From b9d100979fd21de8a8675fe55419ad2dd68dc51e Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Mon, 27 Oct 2025 16:19:47 -0500 Subject: [PATCH 3/8] Apply suggestions --- content/blogs/cbialorucki-tests-2.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md index 5619ced..e14f1c0 100644 --- a/content/blogs/cbialorucki-tests-2.md +++ b/content/blogs/cbialorucki-tests-2.md @@ -10,7 +10,7 @@ The Wine tests we imported were heavily modified and the changes made weren’t I’m here to clean up this mess. -I’ve been deeply involved with the ReactOS project since 2023 and in May of 2024 I became an official project developer. +I have been deeply involved with the ReactOS project since 2023 and in May of 2024 I became an official project developer. In May of 2025, I was contracted to clean up the test suite and in August the contract was extended through the month of December. Let’s take a look at what I’ve been doing for ReactOS with this contract. @@ -27,7 +27,7 @@ With these merged fixes, we can now run our full test suite on Windows Vista wit After working on our own tests, I turned my attention towards where most of our test failures were coming from: the tests that we share or ‘sync’ with the Wine project. As a project, we’ve been working to improve the quality of our Wine syncs. We decided to focus on syncing as many Wine projects as possible to Wine 10.0 and to cleanly document our changes to the Wine code using C preprocessor guards. -Wine 10.0 is not the latest version of Wine, but using a common version across the board can help simplify future Wine syncs. +Wine 10.0 is not the latest version of Wine, but using a fixed version across the board can help simplify future Wine syncs. One difficulty with using code from the Wine project is that Wine’s headers are not compatible with Microsoft’s headers used in the public Windows SDK. For years, our headers were trying to accommodate both, and because of that our headers weren’t compatible with either Microsoft’s headers or Wine’s headers. @@ -39,7 +39,7 @@ This header separation helps reduce the number of changes to Wine and other code In addition, this header separation opens up the possibility of distributing an MIT-licensed SDK separate from ReactOS in the future. Despite the new header initiative, many Wine tests still need several patches to pass and not crash on Windows Server 2003, Windows Vista, Windows 7, Windows 8.1 and even early versions of Windows 10. -Wine also doesn’t write their tests with MSVC compiler in mind, so I sometimes have to write more patches for MSVC builds. +Wine also doesn’t write their tests with the MSVC compiler in mind, so I sometimes have to write more patches for MSVC builds. After the Wine tests pass on Windows without failures, I then see if the test crashes on ReactOS. Additional test failures on ReactOS are a good thing, they show where we can fix bugs; but when a test crashes, we can’t use it to tell if ReactOS is getting better or getting worse. After ensuring synced tests don’t crash on ReactOS, I open a pull request that is then reviewed by other core developers and eventually it gets merged. @@ -58,7 +58,7 @@ Currently we use GitHub Actions to ensure each pull request can be compiled usin No plans are formalized at this time on integrating test bots in our CI/CD pipeline. If you’d like to see more ReactOS progress, [donate at reactos.org/donate](https://reactos.org/donate) or [contribute at github.com/reactos/reactos](https://github.com/reactos/reactos). -Every dollar and every pull request helps us move towards a free and open-source future with a Windows-compatible operating system for everyone. +Every dollar and every pull request helps us move towards a free and open-source future with a Windows-compatible operating system for everyone! Gratefully, From 8b64d6e5bf6ec7988c0aaab0f417a562a51e7697 Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Thu, 30 Oct 2025 15:30:07 -0500 Subject: [PATCH 4/8] Backdate article, adjust wording --- content/blogs/cbialorucki-tests-2.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md index 5619ced..6a9cb8d 100644 --- a/content/blogs/cbialorucki-tests-2.md +++ b/content/blogs/cbialorucki-tests-2.md @@ -1,8 +1,9 @@ --- title: "Progress update: fixing the ReactOS test suite" author: "Carl Bialorucki" -date: 2025-11-04 +date: 2025-10-30 tags: [ "newsletter", "tests", "test-suite" ] +# Note: blog post release planned for 2025-11-04 --- For many years, the ReactOS test suite was neglected. It was a random collection of our own tests and old Wine tests that were only checked against Windows Server 2003 and sometimes a random newer version of Windows up to the discretion of the contributor. @@ -53,7 +54,7 @@ Now that we migrated to git, searching is broken on Testman. Test results shown in Testman are also sometimes incorrect, especially when a test spawns child processes. I plan to fix these issues with Testman during my contract. -Eventually I would like to see our test bots become part of our CI/CD pipeline. +Eventually I would like to see our test bots play a larger role in our CI/CD pipeline. Currently we use GitHub Actions to ensure each pull request can be compiled using all the targets we currently support. No plans are formalized at this time on integrating test bots in our CI/CD pipeline. From 33135ae12aa73f8fef0fc194e1f7d4f0109c46b6 Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Thu, 30 Oct 2025 17:01:33 -0500 Subject: [PATCH 5/8] add banner image --- content/blogs/cbialorucki-tests-2.md | 1 + .../blogs/cbialorucki_tests/tests-2-banner.png | Bin 0 -> 21493 bytes 2 files changed, 1 insertion(+) create mode 100644 static/img/blogs/cbialorucki_tests/tests-2-banner.png diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md index 0fb2035..63c1ee1 100644 --- a/content/blogs/cbialorucki-tests-2.md +++ b/content/blogs/cbialorucki-tests-2.md @@ -3,6 +3,7 @@ title: "Progress update: fixing the ReactOS test suite" author: "Carl Bialorucki" date: 2025-10-30 tags: [ "newsletter", "tests", "test-suite" ] +banner: "img/blogs/cbialorucki_tests/tests-2-banner.png" # Note: blog post release planned for 2025-11-04 --- For many years, the ReactOS test suite was neglected. diff --git a/static/img/blogs/cbialorucki_tests/tests-2-banner.png b/static/img/blogs/cbialorucki_tests/tests-2-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..a9fab1867cbce5bc4036132746e25b8a00deb98c GIT binary patch literal 21493 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 T Date: Thu, 30 Oct 2025 17:22:31 -0500 Subject: [PATCH 6/8] change banner image --- .../cbialorucki_tests/tests-2-banner.png | Bin 21493 -> 13809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/blogs/cbialorucki_tests/tests-2-banner.png b/static/img/blogs/cbialorucki_tests/tests-2-banner.png index a9fab1867cbce5bc4036132746e25b8a00deb98c..0e7545c61e51ad950b5bde8846222e80bd1657b6 100644 GIT binary patch delta 12189 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

Y4vs1OkF^@jqe$0ygKAyj#aI zI+)JvRQ*4UmH5-fUnkv#EtSZ+mtDX6zdZ0z38c4quLG3r9Vh4NLbRr~Ru2z#TR-(f z;^1k>$mmr}Pawc1NeZH`r66^F8UBurv8~f@vYCyPf@+PIUXc0SikYF}3K-2@!T)gq z`f6zTzoaP3kK1c;_?PD7OeY!KuW4Lj{`AQIpIXj4nhi&b<66}gMa@b_s&=f+96)MvYR{8bw6SSTRbXMywh|X{;hfP&WVLltE7IVSAJ)OW`m z&fyk+KvFt1jFFzHY1Gs+t+}e$#xhRVOjf}DAU~aO2O~`zZPp>(0)FldCGf*$3>W&G z3#O|ZDv$;Zif0E#U2j*aqvC2v=K@Xf!9Z7DF@(8@eq6H2 z%Q3y7J(wYwpsc5UYxu(Rvr37L_VV(`zvJVJQ=HlNKWm?k(=Ev&b{X`H_eP0-dX>;O^9w#R4 z2V0+og%ydnYl7s7FtAbiMo_6c26K~Yx_bV&E{-?!?Cpgpt8_$kMoWz7rhWYQndCd@ zYdGujj1@%p#0%3fZu5%*VdZtV!@Cc(#N!Dxf2JmmjoY%=%XnrJgTTvj z@=8SCtTC+YwNUK}2lO2}hnM>Dvk@6ze~z3HAPHx|Zp>#Af?Gt1+%m9`pTe;+e&_O>g*SzKSM8Gn5T zGTbKD)NaIOWwNAz<|z|yC)~8zxj1XXjp<(U9{F_1AMTq=To^h!d`}c~Ys9*zCYPye zOg9`<)Pq)~cCtGcrMiGgg;?QWo<%W^s9Fe=dnR81%`_$fK&L?t7SOf z*SK<3?rEZt>Nlv{u!w#pH5kE-yIk=V~J$1W9Z#0RJNu zmKUEK>H(^T#}KJ`p9u@7i-8Po44WOtJI`?*JKZk5c{s5=5rgW}^eDf~=RFvkiK&%` z`9Fmna>z7TTQydVRC*PCC?9RVG>Z`1D`ItX^EVI!c#p%?y_C6CBS++>(!nq5g6Dl` zZikeAOV4QEg=cXgKR5+(B-@7Gt8@^*n2o|EfUv>tC?f5rWKhTn5^7N%J}04-9GzxW zV{(I$7wH3}$%OIBl34Wy^qXD#NxTmPdSNdg=K@K*^7hN$T+iwEGVHbsH|Moaz6o74 zfbn4Y-KdogXp0h_ihAHPny1YmaXng3s#ZCaU*Tz_+Q#!F2o6l9Ld~v4oXzOP1x==~ zERFC5Brp!Mc2jqkv?d)mdDEDphE$XqVt+qcUaY%j6%j;!ZW$A}KeYcbYSG&r4omYz zFraRA%V)78lrS?hnr}K0_bCQG!}456duE)GV3$xwt$~?LwkuKR1jwwodNz0084M(a z_Hb^_3RQ)z-Zyz`+y3Qxh{GKMt@QpY8rIRrndBvS{gR*bNY=N0+?vFhzKb;P=o=`+ zH<=4GY=wmj^r*!qCTRtNSz->@2S0zZKAPzA2+)JqfqD?w=I779v@4WLD}LH{!%PfMq)+0_s|+u{rvL8! z_G5s_$2Rj~bcx-@b8N~u4C&-4oVeSWuG{FS-sSGN{fMSI-pMm>g*B|cV=rYq-{YaV zX8VtDv^bZ#s${nd53x$}05F{VJ|%#`7BVa$>A9F7BJ5Q$Xe-+mhpco9ISzik2ILn& z1ZUuBy^+>#VC~tmCprfKw-PJ-zYmUf(Pnl|_8zG@93h0prAty^2|&i061_#m7Lcb4 zy^?>3$j5}Q$DR%dkzkgqJ`o$<2RIe*hyvL>ozB0zcHhko!ctM~@g%;1mzFtoy6n32 zj+8F-ab3P#IwXuF#Q&>i%^IH|m5t@O$9JafR6qC=^x@|w_WiAj9*sELOEX^obT+q~ zaBp)yGfXfr4Y~CXtn7?OtNL(A|IQPGPC)RK%8EUqFT4Ebp=2hfi9o?S5OP}5x$z$3 z>slrGWH#L=gAuE-;acBz3Png(r766Y;-w0zUzUqX(7K-=wa{IA6@0cA()XPXhrt9Y zvLHuuw!SLAu^?}`Q9rQP=;s>mG_Qz=9ULz|iO5*{>l7y|2%}|=2VVqb@A8?yM`q7m zGSsxZ1pfpw5mj_6xB|}_c(UMPoN&KuEL4*&?ETYR;~g*|+&_`(wjloH5N7I!xo7hj zb6@t?Ycmg*4I7M66H!Ec$~w`(Xr?S1`1iy_bbIkV;pnBL?R?|bX|7p6u@zPOSLN6@ z&*W|E@U;kA7$?ymgXA-tfOo9?kWJe257g-SQE3NzMhik&`w8^l;b>ZN5OMO7$fL2U zYP;=b7Kj#5#S8as3GP^koYuD4ux`jRm73gsaYrwj;|G`ALge{W(uVoAw0__640^T{I) zmRG;HmDpa)@++^9O5^Aw;|^0LUPyfHDp5!p7|_hNaM4QA-QF(pb9=%At^1Rs5}%&F zXyD+M?Ez}~Q6_rV-yPDh_ihk^J`%e{5_Sp3aTrcNa?xRn*=Nde+oN>^dseZu@ zwPQz)eb{mK)+|eAUWe_{Uso-L$Y7dx0IQzTkvCgkVv}tRl;gn+zww{EC{C(Pe32;- z%Cjk=zQqH<8{ZqU|AL5Ukmt7_p|&koh5u?9w>on8Lt{K}`>zfreT_FMA8&Y`z(FmNxqIEpD3 zMheb8oXqM+nc+4H37kJyPSm+?1IFq!0Y$+OPQmzMx#KK+OpHLiHv46`sZ+_7^X~I7 zrRk<(9vQ`u^I0;qC1dK3HbIv9Z1?xj?rn=s{+T*8F}2N!j&jS*iC+&*_ZHVi=b)`C za(8I0MtU=e+UzIB`i)GXUJf1P`GEi!xm6xz^)_mqn44Psk~iO}Ny~D1QM$~}gWE0w zoh@YKmr@kLOAEuDmjDwQIvYyctry62j39czQNofSied+zzNT#}nWLds)M-o!#U=}J zK!dq3iw36C90Q@{$tp&H3AP}?guFheC9Zv`I+xVT7K$G`+UqJfETRZlz@CH2`%DWP z1woJ%qJt?LOj3_svwHNLw0Vlc#>lFnqez>xV~iu`M<*)b7cZ_t&VtC;Ni~fNcSeR; zD5hVtV7qTzDv*$4s%f&GE|lO@Y;MA)Sd>tJ7qno*8I}|X1pYgt*?&P`{{!>?ME+yJ ZXY`bORrcYOFgmIW)73Q8s8n~1{1<0Lqk8}V From 8b541c05761859863e297ed67956305931273f24 Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Tue, 4 Nov 2025 10:41:08 -0600 Subject: [PATCH 7/8] Update article date, flesh out a paragraph --- content/blogs/cbialorucki-tests-2.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md index 63c1ee1..763c6cb 100644 --- a/content/blogs/cbialorucki-tests-2.md +++ b/content/blogs/cbialorucki-tests-2.md @@ -1,7 +1,7 @@ --- title: "Progress update: fixing the ReactOS test suite" author: "Carl Bialorucki" -date: 2025-10-30 +date: 2025-11-04 tags: [ "newsletter", "tests", "test-suite" ] banner: "img/blogs/cbialorucki_tests/tests-2-banner.png" # Note: blog post release planned for 2025-11-04 @@ -57,7 +57,9 @@ I plan to fix these issues with Testman during my contract. Eventually I would like to see our test bots play a larger role in our CI/CD pipeline. Currently we use GitHub Actions to ensure each pull request can be compiled using all the targets we currently support. -No plans are formalized at this time on integrating test bots in our CI/CD pipeline. +However, project developers have to manually initiate test bot runs for pull requests and paste the results into the description for each pull request. +If this process was automated, test results would be easier to trace, contributors would have a clearer picture of the impact of their pull request, and reviews would be faster to complete. +No plans are formalized at this time to further utilize our test bots in our CI/CD pipeline. If you’d like to see more ReactOS progress, [donate at reactos.org/donate](https://reactos.org/donate) or [contribute at github.com/reactos/reactos](https://github.com/reactos/reactos). Every dollar and every pull request helps us move towards a free and open-source future with a Windows-compatible operating system for everyone! From 640427a9c5f4f0f917d6e771b4c74de00b909b8e Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Tue, 4 Nov 2025 14:16:05 -0600 Subject: [PATCH 8/8] Capitalize git --- content/blogs/cbialorucki-tests-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blogs/cbialorucki-tests-2.md b/content/blogs/cbialorucki-tests-2.md index 763c6cb..b790ed2 100644 --- a/content/blogs/cbialorucki-tests-2.md +++ b/content/blogs/cbialorucki-tests-2.md @@ -51,7 +51,7 @@ ReactOS Deutschland e.V. pays for my contract and to host our infrastructure, wh To view the results of test bot runs, we developed a tool called Testman that is integrated into our website. Testman was also neglected and now has several issues. For example, the tool was developed back when we used SVN for version control and the search interface was designed for that. -Now that we migrated to git, searching is broken on Testman. +Now that we migrated to Git, searching is broken on Testman. Test results shown in Testman are also sometimes incorrect, especially when a test spawns child processes. I plan to fix these issues with Testman during my contract.