I feel, but I'm not sure, that we first need to define what we want to test: I mean enumerate and organize the requirements could probably be the right starting point.
Of course Sebastian's approach could be right if we can imagine a tool that can enforce a requirement's organizational model. Vittorio ----- Original Message ----- From: "Tristan Tarrant" <ttarr...@redhat.com> To: infinispan-dev@lists.jboss.org Sent: Thursday, September 15, 2016 6:27:54 PM Subject: Re: [infinispan-dev] Hot Rod testing Anyway, I like the idea. Can we sketch a POC ? Tristan On 15/09/16 14:24, Tristan Tarrant wrote: > Whatever we choose, this solves only half of the problem: enumerating > and classifying the tests is the hard part. > > Tristan > > On 15/09/16 13:58, Sebastian Laskawiec wrote: >> How about turning the problem upside down and creating a TCK suite >> which runs on JUnit and has pluggable clients? The TCK suite would be >> responsible for bootstrapping servers, turning them down and >> validating the results. >> >> The biggest advantage of this approach is that all those things are >> pretty well known in Java world (e.g. using Arquillian for managing >> server lifecycle or JUnit for assertions). But the biggest challenge >> is how to plug for example a JavaScript client into the suite? How to >> call it from Java. >> >> Thanks >> Sebastian >> >> On Thu, Sep 15, 2016 at 1:52 PM, Gustavo Fernandes >> <gust...@infinispan.org <mailto:gust...@infinispan.org>> wrote: >> >> >> >> On Thu, Sep 15, 2016 at 12:33 PM, Sanne Grinovero >> <sa...@infinispan.org <mailto:sa...@infinispan.org>> wrote: >> >> I was actually planning to start a similar topic, but from the >> point of view of user's testing needs. >> >> I've recently created Hibernate OGM support for Hot Rod, and >> it wasn't as easy as other NoSQL databases to test; luckily I >> have some knowledge and contact on Infinispan ;) but I had to >> develop several helpers and refine the approach to testing >> over multiple iterations. >> >> I ended up developing a JUnit rule - handy for individual test >> runs in the IDE - and with a Maven life cycle extension and >> also with an Arquillian extension, which I needed to run both >> the Hot Rod server and start a Wildfly instance to host my >> client app. >> >> At some point I was also in trouble with conflicting >> dependencies so considered making a Maven plugin to manage the >> server lifecycle as a proper IT phase - I didn't ultimately >> make this as I found an easier solution but it would be great >> if Infinispan could provide such helpers to end users too.. >> Forking the ANT scripts from the Infinispan project to >> assemble and start my own (as you do..) seems quite cumbersome >> for users ;) >> >> Especially the server is not even available via Maven >> coordinates/./ >> >> The server is available at [1] >> >> [1] >> http://central.maven.org/maven2/org/infinispan/server/infinispan-server-build/9.0.0.Alpha4/ >> <http://central.maven.org/maven2/org/infinispan/server/infinispan-server-build/9.0.0.Alpha4/> >> >> I'm of course happy to contribute my battle-tested Test >> helpers to Infinispan, but they are meant for JUnit users. >> Finally, comparing to developing OGM integrations for other >> NoSQL stores.. It's really hard work when there is no "viewer" >> of the cache content. >> >> We need some kind of interactive console to explore the stored >> data, I felt like driving blind: developing based on black >> box, when something doesn't work as expected it's challenging >> to figure if one has a bug with the storage method rather than >> the reading method, or maybe the encoding not quite right or >> the query options being used.. sometimes it's the used flags >> or the configuration properties (hell, I've been swearing a >> lot at some of these flags!) >> >> Thanks, >> Sanne >> >> >> On 15 Sep 2016 11:07, "Tristan Tarrant" <ttarr...@redhat.com >> <mailto:ttarr...@redhat.com>> wrote: >> >> Recently I've had a chat with Galder, Will and Vittorio >> about how we >> test the Hot Rod server module and the various clients. We >> also >> discussed some of this in the past, but we now need to >> move forward with >> a better strategy. >> >> First up is the Hot Rod server module testsuite: it is the >> only part of >> the code which still uses Scala. Will has a partial port >> of it to Java, >> but we're wondering if it is worth completing that work, >> seeing that >> most of the tests in that testsuite, in particular those >> related to the >> protocol itself, are actually duplicated by the Java Hot >> Rod client's >> testsuite which also happens to be our reference >> implementation of a >> client and is much more extensive. >> The only downside of removing it is that verification >> will require >> running the client testsuite, instead of being >> self-contained. >> >> Next up is how we test clients. >> >> The Java client, partially described above, runs all of >> the tests >> against ad-hoc embedded servers. Some of these tests, in >> particular >> those related to topology, start and stop new servers on >> the fly. >> >> The server integration testsuite performs yet another set >> of tests, some >> of which overlap the above, but using the actual >> full-blown server. It >> doesn't test for topology changes. >> >> The C++ client wraps the native client in a Java wrapper >> generated by >> SWIG and runs the Java client testsuite. It then checks >> against a >> blacklist of known failures. It also has a small number of >> native tests >> which use the server distribution. >> >> The Node.js client has its own home-grown testsuite which >> also uses the >> server distribution. >> >> Duplication aside, which in some cases is unavoidable, it >> is impossible >> to confidently say that each client is properly tested. >> >> Since complete unification is impossible because of the >> different >> testing harnesses used by the various platforms/languages, >> I propose the >> following: >> >> - we identify and group the tests depending on their scope >> (basic >> protocol ops, bulk ops, topology/failover, security, etc). >> A client >> which implements the functionality of a group MUST pass >> all of the tests >> in that group with NO exceptions >> - we assign a unique identifier to each group/test >> combination (e.g. >> HR.BASIC.PUT, HR.BASIC.PUT_FLAGS_SKIP_LOAD, etc). These >> should be >> collected in a "test book" (some kind of structured file) >> for comparison >> with client test runs >> - we refactor the Java client testsuite according to the >> above grouping >> / naming strategy so that testsuite which use the wrapping >> approach >> (i.e. C++ with SWIG) can consume it by directly specifying >> the supported >> groups >> - other clients get reorganized so that they support the >> above grouping >> >> I understand this is quite some work, but the current >> situation isn't >> really sustainable. >> >> Let me know what your thoughts are >> >> >> Tristan >> -- >> Tristan Tarrant >> Infinispan Lead >> JBoss, a division of Red Hat >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> <mailto:infinispan-dev@lists.jboss.org> >> https://lists.jboss.org/mailman/listinfo/infinispan-dev >> <https://lists.jboss.org/mailman/listinfo/infinispan-dev> >> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> <mailto:infinispan-dev@lists.jboss.org> >> https://lists.jboss.org/mailman/listinfo/infinispan-dev >> <https://lists.jboss.org/mailman/listinfo/infinispan-dev> >> >> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> <mailto:infinispan-dev@lists.jboss.org> >> https://lists.jboss.org/mailman/listinfo/infinispan-dev >> <https://lists.jboss.org/mailman/listinfo/infinispan-dev> >> >> >> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/infinispan-dev > > -- Tristan Tarrant Infinispan Lead JBoss, a division of Red Hat _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev