package io.lumify.it; import com.google.common.collect.ImmutableList; import io.lumify.web.clientapi.LumifyApi; import io.lumify.web.clientapi.codegen.ApiException; import io.lumify.web.clientapi.codegen.VertexApi; import io.lumify.web.clientapi.model.ClientApiVertex; import io.lumify.web.clientapi.model.ClientApiVertexMultipleResponse; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import static org.hamcrest.Matchers.lessThanOrEqualTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @Category(BenchmarkCategory.class) public class VertexBenchmarkTest extends VertextTestBase { private TimedExecution timedExecution; @Rule public TestClassAndMethod testClassAndMethod = new TestClassAndMethod(); @Before public void setUp() throws ApiException { super.setUp(); timedExecution = new TimedExecution(testClassAndMethod); } @Test public void benchmarkFindMultiple10Vertices10Properties() { benchmarkFindMultipleVertices(10, 10, 60); } @Test public void benchmarkFindMultiple100Vertices10Properties() { benchmarkFindMultipleVertices(100, 10, 250); } private void benchmarkFindMultipleVertices(int numVertices, int numPropertiesPerVertex, long maxTimeMillis) { try { final List<String> allVertexVisibilities = ImmutableList.of("a", "b", "c"); final List<String> allPropertyVisibilities = ImmutableList.of("x", "y", "z"); final List<String> allVertexIds = createVertices( numVertices, allVertexVisibilities, numPropertiesPerVertex, allPropertyVisibilities); String setupWorkspaceId = setupLumifyApi.getCurrentWorkspaceId(); LumifyApi lumifyApi = login(USERNAME_TEST_USER_2); List<String> userVertexAuthorizations = allVertexVisibilities.subList(0, 2); List<String> userPropertyAuthorizations = allPropertyVisibilities.subList(0, 2); List<String> allUserAuthorizations = new ArrayList<>(); allUserAuthorizations.addAll(userVertexAuthorizations); allUserAuthorizations.addAll(userPropertyAuthorizations); allUserAuthorizations.add(setupWorkspaceId); addUserAuths(lumifyApi, USERNAME_TEST_USER_2, allUserAuthorizations.toArray(new String[allUserAuthorizations.size()])); final VertexApi vertexApi = lumifyApi.getVertexApi(); TimedExecution.Result<ClientApiVertexMultipleResponse> timedResponse = timedExecution.call( new Callable<ClientApiVertexMultipleResponse>() { public ClientApiVertexMultipleResponse call() throws Exception { return vertexApi.findMultiple(allVertexIds, false); } }); List<ClientApiVertex> vertices = timedResponse.result.getVertices(); int expectedVertexCount = (numVertices * userVertexAuthorizations.size() / allVertexVisibilities.size()) + numVertices % allVertexVisibilities.size(); assertEquals(expectedVertexCount, vertices.size()); assertThat(timedResponse.timeMillis, lessThanOrEqualTo(maxTimeMillis)); } catch (Exception e) { throw new RuntimeException(e); } } }