///** // * Copyright 2015 StreamSets Inc. // * // * Licensed under the Apache Software Foundation (ASF) under one // * or more contributor license agreements. See the NOTICE file // * distributed with this work for additional information // * regarding copyright ownership. The ASF licenses this file // * to you under the Apache License, Version 2.0 (the // * "License"); you may not use this file except in compliance // * with the License. You may obtain a copy of the License at // * // * http://www.apache.org/licenses/LICENSE-2.0 // * // * Unless required by applicable law or agreed to in writing, software // * distributed under the License is distributed on an "AS IS" BASIS, // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // * See the License for the specific language governing permissions and // * limitations under the License. // */ //package com.streamsets.pipeline; // //import static org.junit.Assert.assertEquals; //import static org.junit.Assert.assertNull; //import static org.junit.Assert.assertTrue; // //import java.util.Properties; //import java.util.concurrent.Executors; // //import org.junit.Assert; //import org.junit.Test; // //import com.google.common.util.concurrent.ListenableFuture; //import com.google.common.util.concurrent.ListeningExecutorService; //import com.google.common.util.concurrent.MoreExecutors; // //public class TestEmbeddedSDCPool { // // static class DummyEmbeddedSDCPool extends EmbeddedSDCPool { // public DummyEmbeddedSDCPool(Properties properties) throws Exception { // super(properties); // } // // @Override // protected EmbeddedSDC create() throws Exception { // return new EmbeddedSDC(); // } // } // // @Test(timeout = 60000) // public void testEmbeddedSDC() throws Exception { // Properties props = new Properties(); // props.setProperty("sdc.pool.size.infinite", "true"); // DummyEmbeddedSDCPool dummyEmbeddedSDCPool = new DummyEmbeddedSDCPool(props); // Assert.assertEquals(1, dummyEmbeddedSDCPool.getInstances().size()); // Assert.assertEquals(1, dummyEmbeddedSDCPool.size()); // // Now retrieve the created one // EmbeddedSDC embeddedSDC1 = dummyEmbeddedSDCPool.checkout(); // Assert.assertEquals(0, dummyEmbeddedSDCPool.size()); // Assert.assertEquals(1, dummyEmbeddedSDCPool.getInstances().size()); // // // This should create new SDC // EmbeddedSDC embeddedSDC2 = dummyEmbeddedSDCPool.checkout(); // Assert.assertEquals(0, dummyEmbeddedSDCPool.size()); // Assert.assertEquals(2, dummyEmbeddedSDCPool.getInstances().size()); // // // Return one back // dummyEmbeddedSDCPool.checkin(embeddedSDC1); // Assert.assertEquals(1, dummyEmbeddedSDCPool.size()); // // dummyEmbeddedSDCPool.checkin(embeddedSDC2); // Assert.assertEquals(2, dummyEmbeddedSDCPool.size()); // Assert.assertEquals(2, dummyEmbeddedSDCPool.getInstances().size()); // // // Return the same instance back again // dummyEmbeddedSDCPool.checkin(embeddedSDC1); // Assert.assertEquals(2, dummyEmbeddedSDCPool.size()); // } // // @Test(timeout = 90000) // public void testEmbeddedSDCTimeout() throws Exception { // Properties props = new Properties(); // DummyEmbeddedSDCPool dummyEmbeddedSDCPool = new DummyEmbeddedSDCPool(props); // Assert.assertEquals(1, dummyEmbeddedSDCPool.getInstances().size()); // Assert.assertEquals(1, dummyEmbeddedSDCPool.size()); // EmbeddedSDC embeddedSDC1 = dummyEmbeddedSDCPool.checkout(); // Assert.assertEquals(0, dummyEmbeddedSDCPool.size()); // // // Nothing in pool, so wait() should return null // assertNull(dummyEmbeddedSDCPool.waitForSDC(3000)); // ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(1)); // // WaitOnSDCRunnable th = new WaitOnSDCRunnable(dummyEmbeddedSDCPool); // ListenableFuture future = executorService.submit(th); // Thread.sleep(100); // // shouldn't be done yet // assertTrue(!future.isDone()); // assertNull(th.embeddedSDC); // // return back sdc to pool // dummyEmbeddedSDCPool.checkin(embeddedSDC1); // assertNull(future.get()); // assertEquals(embeddedSDC1, th.embeddedSDC); // } // // private class WaitOnSDCRunnable implements Runnable { // private EmbeddedSDCPool embeddedPool; // public EmbeddedSDC embeddedSDC; // // public WaitOnSDCRunnable(EmbeddedSDCPool embeddedPool) { // this.embeddedPool = embeddedPool; // } // // @Override // public void run() { // try { // doWaiting(); // } catch (Exception e) { // throw new RuntimeException("Failed wait", e); // } // } // // void doWaiting() throws Exception { // embeddedSDC = embeddedPool.checkout(); // } // } //}