Modified: river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/lookupservice/test_set00/NotifyOnSrvcLeaseExpiration.java URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/lookupservice/test_set00/NotifyOnSrvcLeaseExpiration.java?rev=1593493&r1=1593492&r2=1593493&view=diff ============================================================================== --- river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/lookupservice/test_set00/NotifyOnSrvcLeaseExpiration.java (original) +++ river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/spec/lookupservice/test_set00/NotifyOnSrvcLeaseExpiration.java Fri May 9 07:03:18 2014 @@ -1,205 +1,195 @@ -/* - * 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 com.sun.jini.test.spec.lookupservice.test_set00; -import com.sun.jini.qa.harness.QAConfig; -import com.sun.jini.qa.harness.Test; - -import java.util.logging.Level; -import com.sun.jini.qa.harness.TestException; - -import com.sun.jini.test.spec.lookupservice.QATestRegistrar; -import com.sun.jini.test.spec.lookupservice.QATestUtils; -import net.jini.core.lookup.ServiceRegistrar; -import net.jini.core.lookup.ServiceEvent; -import net.jini.core.lookup.ServiceItem; -import net.jini.core.lookup.ServiceRegistration; -import net.jini.core.lookup.ServiceID; -import net.jini.core.lookup.ServiceTemplate; -import net.jini.core.event.EventRegistration; -import net.jini.core.event.RemoteEvent; -import net.jini.core.event.RemoteEventListener; -import net.jini.core.lease.UnknownLeaseException; -import java.rmi.MarshalledObject; -import java.rmi.StubNotFoundException; -import java.rmi.RemoteException; -import java.rmi.NoSuchObjectException; -import java.util.Collections; -import java.util.Comparator; -import java.util.Vector; -import java.io.IOException; -import java.util.List; - -/** This class is used to verify that after using templates containing only - * a service ID to request notification of MATCH_MATCH|MATCH_NOMATCH events, - * upon the expiration of each service item's lease, the expected set of - * events will be generated by the lookup service. - * - * @see com.sun.jini.qa.harness.TestEnvironment - * @see com.sun.jini.test.spec.lookupservice.QATestRegistrar - * @see com.sun.jini.test.spec.lookupservice.QATestUtils - */ -public class NotifyOnSrvcLeaseExpiration extends QATestRegistrar { - - /** Class which handles all events sent by the lookup service */ - private class Listener extends BasicListener implements RemoteEventListener - { - public Listener() throws RemoteException { - super(); - } - - /** Method called remotely by lookup to handle the generated event. */ - public void notify(RemoteEvent ev) { - ServiceEvent srvcEvnt = (ServiceEvent)ev; - evntVec.add(srvcEvnt); - } - } - - public static class EventComparator implements Comparator { - public int compare(Object o1, Object o2) { - long seq1 = ((ServiceEvent) o1).getSequenceNumber(); - long seq2 = ((ServiceEvent) o2).getSequenceNumber(); - if (seq1 < seq2) - return -1; - if (seq1 > seq1) - return 1; - return 0; - } - public boolean equals(Object o) { - return o.getClass().equals(EventComparator.class); - } - } - - protected final List<ServiceEvent> evntVec = new Vector<ServiceEvent>(); - - private long srvcLeaseDurMS; - private ServiceItem[] srvcItems; - private ServiceRegistration[] srvcRegs; - private ServiceTemplate[] srvcIDTmpl; - private ServiceRegistrar proxy; - private int nInstances = 0; - private int nInstancesPerClass = 0; - - /* The event handler for the services registered by this class */ - private static RemoteEventListener listener; - - /* The transition expected to be returned for all services */ - private static int EXPECTED_TRANSITION - = ServiceRegistrar.TRANSITION_MATCH_NOMATCH; - - /** Performs actions necessary to prepare for execution of the - * current QA test. - * - * Creates the lookup service. Creates a single event handler to - * handle all events generated by any of the registered service items. - * Loads and instantiates all service classes. Registers each service - * class instance with a lease duration specified in the configuration - * properties file. Retrieves the proxy to the lookup Registrar. Creates - * an array of ServiceTemplates in which each element contains the - * service ID of one of the registered service items. For each registered - * service, registers an event notification request, with the maximum - * lease duration, based on the contents of the corresponding template - * and the appropriate transition mask; along with a callback containing - * the service ID. - */ - public synchronized Test construct(QAConfig sysConfig) throws Exception { - int i; - ServiceID curSrvcID; - EventRegistration[] evntRegs; - int regTransitions = ServiceRegistrar.TRANSITION_MATCH_MATCH - | ServiceRegistrar.TRANSITION_MATCH_NOMATCH; - super.construct(sysConfig); - - logger.log(Level.FINE, "in setup() method."); - - listener = new Listener(); - ((BasicListener) listener).export(); - nInstances = super.getNInstances(); - nInstancesPerClass = super.getNInstancesPerClass(); - srvcLeaseDurMS = 2*nInstances*QATestUtils.N_MS_PER_SEC; - srvcItems = super.createServiceItems(TEST_SRVC_CLASSES); - srvcRegs = super.registerAll(srvcLeaseDurMS); - proxy = super.getProxy(); - srvcIDTmpl = new ServiceTemplate[srvcRegs.length]; - evntRegs = new EventRegistration[srvcRegs.length]; - for (i=0;i<srvcRegs.length;i++) { - curSrvcID = srvcRegs[i].getServiceID(); - srvcIDTmpl[i] = new ServiceTemplate(curSrvcID,null,null); - EventRegistration er; - er = proxy.notify(srvcIDTmpl[i], regTransitions, listener, - new MarshalledObject(curSrvcID), - Long.MAX_VALUE); - evntRegs[i] = prepareEventRegistration(er); - } - return this; - } - - /** Executes the current QA test. - * - * Waits a configured amount of time designed to guarantee that all - * of the service leases have expired; and that allows all of the - * events to be generated and collected. Determines if all of the - * expected -- as well as no un-expected -- events have arrived. - * This test depends on the semantics of event-notification. That is, - * it uses the fact that if the events were generated for each service - * item in sequence (which they were), then the events will arrive - * in that same sequence. This means one can expect, when examining - * the event corresponding to index i, that the service ID returned - * in the ServiceEvent should correspond to the i_th service item - * registered. If it does not, then failure is declared. Thus, this - * test does the following: 1. Verifies that the number of expected - * events equals the number of events that have arrived. 2. Verifies - * that the transition returned in event[i] corresponds to the expected - * transition (MATCH_NOMATCH). 3. Verifies that the service ID returned - * in event[i] equals the service ID of the i_th service registered. - * 4. Verifies that the handback returned in the i_th event object - * equals the service ID of the i_th service. - */ - public synchronized void run() throws Exception { - logger.log(Level.FINE, "in run() method."); - - /* wait for the service leases to expire */ - try { - long waitTime = srvcLeaseDurMS + super.deltaTEvntNotify; - logger.log(Level.FINE, "Sleeping " + waitTime + " milliseconds " + - "for service leases to expire."); - QATestUtils.waitDeltaT(waitTime, this); - //Thread.sleep(waitTime); - } catch (InterruptedException e) { - } - - logger.log(Level.FINE, "Checking for the expect set of events."); - Collections.sort(evntVec, new EventComparator()); - QATestUtils.verifyEventVector(evntVec,srvcRegs.length, - EXPECTED_TRANSITION,srvcRegs); - } - - /** Performs cleanup actions necessary to achieve a graceful exit of - * the current QA test. - * - * Unexports the listener and then performs any remaining standard - * cleanup duties. - */ - public synchronized void tearDown() { - logger.log(Level.FINE, "in tearDown() method."); - try { - unexportListener(listener, true); - } finally { - super.tearDown(); - } - } -} +/* + * 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 com.sun.jini.test.spec.lookupservice.test_set00; +import com.sun.jini.qa.harness.QAConfig; +import com.sun.jini.qa.harness.Test; + +import java.util.logging.Level; +import com.sun.jini.qa.harness.TestException; + +import com.sun.jini.test.spec.lookupservice.QATestRegistrar; +import com.sun.jini.test.spec.lookupservice.QATestUtils; +import com.sun.jini.test.spec.lookupservice.RemoteEventComparator; +import net.jini.core.lookup.ServiceRegistrar; +import net.jini.core.lookup.ServiceEvent; +import net.jini.core.lookup.ServiceItem; +import net.jini.core.lookup.ServiceRegistration; +import net.jini.core.lookup.ServiceID; +import net.jini.core.lookup.ServiceTemplate; +import net.jini.core.event.EventRegistration; +import net.jini.core.event.RemoteEvent; +import net.jini.core.event.RemoteEventListener; +import net.jini.core.lease.UnknownLeaseException; +import java.rmi.MarshalledObject; +import java.rmi.StubNotFoundException; +import java.rmi.RemoteException; +import java.rmi.NoSuchObjectException; +import java.util.Collections; +import java.util.Comparator; +import java.util.Vector; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +/** This class is used to verify that after using templates containing only + * a service ID to request notification of MATCH_MATCH|MATCH_NOMATCH events, + * upon the expiration of each service item's lease, the expected set of + * events will be generated by the lookup service. + * + * @see com.sun.jini.qa.harness.TestEnvironment + * @see com.sun.jini.test.spec.lookupservice.QATestRegistrar + * @see com.sun.jini.test.spec.lookupservice.QATestUtils + */ +public class NotifyOnSrvcLeaseExpiration extends QATestRegistrar { + + /** Class which handles all events sent by the lookup service */ + private class Listener extends BasicListener implements RemoteEventListener + { + public Listener() throws RemoteException { + super(); + } + + /** Method called remotely by lookup to handle the generated event. */ + public void notify(RemoteEvent ev) { + ServiceEvent srvcEvnt = (ServiceEvent)ev; + synchronized (NotifyOnSrvcLeaseExpiration.this){ + evntVec.add(srvcEvnt); + } + } + } + + protected List<ServiceEvent> evntVec = new ArrayList<ServiceEvent>(50); + + private long srvcLeaseDurMS; + private ServiceItem[] srvcItems; + private ServiceRegistration[] srvcRegs; + private ServiceTemplate[] srvcIDTmpl; + private ServiceRegistrar proxy; + private int nInstances = 0; + private int nInstancesPerClass = 0; + + /* The event handler for the services registered by this class */ + private static RemoteEventListener listener; + + /* The transition expected to be returned for all services */ + private static int EXPECTED_TRANSITION + = ServiceRegistrar.TRANSITION_MATCH_NOMATCH; + + /** Performs actions necessary to prepare for execution of the + * current QA test. + * + * Creates the lookup service. Creates a single event handler to + * handle all events generated by any of the registered service items. + * Loads and instantiates all service classes. Registers each service + * class instance with a lease duration specified in the configuration + * properties file. Retrieves the proxy to the lookup Registrar. Creates + * an array of ServiceTemplates in which each element contains the + * service ID of one of the registered service items. For each registered + * service, registers an event notification request, with the maximum + * lease duration, based on the contents of the corresponding template + * and the appropriate transition mask; along with a callback containing + * the service ID. + */ + public synchronized Test construct(QAConfig sysConfig) throws Exception { + int i; + ServiceID curSrvcID; + EventRegistration[] evntRegs; + int regTransitions = ServiceRegistrar.TRANSITION_MATCH_MATCH + | ServiceRegistrar.TRANSITION_MATCH_NOMATCH; + super.construct(sysConfig); + + logger.log(Level.FINE, "in setup() method."); + + listener = new Listener(); + ((BasicListener) listener).export(); + nInstances = super.getNInstances(); + nInstancesPerClass = super.getNInstancesPerClass(); + srvcLeaseDurMS = 2*nInstances*QATestUtils.N_MS_PER_SEC; + srvcItems = super.createServiceItems(TEST_SRVC_CLASSES); + srvcRegs = super.registerAll(srvcLeaseDurMS); + proxy = super.getProxy(); + srvcIDTmpl = new ServiceTemplate[srvcRegs.length]; + evntRegs = new EventRegistration[srvcRegs.length]; + for (i=0;i<srvcRegs.length;i++) { + curSrvcID = srvcRegs[i].getServiceID(); + srvcIDTmpl[i] = new ServiceTemplate(curSrvcID,null,null); + EventRegistration er; + er = proxy.notify(srvcIDTmpl[i], regTransitions, listener, + new MarshalledObject(curSrvcID), + Long.MAX_VALUE); + evntRegs[i] = prepareEventRegistration(er); + } + return this; + } + + /** Executes the current QA test. + * + * Waits a configured amount of time designed to guarantee that all + * of the service leases have expired; and that allows all of the + * events to be generated and collected. Determines if all of the + * expected -- as well as no un-expected -- events have arrived. + * This test depends on the semantics of event-notification. That is, + * it uses the fact that if the events were generated for each service + * item in sequence (which they were), then the events will arrive + * in that same sequence. This means one can expect, when examining + * the event corresponding to index i, that the service ID returned + * in the ServiceEvent should correspond to the i_th service item + * registered. If it does not, then failure is declared. Thus, this + * test does the following: 1. Verifies that the number of expected + * events equals the number of events that have arrived. 2. Verifies + * that the transition returned in event[i] corresponds to the expected + * transition (MATCH_NOMATCH). 3. Verifies that the service ID returned + * in event[i] equals the service ID of the i_th service registered. + * 4. Verifies that the handback returned in the i_th event object + * equals the service ID of the i_th service. + */ + public synchronized void run() throws Exception { + logger.log(Level.FINE, "in run() method."); + + /* wait for the service leases to expire */ + try { + long waitTime = srvcLeaseDurMS + super.deltaTEvntNotify; + logger.log(Level.FINE, "Sleeping " + waitTime + " milliseconds " + + "for service leases to expire."); + QATestUtils.waitDeltaT(waitTime, this); + //Thread.sleep(waitTime); + } catch (InterruptedException e) { + } + + logger.log(Level.FINE, "Checking for the expect set of events."); + Collections.sort(evntVec, new RemoteEventComparator()); + QATestUtils.verifyEventVector(evntVec,srvcRegs.length, + EXPECTED_TRANSITION,srvcRegs); + } + + /** Performs cleanup actions necessary to achieve a graceful exit of + * the current QA test. + * + * Unexports the listener and then performs any remaining standard + * cleanup duties. + */ + public synchronized void tearDown() { + logger.log(Level.FINE, "in tearDown() method."); + try { + unexportListener(listener, true); + } finally { + super.tearDown(); + } + } +}
