/* * Licensed to 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 org.apache.streams.gplus.providers; import org.apache.streams.core.StreamsDatum; import org.apache.streams.google.gplus.GPlusConfiguration; import org.apache.streams.google.gplus.GPlusOAuthConfiguration; import org.apache.streams.google.gplus.configuration.UserInfo; import org.apache.streams.gplus.provider.AbstractGPlusProvider; import org.apache.streams.util.api.requests.backoff.BackOffStrategy; import com.carrotsearch.randomizedtesting.RandomizedTest; import com.carrotsearch.randomizedtesting.annotations.Repeat; import com.google.api.services.plus.Plus; import org.junit.Test; import java.io.IOException; import java.util.LinkedList; import java.util.List; import java.util.concurrent.BlockingQueue; import static org.mockito.Mockito.mock; /** * Unit tests for {@link org.apache.streams.gplus.provider.AbstractGPlusProvider} */ public class TestAbstractGPlusProvider extends RandomizedTest { /** * Test that every collector will be run and that data queued from the collectors will be processed. */ @Test @Repeat(iterations = 3) public void testDataCollectorRunsPerUser() { int numUsers = randomIntBetween(1, 1000); List<UserInfo> userList = new LinkedList<>(); for (int i = 0; i < numUsers; ++i) { userList.add(new UserInfo()); } GPlusConfiguration config = new GPlusConfiguration(); GPlusOAuthConfiguration oauth = new GPlusOAuthConfiguration(); oauth.setAppName("a"); oauth.setPathToP12KeyFile("a"); oauth.setServiceAccountEmailAddress("a"); config.setOauth(oauth); config.setGooglePlusUsers(userList); AbstractGPlusProvider provider = new AbstractGPlusProvider(config) { @Override protected Plus createPlusClient() throws IOException { return mock(Plus.class); } @Override protected Runnable getDataCollector(BackOffStrategy strategy, BlockingQueue<StreamsDatum> queue, Plus plus, UserInfo userInfo) { final BlockingQueue<StreamsDatum> q = queue; return () -> { try { q.put(new StreamsDatum(null)); } catch (InterruptedException ie) { fail("Test was interrupted"); } }; } }; try { provider.prepare(null); provider.startStream(); int datumCount = 0; while (provider.isRunning()) { datumCount += provider.readCurrent().size(); } assertEquals(numUsers, datumCount); } finally { provider.cleanUp(); } } }