@@ -0,0 +1,3462 @@
+/*%0A * Licensed to the Apache Software Foundation (ASF) under one or more%0A * contributor license agreements.  See the NOTICE file distributed with%0A * this work for additional information regarding copyright ownership.%0A * The ASF licenses this file to You under the Apache License, Version 2.0%0A * (the %22License%22); you may not use this file except in compliance with%0A * the License.  You may obtain a copy of the License at%0A *%0A *   http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A *%0A */%0A%0Apackage org.apache.jmeter.timers;%0A%0Aimport org.apache.jmeter.control.LoopController;%0Aimport org.apache.jmeter.threads.JMeterContextService;%0Aimport org.apache.jmeter.threads.JMeterThread;%0Aimport org.apache.jorphan.collections.ListedHashTree;%0Aimport org.junit.Assert;%0Aimport org.junit.Test;%0A%0Apublic class SyncTimerTest %7B%0A%0A    @Test%0A    public void testTimerWithScheduledEndpoint() %7B%0A        long schedulerDuration = 200L;%0A        setupScheduledThread(schedulerDuration);%0A        SyncTimer timer = new SyncTimer();%0A        timer.setGroupSize(2);%0A        timer.testStarted();%0A        long duration = timeDelay(timer);%0A        Assert.assertTrue(%0A                %22Calculating delay takes less then %22 + schedulerDuration * 2%0A                        + %22 ms (took: %22 + duration + %22 ms)%22,%0A                duration %3C schedulerDuration * 2);%0A    %7D%0A%0A    @Test%0A    public void testTimerWithLongerScheduledEndpointThanTimeoutForTimer() %7B%0A        long schedulerDuration = 2000L;%0A        long timerTimeout = 200L;%0A        setupScheduledThread(schedulerDuration);%0A        SyncTimer timer = new SyncTimer();%0A        timer.setGroupSize(2);%0A        timer.testStarted();%0A        timer.setTimeoutInMs(timerTimeout);%0A        long duration = timeDelay(timer);%0A        Assert.assertTrue(%0A                %22Calculating delay takes less then %22 + timerTimeout * 2%0A                        + %22 ms (took: %22 + duration + %22 ms)%22,%0A                duration %3C timerTimeout * 2);%0A    %7D%0A%0A    @Test%0A    public void testTimerWithShorterScheduledEndpointThanTimeoutForTimer() %7B%0A        long schedulerDuration = 200L;%0A        long timerTimeout = 2000L;%0A        setupScheduledThread(schedulerDuration);%0A        SyncTimer timer = new SyncTimer();%0A        timer.setGroupSize(2);%0A        timer.testStarted();%0A        timer.setTimeoutInMs(timerTimeout);%0A        long duration = timeDelay(timer);%0A        Assert.assertTrue(%0A                %22Calculating delay takes less then %22 + schedulerDuration * 2%0A                        + %22 ms (took: %22 + duration + %22 ms)%22,%0A                duration %3C schedulerDuration * 2);%0A    %7D%0A%0A    private long timeDelay(SyncTimer timer) %7B%0A        long start = System.currentTimeMillis();%0A        timer.delay();%0A        long duration = System.currentTimeMillis() - start;%0A        return duration;%0A    %7D%0A%0A    private void setupScheduledThread(long schedulerDuration) %7B%0A        ListedHashTree hashTree = new ListedHashTree();%0A        hashTree.add(new LoopController());%0A        JMeterThread thread = new JMeterThread(hashTree, null, null);%0A        JMeterContextService.getContext().setThread(thread);%0A        thread.setEndTime(System.currentTimeMillis() + schedulerDuration);%0A    %7D%0A%0A%7D%0A

Add a unit test that is hopefully compatible with our test runner