Deadlock tests: removing ulinks, adding one picture, rewording a bit, adding new examples
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:54:29 +0200
changeset 1055c7a65ed657a
parent 104 0ec9eb8bcd03
child 106 a773f1bc5ba1
Deadlock tests: removing ulinks, adding one picture, rewording a bit, adding new examples
samples/deadlock/src/org/apidesign/deadlock/LabelProviderSyncOnTreeLock.java
samples/deadlock/src/org/apidesign/deadlock/amoebashake/2000-06-01.txt
samples/deadlock/src/org/apidesign/deadlock/amoebashake/2000-06-26.txt
samples/deadlock/src/org/apidesign/deadlock/amoebashake/2004-01-28.txt
samples/deadlock/src/org/apidesign/deadlock/amoebashake/2004-01-29.txt
samples/deadlock/test/org/apidesign/deadlock/DeadlockSyncOnTest.java
samples/deadlock/test/org/apidesign/deadlock/DeadlockTest.java
samples/deadlock/test/org/apidesign/deadlock/LabelProviderTest.java
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/LabelProviderSyncOnTreeLock.java	Sat Jun 14 09:54:29 2008 +0200
     1.3 @@ -0,0 +1,26 @@
     1.4 +package org.apidesign.deadlock;
     1.5 +
     1.6 +import java.util.HashSet;
     1.7 +import java.util.logging.Level;
     1.8 +import java.util.logging.Logger;
     1.9 +import javax.swing.JLabel;
    1.10 +import javax.swing.JPanel;
    1.11 +
    1.12 +public class LabelProviderSyncOnTreeLock extends JPanel {
    1.13 +    private static Logger LOG = Logger.getLogger(LabelProviderSyncOnTreeLock.class.getName());
    1.14 +    
    1.15 +    // BEGIN: deadlock.provider.treelock
    1.16 +    private HashSet<JLabel> allCreated = new HashSet<JLabel>();
    1.17 +
    1.18 +    public JLabel createLabel () {
    1.19 +        synchronized (getTreeLock()) {
    1.20 +            LOG.log(Level.INFO, "Will create JLabel");
    1.21 +            JLabel l = new JLabel ();
    1.22 +            LOG.log(Level.INFO, "Label created {0}", l);
    1.23 +            allCreated.add (l);
    1.24 +            return l;
    1.25 +        }
    1.26 +    }
    1.27 +    // END: deadlock.provider.treelock
    1.28 +
    1.29 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2000-06-01.txt	Sat Jun 14 09:54:29 2008 +0200
     2.3 @@ -0,0 +1,10 @@
     2.4 +public final Node getNodeDelegate () {
     2.5 +    if (nodeDelegate == null) {
     2.6 +        synchronized (this) {
     2.7 +            if (nodeDelegate == null) {
     2.8 +                nodeDelegate = createNodeDelegate ();
     2.9 +            }
    2.10 +        }
    2.11 +    }
    2.12 +    return nodeDelegate;
    2.13 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2000-06-26.txt	Sat Jun 14 09:54:29 2008 +0200
     3.3 @@ -0,0 +1,12 @@
     3.4 +public final Node getNodeDelegate () {
     3.5 +    if (nodeDelegate == null) {
     3.6 +        Children.MUTEX.writeAccess (new Runnable () {
     3.7 +            public void run () {
     3.8 +                if (nodeDelegate == null) {
     3.9 +                    nodeDelegate = createNodeDelegate ();
    3.10 +                }
    3.11 +            }
    3.12 +        });
    3.13 +    }
    3.14 +    return nodeDelegate;
    3.15 +}	
    3.16 \ No newline at end of file
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2004-01-28.txt	Sat Jun 14 09:54:29 2008 +0200
     4.3 @@ -0,0 +1,18 @@
     4.4 +public final Node getNodeDelegate () {
     4.5 +    if (nodeDelegate == null) {
     4.6 +        Children.MUTEX.readAccess (new Runnable() {
     4.7 +            public void run() {
     4.8 +                synchronized(nodeCreationLock) {
     4.9 +                    if (nodeDelegate == null) {
    4.10 +                        nodeDelegate = createNodeDelegate();
    4.11 +                    }
    4.12 +                }
    4.13 +            }
    4.14 +        });
    4.15 +    
    4.16 +        if (nodeDelegate == null) {
    4.17 +            throw new IllegalStateException("DataObject " + this + " ...");
    4.18 +        }
    4.19 +    }
    4.20 +    return nodeDelegate;
    4.21 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2004-01-29.txt	Sat Jun 14 09:54:29 2008 +0200
     5.3 @@ -0,0 +1,11 @@
     5.4 +public final Node getNodeDelegate () {
     5.5 +    synchronized(nodeCreationLock) {
     5.6 +        if (nodeDelegate == null) {
     5.7 +            nodeDelegate = createNodeDelegate();
     5.8 +        }
     5.9 +    }
    5.10 +    if (nodeDelegate == null) {
    5.11 +        throw new IllegalStateException("DataObject " + this + " has null
    5.12 +    }
    5.13 +    return nodeDelegate;
    5.14 +}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/samples/deadlock/test/org/apidesign/deadlock/DeadlockSyncOnTest.java	Sat Jun 14 09:54:29 2008 +0200
     6.3 @@ -0,0 +1,66 @@
     6.4 +package org.apidesign.deadlock;
     6.5 +
     6.6 +import java.awt.Dimension;
     6.7 +import java.util.logging.Level;
     6.8 +import java.util.logging.Logger;
     6.9 +import javax.swing.JFrame;
    6.10 +import javax.swing.JLabel;
    6.11 +import javax.swing.JPanel;
    6.12 +import javax.swing.SwingUtilities;
    6.13 +import org.junit.Test;
    6.14 +import org.netbeans.junit.Log;
    6.15 +import org.netbeans.junit.NbTestCase;
    6.16 +import static org.junit.Assert.*;
    6.17 +
    6.18 +public class DeadlockSyncOnTest extends NbTestCase {
    6.19 +    static final Logger LOG = Logger.getLogger(DeadlockSyncOnTest.class.getName());
    6.20 +    
    6.21 +    public DeadlockSyncOnTest(String n) {
    6.22 +        super(n);
    6.23 +    }
    6.24 +
    6.25 +    @Override
    6.26 +    protected int timeOut() {
    6.27 +        return 10000;
    6.28 +    }
    6.29 +    
    6.30 +    
    6.31 +    public static class StrangePanel extends LabelProviderSyncOnTreeLock {
    6.32 +        @Override
    6.33 +        public Dimension getPreferredSize () {
    6.34 +            try {
    6.35 +                Thread.sleep(1000);
    6.36 +                JLabel sampleLabel = createLabel();
    6.37 +                return sampleLabel.getPreferredSize();
    6.38 +            } catch (InterruptedException ex) {
    6.39 +                Logger.getLogger(DeadlockSyncOnTest.class.getName()).log(Level.SEVERE, null, ex);
    6.40 +                return super.getPreferredSize();
    6.41 +            }
    6.42 +        }
    6.43 +    }
    6.44 +    
    6.45 +    
    6.46 +    
    6.47 +
    6.48 +    public void testCreateLabel() throws Exception {
    6.49 +        final LabelProviderSyncOnTreeLock instance = new StrangePanel();
    6.50 +        
    6.51 +        class R implements Runnable {
    6.52 +            public void run() {
    6.53 +                JFrame f = new JFrame();
    6.54 +                f.add(instance);
    6.55 +                f.setVisible(true);
    6.56 +                f.pack();
    6.57 +            }
    6.58 +        }
    6.59 +
    6.60 +        R showFrame = new R();
    6.61 +        SwingUtilities.invokeLater(showFrame);
    6.62 +        
    6.63 +        Thread.sleep(500);
    6.64 +        JLabel result = instance.createLabel();
    6.65 +        assertNotNull("Creates the result", result);
    6.66 +    }
    6.67 +
    6.68 +}
    6.69 +
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/samples/deadlock/test/org/apidesign/deadlock/DeadlockTest.java	Sat Jun 14 09:54:29 2008 +0200
     7.3 @@ -0,0 +1,68 @@
     7.4 +package org.apidesign.deadlock;
     7.5 +
     7.6 +import java.awt.Dimension;
     7.7 +import java.util.logging.Level;
     7.8 +import java.util.logging.Logger;
     7.9 +import javax.swing.JFrame;
    7.10 +import javax.swing.JLabel;
    7.11 +import javax.swing.JPanel;
    7.12 +import javax.swing.SwingUtilities;
    7.13 +import org.junit.Test;
    7.14 +import org.netbeans.junit.Log;
    7.15 +import org.netbeans.junit.NbTestCase;
    7.16 +import static org.junit.Assert.*;
    7.17 +
    7.18 +// BEGIN: deadlock.test
    7.19 +public class DeadlockTest extends NbTestCase {
    7.20 +    static final Logger LOG = Logger.getLogger(DeadlockTest.class.getName());
    7.21 +    
    7.22 +    public DeadlockTest(String n) {
    7.23 +        super(n);
    7.24 +    }
    7.25 +
    7.26 +    @Override
    7.27 +    protected int timeOut() {
    7.28 +        return 10000;
    7.29 +    }
    7.30 +    
    7.31 +    
    7.32 +    public static class StrangePanel extends LabelProvider {
    7.33 +        @Override
    7.34 +        public Dimension getPreferredSize () {
    7.35 +            try {
    7.36 +                Thread.sleep(1000);
    7.37 +                JLabel sampleLabel = createLabel();
    7.38 +                return sampleLabel.getPreferredSize();
    7.39 +            } catch (InterruptedException ex) {
    7.40 +                Logger.getLogger(DeadlockTest.class.getName()).log(Level.SEVERE, null, ex);
    7.41 +                return super.getPreferredSize();
    7.42 +            }
    7.43 +        }
    7.44 +    }
    7.45 +    
    7.46 +    
    7.47 +    
    7.48 +
    7.49 +    public void testCreateLabel() throws Exception {
    7.50 +        final LabelProvider instance = new StrangePanel();
    7.51 +        
    7.52 +        class R implements Runnable {
    7.53 +            public void run() {
    7.54 +                JFrame f = new JFrame();
    7.55 +                f.add(instance);
    7.56 +                f.setVisible(true);
    7.57 +                f.pack();
    7.58 +            }
    7.59 +        }
    7.60 +
    7.61 +        R showFrame = new R();
    7.62 +        SwingUtilities.invokeLater(showFrame);
    7.63 +        
    7.64 +        Thread.sleep(500);
    7.65 +        JLabel result = instance.createLabel();
    7.66 +        assertNotNull("Creates the result", result);
    7.67 +    }
    7.68 +
    7.69 +}
    7.70 +// END: deadlock.test
    7.71 +
     8.1 --- a/samples/deadlock/test/org/apidesign/deadlock/LabelProviderTest.java	Sat Jun 14 09:54:28 2008 +0200
     8.2 +++ b/samples/deadlock/test/org/apidesign/deadlock/LabelProviderTest.java	Sat Jun 14 09:54:29 2008 +0200
     8.3 @@ -11,6 +11,7 @@
     8.4  import org.netbeans.junit.NbTestCase;
     8.5  import static org.junit.Assert.*;
     8.6  
     8.7 +// BEGIN: deadlock.test.controlflow
     8.8  public class LabelProviderTest extends NbTestCase {
     8.9      static final Logger LOG = Logger.getLogger(LabelProviderTest.class.getName());
    8.10      
    8.11 @@ -68,4 +69,6 @@
    8.12          assertNotNull("Creates the result", result);
    8.13      }
    8.14  
    8.15 -}
    8.16 \ No newline at end of file
    8.17 +}
    8.18 +// END: deadlock.test.controlflow
    8.19 +