[jboss-as7-dev] Requirements and Design Proposal: AS7 TestSuite

Andrew Lee Rubinger andrew.rubinger at redhat.com
Thu Mar 24 12:06:33 EDT 2011

I agree with each point if no notes below. :)

On 03/23/2011 10:56 AM, Shelly McGowan wrote:
> Andrew,
> To bring the thread up a level, I propose the following requirements:
> - no hardcoding of configuration elements in the test code
>    - currently many tests have localhost and java:/H2DS

What's wrong w/ coding something like:

DataSource ds;


That's likely defined by the deployment, and not a configuration element.

Things like bind addresses, yes, need to be abstracted/externalized to 
support our N run-modes per test.

> - integration tests should run remote, not embedded

Why?  Part of my proposal was to separate the tests out such that they 
could be run in N configurations.  Embedded is a special case which will 
catch if module subsystems are making ClassLoading assumptions which are 
true in standalone, but not in Embedded.  These need to be tested such 
that regardless of run-mode, AS operates as expected.

Note this may not apply for *all* tests, but as a general rule.

> - provide an Abstract test class that can be extended so adding tests focus on test logic not test configuration

Two points:

1) Arquillian should be abstracting out all configuration.  No test 
harness setup/config should be required by the test
2) I prefer the use of delegates as opposed to abstract parents.  In 
this way you don't impose a specific hierarchy on the test (classic 
"has-a" vs. "is-a").

> - can be run in standalone or domain (and cloud)
> - have reporting mechanism so test coverage can be obtained based on query
>    - ex:  what tests are available for lifecycle callbacks

Based on annotations denoting a test as covering a certain area?

Would you like to spec out the valid areas you'd like to query for coverage?

> - (as Darran said) require a test be added with a fix for each JIRA
> - extensible for other stakeholders (QE) of the integration test suite

They can simply pull in the testsuite dependency and re-use the src/main 
stuff, or extend the src/test stuff (which we'll attach to the build).


> Shelly McGowan
> JBoss, by Red Hat
> ----- Original Message -----
> From: "Shelly McGowan"<smcgowan at redhat.com>
> To: "Andrew Lee Rubinger"<andrew.rubinger at redhat.com>
> Cc: "Aslak Knutsen"<aknutsen at redhat.com>, jboss-as7-dev at lists.jboss.org
> Sent: Wednesday, March 23, 2011 7:36:58 AM
> Subject: Re: [jboss-as7-dev] Requirements and Design Proposal: AS7 TestSuite
>> @Test(groups = { "web_profile" } )
>>      public void testEJBLite throws Exception {}
> What does @Test.groups represent?  Is that a proposal for our own
> extension?  JUnit doesn't have this property in @org.junit.Test, so if
> it's our own thing we should likely rename to something else...
> http://kentbeck.github.com/junit/javadoc/latest/org/junit/Test.html
> S,
> This, as shown in [3]:
> import org.testng.annotations.Test;
> http://testng.org/javadoc/org/testng/annotations/Test.html
>> Shelly McGowan
>> JBoss, by Red Hat
>> ----- Original Message -----
>> From: "Aslak Knutsen"<aknutsen at redhat.com>
>> To: "Andrew Lee Rubinger"<andrew.rubinger at redhat.com>
>> Cc: jboss-as7-dev at lists.jboss.org
>> Sent: Tuesday, March 22, 2011 10:38:08 AM
>> Subject: Re: [jboss-as7-dev] Requirements and Design Proposal: AS7 TestSuite
>>> Why @IntegrationTest? By simply being in the AS Integration Test
>>> module, wouldn't that be self-explanatory?
>> The use of @IntegrationTest in CDI TCK is basically to separate tests that can run in Weld SE (mocked EE v) vs the ones that need a full EE container.
>> Not sure the AS Suite needs that kind of separation.
>> -aslak-
>>> On 03/20/2011 10:58 AM, Shelly McGowan wrote:
>>>> Why don't we consider what was done for the CDI and BV TCKs.
>>>> Annotations[1] are used to define the test type.
>>>> If it is a spec assertion, the spec reference is clearly identified:
>>>> @SpecAssertion(section = "2.1.1", id = "c")
>>>> or you could annotate the Test with @IntegrationTest which could be
>>>> used to denote that AS-specific test.
>>>> Test (not code) coverage reports can be generated to identify what
>>>> the coverage is for each component. The report
>>>>     provides links to fisheye and the test code in svn.
>>>> [1]http://community.jboss.org/wiki/BeanValidationTCK#What_do_all_the_annotations_mean
>>>> Other references:
>>>> [2]http://docs.jboss.org/hibernate/stable/beanvalidation/tck/reference/html_single/#d0e594
>>>> [3]http://anonsvn.jboss.org/repos/weld/cdi-tck/trunk/impl/src/main/java/org/jboss/jsr299/tck/tests/context/conversation/ClientConversationContextTest.java
>>>> Shelly McGowan
>>>> JBoss, by Red Hat
>>>> ----- Original Message -----
>>>> From: "Andrew Lee Rubinger"<andrew.rubinger at redhat.com>
>>>> To: jboss-as7-dev at lists.jboss.org
>>>> Sent: Saturday, March 19, 2011 5:34:30 PM
>>>> Subject: Re: [jboss-as7-dev] Requirements and Design Proposal: AS7
>>>> TestSuite
>>>> It occurs to me I might not have been clear about the JIRA-per-test
>>>> thing.
>>>> Say you're working on Feature X. You might commit the feature and
>>>> the
>>>> test alongside one another, citing the same JIRA, with the commit
>>>> message:
>>>> "[JBAS-XXX] Implement Feature X and tests".
>>>> That's great. No separate issues needed for the feature and the test
>>>> each.
>>>> What's no good is going in and adding a bunch of tests for EJB, Web,
>>>> etc
>>>> while we pump up our coverage, alongside a commit message:
>>>> "[JBAS-XXX] Add spec coverage to the testsuite"
>>>> ...that tells us nothing about each test being made, just that we
>>>> dumped
>>>> 'em in there. Which is obvious, because they're there.
>>>> S,
>>>> ALR
>>>> On 03/19/2011 05:25 PM, Andrew Lee Rubinger wrote:
>>>>> Inline.
>>>>> On 03/19/2011 03:19 PM, Jason Greene wrote:
>>>>>> I really like the idea of our primary test suite covering API
>>>>>> interaction and your typical unit test which is tightly coupled to
>>>>>> internals. I also like your idea to separate spec Apis from JBoss
>>>>>> aAPIs.
>>>>>> However, I disagree on the Jira per test requirement. This is only
>>>>>> because I worked with a similar model (all jiras require a test),
>>>>>> and you ended up with lots of duplicate tests, and you always had
>>>>>> to read Jira to understand what was being tested. Also, the tests
>>>>>> ended up being too specific, typically an exact replication of the
>>>>>> reporter's workflow.
>>>>> Consider this: If you had to read JIRA to understand what was being
>>>>> tested, that's a clear violation of point 3): Document the test.
>>>>> And
>>>>> failing good documentation, with no JIRA to turn to, you're flying
>>>>> blind.
>>>>> Also, how exactly does registering a JIRA encourage test
>>>>> duplication?
>>>>> Whether the tests are in an issue tracker or not seems to be
>>>>> unrelated
>>>>> to folks writing duplicate tests.
>>>>>> IMO a better way to organize it would be by functional area, with
>>>>>> generous descriptions. All spec tests should reference spec
>>>>>> sections, for example. If we have a Jira that demonstrates lack of
>>>>>> coverage, we should translate the problem into meaningful and
>>>>>> reusable tests for the gaps we missed. Those tests should
>>>>>> primarily refer to the API contract and not the Jira. Although
>>>>>> commenting a list of jiras for extra info may be useful provided
>>>>>> the Jira doesn't confuse what the correct behavior should be.
>>>>> I'm a fan of organizing by functional areas and spec references.
>>>>> We'd
>>>>> done that in EJB3 with success: some packages were even named for
>>>>> the
>>>>> spec. Regardless, every commit had a JIRA association.
>>>>> In the end, so long as it's perfectly clear what we're testing and
>>>>> why,
>>>>> I'll have no objections. But I do believe that JIRA is the obvious
>>>>> answer to that question, and requires minimal effort to make a new
>>>>> issue. Especially since every commit is isolated to one concern and
>>>>> linked back to JIRA anyway, right? ;)
>>>>> S,
>>>>> ALR
>>>>>> Sent from my iPad
>>>>>> On Mar 18, 2011, at 2:21 AM, Andrew Lee
>>>>>> Rubinger<andrew.rubinger at redhat.com>   wrote:
>>>>>>> Looks like a lot of us have different ideas for what the AS7
>>>>>>> Integration
>>>>>>> TestSuite should consist of, so I'll kickoff with what I believe
>>>>>>> is the
>>>>>>> first design proposal towards getting coverage focused on the
>>>>>>> end-user
>>>>>>> (not certifying our own internals).
>>>>>>> I suspect this breaks down into two categories, which may be
>>>>>>> modelled as
>>>>>>> separate modules under the existing "testsuite" aggregator
>>>>>>> parent:
>>>>>>> * Specification
>>>>>>> * AS-specific APIs
>>>>>>> This isn't difficult work, though I do think it's important we
>>>>>>> consider
>>>>>>> some hard rules. IMO we should be developing these suites as if
>>>>>>> we were
>>>>>>> application developers, not wearing our server dev hats.
>>>>>>> ----------------
>>>>>>> [End Goal]
>>>>>>> 1) No compile-time dependencies in the module except for what's
>>>>>>> absolutely necessary.
>>>>>>> For the spec suite, this means: JDK and EE Spec APIs only in the
>>>>>>> compilation classpath. Testable asset sources and resources (ie.
>>>>>>> EJBs,
>>>>>>> Servlets, etc) would live under src/main/* to enforce that. Only
>>>>>>> the
>>>>>>> tests themselves would be located under "src/test/*".
>>>>>>> The AS-specific API suite may also add in our own APIs to the
>>>>>>> compilation classpath, but the line should end there. In "test"
>>>>>>> scope
>>>>>>> we can place all runtime dependencies.
>>>>>>> For the specification suite, AS-specific grammars like our own
>>>>>>> deployment descriptors are fine; these are in many ways
>>>>>>> equivalent to
>>>>>>> the TCK porting layer. We're not building a TCK; we're showing
>>>>>>> that our
>>>>>>> implementation supports the features advertised.
>>>>>>> 2) Every single new test created is to have an associated JIRA.
>>>>>>> We all remember the nightmare it was when the old AS4-6 suite
>>>>>>> would fall
>>>>>>> down. We'd comb through each test, at times trying to determine
>>>>>>> its
>>>>>>> purpose. By linking to JIRA we get history of intent, which acts
>>>>>>> as a
>>>>>>> nice record even in the case that the test isn't so
>>>>>>> well-documented.
>>>>>>> I'd argue that tests are a bigger asset than our code, and we
>>>>>>> should be
>>>>>>> thinking about these in terms of long-term maintenance to outlive
>>>>>>> any
>>>>>>> specific impl.
>>>>>>> 3) Documentation
>>>>>>> Alongside the JIRA reference, a quick note about we're looking to
>>>>>>> accomplish is something I find very helpful. I don't personally
>>>>>>> buy the
>>>>>>> argument that code is self-documenting if written well. It gets
>>>>>>> refactored and stale over time.
>>>>>>> 4) Run-mode profiles
>>>>>>> Arquillian provides a wonderful abstraction such that we can get
>>>>>>> coverage for AS in both remote managed *and* embedded modes
>>>>>>> without
>>>>>>> changing the test itself. To certify that everything is working
>>>>>>> as
>>>>>>> advertised no matter the runtime, we should be able to run the
>>>>>>> same
>>>>>>> suite in standalone, domain, and embedded modes (generally
>>>>>>> speaking).
>>>>>>> 5) Porting of AS6 Tests
>>>>>>> There's no discounting the value this coverage has given us,
>>>>>>> though I
>>>>>>> question the purpose of a lot of these tests. I think a great
>>>>>>> majority
>>>>>>> of these need to come into the new codebase, refactored to align
>>>>>>> if needed.
>>>>>>> ----------------
>>>>>>> [Current State]
>>>>>>> Here[1] is an example of what I believe to be a simple,
>>>>>>> well-written
>>>>>>> test, with the exception that the tested Servlet and EJB are in
>>>>>>> the same
>>>>>>> test source folder.
>>>>>>> The current "testsuite" aggregator contains modules which mix our
>>>>>>> end-user certification stuff alongside internals, so I think
>>>>>>> these
>>>>>>> should be separated out.
>>>>>>> A lot of this is set up in some fashion already, but I would like
>>>>>>> to see us:
>>>>>>> 1) Agree upon a strict scope for each type of testsuite along the
>>>>>>> lines
>>>>>>> of my points above, once we reach agreement
>>>>>>> 2) Upgrade to ARQ 1.0.0.Alpha5 (which implies ShrinkWrap
>>>>>>> 1.0.0-alpha-12), just released tonight. Currently AS is on a
>>>>>>> forked
>>>>>>> release of ARQ for OSGi purposes, and these changes, if
>>>>>>> necessary, need
>>>>>>> to get upstream so we can do upgrades.
>>>>>>> It's clear that AS7 has made full-steam-ahead progress since last
>>>>>>> summer, and with a little organization our testsuite can give us
>>>>>>> a great
>>>>>>> view of where we stand, from an end-user's perspective, with
>>>>>>> minimal
>>>>>>> investment.
>>>>>>> S,
>>>>>>> ALR
>>>>>>> [1]
>>>>>>> https://github.com/jbossas/jboss-as/blob/master/testsuite/integration/src/test/java/org/jboss/as/testsuite/integration/webejb/ServletInjectionTestCase.java
>>>>>>> _______________________________________________
>>>>>>> jboss-as7-dev mailing list
>>>>>>> jboss-as7-dev at lists.jboss.org
>>>>>>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>>>>>> _______________________________________________
>>>>>> jboss-as7-dev mailing list
>>>>>> jboss-as7-dev at lists.jboss.org
>>>>>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>>>>> _______________________________________________
>>>>> jboss-as7-dev mailing list
>>>>> jboss-as7-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>>>> _______________________________________________
>>>> jboss-as7-dev mailing list
>>>> jboss-as7-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>>> _______________________________________________
>>> jboss-as7-dev mailing list
>>> jboss-as7-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>> _______________________________________________
>> jboss-as7-dev mailing list
>> jboss-as7-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev

More information about the jboss-as7-dev mailing list