Re: [Outreachy][proposal]: Convert unit tests to use the Clar testing framwork

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 25, 2024 at 6:56 PM Samuel Abraham
<abrahamadekunle50@xxxxxxxxx> wrote:
>
> On Fri, Oct 25, 2024 at 2:22 PM Samuel Abraham
> <abrahamadekunle50@xxxxxxxxx> wrote:
> >
> > On Fri, Oct 25, 2024 at 11:04 AM Patrick Steinhardt <ps@xxxxxx> wrote:
> > >
> > > On Wed, Oct 23, 2024 at 10:45:52PM +0100, Samuel Abraham wrote:
> > >
> > > Thanks for your application!
> > >
> > > > ## Project Overview - Convert unit test to use the Clar testing framework:
> > > >
> > > > I understand that the Git project is in the process of converting its
> > > > unit tests to the Clar testing framework to improve test readability,
> > > > consistency and maintainability, a move away from homegrown unit test
> > > > frameworks such as t/helper/test-tool.h and t/unit-test/test-lib.h.
> > >
> > > Nit: we've basically moved away from test-tool for unit tests already,
> > > to the best of my knowledge. So this is more about the second part,
> > > moving away from our own test framework.
> >
> > Thank you very much for the clarity.
> > >
> > > > Clar provides a structured and efficient way to write and execute
> > > > tests and is well-suited for a project like Git where robust testing
> > > > is essential to maintain quality and stability.
> > >
> > > It would be nice to provide some pointers _why_ we think that clar is
> > > better suited ;) Hint: you may have a look at the patch series that
> > > introduced the clar for some ideas there.
> >
> > Okay I will do that.
> >
> > >
> > > [snip]
> > > > ## Project Plan:
> > >
> > > Formatting of this section is a bit funky, which makes it harder than
> > > necessary to figure out which parts belong together. I'd propose to
> > > first provide a high-level list of the steps you want to do with a
> > > bulleted list and then maybe put more detailed explanations into
> > > separate "### subsections". You may also want to convert links to use
> > > [Markdown syntax](https://www.markdownguide.org/basic-syntax/#links),
> > > which provides some structure aronud them.
> >
> > Okay thank you for this.
> > >
> > > > The first steps to migrating existing tests to Clar would be studying
> > > > existing tests in the t/helper and t/unit-tests directory which will
> > > > enable me to determine those appropriate for conversion.
> > > >
> > > > Liaise with mentors and community members to determine the viability
> > > > of converting the selected test for conversion.
> > > >
> > > > Convert the selected test to Clar while in constant effective
> > > > communication with the mentors and Git community, implementing
> > > > feedback and review suggestions.
> > > >
> > > > Properly test converted scripts to ensure validity and correctness.
> > > >
> > > > Steps to converting the existing unit tests to the Clar Testing Framework
> > > >
> > > >  From the project description in the Outreachy Project Description page,
> > > >
> > > >
> > > > https://www.outreachy.org/outreachy-dec-2024-internship-cohort/communities/git/#convert-unit-tests-to-use-the-clar-testing-framewo,
> > > > the goal is to convert all Git’s existing unit tests to use the Clar
> > > > testing framework exclusively.
> > >
> > > It might also make sense to plan some time to add missing features to
> > > the clar if we hit anything during the conversion.
> >
> > Okay noted.
> > >
> > > > The existing unit tests which would need to be converted to Clar are;
> > > >
> > > > .c test files present in t/unit-tests: Tests in this directory use the
> > > > t/unit-tests/test-lib testing framework and are “.c” scripts,
> > > > converted from the shell-based testing which used the tests in
> > > > t/helper/ and corresponding t<number>-<name>.sh test files. Examples
> > > > of this conversion can be seen in the link below which references Achu
> > > > Luma’s work
> > > >
> > > > https://lore.kernel.org/git/20240226143350.3596-1-ach.lumap@xxxxxxxxx/.
> > > >
> > > >
> > > > The link shows the work done in converting the test from
> > > > t/helper/test-sha1.c and test/helper/test-sha256.c to use
> > > > t/unit-tests/t-hash.c which uses the t/unit-tests/test-lib.h framework
> > > >
> > > >
> > > > The steps to convert files located in this directory include;
> > > >
> > > > - Identify the test files to be converted.
> > > >
> > > > Examples of such files are the t/unit-tests/t-hash.c, t/unit-tests/t-strbuf.c
> > > >
> > > > - Rename the test file from t-<name>.c to <name>.c. This pattern
> > > > follows the style used by Patrick Steinhardt in his conversion of the
> > > > t-strvec.c and t-ctype.c files to use the clar framework.
> > > >
> > > > https://lore.kernel.org/git/604303e31aad3a9e74f7bdddc84f11d4d137c864.1725459142.git.ps@xxxxxx/
> > > > and
> > > >
> > > > https://lore.kernel.org/git/ba05b9f1eef8136e087846ee54a076558097a240.1725459142.git.ps@xxxxxx/
> > > >
> > > > As a sample demonstration, we will convert the t/unit-tests/t-hash.c
> > > > to use Clar.
> > >
> > > I think the previous explanations are sufficient -- going into the
> > > technical details like you do below is appreciated, but ultimately not
> > > necessary in my opinion. What I'm after here is that you have a rough
> > > understanding of what needs to be done for each of the tests, and that
> > > is sufficiently demonstrated by a high-level explanation.
> >
> > Okay noted.
> > >
> > > > The test scripts in the t/helper directory:
> > > >
> > > > The tests in this directory are invoked by the corresponding shell
> > > > scripts which spawn processes to test the different unit tests in the
> > > > t/helper directory.
> > > >
> > > > The process involved in converting these shell scripts to Clar
> > > > framework will typically follow the same steps as illustrated above
> > > > bar the following differences.
> > > >
> > > > Identifying the tests to be converted to Clar
> > > >
> > > > Create a new .c  file name which should be named appropriately to
> > > > illustrate what the file is testing.
> > > >
> > > > However, the shell-based script which tests the functions in t/helper
> > > > will be studied for in-depth understanding and then refactored into a
> > > > .c file which follows the steps above in converting to use Clar.
> > >
> > > As mentioned above, I thought we didn't have any such tests anymore. If
> > > we do, it might make sense to provide an example of such a thing that
> > > needs to be converted.
> >
> > Thank you Patrick
> > Okay from my understanding, such tests have a .c file in t/helper and
> > a corresponding t/t-<number>-<name>.sh file.
> > From my master branch which I study, I can see for example
> >    - test-env-helper.c in t/helper and t0017-env-helper.sh
> >    - test-find-pack.c in t/helper and t0081-find-pack.sh.
> > I concluded since the shell script used to compare the output against
> > the expected still exists
> > and no such file names exist in t/unit-tests, I assumed they have not
> > been ported which is why I listed files
> > in t/helper will be converted to clear.
> > Please I will be happy if I can get more clarity, thanks.
> >
> > >
> > > > Project Timeline:
> > > >
> > > > Community Bonding (Present - November 26):
> > > >
> > > > Continue making contributions to the Git codebase working on different
> > > > things within my capacity and getting more familiar with the codebase,
> > > > participating in patches review.
> > > >
> > > > Conversion of tests begins (December 9 - December 23): Familiarize me
> > > > with the conversion process to further enhance my understanding,
> > > > identify files for conversion and start the conversion process, and
> > > > set up a blog for weekly updates on my conversion process.
> > >
> > > Makes sense.
> > >
> > > > Implementation of community and mentor reviews (December 27 - January 31):
> > > >
> > > > Continue with conversions while testing converted tests, communicating
> > > > with reviewers and implementing reviews.
> > > >
> > > > Testing (February 1 - March 1): Continuously determine the correctness
> > > > of the converted tests by continuously testing and also liaising with
> > > > mentors constantly.
> > >
> > > For this one here'd I'd recommend to start more iteratively. What you
> > > have here sounds a bit like a waterfall model, where you first convert
> > > all tests and then eventually test and send things over to the mailing
> > > list.
> > >
> > > In the Git community you will likely have more success if you work in
> > > smaller patches. E.g. pick a small set of tests to convert, convert
> > > them, polish the series and then send it to the mailing list. That cycle
> > > would then repeat several times until you have converted all of the
> > > tests.
> >
> > Yes, my contributions have made me understand this process.
> > I will make appropriate adjustments. Thank you
> > >
> > > > Availability:
> > > >
> > > >  I am not currently enrolled in any academic program or have any jobs,
> > > > and will be available to work on the project for a minimum of 45 hours
> > > > per week.
> > >
> > > You really shouldn't be working more than 40 hours per week ;) The
> > > [Outreachy Internship Guide](https://www.outreachy.org/docs/internship/)
> > > recommends 30 hours per week, and I don't expect any more of you,
> > > either.
> >
> > >
> > > Other than that this document looks good to me, thanks!
> > >
> > > Patrick
> >
> > Thank you very much Patrick, I appreciate your time. Please I will
> > also like to know if i should send the corrected proposal
> > as a mail to the list as I did with this first version.
> >
> > Thanks again for your time.
> > Abraham Samuel
>
>
> Hello Git Community,
>
>
> I hope this mail finds you well.
>
> I am Abraham Samuel, participating in the Outreachy internship program
> and I write to express my delight, enthusiasm and interest in working
> on the project “Convert unit test to use the Clar testing framework”.
>
> My first exposure to Git started with the book “Learn Enough Git to Be
> Dangerous” which taught me the basics of using Git for version control
> and collaborations and I felt truly dangerous :-).
>
>
> I am passionate about FOSS and now that I am presented with the
> opportunity to contribute to Git, It is indeed a great opportunity to
> understand what happens under the hood and I have never been happier.
>
>
> ## Introduction:
>
> I completed my ALX Software Engineering program in 2023 and I have
> been engaged in various software development projects, open source
> development and various personal projects, providing me with valuable
> technical and collaborative skills.
>
>
> ## Project Overview - Convert unit test to use the Clar testing framework:
>
> I understand that the Git project is in the process of converting its
> unit tests to the Clar testing framework to improve test readability,
> consistency and maintainability, a move away from homegrown unit test
> framework t/unit-test/test-lib.h.
>
> Part of the reasons for this
> [decision](https://lore.kernel.org/git/cover.1722415748.git.ps@xxxxxx/)
> includes:
>
> 1. Avoidance of duplication when declaring test functions which occurs
> when using the t/unit-tests/test-lib.h framework
>
> 2. Having a proper unit testing framework instead of reinventing the wheel
>
> 3. Clar can be easily extended
>
> 4. Clar provides a structured and efficient way to write and execute
> tests and is well-suited for a project like Git where robust testing
> is essential to maintain quality and stability.
>
>
> ## Contribution to the Git Community:
>
> I have participated in contributions to Git’s codebase after getting
> accepted into the contribution phase in October 2024, working on what
> I found doable and within my reach. Below is the list of my
> contributions:
>
> - [PATCH v4] t7300-clean.sh: use test_path* helper functions for error logging.
>
>        List thread:
> https://lore.kernel.org/git/pull.1811.v4.git.1728498122419.gitgitgadget@xxxxxxxxx/
>
>        Status: merged into master
>
>        Merge Commit: 77af53f56f100b49fdcf294f687b36064d16feca
>
>        Description: The patch converted instances of  “test - [def]”
> in test cases to test_path_* functions to get error logs when the test
> case fails when testing for the existence of a file or directory after
> “git clean” or “git clean -d” is called as the case may be.
>
>
>
> - [PATCH v4] notes: teach the -e option to edit messages in the editor
>
>        Status: integrated into next
>
>        List thread:
> https://lore.kernel.org/git/pull.1817.git.1729296853800.gitgitgadget@xxxxxxxxx/
>
>        Description: The patch worked on a #leftover bit which added
> the “-e” option to “git notes add” and “git notes append” subcommands
> when the message is supplied with the -F and/or -m options. The patch
> enables fine-tuning the message by invoking the user’s default editor
> prefilling the message in the editor to allow editing the message to
> the required taste before adding the note to the commit
>
>
> ## Project Plan:
>
>       - Identify files for conversion in the t/unit-tests directory
>
>       - Write incremental patches
>
>       - Convert test and implement community and mentors’ feedback
>
>       - Validate converted tests
>
>
> ## Detailed Steps
>
>
> ### Identify files for conversion in the t/unit-tests directory:
>
> From the project description in the [Outreachy Git Project Description
> page](https://www.outreachy.org/outreachy-dec-2024-internship-cohort/communities/git/#convert-unit-tests-to-use-the-clar-testing-framewo),
> the goal is to convert all Git’s existing unit tests to use the Clar
> testing framework exclusively and also add any missing features which
> might be necessary for the conversions.
>
> I will begin by selecting files from the t/unit-tests directory for
> conversion to the Clar testing framework. This approach allows me to
> start with smaller, manageable patches that the community can review
> incrementally.
>
> The existing unit tests which would need to be converted to Clar are
> .c test files present in t/unit-tests . Tests in this directory use
> the t/unit-tests/test-lib testing framework and are “.c” scripts (for
> example t/unit-tests/t-hash.c and t/unit-tests/t-strbuf.c), converted
> from the shell-based testing which used the t/helper/test-tool
> framework and corresponding t<number>-<name>.sh test files. Examples
> of this conversion can be seen in [Achu Luma’s
> work](https://lore.kernel.org/git/20240226143350.3596-1-ach.lumap@xxxxxxxxx/),
> which shows the work done in converting the test from
> t/helper/test-sha1.c and test/helper/test-sha256.c to use
> t/unit-tests/t-hash.c which uses the t/unit-tests/test-lib.h framework
>
>
> ### Write incremental patches
>
> Each test conversion will be submitted as an incremental patch,
> following [Git’s contribution
> guidelines](https://github.com/git/git/blob/master/Documentation/SubmittingPatches).
> By keeping patches incremental, the community can provide focused
> feedback on each test conversion, improving the outcome.
>
>
> ### Convert test and implement feedback
>
> Once the files are identified, I will proceed with the conversions
> while regularly communicating with the mentors and the Git community.
> This communication will ensure alignment on the implementation and
> allow immediate adjustments based on any feedback received.
>
> Each file conversion will typically have the following steps:
>
>        - Rename the test file from t-<name>.c to <name>.c. This
> pattern follows the style used by Patrick Steinhardt in his conversion
> of [t-strvec.c](https://lore.kernel.org/git/604303e31aad3a9e74f7bdddc84f11d4d137c864.1725459142.git.ps@xxxxxx/)
> and [t-ctype.c](https://lore.kernel.org/git/ba05b9f1eef8136e087846ee54a076558097a240.1725459142.git.ps@xxxxxx/).
>
>        - Add the module name to CLAR_TEST_SUITE variable in the MAKE file.
>             CLAR_TEST_SUITE += <name>
>
>        - The next steps will typically involve writing optional setup
> and cleanup functions with the signature “void
> test_<suitename>__initialize(void)” and void
> test_<suite_name>__cleanup(void) and the actual tests also with the
> signature
>
> void test_<suitname>__<testname>(void) and the Clar methods such as
> cl_assert(), cl_assert_equal_s(), cl_assert_equal_i() and any other
> implemented assertion methods can be used to verify the results
> against the expected.
>
>
>
>  ### Validate converted tests
>
> Finally, each converted test will be validated to ensure it behaves as
> expected. Tests will undergo a thorough review to confirm that the
> converted scripts accurately replicate the original test’s
> functionality.
>
>
> ## Project Timeline:
>
> Community Bonding (Present - November 26):
>
> Continue making contributions to the Git codebase working on different
> things within my capacity and getting more familiar with the codebase,
> participating in patches review.
>

Understand Git and Clar codebase (December 9 - December 22):

       - I will familiarize myself with the Git codebase to understand
current tests
       - Study previous conversion processes by previous interns to
the now-old unit test framework
          for ideas that would benefit me.
       - Work with Clar upstream to improve shortcomings discovered
during integration with Clar.
       - Set up a blog for weekly updates on my conversion process

> Conversion of tests begins (December 23 - March 1):
>
>     - Identify files for conversion with mentor’s guidance
>
>     - Start conversion process for selected
>
>     - Send incremental patches to the mailing list for review by
>        mentors and   community members
>
>     - Implement review feedback and resend patches to the mailing list
>        until an agreed patch is agreed upon.
>
>     - Update my blog to talk about each conversion and the
>       achievements, challenges and goals achieved.

Final Stages (March 1 - March 7):
       - Update my blog on the gains and knowledge gained during the internship
       - Work with Git Community to ascertain level of satisfaction
with converted tests
>
>
>
> ## Availability:
>
>  I am not currently enrolled in any academic program or have any jobs,
> and will be available to work on the project for a minimum of 30 hours
> per week.
>
>
> ## After the Internship:
>
> The Git community fosters proper and effective communication,
> regardless of one’s level of experience. The patience, guidance and
> explanation of technical concepts shown by community members are
> wonderful and this has made me grow not just technically but also
> behaviorally. Due to this, I plan to continue actively participating
> the in Git community and be part next generation of those saddled with
> sustaining this great project and preserving its legacy.
>
>
> I look forward to reviews as regards my proposal.
>
>
> A special appreciation to everyone on the mailing list for reviewing my patches.
>
> My mentors Patrick and Phillip, Junio, Eric, Christian, Brian,
> Kristoff, Taylor, and Josh.
>
> I am grateful to you all.
>
> Thanks
>
> Abraham Samuel.





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux