/** * JUnit. * * @throws Exception If failed. */ public void testIterator() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); for (int i = 0; i < 100; i++) assert queue.add(Integer.toString(i)); Iterator<String> iter1 = queue.iterator(); int cnt = 0; for (int i = 0; i < 100; i++) { assertNotNull(iter1.next()); cnt++; } assertEquals(100, queue.size()); assertEquals(100, cnt); assertNotNull(queue.take()); assertNotNull(queue.take()); assertTrue(queue.remove("33")); assertTrue(queue.remove("77")); assertEquals(96, queue.size()); Iterator<String> iter2 = queue.iterator(); try { iter2.remove(); } catch (IllegalStateException e) { info("Caught expected exception: " + e); } iter2.next(); iter2.remove(); cnt = 0; while (iter2.hasNext()) { assertNotNull(iter2.next()); cnt++; } assertEquals(95, cnt); assertEquals(95, queue.size()); iter2.remove(); }
/** * JUnit. * * @throws Exception If failed. */ public void testPutRemoveMultiThreadedUnbounded() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); final IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); multithreaded( new Callable<String>() { @Override public String call() throws Exception { String thread = Thread.currentThread().getName(); for (int i = 0; i < QUEUE_CAPACITY; i++) queue.put(thread); info("Finished loop 1: " + thread); queue.clear(); info("Cleared queue 1: " + thread); return ""; } }, THREAD_NUM); assert queue.isEmpty() : "Queue must be empty. " + queue.size(); }
/** * JUnit. * * @throws Exception If failed. */ public void testPutGetMultithreadUnbounded() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); final IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); multithreaded( new Callable<Void>() { @Override public Void call() throws Exception { String thName = Thread.currentThread().getName(); for (int i = 0; i < 5; i++) { queue.put(thName); queue.peek(); queue.take(); } return null; } }, THREAD_NUM); assert queue.isEmpty() : queue.size(); }
/** * JUnit. * * @throws Exception If failed. */ public void testPutGetUnbounded() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); String thName = Thread.currentThread().getName(); for (int i = 0; i < 5; i++) { queue.put(thName); queue.peek(); queue.take(); } assert queue.isEmpty() : queue.size(); }
/** * JUnit. * * @throws Exception If failed. */ public void testPutRemoveUnbounded() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); String thread = Thread.currentThread().getName(); for (int i = 0; i < QUEUE_CAPACITY; i++) queue.put(thread); info("Finished loop 1: " + thread); queue.clear(); info("Cleared queue 1: " + thread); assert queue.isEmpty() : "Queue must be empty. " + queue.size(); }
/** * JUnit. * * @throws Exception If failed. */ public void testQueueRemoveMultithreadBounded() throws Exception { // Random queue name. final String queueName = UUID.randomUUID().toString(); final IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); final CountDownLatch putLatch = new CountDownLatch(THREAD_NUM); final CountDownLatch clearLatch = new CountDownLatch(THREAD_NUM); for (int t = 0; t < THREAD_NUM; t++) { Thread th = new Thread( new Runnable() { @Override public void run() { if (log.isDebugEnabled()) log.debug("Thread has been started." + Thread.currentThread().getName()); try { // Thread must be blocked on put operation. for (int i = 0; i < (QUEUE_CAPACITY * THREAD_NUM); i++) queue.offer("anything", 3, TimeUnit.MINUTES); fail("Queue failed"); } catch (IgniteException | IllegalStateException e) { putLatch.countDown(); assert e.getMessage().contains("removed"); assert queue.removed(); } if (log.isDebugEnabled()) log.debug("Thread has been stopped." + Thread.currentThread().getName()); } }); th.start(); } for (int t = 0; t < THREAD_NUM; t++) { Thread th = new Thread( new Runnable() { @Override public void run() { try { IgniteQueue<String> queue = grid(0).queue(queueName, 0, null); if (queue != null) queue.close(); } catch (Exception e) { fail("Unexpected exception: " + e); } finally { clearLatch.countDown(); } } }); th.start(); } assert putLatch.await(3, TimeUnit.MINUTES); assert clearLatch.await(3, TimeUnit.MINUTES); try { assert queue.isEmpty() : queue.size(); fail("Queue must be removed."); } catch (IgniteException | IllegalStateException e) { assert e.getMessage().contains("removed"); assert queue.removed(); } }
/** * JUnit. * * @throws Exception If failed. */ public void testCollectionMethods() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); IgniteQueue<SameHashItem> queue = grid(0).queue(queueName, 0, config(false)); int retries = 100; // Initialize queue. for (int i = 0; i < retries; i++) queue.addAll( Arrays.asList( new SameHashItem(Integer.toString(i)), new SameHashItem(Integer.toString(i)))); // Get arrays from queue. assertEquals(retries * 2, queue.toArray().length); SameHashItem[] arr2 = new SameHashItem[retries * 3]; Object[] arr3 = queue.toArray(arr2); assertEquals(arr2, arr3); assertEquals(arr3[0], new SameHashItem("0")); // Check queue items. assertEquals(retries * 2, queue.size()); assertTrue(queue.contains(new SameHashItem(Integer.toString(14)))); assertFalse(queue.contains(new SameHashItem(Integer.toString(144)))); Collection<SameHashItem> col1 = Arrays.asList( new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(18))); assertTrue(queue.containsAll(col1)); Collection<SameHashItem> col2 = Arrays.asList( new SameHashItem(Integer.toString(245)), new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(18))); assertFalse(queue.containsAll(col2)); // Try to remove item. assertTrue(queue.remove(new SameHashItem(Integer.toString(14)))); assertEquals((retries * 2) - 1, queue.size()); assertTrue(queue.contains(new SameHashItem(Integer.toString(14)))); assertTrue(queue.remove(new SameHashItem(Integer.toString(14)))); assertEquals((retries - 1) * 2, queue.size()); assertFalse(queue.remove(new SameHashItem(Integer.toString(14)))); // Try to remove some items. assertTrue(queue.contains(new SameHashItem(Integer.toString(33)))); assertTrue( queue.removeAll( Arrays.asList( new SameHashItem(Integer.toString(15)), new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(33)), new SameHashItem(Integer.toString(1))))); assertFalse(queue.contains(new SameHashItem(Integer.toString(33)))); // Try to retain all items. assertTrue( queue.retainAll( Arrays.asList( new SameHashItem(Integer.toString(15)), new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(33)), new SameHashItem(Integer.toString(1))))); assertFalse(queue.contains(new SameHashItem(Integer.toString(2)))); assert queue.isEmpty(); }