2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson/*
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * CDDL HEADER START
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * The contents of this file are subject to the terms of the
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * Common Development and Distribution License, Version 1.0 only
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * (the "License"). You may not use this file except in compliance
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * with the License.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * or http://forgerock.org/license/CDDLv1.0.html.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * See the License for the specific language governing permissions
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * and limitations under the License.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * When distributing Covered Code, include this CDDL HEADER in each
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * file and include the License file at legal-notices/CDDLv1_0.txt.
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * If applicable, add the following below this CDDL HEADER, with the
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * fields enclosed by brackets "[]" replaced with your own identifying
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * information:
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * Portions Copyright [yyyy] [name of copyright owner]
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * CDDL HEADER END
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
05b42f00b813c3dc70cbb80d62089f9cc0f6f549ludovicp * Copyright 2008 Sun Microsystems, Inc.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson */
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonpackage org.opends.server.tasks;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport java.net.Socket;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.testng.annotations.Test;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.testng.annotations.BeforeClass;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.opends.server.TestCaseUtils;
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suterimport org.opends.messages.Message;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.opends.server.backends.task.Task;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.opends.server.backends.task.TaskState;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.opends.server.extensions.GetConnectionIDExtendedOperation;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.opends.server.protocols.ldap.*;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport org.opends.server.types.DN;
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swiftimport org.opends.server.types.ByteString;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport static org.testng.Assert.*;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonimport static org.opends.server.util.ServerConstants.*;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson/**
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * Tests the disconnect client task.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson */
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilsonpublic class DisconnectClientTaskTestCase
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson extends TasksTestCase
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson{
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson /**
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * Make sure that the Directory Server is running.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * @throws Exception If an unexpected problem occurs.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson */
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson @BeforeClass()
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson public void startServer()
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson throws Exception
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson {
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson TestCaseUtils.startServer();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson }
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson /**
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * Tests the ability of the server to disconnect an arbitrary client
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * connection with a notice of disconnection.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * @throws Exception If an unexpected problem occurs.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson */
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson @Test()
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson public void testDisconnectWithNotification()
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson throws Exception
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson {
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // Establish a connection to the server, bind, and get the connection ID.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson Socket s = new Socket("127.0.0.1", TestCaseUtils.getServerLdapPort());
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift org.opends.server.tools.LDAPReader r =
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift new org.opends.server.tools.LDAPReader(s);
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift org.opends.server.tools.LDAPWriter w =
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift new org.opends.server.tools.LDAPWriter(s);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson BindRequestProtocolOp bindRequest =
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift 3, ByteString.valueOf("password"));
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson LDAPMessage message = new LDAPMessage(1, bindRequest);
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift w.writeMessage(message);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift message = r.readMessage();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson BindResponseProtocolOp bindResponse = message.getBindResponseProtocolOp();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(bindResponse.getResultCode(), LDAPResultCode.SUCCESS);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson ExtendedRequestProtocolOp extendedRequest =
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson new ExtendedRequestProtocolOp(OID_GET_CONNECTION_ID_EXTOP);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson message = new LDAPMessage(2, extendedRequest);
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift w.writeMessage(message);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift message = r.readMessage();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson ExtendedResponseProtocolOp extendedResponse =
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson message.getExtendedResponseProtocolOp();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(extendedResponse.getResultCode(), LDAPResultCode.SUCCESS);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(extendedResponse.getOID(), OID_GET_CONNECTION_ID_EXTOP);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson long connectionID = GetConnectionIDExtendedOperation.decodeResponseValue(
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson extendedResponse.getValue());
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // Invoke the disconnect client task.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson String taskID = "Disconnect Client " + connectionID;
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter Message disconnectMessage = Message.raw("testDisconnectWithNotification");
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson DN taskDN = DN.decode("ds-task-id=" + taskID +
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson ",cn=Scheduled Tasks,cn=Tasks");
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson TestCaseUtils.addEntry(
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "dn: " + taskDN.toString(),
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "objectClass: top",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "objectClass: ds-task",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "objectClass: ds-task-disconnect",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-id: " + taskID,
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-class-name: org.opends.server.tasks.DisconnectClientTask",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-disconnect-connection-id: " + connectionID,
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-disconnect-notify-client: true",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-disconnect-message: " + disconnectMessage);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson Task task = getCompletedTask(taskDN);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertNotNull(task);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(task.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // Make sure that we get a notice of disconnection on the initial
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // connection.
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift message = r.readMessage();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson extendedResponse = message.getExtendedResponseProtocolOp();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(extendedResponse.getOID(),
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson LDAPConstants.OID_NOTICE_OF_DISCONNECTION);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(extendedResponse.getErrorMessage(), disconnectMessage);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson try
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson {
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson s.close();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson } catch (Exception e) {}
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson }
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson /**
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * Tests the ability of the server to disconnect an arbitrary client
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * connection without a notice of disconnection.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson *
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson * @throws Exception If an unexpected problem occurs.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson */
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson @Test()
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson public void testDisconnectWithoutNotification()
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson throws Exception
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson {
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // Establish a connection to the server, bind, and get the connection ID.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson Socket s = new Socket("127.0.0.1", TestCaseUtils.getServerLdapPort());
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift org.opends.server.tools.LDAPReader r =
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift new org.opends.server.tools.LDAPReader(s);
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift org.opends.server.tools.LDAPWriter w =
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift new org.opends.server.tools.LDAPWriter(s);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson BindRequestProtocolOp bindRequest =
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift 3, ByteString.valueOf("password"));
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson LDAPMessage message = new LDAPMessage(1, bindRequest);
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift w.writeMessage(message);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift message = r.readMessage();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson BindResponseProtocolOp bindResponse = message.getBindResponseProtocolOp();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(bindResponse.getResultCode(), LDAPResultCode.SUCCESS);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson ExtendedRequestProtocolOp extendedRequest =
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson new ExtendedRequestProtocolOp(OID_GET_CONNECTION_ID_EXTOP);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson message = new LDAPMessage(2, extendedRequest);
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift w.writeMessage(message);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift message = r.readMessage();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson ExtendedResponseProtocolOp extendedResponse =
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson message.getExtendedResponseProtocolOp();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(extendedResponse.getResultCode(), LDAPResultCode.SUCCESS);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(extendedResponse.getOID(), OID_GET_CONNECTION_ID_EXTOP);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson long connectionID = GetConnectionIDExtendedOperation.decodeResponseValue(
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson extendedResponse.getValue());
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // Invoke the disconnect client task.
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson String taskID = "Disconnect Client " + connectionID;
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson DN taskDN = DN.decode("ds-task-id=" + taskID +
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson ",cn=Scheduled Tasks,cn=Tasks");
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson TestCaseUtils.addEntry(
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "dn: " + taskDN.toString(),
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "objectClass: top",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "objectClass: ds-task",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "objectClass: ds-task-disconnect",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-id: " + taskID,
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-class-name: org.opends.server.tasks.DisconnectClientTask",
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-disconnect-connection-id: " + connectionID,
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson "ds-task-disconnect-notify-client: false");
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson Task task = getCompletedTask(taskDN);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertNotNull(task);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson assertEquals(task.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // Make sure that the client connection has been closed with no notice of
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson // disconnection.
7185b49f58c4cdb16d035ecc45e38ec9b1cd9bd0matthew_swift assertNull(r.readMessage());
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson try
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson {
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson s.close();
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson } catch (Exception e) {}
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson }
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson}
2e3f393aba5a1ea9785f544721879d0a6c8eddcfneil_a_wilson