[logback-dev] Looking at MongoDBAppender

Christian Trutz christian.trutz at belaso.de
Mon Jun 18 17:32:56 CEST 2012


Hi ceki,

thank you very much for your remarks :-)

Remark 1): yes i agree with you, that integration tests are also very
usefull and only
with integration tests you know, that the software do what you want.
I thought that maybe Maven profiles could be very useful to separate
execution of
integration tests. Only with profile (say "integration-tests") the
integration tests will
be executed. Have we any Hudson/Jenkins instance for logback-extensions?

Remark 2): I am using TestNG only because it was included, not because I
think it
is necesary. I will change the logback-ext-mongodb unit tests to JUnit
tests.

Remark 3):
>If I understand correctly, Jmockit relies on a java-agent to execute?
Yes, with jdk1.5 it relies on java-agent, with jdk1.6. it runs also without
java-agent.
We have jdk1.6. so we do not need any java-agent configurations, the tests
run OTB.

Remark 4): Ohh ok, I will separate logback-ext-mongodb into classic and
access ...
>Notwithstanding the above remarks, I am looking forward to testing
logback-mongodb-* once I install MongoDB on my local machine.
OK please look also to
https://github.com/qos-ch/logback-extensions/wiki/MongoDB
it contains a little tutorial for logback-access with Tomcat and MongoDB.

Regards
Christian


2012/6/18 ceki <ceki at qos.ch>

> Hi Christian,
>
> I've mostly looked at the tests (not MongoDBAppender
> itself). Here are some preliminary remarks:
>
> 1) Mocks in tests are very useful for certain tests. However, I don't
> think mock tests let us verify that MongoDBAppender actually works
> with MongoDB.
>
> We faced a similar problem with DBAppender which supports several
> databases such as oracle, mysqldb, postgresql, h2, etc. During the
> build, there are tests which actually run against these databases but
> only on "conforming" hosts, i.e. hosts that are known to run a
> database of certain type. Here is an except from
> DBAppenderIntegrationTest [1] which you might find useful.
>
> public class DBAppenderIntegrationTest {
>
>  static String LOCAL_HOST_NAME; // set in setUpBeforeClass()
>  static String[] MYSQL_CONFORMING_HOST_LIST = new String[] { "xharo" };
>
>  @Test
>  public void mysql() throws Exception {
>    if (!**isConformingHostAndJDK16OrHigh**er(MYSQL_CONFORMING_HOST_LIST)**)
> {
>      return;
>    }
>    doTest("src/test/input/**integration/db/mysql-with-**driver.xml");
>  }
>
>  static boolean isConformingHostAndJDK16OrHigh**er(
>                               String[] conformingHostList) {
>    if (!Env.isJDK6OrHigher()) {
>      return false;
>    }
>    for (String conformingHost : conformingHostList) {
>      if (conformingHost.**equalsIgnoreCase(LOCAL_HOST_**NAME)) {
>        return true;
>      }
>    }
>    return false;
>  }
>
> }
>
> The idea could perhaps be applied to MongoDB as well. We'd run
> integration tests on machines known to deploy MongoDB and skip the
> tests on most other machines.
>
> Remark 2)
>
> MongoDBAppender tests use TestNG. While TestNG offers some
> functionality beyond Junit, in my past experience, I often had to
> revert to Junit because it is better supported than TestNG by various
> tools, in particular IDEs. From what I could see, you care not using
> any TestNG specific features, so moving to Junit should be easy. If
> you really prefer TestNG, you are welcome to put the issue to a vote
> and we'll all use the tool with the most votes. However, it seems
> awkward to use TestNG in some parts of the project and JUnit in
> others. Relying on a must-have TestNG-only feature is a different
> matter which may justify TestNG in a particular test case.
>
> Remark 3)
>
> If I understand correctly, Jmockit relies on a java-agent to execute?
> Is there a way to run Jmockit without a javaagent?
>
> Remark 4)
>
> No logback-ext module should depend on logback-access and
> logback-classic at the same time. Otherwise, when such a module is
> used, it will pull in both logback-access and logback-classic into the
> client's project. This may have unintended consequences. In the most
> common deployment scenario, logback-access is deployed on the server's
> lib/ folder whereas logback-classic is deployed in a web-app. We don't
> want to break that common deployment scenario.
>
> Given the above, I would suggest to break mongodb into two modules,
> one for logback-access and one for logback-classic.
>
> Notwithstanding the above remarks, I am looking forward to testing
> logback-mongodb-* once I install MongoDB on my local machine.
>
> [1] http://tinyurl.com/d2anyzb
>
> --
> Ceki
> http://twitter.com/#!/ceki
> ______________________________**_________________
> logback-dev mailing list
> logback-dev at qos.ch
> http://mailman.qos.ch/mailman/**listinfo/logback-dev<http://mailman.qos.ch/mailman/listinfo/logback-dev>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.qos.ch/pipermail/logback-dev/attachments/20120618/870d7438/attachment-0001.html>


More information about the logback-dev mailing list