package org.springside.modules.utils.misc; import static org.assertj.core.api.Assertions.*; import org.junit.Test; import org.springside.modules.utils.concurrent.throttle.Sampler; import org.springside.modules.utils.concurrent.throttle.Sampler.AlwaysSampler; import org.springside.modules.utils.concurrent.throttle.Sampler.NeverSampler; public class SamplerTest { @Test public void test() { Sampler sampler = Sampler.create(10.5); int hits = 0; for (int i = 0; i < 10000; i++) { if (sampler.select()) { hits++; } } System.out.println("sample 10.5% in 10000 hits should close to 1050, actual is " + hits); assertThat(hits).isBetween(900, 1200); ////////// Sampler sampler2 = Sampler.create(0.5); hits = 0; for (int i = 0; i < 10000; i++) { if (sampler2.select()) { hits++; } } System.out.println("sample 0.5% in 10000 hits should close to 50, actual is " + hits); assertThat(hits).isBetween(20, 100); } @Test public void always() { Sampler sampler = Sampler.create(0d); assertThat(sampler).isInstanceOf(NeverSampler.class); sampler = Sampler.create(100d); assertThat(sampler).isInstanceOf(AlwaysSampler.class); try { sampler = Sampler.create(101d); fail("shoud fail before"); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class); } try { sampler = Sampler.create(-2.2); fail("shoud fail before"); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class); } } }