Let me get straight to the beef (nun pun intended): This sounds all really great. Is anyone willing to do the initial work of creating a couple of tests and integrate them into the rsyslog process?
Rainer 2014-10-31 7:35 GMT+01:00 singh.janmejay <[email protected]>: > Im trying to see these problems in the light of CI. > > On Fri, Oct 31, 2014 at 10:50 AM, David Lang <[email protected]> wrote: > > > We already have make check being run daily. So it's not on every commit, > > but given the time it takes to run and the pace of merging new features > > into the master tree, daily should be just fine. > > > > The problems that we run into are not easy for the system to find. As I > > understand it, we have a few noticable pain points. > > > > 1. distro specific problems. > > > > The CentOS boot problem for example. > > The ongoing SELinux/etc issues that we run into are another > > Systemd is going to be more common in the future (and it's a moving > > target) > > > > My team had to solve a similar problem with one of my ex-employers. Our CI > setup was composed of machines running various environments. We had > machines running CentOS, Windows, Solaris etc. All of these machines were > running CI-agent/worker and the build was configured to do exactly the same > thing on each worker. So we basically found issues before releasing > GA-versions provided we had all relevant versions of environments running. > This kind of infrastructure would require several machines/VMs, each one > running one supported environment. But this also requires some budget to > finance the setup. > > The only other option seems to be what -devel releases are supposed to > facilitate, but if we had limited success with that, it can't be counted as > a real option. > > > > > > 2. difficulty in setting up a repeatable test environment. > > > > Output to Oracle or ElasticSearch are two examples. The difficulty is > > setting up the external data store in such a way that it can be > populated, > > tested, and then reset back to the known good state. > > > > Other examples are connections to the various MQ systems. > > > > Common/recommended practise here is to make each tests stateless. Most > language/platform specific testing-frameworks provide a notion of setup and > teardown. Large end-to-end integration tests usually have elaborate > setup/teardown steps which involve truncating database tables, deleting > elasticsearch indices, draining/purging relevant external queues etc. > > But most value is derived from having 2 levels of tests. > > The make-check tests that we have are end-to-end integration tests. Such > tests generally face external-dependency based flakiness problems, until > setup/teardown are done very well (like they aggressively re-try failed > operations etc). > > A lower level of test would be unit-tests, which test individual functions, > or set of functions rather than testing end-to-end behaviour of rsyslog. > This is where tools such as google-test, cppunit etc come in. These tests > are usually quicker to write as they don't involve elaborate orchestration. > For instance, regex-property-extractor could have dedicated tests to see if > it handles groups well, it handles char-classes well etc. With such 5 - 10 > tests guarding different behaviours of regex-property-extractor, we should > have enough confidence that it works standalone. The only thing integration > test needs to check is, does it work well when used end-to-end, for which > one test with simple input and output exercising match and submatch > features would suffice. Trouble starts when one tries to test all > combination of features through integration tests, which is usually > prohibitively expensive (not just in terms of running-time, but > writing/maintaining overhead too). > > > > > > 3. (extending #2) Contributed modules tend to be especially bad here. > They > > tend to be written for specific cases and have heavy depenencies on > > external components. Without assitance from someone who knows those > > external components well, setting up a good test is _hard_ > > > > Yes, writing integration tests involving multiple systems is painful. The > solution is to bank a lot more on unit-tests for functional correctness and > only write a few end-to-end tests to validate that integration points work > well with each other. Such a test would fail when a new version of > elasticsearch changes semantics of a certain API, while all unit-tests > would keep passing. > > Also, large amount of functional-testing can be done without involving > external systems by using mock-endpoints. For instance, think of having an > endpoint which receives elasticsearch bulk api payload and lets you > validate it was well-formed and semantically correct. This test won't fail > if elasticsearch changes its API, but it'll fail if anything in > implementation misbehaves, allowing one to catch large set of bugs easily. > End-to-end integration tests are then only required for the last-mile. > > > > > > 4. (extending #2) configuring modules can sometimes be hard. > > > > The GnuTLS problems are a good example of this sort of thing. Even when > > tests exist, that just means that those particular configuations work. > > People trying to use different features of the module (or in this case, > the > > underlying library and certificates) run into new problems. > > > > > Again, unit-tests allow one to test one feature standalone very easily. So > generally I'd write tests for each feature working alone involving minimal > set of features, and then cover bad combinations as they surface(or as we > expect them to surface). > > > > > > #1 needs more people running the tests, and just trying to use the system > > on a variety of situations. > > > > #4 needs documentation and more tests written. > > > > Rainer does a pretty good job at testing things before they hit the > master > > branch. While I was working at Intuit building their logging systems > out, I > > was very comfortable running custom builds from git in production with > just > > a short amount of 'smoke test' time. I wish all projects had as good a > > track record. > > > > We really don't have that many real bugs reported, and the vast majority > > of the problems that we do run into tend to be race conditions and other > > things that are fairly hard to trigger. That doesn't mean that we don't > > have occasional problems. The segfault bug that a handful of people have > > reported recently is an example of that, but the fact that it's so hard > to > > duplicate means that automated testing isn't likely to help a lot. > > > > I have had some amount of success in guarding regressions with > race-conditions in the past. It generally involves one big ugly test per > race-condition which uses semaphores and wait/notify mechanisms to make > code run in a certain way which is known to reproduce the problem. However, > this won't help in discovering potential/new race-conditions. In TDD > (test-driven-development) style of working, people write tests for new > features that involve complex concurrency concerns before/while writing > actual code. The idea is to enumerate as many race-conditions as possible > and cover them with tests. This approach is not bullet-proof, but it works > in most cases. > > > > > > David Lang > > > > > > On Fri, 31 Oct 2014, singh.janmejay wrote: > > > > Im unsure if I have understood you correctly, but you seem to be > thinking > >> of CI as a way of writing tests(like a testing framework, eg. > google-test, > >> make-check etc). > >> > >> But actually CI is a process(not a tool/framework). I guess this is the > >> best source of information about it: > >> http://en.wikipedia.org/wiki/Continuous_integration > >> > >> So having a CI process in simple terms means that the integration-branch > >> (which happens to be master in our case) and all the other long-lived > >> branches such as feature-branches that live for a few days/weeks, should > >> be > >> monitored by an automated build process. > >> > >> This build process would trigger 'make check' for every new commit > (people > >> often use git-push based post-update hook to notify build-server). This > >> build would be reported on a CI dashboard, which tells people if the > build > >> was green or red. > >> > >> CI servers also go one step further and support output-artifact > >> integration > >> so developers can see which tests failed, why they failed etc. > >> > >> So no changes are required to the way rsyslog codebase is right now. We > >> have a directory full of tests, we have a command that returns non-zero > >> exit code for failing tests and this setup is sufficient for us to setup > >> an > >> automated build process. > >> > >> We should check if travis can run 'make check' for us. > >> > >> > >> On Thu, Oct 30, 2014 at 8:38 PM, Rainer Gerhards < > >> [email protected]> > >> wrote: > >> > >> 2014-10-30 13:35 GMT+01:00 singh.janmejay <[email protected]>: > >>> > >>> +1 for testsuite and CI. > >>>> > >>>> > >>> I tried to get a quick glimpse at CI, but not only rsyslog doc is full > of > >>> acronyms and references that talk only for those in the field ;) > >>> > >>> Can someone tell me in quick words how in CI a test to do this looks > >>> like: > >>> > >>> - spin up a rsyslogd listener instance "LST" > >>> - spin up a rsyslogd sender instance "SND" > >>> - make "SND" send a couple of thousand messages to LST > >>> - stop both instances *when work is finished* > >>> - count if LST did receive all messages and did so in correct format > >>> > >>> This is one of the basic tests in the current rsyslog testbench. > >>> > >>> I would appreciate if a control file for CI could be provided, so that > I > >>> can judge the effort that's to be made if I were to convert to that > >>> system > >>> (it sounds interesting). Is there some volunteer who would migrate the > >>> current testbench and educate me ... in the way James has done this for > >>> the > >>> rsyslog-doc project? > >>> > >>> Thanks, > >>> Rainer > >>> > >>> > >>> +1 for time based releases. > >>>> > >>>> It'll be valuable to have adhoc minor/micro releases. Release feature > by > >>>> feature or few features/fixes at a time type of thing. > >>>> > >>>> -- > >>>> Regards, > >>>> Janmejay > >>>> > >>>> PS: Please blame the typos in this mail on my phone's uncivilized soft > >>>> keyboard sporting it's not-so-smart-assist technology. > >>>> > >>>> On Oct 30, 2014 6:01 PM, "Thomas D." <[email protected]> wrote: > >>>> > >>>> Hi, > >>>>> > >>>>> +1 for an always working "master" branch. > >>>>> > >>>>> Do your work in feature branches. Only merge when you think the > changes > >>>>> are ready. Don't merge when you think "I am ready, but this needs > >>>>> > >>>> testing". > >>>> > >>>>> > >>>>> Regarding the testing problem in general: I would stop adding new > >>>>> features for a while. Spend more time in improving code quality. > >>>>> Try to find/create a working test suite. There will always be the > >>>>> problem that nobody will test your stuff. So you need a way to write > >>>>> tests. Yes, creating a test suite will take some time. But in the end > >>>>> > >>>> it > >>> > >>>> will improve the software quality and boost your development. > >>>>> Remember that you can use CI for free with GitHub. Every pull request > >>>>> could be automatically tested for you... > >>>>> > >>>>> > >>>>> +1 for a time-based release approach. > >>>>> > >>>>> > >>>>> PS: Debian Jessie will freeze at 23:59 UTC on the 5th of November > 2014. > >>>>> Just a reminder if you want to see some of the recent changes in > >>>>> > >>>> Jessie... > >>>> > >>>>> > >>>>> > >>>>> -Thomas > >>>>> _______________________________________________ > >>>>> rsyslog mailing list > >>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog > >>>>> http://www.rsyslog.com/professional-services/ > >>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards > >>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a > >>>>> > >>>> myriad > >>> > >>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > >>>>> DON'T LIKE THAT. > >>>>> > >>>>> _______________________________________________ > >>>> rsyslog mailing list > >>>> http://lists.adiscon.net/mailman/listinfo/rsyslog > >>>> http://www.rsyslog.com/professional-services/ > >>>> What's up with rsyslog? Follow https://twitter.com/rgerhards > >>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a > myriad > >>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > >>>> DON'T LIKE THAT. > >>>> > >>>> _______________________________________________ > >>> rsyslog mailing list > >>> http://lists.adiscon.net/mailman/listinfo/rsyslog > >>> http://www.rsyslog.com/professional-services/ > >>> What's up with rsyslog? Follow https://twitter.com/rgerhards > >>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a > myriad > >>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > >>> DON'T LIKE THAT. > >>> > >>> > >> > >> > >> > >> _______________________________________________ > > rsyslog mailing list > > http://lists.adiscon.net/mailman/listinfo/rsyslog > > http://www.rsyslog.com/professional-services/ > > What's up with rsyslog? Follow https://twitter.com/rgerhards > > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad > > of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > > DON'T LIKE THAT. > > > > > > -- > Regards, > Janmejay > http://codehunk.wordpress.com > _______________________________________________ > rsyslog mailing list > http://lists.adiscon.net/mailman/listinfo/rsyslog > http://www.rsyslog.com/professional-services/ > What's up with rsyslog? Follow https://twitter.com/rgerhards > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad > of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you > DON'T LIKE THAT. > _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com/professional-services/ What's up with rsyslog? Follow https://twitter.com/rgerhards NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE THAT.

