1 /*******************************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Alexandre Montplaisir - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.tracecompass
.tmf
.core
.tests
.signal
;
15 import static org
.junit
.Assert
.assertEquals
;
17 import java
.util
.ArrayList
;
18 import java
.util
.Collections
;
19 import java
.util
.List
;
21 import org
.eclipse
.tracecompass
.tmf
.core
.component
.TmfComponent
;
22 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfSignal
;
23 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfSignalHandler
;
24 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfSignalThrottler
;
25 import org
.junit
.After
;
26 import org
.junit
.Before
;
27 import org
.junit
.Test
;
30 * Test suite for {@link TmfSignalThrottler}
32 * @author Alexandre Montplaisir
34 public class TmfSignalThrottlerTest
{
36 private MySender sender
;
37 private MyListener listener
;
44 sender
= new MySender();
45 listener
= new MyListener();
52 public void tearDown() {
57 // ------------------------------------------------------------------------
59 // ------------------------------------------------------------------------
62 * Test using only one throttler. Only one signal should go through.
65 public void testOneChannel() {
66 final MySignal sig1
= new MySignal(sender
, 0);
67 final MySignal sig2
= new MySignal(sender
, 0);
68 final MySignal sig3
= new MySignal(sender
, 0);
71 sender
.sendSignal(sig1
);
72 sender
.sendSignal(sig2
);
73 sender
.sendSignal(sig3
);
78 assertEquals(1, listener
.nbReceived
[0]);
79 assertEquals(0, listener
.nbReceived
[1]);
80 assertEquals(0, listener
.nbReceived
[2]);
84 * Test using multiple throttlers in parrallel. Only one signal per
85 * throttler should go through.
88 public void testMultipleChannels() {
89 List
<MySignal
> signals
= new ArrayList
<>();
90 signals
.add(new MySignal(sender
, 0));
91 signals
.add(new MySignal(sender
, 0));
92 signals
.add(new MySignal(sender
, 0));
94 signals
.add(new MySignal(sender
, 1));
95 signals
.add(new MySignal(sender
, 1));
96 signals
.add(new MySignal(sender
, 1));
98 signals
.add(new MySignal(sender
, 2));
99 signals
.add(new MySignal(sender
, 2));
100 signals
.add(new MySignal(sender
, 2));
102 Collections
.shuffle(signals
); /* Every day */
105 for (MySignal sig
: signals
) {
106 sender
.sendSignal(sig
);
112 for (int nb
: listener
.nbReceived
) {
118 * Test with one throttler, sending signals slowly. All three signals should
122 public void testDelay() {
123 final MySignal sig1
= new MySignal(sender
, 0);
124 final MySignal sig2
= new MySignal(sender
, 0);
125 final MySignal sig3
= new MySignal(sender
, 0);
127 sender
.sendSignal(sig1
);
129 sender
.sendSignal(sig2
);
131 sender
.sendSignal(sig3
);
134 assertEquals(3, listener
.nbReceived
[0]);
137 // ------------------------------------------------------------------------
139 // ------------------------------------------------------------------------
141 private static void sleep(long millis
) {
143 Thread
.sleep(millis
);
144 } catch (InterruptedException e
) {
149 // ------------------------------------------------------------------------
151 // ------------------------------------------------------------------------
156 private class MySender
extends TmfComponent
{
158 private final TmfSignalThrottler
[] throttlers
;
162 throttlers
= new TmfSignalThrottler
[] {
163 new TmfSignalThrottler(this, 200),
164 new TmfSignalThrottler(this, 500),
165 new TmfSignalThrottler(this, 1000),
169 void sendSignal(MySignal signal
) {
170 throttlers
[signal
.getChannel()].queue(signal
);
174 public void dispose() {
176 for (TmfSignalThrottler elem
: throttlers
) {
185 public class MyListener
extends TmfComponent
{
187 int[] nbReceived
= { 0, 0, 0 };
190 * Constructor. Needs to be public so TmfSignalHandler can see it.
192 public MyListener() {
203 public void receiveSignal(final MySignal sig
) {
204 nbReceived
[sig
.getChannel()]++;
211 private class MySignal
extends TmfSignal
{
213 private final int channel
;
215 public MySignal(MySender source
, int channel
) {
217 this.channel
= channel
;
220 public int getChannel() {
This page took 0.040966 seconds and 5 git commands to generate.