[jboss-as7-dev] Subsystem testing harness

Kabir Khan kabir.khan at jboss.com
Thu Aug 4 11:16:13 EDT 2011


When calling installInController() it now attempts to validate the operations against the subsystem description providers
On 1 Aug 2011, at 12:11, Kabir Khan wrote:

> I moved the normalizeXml() method into AbstractSubsystemTest along with a few other small tweaks: https://github.com/jbossas/jboss-as/commit/0d3de0f834b0af7f7a0ca87e1c79c7aa50c491c1
> On 25 Jul 2011, at 15:37, David Bosschaert wrote:
> 
>> Hi Kabir,
>> 
>> It works for me. It allows for the following generic code to test 
>> read+write of any subsystem :)
>>    String subsystemXML = "..."; // my subsystem XML
>>    KernelServices services = installInController(new 
>> EmptyAdditionalInitialization() {
>>        @Override
>>        public Type getType() {
>>            return Type.MANAGEMENT;
>>        }
>>    }, subsystemXml);
>>    ModelNode model = services.readWholeModel();
>>    String marshalled = outputModel(model);
>>    Assert.assertEquals(normalizeXML(subsystemXml), 
>> normalizeXML(marshalled));
>> 
>> Note that I used a normalizeXML method to treat the XML strings before 
>> using string compare to evaluate them. It takes into account things like 
>> normalizing attribute order, ignoring comments and pretty-printing 
>> elements to make sure that they are organized the same way. It might be 
>> an idea to add normalizeXML() to AbstractSubsystemTest. I've pasted it 
>> below.
>> 
>> Cheers & thanks!
>> 
>> David
>> 
>> /**
>> * Normalize and pretty-print XML so that it can be compared using 
>> string compare.
>> * The following code does the following:
>> * - Removes comments
>> * - Makes sure attributes are ordered consistently
>> * - Trims every element
>> * - Pretty print the document
>> * @param xml The XML to be normalized
>> * @return The equivalent XML, but now normalized
>> */
>> private String normalizeXML(String xml) throws Exception {
>>    // Remove all white space adjoining tags ("trim all elements")
>>    xml = xml.replaceAll("\\s*<", "<");
>>    xml = xml.replaceAll(">\\s*", ">");
>> 
>>    DOMImplementationRegistry registry = 
>> DOMImplementationRegistry.newInstance();
>>    DOMImplementationLS domLS = (DOMImplementationLS) 
>> registry.getDOMImplementation("LS");
>>    LSParser lsParser = 
>> domLS.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
>> 
>>    LSInput input = domLS.createLSInput();
>>    input.setStringData(xml);
>>    Document document = lsParser.parse(input);
>> 
>>    LSSerializer lsSerializer = domLS.createLSSerializer();
>>    lsSerializer.getDomConfig().setParameter("comments", Boolean.FALSE);
>>    lsSerializer.getDomConfig().setParameter("format-pretty-print", 
>> Boolean.TRUE);
>>    return lsSerializer.writeToString(document);
>> }
>> 
>> 
>> On 21/07/2011 16:16, Kabir Khan wrote:
>>> It has changed slightly after some comments from Brian and Emanuel. New commit is here: https://github.com/kabir/jboss-as/commit/e5144e1c6832756408f9385ed21b4df6abe49a33
>>> 
>>> AdditionalInitialization.getType() == MANAGEMENT forces the non-install of services now
>>> On 21 Jul 2011, at 16:43, David Bosschaert wrote:
>>> 
>>>> Nice, thanks Kabir!
>>>> 
>>>> I'll play around with that soon!
>>>> 
>>>> David
>>>> 
>>>> On 21/07/2011 15:37, Kabir Khan wrote:
>>>>> My https://github.com/kabir/jboss-as/commits/parsing-harness contains some adjustements.
>>>>> 
>>>>> https://github.com/kabir/jboss-as/commit/8f6538850604e0633c34c27d6fa70bb81dc180de#L6R108
>>>>> shows how to invoke the ops without doing the RUNTIME part of the operation handlers, i.e. services will not get installed.
>>>>> 
>>>>> https://github.com/kabir/jboss-as/commit/8f6538850604e0633c34c27d6fa70bb81dc180de#L6R186
>>>>> shows how to just marshall a raw model to xml.
>>>>> 
>>>>> 
>>>>> On 20 Jul 2011, at 16:40, David Bosschaert wrote:
>>>>> 
>>>>>> On 20/07/2011 15:34, Kabir Khan wrote:
>>>>>>> You need to start up MSC to get reference to the model controller since that is the only real way to get hold of the model controller. I guess you are saying you want the model changes and associated persistence of the xml to happen when invoking your ops, but not the installation of services?
>>>>>> Yes, from a unit testing point of view that would be nice :)
>>>>>> 
>>>>>> Currently I can test the reading part as a unit without causing any side effects in the system, i.e. XML ->   ModelNodes
>>>>>> It would be great to be able to test the writing part as a unit too: ModelNodes ->   XML
>>>>>> 
>>>>>> Cheers,
>>>>>> 
>>>>>> David
>>> 
>> 
>> _______________________________________________
>> 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