An irc Log of Interoperability Testing

19th February 2004

During the week of 9th-13th February 2004, the various designers and implementors of SRW 1.1 froze the specification ready for release, but at the last moment decided to put in a few more days of implementation work and interoperability testing, to check that the specification really was as clear as it appeared to be.

As is the way with these things, those few days turned up numerous compatibility issues between the various implementations: some of them were simply bugs, but others showed places where ambiguities in the SRW specification left space for mutually incompatible implementations to exist while both being technically compliant. The extra tightening of the specification during those few days made them among the most productive of the entire year-long SRW 1.1 design period.

As a salutory example of the kinds of issues that can arise, here is an single, continuous, unretouched extract from an irc session between Rob ``Azaroth'' Sanderson and Ralph ``The Wonder-Llama'' LeVan, as they tested their clients against each others' servers.

To be clear: it's not that this specific conversation is overwhelmingly fascinating; just that it's a set of good examples of the kinds of things that can go wrong when two people set out independently to code what they expect to be interoperating systems on the basis of what seems to be solid, unambiguous specifications.

Enjoy!

~#srw~<azaroth> Ralph, can you hit up my server with some requests?
~#srw~<azaroth> http://srw.cheshire3.org:8080/l5r
~#srw~<azaroth> Preferably SRW rather than SRU
~#srw~* Ralph Cranking up client software
~#srw~<azaroth> Thanks
~#srw~<Ralph> Oh, cheshire*3*
~#srw~<azaroth> *nods* ... goes to look at the trace you just 
created :)
~#srw~<azaroth> Missing version parameter
~#srw~<Ralph> Sent a scan request.  SOmething blew up
~#srw~<Ralph> Why a blow up and not a diagnostic?
~#srw~<azaroth> SOAP tk requires version to be present, so it 
doesn't get to my application code before it fails it
~#srw~<Ralph> Nasty.  That's going to get us a lot of phone 
calls asking for looks into logs
~#srw~<azaroth> Worked that time
~#srw~<Ralph>             scanRequest.setVersion("1.1");
~#srw~<Ralph> Sorry.  Crummy paste
~#srw~<Ralph> Invalid element in 
gov.loc.www.zing.cql.xcql.SearchClauseType - searchClause
~#srw~<Ralph> My toolkit didn't like your response
~#srw~* azaroth puts in debugging ... can you resend the request?
~#srw~<Ralph> At which point I pause and wonder how I get a 
peek at what you sent me
~#srw~* Ralph sends again
~#srw~* azaroth goes to check the namespace for XCQL...
~#srw~<azaroth> Gah. Ooops :)
~#srw~<azaroth> Try now?
~#srw~* Ralph starts up tcpmon
~#srw~<azaroth> That's one way of doing it
~#srw~<azaroth> Any better with the right namespace for XCQL?
~#srw~<Ralph> Nope, still same complaint about searchClause
~#srw~<azaroth> Err
~#srw~* azaroth goes to look at schema this time
~#srw~<azaroth> Oh!
~#srw~<azaroth> Hmmm.
~#srw~<azaroth> xScanClause is a searchClause, it doesn't 
/contain/ a searchClause
~#srw~<Ralph> You've got a searchClause and a scanClause in 
the echoed response
~#srw~<azaroth> As opposed to xQuery which contains the query
~#srw~<azaroth> I think that's a schema bug, personally
~#srw~<azaroth> Currently the schema wants:  
<srw:xScanClause><xcql:index>...</xcql:index>...</xcql:term></
srw:xScanClause>
~#srw~<azaroth> As opposed to xQuery on searchResponse which 
wants:  
<srw:xQuery><xcql:searchClause>...</xcql:searchClause></srw:xQuery>
~#srw~<azaroth> Can't check Adam's implementation as he 
points at LC which doesn't do scan.
~#srw~<Ralph> I'm setting xScanClause in the response too.  
Let me grab mine and compare them.  I'll send you an email
~#srw~<azaroth> You do it as per the schema
~#srw~<azaroth> (unsurprisingly)
~#srw~* azaroth goes the check what the documentation says 
should happen
~#srw~<Ralph> Oops.  Poked your server instead of mine.  Sorry.
~#srw~<azaroth> *grins*
~#srw~<azaroth> Hmm. Documentation is totally ambiguous
~#srw~<azaroth> I guess I'll just fix my implementation to the schema
~#srw~<azaroth> But I'll note the interop issue on list
~#srw~* Ralph sent email
~#srw~<azaroth> *nods*  Yup, I have an extraneous searchClause wrapper
~#srw~<azaroth> Any trouble with search?
~#srw~<Ralph> You made me blow up!
~#srw~<azaroth> Heh.
~#srw~<Ralph> You sent back an empty records element
~#srw~<azaroth> Want an email with the xml sent?
~#srw~<Ralph> Nope, the tcpmon works like a charm
~#srw~<azaroth> Is that illegal?
~#srw~<Ralph> I don't know.  I guess I omit it when there are 
no records.  It looked like I got records back from you
~#srw~<Ralph> so I tried to read one and blew up.
~#srw~* Ralph fixes code
~#srw~<Ralph> What's a guy got to do to get a hit on your db?
~#srw~<azaroth> *lol*
~#srw~<azaroth> dc.title any sword
~#srw~<azaroth> Unless you want to hit on my database, then I 
suggest psychiatric analysis
~#srw~<Ralph> getting a record this time
~#srw~<Ralph> blew up again!
~#srw~<Ralph> Ooo.  String packing.
~#srw~<Ralph> Well, I didn't do anything smart with the 
response, but that's just dumb client code.
~#srw~<Ralph> I seem to think I got something real and I love 
what I see in tcpmon
~#srw~* azaroth grins
~#srw~<azaroth> Going down for a sec
~#srw~<azaroth> Back up
~#srw~<azaroth> Drat forgot the namespace
~#srw~<Ralph> We've just about exhaused my SRW client capabilities.
~#srw~<Ralph> I'm going to try to poke your SRU server with 
my latest stylesheet and see how that works out.
~#srw~<Ralph> It'll take a few minutes to change the 
server-side stylesheet into a client side one.  (Mostly 
references to other stylesheets.)
~#srw~<azaroth> Okay, I think I've fixed my scanResponse
~#srw~<Ralph> Okay, I'll send you a scanRequest
~#srw~<Ralph> Like a charm!!!
~#srw~<azaroth> Ugly hack, but it should work?
~#srw~<azaroth> Cool :)
~#srw~<azaroth> idle to get coffee
~#srw~<Ralph> Why doesn't 
http://srw.cheshire3.org:8080/l5r?operation=explain work?
~#srw~<Ralph> But when I send 
http://srw.cheshire3.org:8080/l5r?stylesheet=pooh I get a 
snotty diagnostic about missing mandatory operation!
~#srw~<Ralph> And, you ignored my stylesheet request.  (Which 
might well be ill-formed.)
~#srw~<azaroth> version
~#srw~<azaroth> Err, maybe not
~#srw~<Ralph> Version wasn't required on the second request
~#srw~<azaroth> First issue solved (make record non mandatory)
~!all~*<* Signoff: Ralph (Read error: Connection reset by peer)
~#srw~*>* Ralph (~levan@132.174.124.10) has joined channel #srw
~#srw~<Ralph> Damn!  My machine crashed!
~#srw~<Ralph> Did I miss an explanation for my problems?
~#srw~<azaroth> I fixed the first issue
~#srw~<azaroth> Which was that I had made record mandatory. Ooops
~#srw~<azaroth> So I couldn't serialise.
~#srw~<azaroth> Second -- I thought we decided that there was 
only one way when version wasn't mandatory, and that was when 
there were no parameters
~#srw~<azaroth> But as soon as you give a parameter, you need 
to give all the mandatory ones
~#srw~<Ralph> Did I just kill you with this or did you just 
bounce your server?
~#srw~<Ralph> 
http://srw.cheshire3.org:8080/l5r?operation=explain&version=1.1
~#srw~<azaroth> It crashed during serialisation
~#srw~<Ralph> You seem to be okay now, including echoing back 
my stylesheet!
~#srw~<azaroth> *nods*
~#srw~<azaroth> Don't you want file://d:\\xsl\\explainResponse.xsl  ?
~#srw~<azaroth> Also, what would it take to install your client?
~#srw~<azaroth> I'm JDK 1.4.2, linux
~#srw~* Ralph burps and rubs tummy
~#srw~<azaroth> *grins*
~#srw~<Ralph> Sorry, I was forced to go eat a cookie to 
celebrate the opening of a branch of our corporate library
~#srw~* azaroth hates it when that happens
~#srw~<Ralph> So, you want my source?  I'll email it to you.
~#srw~<Ralph> Well, give me a minute to figure out how many 
jars it needs.
~#srw~<azaroth> *nods*
~#srw~<azaroth> Just the client stuff is good. I don't have 
all the kit necessary to run the server
~#srw~* Ralph sends client via email
~#srw~<azaroth> Thanks :)
~#srw~<Ralph> It's 7:30 your time, isn't it?  You should stop 
doing this for a while!
~#srw~<azaroth> S'okay, I start work at like 11:00
~#srw~<azaroth> I might convince Jen to start working on dinner though
~#srw~<azaroth> Erk.  Of those jars, I have ... commons-logging
~#srw~* Ralph sends more jars via email
~#srw~<Ralph> Damn if I can figure out how to get my local 
stylesheet read.  I know I've done it before.
~#srw~<azaroth> Send me the stylesheet and I'll put it in the 
server? :)
~#srw~<azaroth> Put it in webspace somewhere else and point 
to it there?
~#srw~<azaroth> Got the jars email, many thanks :)
~#srw~<azaroth> Woo!
~#srw~<azaroth> [azaroth@mithlond srw]$ 
../j2sdk1.4.2/bin/java -cp "srw.jar:axis-1_>
2.jar:jaxrpc.jar:commons-logging.jar:commons-discovery.jar:saa
j.jar" ORG.oclc.os.SRW.SRWClient
~#srw~<azaroth> 20 terms returned
~#srw~<Ralph> Congrats!  Looks like it works!
~#srw~<azaroth> Yup.
~#srw~<Ralph> Crap!
~#srw~<azaroth> ?
~#srw~<Ralph> My stylesheet problem looks like a browser 
security issue.
~#srw~<Ralph> When I send the request to you through tcpmon, it works
~#srw~<azaroth> Did Theo say something about having to open 
up all sorts of permissions to get things like that working?
~#srw~<Ralph> Well, I looked at the security stuff a few 
minutes ago and didn't see anything appropriate
~#srw~<azaroth> Does your SRU support it?
~#srw~<azaroth> Yup. Mozilla doesn't process either
~!all~*<* Signoff: Ralph (Read error: Connection reset by peer)

(There's much more, but this gives the flavour.)

Feedback to <mike@indexdata.com> is welcome!