> On May 24, 2017, at 11:28 AM, Alan Carroll 
> <solidwallofc...@yahoo-inc.com.INVALID> wrote:
> 
> Even though I wrote TestBox I think we need to migrate away from it. It's big 
> flaw is it is built to support regression tests which means using it involves 
> bringing up the traffic_server process. That's much more heavy weight than a 
> good unit test framework should be. Real unit testing should load as little 
> additional code as possible.

There are a number of examples of using TestBox and REGRESSION_TEST for unit 
tests that don't depend on traffic_server. Depending on what you are testing, 
the big-ball-of-mud dependencies might bite you but there's no dependency from 
RegressionTest to traffic_server itself.

> 
> My view is all of what we call "regression tests", e.g. those tests run via 
> "traffic_server -R 1" should be migrated elsewhere, either up to AUtest if 
> full up testing is needed, or down to unit tests.
> 
> On Wednesday, May 24, 2017, 12:56:53 PM CDT, Masakazu Kitajo 
> <mas...@apache.org> wrote:> Do we want to stick with the “make check/TestBox”?
>> Based on what I have seen so far on this thread looks like people
> generally like GTest. Any more ideas or suggestions? Do we drop the GTest
> idea?
> 
> I wrote some simple unit tests for HTTP/2 related stuff with TestBox and
> actually I have some for QUIC stuff too, I think I could use GTest for
> them, and I'd happy to migrate them to use GTest if it was chosen as the
> official. However, I'm ok with TestBox so far (I'm not saying "TestBox is
> good enough" nor "GTest is too much"). A reason I used TestBox is that I
> thought it's the official one. That's it. Personally, I'd like to use
> general test frameworks because I don't want to maintain test frameworks
> without big reasons.
> 
> Gancho, can you share the reasons that you didn't use TestBox? It'd be
> key points.
> 
> 
>> feels like "fixing the car engine through the exhaust pipe”.
> 
> I agree, and I like the expression :)
> 
> I think features themselves should be tested independently, and we should
> have another test for integration. This makes it clear which part (ATS
> core, the plugin, or sub-modules) is wrong.
> 
> 
> Thanks,
> Masakazu
> 
> 
> On Tue, May 23, 2017 at 6:09 PM, Gancho Tenev <gan...@apache.org> wrote:
> 
>> One framework and justice for all (or to rule them all) :)
>> 
>>> One framework :)
>> 
>> I think most of us already agree that we should have: 1 unit test
>> framework and 1 integration test framework and have all the tests run as
>> part of our build / verification stage.
>> 
>> How to get to that point is where I think people disagree (i.e. do we rip
>> out all old / out-of-date / broken tests and store them on separate
>> branches / PRs and later port them one-by-one, how do we keep updating the
>> code+tests while tests are still to be ported, do we run with the old and
>> new frameworks simultaneously for some time/forever etc.?)
>> 
>> AuTest seems our integration test framework of choice.
>> 
>> Do we want to stick with the “make check/TestBox”?
>> 
>> Based on what I have seen so far on this thread looks like people
>> generally like GTest. Any more ideas or suggestions? Do we drop the GTest
>> idea?
>> 
>> 
>> 
>> May be plugins are not so special case? :)
>> 
>> I think we can consider plugins in more generic terms and develop them
>> with a better testability in mind so most of their functionality can be
>> tested w/o having to bring the whole ATS code-base up in order to test a
>> simple feature/function/line.
>> When thinking in terms of testing the code on “a local level" people tend
>> to write better / more modular code, also sometimes getting a good
>> test/branch coverage through an integration test framework feels like
>> "fixing the car engine through the exhaust pipe”.
>> 
>> For bigger plugins (i.e. thousands of lines) unit tests would make more
>> sense.
>> 
>> Although lots of things can be achieved by using AuTest, a Unit Test
>> Framework can be much more efficient and easy to use when one thinks in
>> terms of code / branch test coverage.
>> 
>> In this particular case the s3_auth_v4 signing itself can be tested
>> outside ATS code which makes iterating while developing much faster, easier
>> to test / hit corner cases / refactor and experiment with the code /
>> measure specific code performance / check for memory problems etc.
>> 
>> 
>> 
>> Holy wars: vim vs emacs
>> 
>> Choosing a unit test is not easy, there are lots of alternatives:
>> https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
>> 
>> The main thing is people to like the framework and use it. By choosing an
>> easy to use and less obscure framework and by being reasonably flexible we
>> might be able to get more people to contribute tests (an area where we are
>> somehow behind).
>> 
>> 
>> 
>>> Do these run as part of regressions now?
>> 
>> Cachekey plugin TSQA tests are not part of the regression since by the
>> time they were created/finished our TSQA regression tests were broken and
>> not being run and there were already talks/plans to replace it (with
>> AuTest).
>> Have not had chance but will work on porting / moving it, to port /
>> integrate there should be much less effort than to create the test benches.
>> 
>> The s3_auth_v4 GTest unit tests were not meant to run with the build since
>> we have never agreed on using GTest and of coarse the plumbing was not
>> ready, just used it to deliver the new code (this is to address Alan’s
>> comment on the PR).
>> 
>> 
>> Cheers,
>> —Gancho
>> 
>> 
>> 
>> 
>>> On May 22, 2017, at 10:21 PM, James Peach <jpe...@apache.org> wrote:
>>> 
>>> On 20 May 2017, at 20:12, gan...@apache.org <mailto:gan...@apache.org>
>> wrote:
>>> 
>>>> Hi trafficserver-dev,
>>>> 
>>>> 
>>>> (1) I was wondering if we have any preference for a C/C++ unit test
>> framework in the ATS community.
>>>> 
>>>> Background and thoughts:
>>>> 
>>>> I needed a unit test framework quickly to do TDD in order to deliver
>> the AWS auth v4 (PR #1946).
>>>> Google Test seemed easy to bootstrap, popular, feature rich and easy to
>> use, also its license is "BSD 3-clauses”.
>>>> The unit tests I wrote (PR# 1953) got the work done, they don't do
>> anything fancy or Google Test specific and can be converted to use any
>> other framework of our choice.
>>>> 
>>>> 
>>>> (2) I was wondering what to do with the unit tests until we decide on a
>> unit test framework that we all going to use.
>>>> 
>>>> Background and thoughts:
>>>> 
>>>> People have concerns that if every developer starts checking into
>> master unit tests using frameworks of their choice (even if not run) we
>> will end up with a mess/chaos.
>>>> 
>>>> I understand the benefits of having one or two agreed upon frameworks
>> and run all our tests with every build.
>>> 
>>> One framework :)
>>> 
>>>> I have a similar case with the cachekey plugin tests where I used the
>> “old” TSQA framework (at the time) which I still run to test for
>> regressions and enhance when I make changes.
>>> 
>>> Do these run as part of regressions now?
>>> 
>>>> If we plan to rip out the “old” TSQA framework should I then remove
>> those tests from the source tree until I convert them to “autest"?
>>> 
>>> We should have one true integration test framework. AFAIK autest is it,
>> but I still think it needs a bit better documentation and getting started
>> affordances.
>>> 
>>>> My personal take is that in both examples (s3_auth_v3 and cachekey) the
>> tests have 100% code and very high branch coverage (the wonders of TDD) so
>> it would be a pity to rip them out and keep them some else until converted.
>>> 
>>> See ci/coverage for test coverage instrumentation example. It would be
>> pretty great to have persistent coverage data from the automated testing.
>>> 
>>>> If they are checked into the source tree we could still use them
>> “offline” to test for regressions in meanwhile, also they will be available
>> to anyone to work on them and would be a pretty good starting point for
>> bringing the tests up-to-date to the agreed upon framework when we have a
>> chance.
>>> 
>>> We have to converge on 1 unit test framework and 1 integration test
>> framework. I really think there are only 2 realistic unit test choices:
>>> 
>>> 1. We have an internal unit test harness with existing tests. It’s
>> primitive, but basically works for  unit testing of traffic_server and
>> standalone test drivers. If we don’t run with this, we should figure out
>> how to replace it.
>>> 
>>> 2. gtest is good and widely used. The google benchmark package is nice
>> and it would be helpful to have micro benchmarks for hot path code. If we
>> go down this path, we should bundle gtest and not use the system version at
>> all.
>>> 
>>> James
>> 

Reply via email to