@Before public void setup() { MockitoAnnotations.initMocks(this); Mockito.when(validator.checkAlreadyAssigned(Mockito.any(User.class), Mockito.anyList())) .thenReturn(Optional.empty()); Mockito.when(validator.checkEventType(Mockito.any())).thenReturn(Optional.empty()); Mockito.when(validator.checkUnassignedUser(Mockito.any(User.class), Mockito.anyList())) .thenReturn(Optional.empty()); Mockito.when(validator.checkSubscription(Mockito.any())).thenReturn(Optional.empty()); }
private void mockObjects() { tuiConfigModelsMap.put("tuiConfigOne", "valueOne"); when(tuiConfigService.getConfigValuesMap(Mockito.anyList())).thenReturn(tuiConfigModelsMap); when(cmsSiteService.getCurrentCatalogVersion()).thenReturn(catalogVersionModel); doReturn(flag) .when(itineraryService) .isValidPortOfCall(Mockito.anyString(), Mockito.any(CatalogVersionModel.class)); final Map<CruiseAreaData, Set<LocationData>> cruiseAreaMap = null; when(cruiseAreaService.getAllCRAreaWithCountries(Mockito.any(CatalogVersionModel.class))) .thenReturn(cruiseAreaMap); final List<LocationModel> locationModelMap = null; when(mainStreamLocationService.getAllPOCByCodes( Mockito.anyList(), Mockito.any(CatalogVersionModel.class))) .thenReturn(locationModelMap); }
@Test public void testRenderComponent() throws Exception { given(productReferencesComponentModel.getMaximumNumberProducts()) .willReturn(Integer.valueOf(1)); given(productReferencesComponentModel.getTitle()).willReturn(TITLE_VALUE); given(productReferencesComponentModel.getProductReferenceTypes()) .willReturn(Arrays.asList(ProductReferenceTypeEnum.ACCESSORIES)); given(productReferencesComponentModel.getItemtype()).willReturn(TEST_TYPE_CODE); requestContextData.setProduct(new ProductModel()); given( productFacade.getProductReferencesForCode( Mockito.anyString(), Mockito.anyList(), Mockito.any(List.class), Mockito.<Integer>any())) .willReturn(productReferenceDataList); final String viewName = productReferencesComponentController.handleComponent( request, response, model, productReferencesComponentModel); verify(model, Mockito.times(1)).addAttribute(TITLE, TITLE_VALUE); verify(model, Mockito.times(1)).addAttribute(PRODUCT_REFERENCES, productReferenceDataList); Assert.assertEquals(TEST_TYPE_VIEW, viewName); }
@Test @SuppressWarnings("unchecked") public void build_does_not_add_root_to_registry() { File root = newFolder("root"); when(factory.create(ProjectRegistryBuilder.class)).thenReturn(registry); builder.build(); verify(registry, times(0)).addProject(root.getName()); verify(registry, times(0)).addProjects(Mockito.anyList()); verify(registry, times(0)).addBuild(any(File.class)); verify(registry, times(0)).adddManifest(any(File.class)); verify(registry, times(1)).build(); }
/** * With the move to using a pool of threads to write, we need to ensure that we still block until * all index writes for a mutation/batch are completed. * * @throws Exception on failure */ @SuppressWarnings("unchecked") @Test public void testSynchronouslyCompletesAllWrites() throws Exception { LOG.info("Starting " + testName.getTableNameString()); LOG.info("Current thread is interrupted: " + Thread.interrupted()); Abortable abort = new StubAbortable(); Stoppable stop = Mockito.mock(Stoppable.class); ExecutorService exec = Executors.newFixedThreadPool(1); Map<ImmutableBytesPtr, HTableInterface> tables = new HashMap<ImmutableBytesPtr, HTableInterface>(); FakeTableFactory factory = new FakeTableFactory(tables); byte[] tableName = this.testName.getTableName(); Put m = new Put(row); m.add(Bytes.toBytes("family"), Bytes.toBytes("qual"), null); Collection<Pair<Mutation, byte[]>> indexUpdates = Arrays.asList(new Pair<Mutation, byte[]>(m, tableName)); HTableInterface table = Mockito.mock(HTableInterface.class); final boolean[] completed = new boolean[] {false}; Mockito.when(table.batch(Mockito.anyList())) .thenAnswer( new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { // just keep track that it was called completed[0] = true; return null; } }); Mockito.when(table.getTableName()).thenReturn(testName.getTableName()); // add the table to the set of tables, so its returned to the writer tables.put(new ImmutableBytesPtr(tableName), table); // setup the writer and failure policy ParallelWriterIndexCommitter committer = new ParallelWriterIndexCommitter(VersionInfo.getVersion()); committer.setup(factory, exec, abort, stop, 2); KillServerOnFailurePolicy policy = new KillServerOnFailurePolicy(); policy.setup(stop, abort); IndexWriter writer = new IndexWriter(committer, policy); writer.write(indexUpdates); assertTrue( "Writer returned before the table batch completed! Likely a race condition tripped", completed[0]); writer.stop(this.testName.getTableNameString() + " finished"); assertTrue("Factory didn't get shutdown after writer#stop!", factory.shutdown); assertTrue("ExectorService isn't terminated after writer#stop!", exec.isShutdown()); }
@Test public void testPassingThroughServerDiscoInfoResultStanzaHandsOffToDoServerDiscovery() throws Exception { result = toIq( readStanzaAsString("/iq/discoInfo/node-reply.stanza") .replace("node=\"/user/[email protected]/posts\"", "")); Mockito.when(federatedQueueManager.isFederatedDiscoInfoRequest(Mockito.anyString())) .thenReturn(true); discoResult.process(result); Mockito.verify(federatedQueueManager, Mockito.times(1)) .processDiscoInfoResponse(Mockito.any(JID.class), Mockito.anyString(), Mockito.anyList()); }
/** Creates a standard hash of common test values for use with testing getters and setters. */ private static void createTestValues() { testValues.put(Long.class, Long.valueOf(123L)); testValues.put(Integer.class, Integer.valueOf(456)); testValues.put(String.class, "FOOBAR"); testValues.put(Double.class, Double.valueOf(123.456)); testValues.put(Float.class, Float.valueOf(789.123f)); testValues.put(BigDecimal.class, BigDecimal.ZERO); testValues.put(Boolean.class, Boolean.TRUE); testValues.put(Byte.class, Mockito.anyByte()); testValues.put(Character.class, Mockito.anyChar()); testValues.put(Collection.class, Mockito.anyCollection()); testValues.put(List.class, Mockito.anyList()); testValues.put(Set.class, Mockito.anySet()); testValues.put(Map.class, Mockito.anyMap()); testValues.put(JobStatus.class, JobStatus.PENDING); testValues.put(ReportType.class, ReportType.PDF); }
/** * Test that if we get an interruption to to the thread while doing a batch (e.g. via shutdown), * that we correctly end the task * * @throws Exception on failure */ @SuppressWarnings("unchecked") @Test public void testShutdownInterruptsAsExpected() throws Exception { Stoppable stop = Mockito.mock(Stoppable.class); Abortable abort = new StubAbortable(); // single thread factory so the older request gets queued ExecutorService exec = Executors.newFixedThreadPool(1); Map<ImmutableBytesPtr, HTableInterface> tables = new HashMap<ImmutableBytesPtr, HTableInterface>(); FakeTableFactory factory = new FakeTableFactory(tables); byte[] tableName = this.testName.getTableName(); HTableInterface table = Mockito.mock(HTableInterface.class); Mockito.when(table.getTableName()).thenReturn(tableName); final CountDownLatch writeStartedLatch = new CountDownLatch(1); // latch never gets counted down, so we wait forever final CountDownLatch waitOnAbortedLatch = new CountDownLatch(1); Mockito.when(table.batch(Mockito.anyList())) .thenAnswer( new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { LOG.info("Write started"); writeStartedLatch.countDown(); // when we interrupt the thread for shutdown, we should see this throw an interrupt // too try { waitOnAbortedLatch.await(); } catch (InterruptedException e) { LOG.info("Correctly interrupted while writing!"); throw e; } return null; } }); // add the tables to the set of tables, so its returned to the writer tables.put(new ImmutableBytesPtr(tableName), table); // update a single table Put m = new Put(row); m.add(Bytes.toBytes("family"), Bytes.toBytes("qual"), null); final List<Pair<Mutation, byte[]>> indexUpdates = new ArrayList<Pair<Mutation, byte[]>>(); indexUpdates.add(new Pair<Mutation, byte[]>(m, tableName)); // setup the writer ParallelWriterIndexCommitter committer = new ParallelWriterIndexCommitter(VersionInfo.getVersion()); committer.setup(factory, exec, abort, stop, 2); KillServerOnFailurePolicy policy = new KillServerOnFailurePolicy(); policy.setup(stop, abort); final IndexWriter writer = new IndexWriter(committer, policy); final boolean[] failedWrite = new boolean[] {false}; Thread primaryWriter = new Thread() { @Override public void run() { try { writer.write(indexUpdates); } catch (IndexWriteException e) { failedWrite[0] = true; } } }; primaryWriter.start(); // wait for the write to start before intentionally shutdown the pool writeStartedLatch.await(); writer.stop("Shutting down writer for test " + this.testName.getTableNameString()); primaryWriter.join(); assertTrue("Writer should have failed because of the stop we issued", failedWrite[0]); }
/** * Index updates can potentially be queued up if there aren't enough writer threads. If a running * index write fails, then we should early exit the pending indexupdate, when it comes up (if the * pool isn't already shutdown). * * <p>This test is a little bit racey - we could actually have the failure of the first task * before the third task is even submitted. However, we should never see the third task attempt to * make the batch write, so we should never see a failure here. * * @throws Exception on failure */ @SuppressWarnings("unchecked") @Test public void testFailureOnRunningUpdateAbortsPending() throws Exception { Abortable abort = new StubAbortable(); Stoppable stop = Mockito.mock(Stoppable.class); // single thread factory so the older request gets queued ExecutorService exec = Executors.newFixedThreadPool(1); Map<ImmutableBytesPtr, HTableInterface> tables = new HashMap<ImmutableBytesPtr, HTableInterface>(); FakeTableFactory factory = new FakeTableFactory(tables); // updates to two different tables byte[] tableName = Bytes.add(this.testName.getTableName(), new byte[] {1, 2, 3, 4}); Put m = new Put(row); m.add(Bytes.toBytes("family"), Bytes.toBytes("qual"), null); byte[] tableName2 = this.testName.getTableName(); // this will sort after the first tablename List<Pair<Mutation, byte[]>> indexUpdates = new ArrayList<Pair<Mutation, byte[]>>(); indexUpdates.add(new Pair<Mutation, byte[]>(m, tableName)); indexUpdates.add(new Pair<Mutation, byte[]>(m, tableName2)); indexUpdates.add(new Pair<Mutation, byte[]>(m, tableName2)); // first table will fail HTableInterface table = Mockito.mock(HTableInterface.class); Mockito.when(table.batch(Mockito.anyList())) .thenThrow(new IOException("Intentional IOException for failed first write.")); Mockito.when(table.getTableName()).thenReturn(tableName); // second table just blocks to make sure that the abort propagates to the third task final CountDownLatch waitOnAbortedLatch = new CountDownLatch(1); final boolean[] failed = new boolean[] {false}; HTableInterface table2 = Mockito.mock(HTableInterface.class); Mockito.when(table2.getTableName()).thenReturn(tableName2); Mockito.when(table2.batch(Mockito.anyList())) .thenAnswer( new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { waitOnAbortedLatch.await(); return null; } }) .thenAnswer( new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { failed[0] = true; throw new RuntimeException( "Unexpected exception - second index table shouldn't have been written to"); } }); // add the tables to the set of tables, so its returned to the writer tables.put(new ImmutableBytesPtr(tableName), table); tables.put(new ImmutableBytesPtr(tableName2), table2); ParallelWriterIndexCommitter committer = new ParallelWriterIndexCommitter(VersionInfo.getVersion()); committer.setup(factory, exec, abort, stop, 2); KillServerOnFailurePolicy policy = new KillServerOnFailurePolicy(); policy.setup(stop, abort); IndexWriter writer = new IndexWriter(committer, policy); try { writer.write(indexUpdates); fail("Should not have successfully completed all index writes"); } catch (SingleIndexWriteFailureException e) { LOG.info("Correctly got a failure to reach the index", e); // should have correctly gotten the correct abort, so let the next task execute waitOnAbortedLatch.countDown(); } assertFalse( "Third set of index writes never have been attempted - should have seen the abort before done!", failed[0]); writer.stop(this.testName.getTableNameString() + " finished"); assertTrue("Factory didn't get shutdown after writer#stop!", factory.shutdown); assertTrue("ExectorService isn't terminated after writer#stop!", exec.isShutdown()); }