jdk/test/javax/management/relation/RelationNotificationSeqNoTest.java
author xdono
Wed, 02 Jul 2008 12:55:45 -0700
changeset 715 f16baef3a20e
parent 527 a33264d48a84
child 5506 202f599c92aa
permissions -rw-r--r--
6719955: Update copyright year Summary: Update copyright year for files that have been modified in 2008 Reviewed-by: ohair, tbell
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
527
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     1
/*
715
f16baef3a20e 6719955: Update copyright year
xdono
parents: 527
diff changeset
     2
 * Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
527
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     4
 *
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     7
 * published by the Free Software Foundation.
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     8
 *
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    13
 * accompanied this code).
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    14
 *
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    18
 *
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    21
 * have any questions.
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    22
 */
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    23
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    24
/*
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    25
 * @test
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    26
 * @bug 6701459
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    27
 * @summary Test sequence numbers in RelationService notifications.
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    28
 * @author Eamonn McManus
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    29
 */
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    30
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    31
/*
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    32
 * Bug 6701459 is for a synchronization problem that is very unlikely to occur
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    33
 * in practice and it would be very hard to test it.  Instead we just check that
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    34
 * the fix has not introduced any obviously-wrong behavior in the sequence
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    35
 * numbers.
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    36
 */
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    37
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    38
import java.util.Arrays;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    39
import java.util.concurrent.ArrayBlockingQueue;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    40
import java.util.concurrent.BlockingQueue;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    41
import javax.management.JMX;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    42
import javax.management.MBeanServer;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    43
import javax.management.MBeanServerFactory;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    44
import javax.management.Notification;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    45
import javax.management.NotificationListener;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    46
import javax.management.ObjectName;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    47
import javax.management.relation.RelationServiceMBean;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    48
import javax.management.relation.Role;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    49
import javax.management.relation.RoleInfo;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    50
import javax.management.relation.RoleList;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    51
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    52
public class RelationNotificationSeqNoTest {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    53
    public static void main(String[] args) throws Exception {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    54
        MBeanServer mbs = MBeanServerFactory.newMBeanServer();
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    55
        ObjectName relSvcName = new ObjectName("a:type=relationService");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    56
        RelationServiceMBean relSvc =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    57
                JMX.newMBeanProxy(mbs, relSvcName, RelationServiceMBean.class);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    58
        mbs.createMBean("javax.management.relation.RelationService",
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    59
                        relSvcName,
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    60
                        new Object[] {Boolean.TRUE},
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    61
                        new String[] {"boolean"});
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    62
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    63
        final BlockingQueue<Notification> q =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    64
                new ArrayBlockingQueue<Notification>(100);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    65
        NotificationListener qListener = new NotificationListener() {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    66
            public void handleNotification(Notification notification,
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    67
                                           Object handback) {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    68
                q.add(notification);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    69
            }
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    70
        };
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    71
        mbs.addNotificationListener(relSvcName, qListener, null, null);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    72
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    73
        RoleInfo leftInfo =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    74
            new RoleInfo("left", "javax.management.timer.TimerMBean");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    75
        RoleInfo rightInfo =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    76
            new RoleInfo("right", "javax.management.timer.Timer");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    77
        relSvc.createRelationType("typeName", new RoleInfo[] {leftInfo, rightInfo});
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    78
        ObjectName timer1 = new ObjectName("a:type=timer,number=1");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    79
        ObjectName timer2 = new ObjectName("a:type=timer,number=2");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    80
        mbs.createMBean("javax.management.timer.Timer", timer1);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    81
        mbs.createMBean("javax.management.timer.Timer", timer2);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    82
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    83
        Role leftRole =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    84
            new Role("left", Arrays.asList(new ObjectName[] {timer1}));
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    85
        Role rightRole =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    86
            new Role("right", Arrays.asList(new ObjectName[] {timer2}));
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    87
        RoleList roles =
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    88
            new RoleList(Arrays.asList(new Role[] {leftRole, rightRole}));
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    89
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    90
        final int NREPEAT = 10;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    91
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    92
        for (int i = 0; i < NREPEAT; i++) {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    93
            relSvc.createRelation("relationName", "typeName", roles);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    94
            relSvc.removeRelation("relationName");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    95
        }
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    96
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    97
        Notification firstNotif = q.remove();
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    98
        long seqNo = firstNotif.getSequenceNumber();
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
    99
        for (int i = 0; i < NREPEAT * 2 - 1; i++) {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   100
            Notification n = q.remove();
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   101
            long nSeqNo = n.getSequenceNumber();
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   102
            if (nSeqNo != seqNo + 1) {
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   103
                throw new Exception(
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   104
                        "TEST FAILED: expected seqNo " + (seqNo + 1) + "; got " +
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   105
                        nSeqNo);
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   106
            }
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   107
            seqNo++;
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   108
        }
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   109
        System.out.println("TEST PASSED: got " + (NREPEAT * 2) + " notifications " +
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   110
                "with contiguous sequence numbers");
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   111
    }
a33264d48a84 6703552: Missing files from changeset for 6701459
emcmanus
parents:
diff changeset
   112
}