[sos-devel] Proposal: Synergy of upstream and downstream testing of sos

Miroslav Hradilek mhradile at redhat.com
Wed Nov 2 14:15:10 UTC 2016


On 11/02/2016 01:20 PM, Miroslav Hradilek wrote:
>>> To ensure these tests can be reused, a lot of branching needs to be done
>>> within code depending on the environment but mostly on version of the
>>> sosreport and patches applied downstream. Code branching is very inefficient
>>>
>>> and takes a lot of effort. When developing the tests library is developed
>>>
>>> along with it and needs to be maintained too. Upstream gets only bug reports
>>>
>>> from these efforts.
>>
>> It might help some of the other readers on the list to give a brief example,
>>
>> or overview, of the downstream testing we do in RHEL, and why maintaining
>> multiple branches becomes painful.
>>
>
> I guess I could do that. I will sent another email explaining it.

We are directed by downstream needs. We get bugs reported, features 
requested and new plugins asked for downstream.

Our version of sosreport is upstream version of sos frozen at some point 
in time + patches.

Patch can fix an issue, add feature or even plugin. Mostly patches are 
downstream backports of upstream features of sos.

If the feature or fix is requested downstream and there is no reason not 
to, it is first fixed upstream in sos github repo. The fix is used 
downstream in a form of a patch.

To verify that the fix works a test is written downstream. The test is 
then used to make sure the fix works in later releases too. The most 
interesting part is when new feature or whole plugin is added. We then 
write downstream test which is testing that the feature works. Or we are 
covering most, if not all, of the plugin functionality.

If we can extract enough information from reporters and we are able to 
reproduce the real environment, the test runs on real data. If it is too 
complex or information is too difficult to obtain, we mock the files and 
commands. To make writing tests easier we maintain library to run 
sosreport, grep listings, mock files, cleanup mocks,... downstream.

Later in releases, the environment, implementation or a plugin changes. 
If the change was not anticipated, the test fails and needs to be 
branched to reflect the change. IF/ELSE branching within code was chosen 
so that we do not have to maintain SCM branches for the large matrix of 
(sos version) x (os version) x (environmental dimension 1) x ... 
(environmental dimension N) [1]. The change can affect the library too.

Pain points that I believe could be solved by doing it upstream:

  1) If sos itself or it's plugin changes, the test suite reflects this 
change. We get the test at working state downstream. Benefit: More 
coverage for upstream and other downstreams.

  2) If the implementation in sos changes, the library changes and we 
get working state of the library downstream. We can write downstream 
tests using working library functions. Benefit: Common test library API 
matching the functionality of the current version of sos. Library to 
support seamless work on real data. Perhaps it could be shielding QE's 
from downstream differences.

  3) If the test is submitted with the plugin and real sample data is 
used for mocking, we can a) Avoid time consuming investigations. b) base 
tests on real data so that we can later assert it on real environment. 
Benefit: More coverage upstream and downstream.

~~~~
[1] Environmental dimension can be anything that changes the behavior 
like (systemd vs systemv).

-- 
Miroslav Hradilek
Quality Assurance Engineer
Base OS Quality Engineering

Red Hat Czech, s. r. o.
Purkynova 99
612 45 Brno, Czech Republic




More information about the sos-devel mailing list