[Avocado-devel] RFC: Guidelines for categorizing tests

Narasimhan V sim at linux.vnet.ibm.com
Thu May 18 19:34:43 UTC 2017


On 2017-05-18 20:18, Cleber Rosa wrote:
> On 05/18/2017 12:22 AM, Narasimhan V wrote:
>> Hi Cleber,
>> 
>> I agree the proposal.
>> Please find some of my comments in-line.
>> 
> 
> Hi Narasimhan,
> 
> Thanks for the feedback.  My responses are inline.
> 
>> On 2017-05-18 03:19, Cleber Rosa wrote:
>>> Introduction
>>> ============
>>> 
>>> Avocado allows users to select tests to run based on free form 
>>> "tags".
>>> These tags are given as "docstring directives", that is, special
>>> entries on a class or function docstring.
>> 
>> I like this kind of a proposal :-)
>> 
> 
> 
> I'm not sure if it was clear enough, but this functionality already
> exists in Avocado:
> 
> http://avocado-framework.readthedocs.io/en/50.0/WritingTests.html#categorizing-tests
> 
> This proposal is about proposing a set of guidelines for using that 
> feature.
> 

Thanks for pointing this out.

>>> 
>>> As a user of an Avocado based test suite, I'd see value in not 
>>> **having**
>>> to look at all the test tags before realizing that to not run tests 
>>> that
>>> require "super user" permissions I should run::
>>> 
>>>   $ avocado run test.py --filter-by-tags=-root
>>> 
>>> Instead of::
>>> 
>>>   $ avocado run test.py --filter-by-tags=-privileged
>>> 
>>> Not even that, by having different tests as part of the same job,
>>> the following very odd sequence of command line options may be
>>> needed::
>>> 
>>>   $ avocado run test.py test2.py --filter-by-tags=-root,-privileged
>>> 
>>> So the goal here is to let users familiar with a given Avocado based
>>> test, to have fair expectations when running another Avocado based
>>> tests.
>>> 
>>> This was initially going to be a documentation update, but I felt 
>>> that
>>> it was not fair to make a formal proposal without without some 
>>> initial
>>> brainstorming.
>>> 
>>> Proposal
>>> ========
>>> 
>>> To set the tone for my proposal, I'd like to make most things simple
>>> and easy, while allowing for "everything else" to be doable.
>>> 
>>> My general impression is that higher level information about the test
>>> itself and its requirements are going to be the most commonly used
>>> tags, so they must be easily set.  Some examples follow.
>>> 
>>> Simple (standalone) tags
>>> ------------------------
>>> 
>>> Tags by functional area:
>>> 
>>>  * cpu - Exercises a system's CPU
>>>  * net - Exercises a system's network devices or networking stack
>>>  * storage - Exercises a system's local storage
>>>  * fs - Exercises a system's file system
>>> 
>>> Tags by architecture:
>>> 
>>>  * x86_64 - Requires a x86_64 architecture
>>>  * ppc64 - Requries a ppc64
>>> 
>>> Tags by access privileges:
>>> 
>>>  * privileged - requires the test to be run with the most privileged,
>>>    unrestricted privileges.  For Linux systems, this usually means 
>>> the
>>>    root account
>>> 
>> 
>> How are these tags going to be differentiated, ie, tag names that can 
>> be
>> common across types/areas.
>> Examples, if already on your mind, can help here.
>> 
> 
> Well, that's exactly the point of this proposal.  If users have access
> to two different test repos, and both are related to hardware/software
> testing, they can expect that by choosing only tests with "cpu" tags,
> they will be exercising their Central Processing Units.
> 
> Conversely, if a test repo is concerned about testing Hospital
> procedures (this is very hypothetical), they may choose to use "cpu" as
> a shorthand for "Care of Patients with Urgency".  They would be going
> against the general Avocado guidelines, users may expect those tests to
> be about "Central Processing Units", and be frustrated.
> 
> Does this example make sense?
> 

Are we looking at tree structure for tags, as this gets more use cases ?

>>> Composed (key:value) tags
>>> -------------------------
>>> 
>>> The more specific tags can be achieved by composing a predefined key
>>> with a value.  For instance, to tag a test as needing a specific
>>> CPU flag:
>>> 
>>>  * cpu_flag:vmx
>>> 
>>> Or a specific PCI device:
>>> 
>>>  * pci_id:8086:08b2
>>> 
>>> Or even a software package:
>>> 
>>>  * package:gcc
>>> 
>>> Or a package group altogether:
>>> 
>>>  * package_group:development-tools
>>> 
>>> Some examples
>>> -------------
>>> 
>>>  * ``cpu,x86_64`` - The test exercises the CPU and requires a
>>>    ``x86_64`` based platform
>>> 
>>>  * ``net,privileged,pci_id:14e4:1657`` - The test exercises either a
>>>    network device or the network stack, needs super user privileges
>>>    and a "Broadcom Limited NetXtreme BCM5719 Gigabit Ethernet PCIe
>>>    (rev 01)" device.
>> 
>> I would be interested in seeing how we can implement this.
>> 
>> 
> 
> We are actually free to start using this right away.  Actually, it'd be
> better to start doing this once we settle on a set of guidelines.
> 
> The point is that tags are already accepted by docstring statements, 
> and
> recognized by `--filter-by-tags`.  The next evolutionary step is on the
> "Do users have to provide all the ``--filter-by-tags`` themselves?"
> section bellow.

So, are we going to tag a test as privileged based on the tag 
``superuser`` ?

And, how do we use the key value pairs (pci_id14e4:1657) to run / skip 
the tests ?
Some examples there would help as well.

> 
> - Cleber.
> 
>>> 
>>> Looking at test tags
>>> ====================
>>> 
>>> Currently, there's no way to actually list the test tags from the
>>> command line, alongside the test name themselves.  An RFE for fixing
>>> this has been filed at https://trello.com/c/NXrbKEJC .
>>> 
>>> Do users have to provide all the ``--filter-by-tags`` themselves?
>>> =================================================================
>>> 
>>> The test runner can certainly help here, getting system information
>>> when the job starts, and feeding them to the filtering.  This is yet
>>> another reason why coming up with a good set of guidelines for 
>>> tagging
>>> tests is important.
>>> 
>>> In some ways, this can be seen similar to a dependency resolution
>>> mechanism for tests, only that at this point it will not resolve the
>>> requirements.  It will only filter out tests that can't (or 
>>> shouldn't)
>>> be loaded on the current system.
>>> 
>>> Effectively, instead of many in-tests checks, and many SKIPs/CANCELs,
>>> the system information can be loaded once, and the only relevant 
>>> tests
>>> will be part of the tests suite.
>>> 
>>> A list of the tests that were filtered out from the job test suite 
>>> can
>>> certainly be a useful part of the job results.
>>> 
>>> As in every RFC, feedback is extremely welcome!
>> 

-- 
Regards
Narasimhan V




More information about the Avocado-devel mailing list