Add tests to PMD + also add some extra PMD rules
diff --git a/docs/kerby-pmd-ruleset.xml b/docs/kerby-pmd-ruleset.xml
new file mode 100644
index 0000000..fc61e41
--- /dev/null
+++ b/docs/kerby-pmd-ruleset.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<ruleset name="kerby-pmd" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
+  <description>
+  A PMD ruleset for Apache Kerby
+  </description>
+
+  <rule ref="rulesets/java/basic.xml">
+     <exclude name="AvoidUsingHardCodedIP" />
+  </rule>
+  <rule ref="rulesets/java/unusedcode.xml"/>
+  <rule ref="rulesets/java/imports.xml"/>
+  <rule ref="rulesets/java/braces.xml"/>
+  <rule ref="rulesets/java/empty.xml"/>
+  <rule ref="rulesets/java/migrating.xml">
+     <exclude name="JUnit4TestShouldUseAfterAnnotation" />
+     <exclude name="JUnit4TestShouldUseTestAnnotation" />
+  </rule>
+  <rule ref="rulesets/java/unnecessary.xml"/>
+
+</ruleset>
diff --git a/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZKConfKey.java b/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZKConfKey.java
index 6e5945e..77571cd 100644
--- a/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZKConfKey.java
+++ b/kerby-backend/zookeeper-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/ZKConfKey.java
@@ -25,7 +25,7 @@
  * Define all the ZK backend related configuration items with default values.
  */
 public enum ZKConfKey implements ConfigKey {
-    ZK_HOST("127.0.0.1"), //NOPMD
+    ZK_HOST("127.0.0.1"),
     ZK_PORT(2181),
     DATA_DIR,
     DATA_LOG_DIR;
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/AnonymousPkinitKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/AnonymousPkinitKdcTest.java
index 1eb8fa5..fa26413 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/AnonymousPkinitKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/AnonymousPkinitKdcTest.java
@@ -25,7 +25,6 @@
 import org.apache.kerby.kerberos.kerb.server.KdcTestBase;
 import org.apache.kerby.kerberos.kerb.type.ticket.SgtTicket;
 import org.apache.kerby.kerberos.kerb.type.ticket.TgtTicket;
-import org.apache.kerby.pki.PkiLoader;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -35,13 +34,10 @@
 
 public class AnonymousPkinitKdcTest extends KdcTestBase {
 
-    private PkiLoader pkiLoader;
     private String serverPrincipal;
 
     @Before
     public void setUp() throws Exception {
-        pkiLoader = new PkiLoader();
-
         super.setUp();
     }
 
@@ -55,11 +51,6 @@
     }
 
     @Override
-    protected void setUpClient() throws Exception {
-        super.setUpClient();
-    }
-
-    @Override
     protected void createPrincipals() throws KrbException {
         super.createPrincipals();
         //Anonymity support is not enabled by default.
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
index c47f334..f66c31a 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithCertKdcTest.java
@@ -45,11 +45,9 @@
  */
 public class WithCertKdcTest extends KdcTestBase {
     private PkiLoader pkiLoader;
-    private String clientPrincipal;
     private String serverPrincipal;
     private Certificate userCert;
-    private PrivateKey userKey;
-    private Certificate caCert;
+    private PrivateKey userKey; //NOPMD
 
     @Before
     public void setUp() throws Exception {
@@ -76,11 +74,6 @@
         loadCredentials();
     }
 
-    @Override
-    protected void createPrincipals() throws KrbException {
-        super.createPrincipals();
-    }
-
     //@Test
     public void testPkinit() throws Exception {
         assertThat(userCert).isNotNull();
@@ -112,4 +105,4 @@
         res = getClass().getResourceAsStream("/userkey.pem");
         userKey = pkiLoader.loadPrivateKey(res, null);
     }
-}
\ No newline at end of file
+}
diff --git a/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/EnvelopedDataEngineTest.java b/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/EnvelopedDataEngineTest.java
index 6259de8..86a9fe2 100644
--- a/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/EnvelopedDataEngineTest.java
+++ b/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/EnvelopedDataEngineTest.java
@@ -22,6 +22,7 @@
 import junit.framework.TestCase;
 import org.apache.kerby.kerberos.kerb.client.preauth.pkinit.certs.CertificateChainFactory;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,6 +60,7 @@
     private PrivateKey privateKey;
 
 
+    @Before
     public void setUp() throws Exception {
         if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
             Security.addProvider(new BouncyCastleProvider());
diff --git a/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/SignedDataEngineTest.java b/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/SignedDataEngineTest.java
index 1671d1a..64eebcf 100644
--- a/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/SignedDataEngineTest.java
+++ b/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/SignedDataEngineTest.java
@@ -24,6 +24,7 @@
 import org.apache.kerby.kerberos.kerb.client.preauth.pkinit.certs.CertificateChainFactory;
 import org.bouncycastle.cms.CMSSignedData;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,6 +70,7 @@
     private PrivateKey privateKey;
 
 
+    @Before
     public void setUp() throws Exception {
         if (Security.getProvider("BC") == null) {
             Security.addProvider(new BouncyCastleProvider());
diff --git a/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/certs/CertificateChainFactoryTest.java b/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/certs/CertificateChainFactoryTest.java
index b6f24f7..db52d4d 100644
--- a/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/certs/CertificateChainFactoryTest.java
+++ b/kerby-kerb/kerb-client/src/test/java/org/apache/kerby/kerberos/kerb/client/preauth/pkinit/certs/CertificateChainFactoryTest.java
@@ -21,6 +21,7 @@
 
 import junit.framework.TestCase;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
 
 import java.security.InvalidAlgorithmParameterException;
 import java.security.NoSuchAlgorithmException;
@@ -45,6 +46,8 @@
  * @version $Rev$, $Date$
  */
 public class CertificateChainFactoryTest extends TestCase {
+
+    @Before
     public void setUp() {
         if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
             Security.addProvider(new BouncyCastleProvider());
diff --git a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java
index c13be9d..a8faf38 100644
--- a/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java
+++ b/kerby-kerb/kerb-crypto/src/test/java/org/apache/kerby/kerberos/kerb/crypto/CamelliaEncTest.java
@@ -39,7 +39,6 @@
 public class CamelliaEncTest {
 
     private List<String> outputs = new ArrayList<String>();
-    private int keySize;
 
     private byte[] plain = new byte[16];
     private byte[] cipher = new byte[16];
@@ -74,7 +73,6 @@
     }
 
     private void testWith(int keySize) throws KrbException {
-        this.keySize = keySize;
         outputs.add("KEYSIZE=" + (keySize * 8));
 
         encProvider = keySize == 16 ? new Camellia128Provider() : new Camellia256Provider();
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
index f74951a..bca18ad 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/KdcConfigKey.java
@@ -25,7 +25,7 @@
     KRB_DEBUG(true),
     KDC_SERVICE_NAME("KDC-Server"),
     KDC_IDENTITY_BACKEND,
-    KDC_HOST("127.0.0.1"), // NOPMD
+    KDC_HOST("127.0.0.1"),
     KDC_PORT,
     KDC_ALLOW_TCP(true),
     KDC_ALLOW_UDP(true),
diff --git a/kerby-pkix/src/test/java/org/apache/commons/ssl/TestOpenSSL.java b/kerby-pkix/src/test/java/org/apache/commons/ssl/TestOpenSSL.java
index fd902d1..b4f26de 100644
--- a/kerby-pkix/src/test/java/org/apache/commons/ssl/TestOpenSSL.java
+++ b/kerby-pkix/src/test/java/org/apache/commons/ssl/TestOpenSSL.java
@@ -33,7 +33,7 @@
         }
 
         for (int i = 5; i < 50; i++) {
-            int testSize = (i * 1000) + 123;
+            int testSize = i * 1000 + 123;
             byte[] buf = new byte[testSize];
             random.nextBytes(buf);
             byte[] enc = OpenSSL.encrypt(cipher, pwd, buf);
diff --git a/kerby-util/src/test/java/org/apache/kerby/util/TestBase64.java b/kerby-util/src/test/java/org/apache/kerby/util/TestBase64.java
index 1ecf4c5..0eef01d 100644
--- a/kerby-util/src/test/java/org/apache/kerby/util/TestBase64.java
+++ b/kerby-util/src/test/java/org/apache/kerby/util/TestBase64.java
@@ -29,7 +29,7 @@
             assertTrue(result);
         }
         for (int i = 5; i < 50; i++) {
-            int testSize = (i * 1000) + 123;
+            int testSize = i * 1000 + 123;
             byte[] buf = new byte[testSize];
             random.nextBytes(buf);
             byte[] enc = Base64.encodeBase64(buf);
@@ -67,7 +67,7 @@
             assertTrue(result);
         }
         for (int i = 5; i < 50; i++) {
-            int testSize = (i * 1000) + 123;
+            int testSize = i * 1000 + 123;
             byte[] buf = new byte[testSize];
             random.nextBytes(buf);
 
diff --git a/pom.xml b/pom.xml
index 9e1f57b..3b4d302 100644
--- a/pom.xml
+++ b/pom.xml
@@ -196,10 +196,14 @@
           <artifactId>maven-pmd-plugin</artifactId>
           <version>3.5</version>
           <configuration>
+            <rulesets>
+              <ruleset>${checkstyle.dir}/kerby-pmd-ruleset.xml</ruleset>
+            </rulesets>
             <linkXRef>false</linkXRef>
             <sourceEncoding>utf-8</sourceEncoding>
             <failOnViolation>true</failOnViolation>
             <verbose>true</verbose>
+            <includeTests>true</includeTests>
             <targetJdk>1.7</targetJdk>
           </configuration>
           <executions>