1
/*******************************************************************************
2
* Copyright (c) 2013 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.linuxtools.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.linuxtools.tmf.core.component.TmfComponent;
22
import org.eclipse.linuxtools.tmf.core.signal.TmfSignal;
23
import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
24
import org.eclipse.linuxtools.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<MySignal>();
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() {