package org.deviceconnect.android.deviceplugin.webrtc; import android.support.test.runner.AndroidJUnit4; import org.deviceconnect.android.deviceplugin.webrtc.util.MixedReplaceMediaClient; import org.deviceconnect.android.deviceplugin.webrtc.util.MixedReplaceMediaServer; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(AndroidJUnit4.class) public class MixedReplaceMediaClientTest { @Before public void setUp() { } @After public void tearDown() { } @Test public void MixedReplaceMediaClient() { final String text = "This is a test 1."; final CountDownLatch latch = new CountDownLatch(1); final MixedReplaceMediaServer server = new MixedReplaceMediaServer(); server.start(); final AtomicReference<String> result = new AtomicReference<>(); String uri = server.getUrl("remote"); MixedReplaceMediaClient client = new MixedReplaceMediaClient(uri); client.setOnMixedReplaceMediaListener(new MixedReplaceMediaClient.OnMixedReplaceMediaListener() { @Override public void onConnected() { } @Override public void onReceivedData(final InputStream in) { try { ByteArrayOutputStream out = new ByteArrayOutputStream(); int len; byte[] buf = new byte[1024]; while ((len = in.read(buf)) != -1) { out.write(buf, 0, len); } result.set(new String(out.toByteArray())); latch.countDown(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onError(final MixedReplaceMediaClient.MixedReplaceMediaError error) { } }); client.start(); Executors.newSingleThreadScheduledExecutor().schedule(new Runnable() { @Override public void run() { server.offerMedia("remote", text.getBytes()); server.offerMedia("remote", text.getBytes()); } }, 1, TimeUnit.SECONDS); try { latch.await(20, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } assertThat(result.get(), is(text)); server.stop(); client.stop(); } }