Revision: 16652
Author: oleg.kulikoff
Date: Fri Jan 21 00:39:06 2011
Log: Issue 2208 : Added missrate test
http://code.google.com/p/mobicents/source/detail?r=16652

Added:
/trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/MissrateTest.java
Modified:
/trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/NetworkChannel.java /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/PeriodicTask.java

=======================================
--- /dev/null
+++ /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/MissrateTest.java Fri Jan 21 00:39:06 2011
@@ -0,0 +1,90 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.mobicents.media.server.scheduler;
+
+import java.util.Random;
+import java.io.IOException;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author kulikov
+ */
+public class MissrateTest {
+
+    private final static int N = 1000;
+
+    private Clock clock = new DefaultClock();
+    private Scheduler scheduler;
+
+    private NetworkChannel networkChannel;
+    private PeriodicTask[] taskset;
+
+    private Random random = new Random(1000);
+
+    public MissrateTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+    }
+
+    @Before
+    public void setUp() throws IOException {
+        scheduler = new Scheduler(3);
+
+        scheduler.setClock(clock);
+
+        networkChannel = new NetworkChannel();
+        scheduler.register(networkChannel);
+
+        scheduler.start();
+    }
+
+    @After
+    public void tearDown() {
+        if (networkChannel != null) {
+            networkChannel.close();
+        }
+        scheduler.stop();
+    }
+
+    /**
+     * Test of setClock method, of class Scheduler.
+     */
+    @Test
+    public void testSingleIO() throws InterruptedException {
+        long period = 20000000L;
+        long tolerance = 3000000L;
+
+        taskset = new PeriodicTask[N];
+        for (int i = 0; i < taskset.length; i++) {
+            taskset[i] = new PeriodicTask(scheduler, 0, period);
+            taskset[i].setTolerance(tolerance);
+ taskset[i].setDeadLine(clock.getTime() + period + random.nextInt() * 1000000);
+            scheduler.submit(taskset[i]);
+        }
+
+        Thread.sleep(10000);
+
+        scheduler.stop();
+
+        for (int i = 0; i < taskset.length; i++) {
+ System.out.println("missrate=" + taskset[i].getMissRate() + " total passes=" + taskset[i].getCount() + + " dev=" + taskset[i].maxDeviation() + " ratio=" + ((taskset[i].getCount() - taskset[i].getMissRate())/(double)taskset[i].getCount()));
+        }
+    }
+
+}
=======================================
--- /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/NetworkChannel.java Thu Jan 20 23:08:59 2011 +++ /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/NetworkChannel.java Fri Jan 21 00:39:06 2011
@@ -28,10 +28,14 @@

     private final static long period = 20000000L;
     private volatile long next;
-    private long maxJitter;

     private long count = 0;

+    private int missrate;
+    private long tolerance;
+
+    private long maxJitter;
+
     public NetworkChannel() throws IOException {
         provider = SelectorProvider.provider();
         selector = provider.openSelector();
@@ -62,13 +66,21 @@
         } catch (IOException e) {
         }

+        //simulates send operation
         if (timestamp >= next) {
-// System.out.println(String.format("%d (%s) r/w", timestamp, Thread.currentThread().getName()));
+            //plan next "send"
             next += period;
+
+            //calculate current drift
             long j = Math.abs(timestamp - next);
+
+            //update max jitter if drift exeedes max jitter registered
             if (this.maxJitter < j) this.maxJitter = j;

-            return Math.abs(timestamp - next);
+            //if max jitter exeededs its limit increment missrate countor
+            if (this.maxJitter > tolerance) missrate++;
+
+            return 0;
         }

         return 0;
@@ -81,6 +93,14 @@
     public long getCount() {
         return count;
     }
+
+    public void setTolerance(long tolerance) {
+        this.tolerance = tolerance;
+    }
+
+    public int getMissRate() {
+        return missrate;
+    }

     public void close() {
         try {
=======================================
--- /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/PeriodicTask.java Thu Jan 20 23:08:59 2011 +++ /trunk/servers/media/scheduler/src/test/java/org/mobicents/media/server/scheduler/PeriodicTask.java Fri Jan 21 00:39:06 2011
@@ -23,6 +23,9 @@
     private boolean first = true;
     private long lastTime;

+    private int missrate;
+    private long tolerance;
+
     public PeriodicTask(Scheduler scheduler, long priority, long period) {
         this.scheduler = scheduler;
         this.priority = priority;
@@ -66,6 +69,12 @@
             if (dev > deviation) {
                 this.deviation = dev;
             }
+
+            //increment missrate countor if deviation exeedes limit
+            if (dev > tolerance) {
+                missrate++;
+            }
+
             lastTime = scheduler.getClock().getTime();
         }

@@ -92,4 +101,13 @@
         return this.deviation;
     }

-}
+    public void setTolerance(long tolerance) {
+        this.tolerance = tolerance;
+    }
+
+    public int getMissRate() {
+        return missrate;
+    }
+
+
+}

Reply via email to