You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@zookeeper.apache.org by "Zili Chen (Jira)" <ji...@apache.org> on 2019/10/17 07:30:00 UTC

[jira] [Comment Edited] (ZOOKEEPER-3557) Towards a testable codebase

    [ https://issues.apache.org/jira/browse/ZOOKEEPER-3557?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16953468#comment-16953468 ] 

Zili Chen edited comment on ZOOKEEPER-3557 at 10/17/19 7:29 AM:
----------------------------------------------------------------

Generally speaking I'm going to attempt to introduce a new module {{zookeeper-testkit}} which contains

src/main - classes as testkits that can be used in downstream project. Such as {{TestingServer}}.
src/test - we port current test cases to this directory for using the new testkit for a well-divided test cases(note that most of them messily coupled with {{ClientBase}})

this module depends on {{zookeeper-server}}.

Another notable things is that project like Curator makes use of {{Testable}} which provide {{injectSessionExpiration}} which I think is a useful API for client self close the connection(for an edge case can be taken care of with this API see also [this thread|https://lists.apache.org/x/thread.html/89b7717f6b05556ff381350d515c5afdd15b80442b934e25a2dad398@%3Cuser.zookeeper.apache.org%3E]) CC [~randgalt]


was (Author: tison):
Generally speaking I'm going to attempt to introduce a new module {{zookeeper-testkit}} which contains

src/main - testable classes that can be used in downstream project. Such as {{TestingServer}}.
src/test - we port current test cases to this directory for using the new testkit for a well-divided test cases(note that most of them messily coupled with {{ClientBase}})

this module depends on {{zookeeper-server}}.

Another notable things is that project like Curator makes use of {{Testable}} which provide {{injectSessionExpiration}} which I think is a useful API for client self close the connection(for an edge case can be taken care of with this API see also [this thread|https://lists.apache.org/x/thread.html/89b7717f6b05556ff381350d515c5afdd15b80442b934e25a2dad398@%3Cuser.zookeeper.apache.org%3E]) CC [~randgalt]

> Towards a testable codebase
> ---------------------------
>
>                 Key: ZOOKEEPER-3557
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3557
>             Project: ZooKeeper
>          Issue Type: Task
>          Components: tests
>            Reporter: Zili Chen
>            Priority: Major
>
> This issue is umbrella issue tracks all efforts towards a testable ZooKeeper codebase.
> *Motivation*
> On the one hand, many of our adopters such as HBase, Curator and so on maintain their own testkit for ZooKeeper[1][2]; on the other hand, ZooKeeper itself doesn't have a well-designed testkit. Here are some of issues in our testing "framework".
> 1. {{ZooKeeperTestable}} becomes a production scope class while it should be in testing scope.
> 2. {{ZooKeeperTestable}} is only used in {{SessionTimeoutTest}} while its name infers a completed testing class.
> 3. {{ClientBase}} is super class of many of zookeeper tests while it contains too many orthogonal functions that its subclass inherits lots of burdens that is not required.
> 4. Testing logics are injected casually so that we suffer from visibility chaos.
> ...
> Due to ZooKeeper doesn't provide testkit our adopters have to write ZK relative tests with quite internal concepts. For example, HBase wait for ZK server launched by 4 letter words which causes issue when upgrade from ZK 3.4.x to ZK 3.5.5 where 4 letter words are disabled by default.
> [1] https://github.com/apache/hbase/blob/master/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.java
> [2] https://github.com/apache/curator/blob/master/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java



--
This message was sent by Atlassian Jira
(v8.3.4#803005)