This information applies to the following test:

com/sun/jini/test/spec/lookupservice/test_set00/NotifyOnAttrAdd.td
Test Failed: Test Failed: com.sun.jini.qa.harness.TestException: # of Events Received (31) != # of Events Expected (50)

From the test documentation:

/** 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
    *  each of the attribute classes and creates one set of initialized
    *  instances (non-null fields) of the loaded attributes. Loads and
    *  instantiates all service classes. Registers each service class
    *  instance with the maximum service lease duration. 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 handback containing the
    *  service ID .
    */
public void setup(QAConfig sysConfig) throws Exception {

/** Executes the current QA test.
    *
    *  For each service instance created during setup, chooses one of the
    *  attributes (random, round-robin, it doesn't matter) and adds
    *  that attribute to the current service item. Waits a configured
    *  amount of time to allow for 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_MATCH). 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 void run() throws Exception {

The test doesn't use Reggie, it uses the QATestRegistrar.

The test registrar doesn't appear to be designed for multithreading, this test has never passed using the new DynamicPolicyProvider or ConcurrentPolicyFile policy implementations.

This just seems to be about making sure events arrive in order. I'm not even sure where to start with this.

Any thoughts or advice?

This is the state of the vm after the test is set up, but before the events are fired:

main[1] where all
Signal Dispatcher:
Finalizer:
 [1] java.lang.Object.wait (native method)
 [2] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:118)
 [3] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:134)
 [4] java.lang.ref.Finalizer$FinalizerThread.run (Finalizer.java:159)
Reference Handler:
 [1] java.lang.Object.wait (native method)
 [2] java.lang.Object.wait (Object.java:485)
 [3] java.lang.ref.Reference$ReferenceHandler.run (Reference.java:116)
main:
[1] com.sun.jini.test.spec.lookupservice.test_set00.NotifyOnAttrAdd.run (NotifyOnAttrAdd.java:160)
 [2] com.sun.jini.qa.harness.MasterTest.doTest (MasterTest.java:252)
 [3] com.sun.jini.qa.harness.MasterTest.main (MasterTest.java:142)
no heart without soul:
 [1] java.lang.Thread.sleep (native method)
[2] com.sun.jini.qa.harness.HeartOfTheMachine.ticktack (HeartOfTheMachine.java:63) [3] com.sun.jini.qa.harness.HeartOfTheMachine.access$000 (HeartOfTheMachine.java:29) [4] com.sun.jini.qa.harness.HeartOfTheMachine$1.run (HeartOfTheMachine.java:45)
 [5] java.lang.Thread.run (Thread.java:662)
Thread-2:
 [1] java.net.PlainSocketImpl.socketAccept (native method)
 [2] java.net.PlainSocketImpl.accept (PlainSocketImpl.java:408)
 [3] java.net.ServerSocket.implAccept (ServerSocket.java:462)
 [4] java.net.ServerSocket.accept (ServerSocket.java:430)
 [5] com.sun.jini.tool.ClassServer.run (ClassServer.java:396)
Thread-3:
 [1] java.net.PlainSocketImpl.socketAccept (native method)
 [2] java.net.PlainSocketImpl.accept (PlainSocketImpl.java:408)
 [3] java.net.ServerSocket.implAccept (ServerSocket.java:462)
 [4] java.net.ServerSocket.accept (ServerSocket.java:430)
 [5] com.sun.jini.tool.ClassServer.run (ClassServer.java:396)
Thread-4:
 [1] java.net.PlainSocketImpl.socketAccept (native method)
 [2] java.net.PlainSocketImpl.accept (PlainSocketImpl.java:408)
 [3] java.net.ServerSocket.implAccept (ServerSocket.java:462)
 [4] java.net.ServerSocket.accept (ServerSocket.java:430)
 [5] com.sun.jini.tool.ClassServer.run (ClassServer.java:396)
process reaper:
 [1] java.lang.UNIXProcess.waitForProcessExit (native method)
 [2] java.lang.UNIXProcess.access$900 (UNIXProcess.java:17)
 [3] java.lang.UNIXProcess$2$1.run (UNIXProcess.java:86)
NonActivatableGroup_system-out:
 [1] java.io.FileInputStream.readBytes (native method)
 [2] java.io.FileInputStream.read (FileInputStream.java:220)
[3] java.lang.UNIXProcess$DeferredCloseInputStream.read (UNIXProcess.java:227)
 [4] java.io.BufferedInputStream.fill (BufferedInputStream.java:218)
 [5] java.io.BufferedInputStream.read1 (BufferedInputStream.java:258)
 [6] java.io.BufferedInputStream.read (BufferedInputStream.java:317)
 [7] java.io.FilterInputStream.read (FilterInputStream.java:90)
 [8] com.sun.jini.qa.harness.Pipe.run (Pipe.java:119)
 [9] java.lang.Thread.run (Thread.java:662)
RMI RenewClean-[10.1.1.2:35707]:
 [1] java.lang.Object.wait (native method)
 [2] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:118)
[3] sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run (DGCClient.java:516)
 [4] java.lang.Thread.run (Thread.java:662)
GC Daemon:
 [1] java.lang.Object.wait (native method)
 [2] sun.misc.GC$Daemon.run (GC.java:100)
RMI Scheduler(0):
 [1] sun.misc.Unsafe.park (native method)
 [2] java.util.concurrent.locks.LockSupport.park (LockSupport.java:158)
[3] java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await (AbstractQueuedSynchronizer.java:1,987)
 [4] java.util.concurrent.DelayQueue.take (DelayQueue.java:160)
[5] java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:609) [6] java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:602) [7] java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:947) [8] java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:907)
 [9] java.lang.Thread.run (Thread.java:662)
(JSK) ConnectionManager.Reaper:
 [1] java.lang.Thread.sleep (native method)
[2] net.jini.jeri.connection.ConnectionManager$Reaper.run (ConnectionManager.java:597)
 [3] com.sun.jini.thread.ThreadPool$Worker.run (ThreadPool.java:140)
 [4] java.lang.Thread.run (Thread.java:662)
(JSK) mux writer:
 [1] java.lang.Object.wait (native method)
 [2] java.lang.Object.wait (Object.java:485)
[3] com.sun.jini.jeri.internal.mux.StreamConnectionIO$Writer.run (StreamConnectionIO.java:168)
 [4] com.sun.jini.thread.ThreadPool$Worker.run (ThreadPool.java:140)
 [5] java.lang.Thread.run (Thread.java:662)
(JSK) mux reader:
 [1] java.net.SocketInputStream.socketRead0 (native method)
 [2] java.net.SocketInputStream.read (SocketInputStream.java:129)
[3] com.sun.jini.jeri.internal.mux.StreamConnectionIO$1.read (StreamConnectionIO.java:355) [4] com.sun.jini.jeri.internal.mux.StreamConnectionIO$Reader.run (StreamConnectionIO.java:262)
 [5] com.sun.jini.thread.ThreadPool$Worker.run (ThreadPool.java:140)
 [6] java.lang.Thread.run (Thread.java:662)
(JSK) TcpServerEndpoint.LH[ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=35719]] accept loop:
 [1] java.net.PlainSocketImpl.socketAccept (native method)
 [2] java.net.PlainSocketImpl.accept (PlainSocketImpl.java:408)
 [3] java.net.ServerSocket.implAccept (ServerSocket.java:462)
 [4] java.net.ServerSocket.accept (ServerSocket.java:430)
[5] net.jini.jeri.tcp.TcpServerEndpoint$LH.executeAcceptLoop (TcpServerEndpoint.java:797) [6] net.jini.jeri.tcp.TcpServerEndpoint$LH.access$400 (TcpServerEndpoint.java:735) [7] net.jini.jeri.tcp.TcpServerEndpoint$LH$1.run (TcpServerEndpoint.java:767)
 [8] com.sun.jini.thread.ThreadPool$Worker.run (ThreadPool.java:140)
 [9] java.lang.Thread.run (Thread.java:662)
(JSK) Reaper:
 [1] java.lang.Object.wait (native method)
 [2] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:118)
 [3] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:134)
[4] com.sun.jini.jeri.internal.runtime.ImplRefManager$Reaper.run (ImplRefManager.java:426)
 [5] java.lang.Thread.run (Thread.java:662)
(JSK) KeepAlive:
 [1] java.lang.Thread.sleep (native method)
[2] com.sun.jini.jeri.internal.runtime.JvmLifeSupport$2.run (JvmLifeSupport.java:130)
 [3] java.lang.Thread.run (Thread.java:662)
main[1]

Reply via email to