You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/07/04 06:59:31 UTC

directory-kerby git commit: DIRKRB-319 Added tests between real application server and client using GSSAPI/KRB to authenticate mutually

Repository: directory-kerby
Updated Branches:
  refs/heads/master d3c8272d2 -> 7cbd366ef


DIRKRB-319 Added tests between real application server and client using GSSAPI/KRB to authenticate mutually


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/7cbd366e
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/7cbd366e
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/7cbd366e

Branch: refs/heads/master
Commit: 7cbd366efa1d689d38e97f5d954aaebfc4967e99
Parents: d3c8272
Author: drankye <ka...@intel.com>
Authored: Sat Jul 4 12:59:12 2015 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Sat Jul 4 12:59:12 2015 +0800

----------------------------------------------------------------------
 .../kerberos/kerb/integration/test/AppBase.java | 36 --------
 .../kerb/integration/test/AppClient.java        | 15 +++-
 .../kerb/integration/test/AppServer.java        | 17 +++-
 .../kerberos/kerb/integration/test/AppUtil.java |  5 ++
 .../kerb/integration/test/Transport.java        |  5 +-
 .../kerb/integration/test/gss/GssAppClient.java | 84 ++++++++++++++++++
 .../kerb/integration/test/gss/GssAppServer.java | 83 ++++++++++++++++++
 .../kerberos/kerb/integration/test/AppTest.java | 89 ++++++++++++++++++++
 .../kerb/integration/test/GssAppTest.java       | 50 +++++++++++
 .../kerberos/kerb/server/GssInteropTest.java    |  8 --
 .../kerberos/kerb/server/LoginTestBase.java     |  1 -
 11 files changed, 339 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java
deleted file mode 100644
index 278ce4f..0000000
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppBase.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- *  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.
- *
- */
-package org.apache.kerby.kerberos.kerb.integration.test;
-
-/**
- * Making it runnable because the app will be launched in a separate thread in
- * a test.
- */
-public abstract class AppBase implements Runnable {
-    private boolean isTestOK = false;
-
-    public synchronized void setTestOK(boolean isOK) {
-        this.isTestOK = isOK;
-    }
-
-    public boolean isTestOK() {
-        return isTestOK;
-    }
-}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
index 4ae19a6..68b2b09 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppClient.java
@@ -21,8 +21,9 @@ package org.apache.kerby.kerberos.kerb.integration.test;
 
 import java.io.IOException;
 
-public abstract class AppClient extends AppBase {
-    protected Transport.Connection conn;
+public abstract class AppClient {
+    private Transport.Connection conn;
+    private boolean isTestOK = false;
 
     protected void usage(String[] args) {
         if (args.length < 2) {
@@ -36,7 +37,7 @@ public abstract class AppClient extends AppBase {
         usage(args);
 
         String hostName = args[0];
-        short port = (short) Integer.parseInt(args[1]);
+        int port = Integer.parseInt(args[1]);
 
         this.conn = Transport.Connector.connect(hostName, port);
     }
@@ -58,4 +59,12 @@ public abstract class AppClient extends AppBase {
     }
 
     protected abstract void withConnection(Transport.Connection conn) throws Exception;
+
+    protected synchronized void setTestOK(boolean isOK) {
+        this.isTestOK = isOK;
+    }
+
+    public boolean isTestOK() {
+        return isTestOK;
+    }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
index 0d7a8fa..14b0cc7 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppServer.java
@@ -21,13 +21,17 @@ package org.apache.kerby.kerberos.kerb.integration.test;
 
 import java.io.IOException;
 
-public abstract class AppServer extends AppBase {
+/**
+ * Making it runnable because the server will be launched in a separate thread
+ * in a test.
+ */
+public abstract class AppServer implements Runnable {
     protected Transport.Acceptor acceptor;
     private boolean terminated = false;
 
     protected void usage(String[] args) {
         if (args.length < 1) {
-            System.err.println("Usage: java <options> AppServer <ListenPort>");
+            System.err.println("Usage: AppServer <ListenPort>");
             System.exit(-1);
         }
     }
@@ -35,14 +39,19 @@ public abstract class AppServer extends AppBase {
     public AppServer(String[] args) throws IOException {
         usage(args);
 
-        short listenPort = (short) Integer.parseInt(args[0]);
+        int listenPort = Integer.parseInt(args[0]);
         this.acceptor = new Transport.Acceptor(listenPort);
     }
 
-    public synchronized void terminate() {
+    public synchronized void start() {
+        new Thread(this).start();
+    }
+
+    public synchronized void stop() {
         terminated = true;
     }
 
+    @Override
     public void run() {
         try {
             synchronized (this) {

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java
new file mode 100644
index 0000000..b837689
--- /dev/null
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/AppUtil.java
@@ -0,0 +1,5 @@
+package org.apache.kerby.kerberos.kerb.integration.test;
+
+public class AppUtil {
+    public static final String JGSS_KERBEROS_OID = "1.2.840.113554.1.2.2";
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
index ee14e43..727f111 100644
--- a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/Transport.java
@@ -30,7 +30,7 @@ public class Transport {
     public static class Acceptor {
         ServerSocket serverSocket;
 
-        public Acceptor(short listenPort) throws IOException {
+        public Acceptor(int listenPort) throws IOException {
             this.serverSocket = new ServerSocket(listenPort);
         }
 
@@ -53,7 +53,8 @@ public class Transport {
     }
 
     public static class Connector {
-        public static Connection connect(String host, short port) throws IOException {
+        public static Connection connect(String host,
+                                         int port) throws IOException {
             Socket socket = new Socket(host, port);
             return new Connection(socket);
         }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
new file mode 100644
index 0000000..64ec1c8
--- /dev/null
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppClient.java
@@ -0,0 +1,84 @@
+package org.apache.kerby.kerberos.kerb.integration.test.gss;
+
+import org.apache.kerby.kerberos.kerb.integration.test.AppClient;
+import org.apache.kerby.kerberos.kerb.integration.test.AppUtil;
+import org.apache.kerby.kerberos.kerb.integration.test.Transport;
+import org.ietf.jgss.*;
+
+public class GssAppClient extends AppClient {
+    private String clientPrincipal;
+    private String serverPrincipal;
+    private GSSManager manager;
+
+    @Override
+    protected void usage(String[] args) {
+        if (args.length < 3) {
+            System.err.println("Usage: GssAppClient <server-host> <server-port> "
+                    + "<client-principal> <server-principal> ");
+            System.exit(-1);
+        }
+    }
+
+    public GssAppClient(String[] args) throws Exception {
+        super(args);
+
+        clientPrincipal = args[2];
+        serverPrincipal = args[3];
+        this.manager = GSSManager.getInstance();
+    }
+
+    @Override
+    protected void withConnection(Transport.Connection conn) throws Exception {
+        Oid krb5Oid = new Oid("1.2.840.113554.1.2.2");
+
+        GSSName serverName = manager.createName(serverPrincipal,
+                GSSName.NT_USER_NAME);
+        Oid oid = new Oid(AppUtil.JGSS_KERBEROS_OID);
+        GSSName clientName = manager.createName(clientPrincipal,
+                GSSName.NT_USER_NAME);
+        GSSCredential myCred = manager.createCredential(clientName,
+                GSSCredential.DEFAULT_LIFETIME, oid, GSSCredential.INITIATE_ONLY);
+        GSSContext context = manager.createContext(serverName,
+                krb5Oid, myCred, GSSContext.DEFAULT_LIFETIME);
+        context.requestMutualAuth(true);
+        context.requestConf(true);
+        context.requestInteg(true);
+
+        byte[] token = new byte[0];
+        while (!context.isEstablished()) {
+            token = context.initSecContext(token, 0, token.length);
+            if (token != null) {
+                conn.sendToken(token);
+            }
+            if (!context.isEstablished()) {
+                token = conn.recvToken();
+            }
+        }
+
+        System.out.println("Context Established! ");
+        System.out.println("Client is " + context.getSrcName());
+        System.out.println("Server is " + context.getTargName());
+
+        if (context.getMutualAuthState()) {
+            System.out.println("Mutual authentication took place!");
+        }
+
+        byte[] messageBytes = "Hello There!\0".getBytes();
+        MessageProp prop =  new MessageProp(0, true);
+        token = context.wrap(messageBytes, 0, messageBytes.length, prop);
+        System.out.println("Will send wrap token of size " + token.length);
+        conn.sendToken(token);
+
+        token = conn.recvToken();
+        context.verifyMIC(token, 0, token.length,
+                messageBytes, 0, messageBytes.length, prop);
+        setTestOK(true);
+
+        System.out.println("Verified received MIC for message.");
+        context.dispose();
+    }
+
+    public static void main(String[] args) throws Exception  {
+        new GssAppClient(args).run();
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
new file mode 100644
index 0000000..19dc781
--- /dev/null
+++ b/kerby-kerb/integration-test/src/main/java/org/apache/kerby/kerberos/kerb/integration/test/gss/GssAppServer.java
@@ -0,0 +1,83 @@
+package org.apache.kerby.kerberos.kerb.integration.test.gss;
+
+import org.apache.kerby.kerberos.kerb.integration.test.AppServer;
+import org.apache.kerby.kerberos.kerb.integration.test.AppUtil;
+import org.apache.kerby.kerberos.kerb.integration.test.Transport;
+import org.ietf.jgss.*;
+
+public class GssAppServer extends AppServer {
+    private String serverPrincipal;
+    private GSSManager manager;
+    private GSSContext context;
+
+    public GssAppServer(String[] args) throws Exception {
+        super(args);
+        if (args.length < 2) {
+            usage(args);
+        }
+        this.serverPrincipal = args[1];
+
+        this.manager = GSSManager.getInstance();
+        GSSName gssService = manager.createName(
+                serverPrincipal, GSSName.NT_USER_NAME);
+        Oid oid = new Oid(AppUtil.JGSS_KERBEROS_OID);
+        GSSCredential credentials = manager.createCredential(gssService,
+                GSSCredential.DEFAULT_LIFETIME, oid, GSSCredential.ACCEPT_ONLY);
+        this.context = manager.createContext(credentials);
+    }
+
+    protected void usage(String[] args) {
+        if (args.length < 1) {
+            System.err.println("Usage: AppServer <ListenPort> <server-principal>");
+            System.exit(-1);
+        }
+    }
+
+    @Override
+    protected void onConnection(Transport.Connection conn) throws Exception {
+        byte[] token;
+
+        System.out.print("Starting negotiating security context");
+        while (!context.isEstablished()) {
+            token = conn.recvToken();
+            token = context.acceptSecContext(token, 0, token.length);
+            if (token != null) {
+                conn.sendToken(token);
+            }
+        }
+
+        System.out.print("Context Established! ");
+        System.out.println("Client is " + context.getSrcName());
+        System.out.println("Server is " + context.getTargName());
+
+        doWith(context, conn);
+
+        context.dispose();
+    }
+
+    protected void doWith(GSSContext context,
+                          Transport.Connection conn) throws Exception {
+        if (context.getMutualAuthState())
+            System.out.println("Mutual authentication took place!");
+
+        MessageProp prop = new MessageProp(0, false);
+        byte[] token = conn.recvToken();
+        byte[] bytes = context.unwrap(token, 0, token.length, prop);
+        String str = new String(bytes);
+        System.out.println("Received data \""
+                + str + "\" of length " + str.length());
+
+        System.out.println("Confidentiality applied: "
+                + prop.getPrivacy());
+
+        prop.setQOP(0);
+        token = context.getMIC(bytes, 0, bytes.length, prop);
+        System.out.println("Will send MIC token of size "
+                + token.length);
+        conn.sendToken(token);
+    }
+
+    public static void main(String[] args) throws Exception {
+        new GssAppServer(args).run();
+    }
+}

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java
new file mode 100644
index 0000000..16e8fd2
--- /dev/null
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/AppTest.java
@@ -0,0 +1,89 @@
+/**
+ *  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. 
+ *  
+ */
+package org.apache.kerby.kerberos.kerb.integration.test;
+
+import org.apache.kerby.kerberos.kerb.server.LoginTestBase;
+import org.apache.kerby.util.NetworkUtil;
+import org.junit.Assert;
+import org.junit.Before;
+
+import javax.security.auth.Subject;
+import java.security.PrivilegedAction;
+
+public abstract class AppTest extends LoginTestBase {
+    private int serverPort;
+    protected AppClient appClient;
+    protected AppServer appServer;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        serverPort = NetworkUtil.getServerPort();
+
+        setupAppServer();
+
+        runAppClient();
+    }
+
+    protected int getServerPort() {
+        return serverPort;
+    }
+
+    protected void setupAppServer() throws Exception {
+        Subject subject = loginServiceUsingKeytab();
+        Subject.doAs(subject, new PrivilegedAction<Object>() {
+            @Override
+            public Object run() {
+                try {
+                    appServer = createAppServer();
+                    appServer.start();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                return null;
+            }
+        });
+    }
+
+    protected abstract AppServer createAppServer() throws Exception;
+
+    protected void runAppClient() throws Exception {
+        Subject subject = loginClientUsingTicketCache();
+        Subject.doAs(subject, new PrivilegedAction<Object>() {
+            @Override
+            public Object run() {
+                try {
+                    appClient = createAppClient();
+                    appClient.run();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                return null;
+            }
+        });
+
+        Assert.assertTrue("Client successfully connected and authenticated to server",
+                appClient.isTestOK());
+    }
+
+    protected abstract AppClient createAppClient() throws Exception;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java
new file mode 100644
index 0000000..0a045eb
--- /dev/null
+++ b/kerby-kerb/integration-test/src/test/java/org/apache/kerby/kerberos/kerb/integration/test/GssAppTest.java
@@ -0,0 +1,50 @@
+/**
+ *  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. 
+ *  
+ */
+package org.apache.kerby.kerberos.kerb.integration.test;
+
+import org.apache.kerby.kerberos.kerb.integration.test.gss.GssAppClient;
+import org.apache.kerby.kerberos.kerb.integration.test.gss.GssAppServer;
+import org.junit.Test;
+
+public class GssAppTest extends AppTest {
+
+    @Override
+    protected AppServer createAppServer() throws Exception {
+        return new GssAppServer(new String[] {
+            String.valueOf(getServerPort()),
+            getServerPrincipal()
+        });
+    }
+
+    @Override
+    protected AppClient createAppClient() throws Exception {
+        return new GssAppClient(new String[] {
+            getHostname(),
+            String.valueOf(getServerPort()),
+                getClientPrincipal(),
+                getServerPrincipal()
+        });
+    }
+
+    @Test
+    public void test() throws Exception {
+        runAppClient();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
index 03298c1..5990b1d 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/GssInteropTest.java
@@ -19,19 +19,12 @@
  */
 package org.apache.kerby.kerberos.kerb.server;
 
-import org.apache.kerby.kerberos.kerb.client.JaasKrbUtil;
 import org.ietf.jgss.*;
 import org.junit.Assert;
 import org.junit.Test;
 
 import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.security.auth.kerberos.KerberosTicket;
-import java.io.File;
-import java.io.IOException;
 import java.security.Principal;
 import java.security.PrivilegedExceptionAction;
 import java.util.Set;
@@ -44,7 +37,6 @@ public class GssInteropTest extends LoginTestBase {
     @Test
     public void testGss() throws Exception {
         Subject clientSubject = loginClientUsingTicketCache();
-
         Set<Principal> clientPrincipals = clientSubject.getPrincipals();
         Assert.assertFalse(clientPrincipals.isEmpty());
 

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/7cbd366e/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
index cd67926..7c2f564 100644
--- a/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
+++ b/kerby-kerb/kerb-kdc-test/src/test/java/org/apache/kerby/kerberos/kerb/server/LoginTestBase.java
@@ -20,7 +20,6 @@
 package org.apache.kerby.kerberos.kerb.server;
 
 import org.apache.kerby.kerberos.kerb.client.JaasKrbUtil;
-import org.apache.kerby.kerberos.kerb.server.KdcTestBase;
 import org.apache.kerby.kerberos.kerb.spec.ticket.TgtTicket;
 import org.junit.After;
 import org.junit.Before;