15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Aleksander V. Budniy
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 4.08.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.MultiSession;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestOptions;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP Unit test for verifying canceling of BREAKPOINT event after re-connection.
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class BreakpointTest extends JDWPSyncTestCase {
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private String DEBUGGEE_SIGNATURE = "Lorg/apache/harmony/jpda/tests/jdwp/MultiSession/MultiSessionDebuggee;";
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private String METHOD_NAME = "printWord";
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
46e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    @Override
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected String getDebuggeeClassName() {
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee";
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This testcase verifies canceling of BREAKPOINT event after re-connection.
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>It runs MultiSessionDebuggee, sets request for BREAKPOINT event
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and re-connects.
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <BR>It is expected that no any events, including BREAKPOINT, occur after re-connection
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * and before MultiSessionDebuggee finish.
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void testClearBreakpoint001() {
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("==> testClearBreakpoint001 started..");
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        long classID = debuggeeWrapper.vmMirror.getClassID(DEBUGGEE_SIGNATURE);
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        //long requestID =
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            debuggeeWrapper.vmMirror.setBreakpointAtMethodBegin(
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                classID, METHOD_NAME);
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("");
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> CLOSE CONNECTION");
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        closeConnection();
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> CONNECTION CLOSED");
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("");
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> OPEN NEW CONNECTION");
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        openConnection();
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> CONNECTION OPENED");
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        //resuming debuggee
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        //      receive event
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("=> Wait for event..");
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        CommandPacket event = null;
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        try {
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            event = debuggeeWrapper.vmMirror.receiveEvent();
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } catch (TestErrorException thrown) {
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("=> Exception while receiving event:" + thrown);
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (event == null) {
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("=> It's expected result, nothing was caught");
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("=> Resuming debuggee");
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            //resuming debuggee
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> testMethodEvent001 PASSED! ");
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else {
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("##FAILURE: Event was received");
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            try {
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                ParsedEvent[] parsedEvents = ParsedEvent
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .parseEventPacket(event);
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter.println("=> Number of events = "
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        + parsedEvents.length);
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                for (int i = 0; i < parsedEvents.length; i++) {
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    logWriter.println("=> EventKind() = "
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + parsedEvents[0].getEventKind()
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + " ("
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + JDWPConstants.EventKind.getName(parsedEvents[0]
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                    .getEventKind()) + ")");
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    logWriter.println("=> EventRequestID() = "
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + parsedEvents[0].getRequestID());
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                }
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            } catch (Throwable thrown) {
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                logWriter
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .println("##FAILURE: Exception while analyzing received event:"
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                + thrown);
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                fail("Exception while analyzing received event: "+ thrown);
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            logWriter.println("==> testClearBreakpoint001 PASSED");
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
131e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    @Override
132dc011649298aefaae12c8cda3c0efe282b2383e1Roland Levillain    protected void beforeConnectionSetUp() {
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        settings.setAttachConnectorKind();
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (settings.getTransportAddress() == null) {
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        logWriter.println("ATTACH connector kind");
138dc011649298aefaae12c8cda3c0efe282b2383e1Roland Levillain        super.beforeConnectionSetUp();
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
141