Hi,

Due to controverse discussion and some opposition on the hackathon, and the 
impression that this issue is currently not that urgent yet, I withdraw this 
proposal for now.

I'll come back with it as soon as our test suite is grown so big that it 
warrants selective test execution. :-)



Best regards

Markus Schaber

CODESYS® a trademark of 3S-Smart Software Solutions GmbH

Inspiring Automation Solutions

3S-Smart Software Solutions GmbH
Dipl.-Inf. Markus Schaber | Product Development Core Technology
Memminger Str. 151 | 87439 Kempten | Germany
Tel. +49-831-54031-979 | Fax +49-831-54031-50

E-Mail: m.scha...@codesys.com | Web: http://www.codesys.com | CODESYS store: 
http://store.codesys.com
CODESYS forum: http://forum.codesys.com

Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner | Trade 
register: Kempten HRB 6186 | Tax ID No.: DE 167014915

> -----Ursprüngliche Nachricht-----
> Von: Markus Schaber [mailto:m.scha...@codesys.com]
> Gesendet: Freitag, 14. Juni 2013 13:53
> An: Subversion Dev (dev@subversion.apache.org)
> Betreff: AW: Proposal for separating Tests into groups
> 
> Hi,
> 
> Considering Bens mails, and some personal discussions yesterday, I refine
> variant 2, and drop variant 1 (which actually was an extremely simplified
> subset of variant 2).
> 
> 1) We define a bunch of test categories.
> - The number of categories should be small and well-arranged. To much
>   categories will just be confusing and unmaintainable.
> - Some suggested categories:
>    - Excessive (Tests which excessively test an isolated part of the code
> which is
>      unlikely to break by unrelated changes, and take
>      a lot of time to execute, like the #ifdef-ed test in svn_io right now).
>    - Manual (Tests which require manual interaction, currently only 1
> candidate)
>    - WorkingCopy (Tests which require a working copy)
>    - NoRepository (Some C tests which do not involve the repository at all)
>    - RaSerf, RaFile, RaSvn (Tests checking specific functionality of a RA
> layer)
>    - FsFs, FsBdb (Tests checking specific functionality of an FS
> implementation)
>    - Local (Tests intended to check local working copy functionality, only
>     accessing a repo as a side effect)
>    - Repository (Tests intended to check access to the repository via Ra
> layer)
>    - Server (Tests just covering server side functionality, no client /
> working
>     copy involved)
> 
> 2) Each test case gets annotated with one or more test
>    categories.
> 
> 3) Selection of tests:
>     - When the user does not specify anything, all tests except the ones
> declared
>     "Excessive" and/or "Manual" are selected.
> 
>     - When the user does explicitly specify test numbers and/or categories,
> the
>     selection covers all tests which have a given test number or are marked
> with
>     at least one of the given categories, or are not marked with any category
> at
>     all. Using the special category "default" selects the default set, the
>     special category "all" selects all tests including the "Excessive" and
>     "Manual" tests.
> 
>     - Additionally, the user may specify a list of excluded test numbers and
>     categories, which are then excluded from the selection as defined by the
>     three cases above.
> 
> 4) Calling Syntax:
> 
> For both Python and C test executables, I propose that we just allow to-be-
> selected test categories mentioned in addition to the test numbers.
> The tests to be excluded are preceded by the --exclude option.
> 
> Example derived from Bens use-case:
> 
> foo.py default excessive --exclude NoRepository
> 
> This runs all non-manual tests which actually use an RA layer.
> This can be used for the 2nd or 3rd test run when alternating ra layers,  to
> not run the ra-independent tests twice.
> 
> For make check, those lists are to be passed via the CATEGORIES and EXCLUDE
> variables.
> 
> (I'm not sure yet whether we allow to also pass single tests there, this
> would need some syntax combining the test executable name and number, like
> cat_tests.py:3,5)
> 
> For the UI, I suggest category names are case insensitive, but case
> preserving.
> 
> 5) Implementation details:
> 
> In Python, I'd define an decorator @categories which one can use to assing
> categories per test case. In addition, one can assign per-module default
> categories which apply to all tests in the test_list which don't have
> explicit categories declared. The categories as well as the decorator will be
> defined in main.py.
> 
> For the C tests, I'd define an enum for the test categories using bit flags.
> The svn_test_descriptor_t will gain an additional const field containing that
> categories.
> 
> 
> 
> 
> Best regards
> 
> Markus Schaber
> 
> (This email was sent from a mobile device...)
> 
> CODESYS® a trademark of 3S-Smart Software Solutions GmbH
> 
> Inspiring Automation Solutions
> ________________________________
> 3S-Smart Software Solutions GmbH
> Dipl.-Inf. Markus Schaber | Product Development Core Technology Memminger Str.
> 151 | 87439 Kempten | Germany Tel. +49-831-54031-979 | Fax +49-831-54031-50
> 
> E-Mail: m.scha...@codesys.com | Web: codesys.com CODESYS internet forum:
> forum.codesys.com
> 
> Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner | Trade
> register: Kempten HRB 6186 | Tax ID No.: DE 167014915
> 
> ________________________________________
> Von: Ben Reser [b...@reser.org]
> Gesendet: Donnerstag, 13. Juni 2013 15:39
> An: Markus Schaber
> Cc: Subversion Dev (dev@subversion.apache.org)
> Betreff: Re: Proposal for separating Tests into groups
> 
> On Thu, Jun 13, 2013 at 3:20 PM, Markus Schaber <m.scha...@codesys.com> wrote:
> > This are two alternative proposals for the test suite:
> >
> > Rationale: Developers restrain from implementing some tests because they
> just take to much time to run at every commit.
> 
> I don't think that's a problem with Subversion.  I can run the full test
> suite against a single fs layer + ra layer in 5 minutes.
> Depending on what I'm touching I may decide to run one or more but even if I
> test all 3 ra layers that's only 15 minutes.
> 
> I don't recall anyone ever saying I didn't write a test for that because it
> would take too long to run.  However, I can certainly say people have avoided
> writing tests in this project because the tests would take too long to write
> (especially our C level tests vs cmdline tests).  I can also say that people
> have avoided writing tests because our test harness for the server side
> doesn't support changing the server configuration per test.
> 
> > Other test systems like JUnit, NUnit or the CODESYS Test Manager come with
> ways to select unit tests by category, so we could implement something
> similar with our tests.
> >
> > 1) Just two test sets: simple and extended tests:
> > Tests which take a lot of time and cover areas which are unlikely to break
> can be marked as extended tests. For Python, there will be an @extended
> decorator, for the C tests we'll have macros like SVN_TEST_EXTENDED_PASS.
> >
> > Then running the test with an command line option --simple will skip those
> tests. Explicitly mentioning extended tests by number will still run them,
> and can be combined with the --simple flag.
> 
> I really don't see a reason to do this.
> 
> > Continous integration systems and the tests before signing an release
> should still execute the full test suite.
> >
> > But before a small, not destabilizing commit (use common sense here),
> > only running the non-extended tests is mandatory (and maybe the
> > extended tests covering that specific area.)
> 
> There is absolutely no way to enforce a test run in this project.  So the
> entire concept of a mandatory test run before committing is pointless.  What
> tests a developer runs is ALWAYS going to be a matter of the developer using
> their own judgement.  For the most part I don't see too many broken things
> being  committed that are broken even with our current test suite situation.
> When broken things are committed it's usually because the developer didn't
> understand their change was impacted by ra or fs differences and the only
> thing that would have prevented it would have been more testing, not less.
> 
> 
> > For make check, it would be an SIMPLE=true variable.
> >
> > Alternatively:
> > 2) Test Categories:
> > A set of categories is defined in a central place.
> >
> > Examples for such categories could be:
> > - Smoke: For smoke tests, only the most important.
> > - Fsfs: Tests covering only the FSFS specific code.
> > - Offline: Tests which do not contact the server.
> > - Repository: Tests which cover the repository, without a client
> > involved (e. G. svnadmin)
> >
> > Each test then gets attributed with the categories which are valid for this
> test.
> >
> > When running the tests, one could pass a parameter to run only the tests
> which are attributed with at least one of the given flags. For example, if
> you changed something in FSFS, "--categories=Smoke,Fsfs" would run the smoke
> tests and the FSFS tests. A second "--exclude=Repository,5,7" switch could be
> used to exclude test categories as well as single tests by number.
> >
> > For make check, we'd have a CATEGORIES and EXCLUDE variables.
> 
> I'm more in the favor of something like this because right now some tests
> don't use an RA layer or even an FS layer (i.e. some C tests).
> If you run tests across all FS and RA layers you end up running these tests
> multiple times.  Granted that most of these tests are relatively fast, there
> is still duplication.

Reply via email to