| /** |
| * 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.falcon.resource; |
| |
| import com.sun.jersey.api.client.ClientResponse; |
| import org.apache.falcon.util.OozieTestUtils; |
| import org.testng.Assert; |
| import org.testng.annotations.AfterClass; |
| import org.testng.annotations.AfterMethod; |
| import org.testng.annotations.BeforeClass; |
| import org.testng.annotations.Test; |
| |
| import javax.ws.rs.core.MediaType; |
| import java.util.Map; |
| |
| /** |
| * Test class for Entity LIST pagination REST APIs. |
| */ |
| public class EntityManagerPaginationJerseyIT { |
| |
| private TestContext context; |
| |
| @BeforeClass |
| public void prepare() throws Exception { |
| TestContext.prepare(); |
| context = new TestContext(); |
| scheduleMultipleProcess(5); |
| } |
| |
| @AfterClass |
| public void tearDown() throws Exception { |
| TestContext.deleteEntitiesFromStore(); |
| } |
| |
| @AfterMethod |
| public void cleanup() throws Exception { |
| OozieTestUtils.killOozieJobs(context); |
| } |
| |
| @Test |
| public void testGetEntityList() throws Exception { |
| ClientResponse response = context.service |
| .path("api/entities/list/process/") |
| .header("Cookie", context.getAuthenticationToken()) |
| .type(MediaType.TEXT_XML) |
| .accept(MediaType.TEXT_XML) |
| .get(ClientResponse.class); |
| Assert.assertEquals(response.getStatus(), 200); |
| EntityList result = response.getEntity(EntityList.class); |
| Assert.assertNotNull(result); |
| for (EntityList.EntityElement entityElement : result.getElements()) { |
| Assert.assertNull(entityElement.status); // status is null |
| Assert.assertNotNull(entityElement.name); |
| } |
| } |
| |
| @Test |
| public void testPagination() { |
| ClientResponse response = context.service |
| .path("api/entities/list/process/") |
| .queryParam("filterBy", "TYPE:PROCESS") |
| .queryParam("tags", "owner=producer@xyz.com, department=forecasting") |
| .queryParam("orderBy", "name").queryParam("sortOrder", "desc").queryParam("offset", "2") |
| .queryParam("numResults", "2").queryParam("fields", "status,tags") |
| .header("Cookie", context.getAuthenticationToken()) |
| .type(MediaType.TEXT_XML) |
| .accept(MediaType.TEXT_XML) |
| .get(ClientResponse.class); |
| Assert.assertEquals(response.getStatus(), 200); |
| EntityList result = response.getEntity(EntityList.class); |
| Assert.assertNotNull(result); |
| Assert.assertEquals(result.getElements().length, 2); |
| } |
| |
| @Test |
| public void testFilterTags() { |
| ClientResponse response = context.service |
| .path("api/entities/list/process/") |
| .queryParam("tags", "owner=producer@xyz.com, department=forecasting") |
| .queryParam("orderBy", "name").queryParam("sortOrder", "desc").queryParam("offset", "2") |
| .queryParam("numResults", "2").queryParam("fields", "status,tags") |
| .header("Cookie", context.getAuthenticationToken()) |
| .type(MediaType.TEXT_XML) |
| .accept(MediaType.TEXT_XML) |
| .get(ClientResponse.class); |
| Assert.assertEquals(response.getStatus(), 200); |
| EntityList result = response.getEntity(EntityList.class); |
| Assert.assertNotNull(result); |
| Assert.assertEquals(result.getElements().length, 2); |
| |
| response = context.service |
| .path("api/entities/list/feed/") |
| .queryParam("tags", "owner=producer@xyz.com, department=forecasting") |
| .queryParam("fields", "status,tags") |
| .header("Cookie", context.getAuthenticationToken()) |
| .type(MediaType.TEXT_XML) |
| .accept(MediaType.TEXT_XML) |
| .get(ClientResponse.class); |
| Assert.assertEquals(response.getStatus(), 200); |
| result = response.getEntity(EntityList.class); |
| Assert.assertNotNull(result); |
| Assert.assertNull(result.getElements()); |
| |
| } |
| |
| @Test |
| public void testPaginationHugeOffset() throws Exception { |
| ClientResponse response = context.service |
| .path("api/entities/list/process/") |
| .queryParam("orderBy", "name").queryParam("sortOrder", "asc") |
| .queryParam("offset", "50").queryParam("numResults", "2") |
| .header("Cookie", context.getAuthenticationToken()) |
| .type(MediaType.TEXT_XML) |
| .accept(MediaType.TEXT_XML) |
| .get(ClientResponse.class); |
| Assert.assertEquals(response.getStatus(), 200); |
| EntityList result = response.getEntity(EntityList.class); |
| Assert.assertNotNull(result); |
| Assert.assertEquals(result.getElements(), null); |
| } |
| |
| @Test |
| public void testPaginationEntitySummary() throws Exception { |
| Map<String, String> overlay = context.getUniqueOverlay(); |
| context.scheduleProcess(TestContext.PROCESS_TEMPLATE, overlay); |
| OozieTestUtils.waitForProcessWFtoStart(context); |
| |
| ClientResponse response = context.service |
| .path("api/entities/summary/process") |
| .queryParam("cluster", overlay.get("cluster")) |
| .queryParam("fields", "status,pipelines") |
| .queryParam("numInstances", "1") |
| .queryParam("orderBy", "name") |
| .header("Cookie", context.getAuthenticationToken()) |
| .type(MediaType.APPLICATION_JSON) |
| .accept(MediaType.APPLICATION_JSON) |
| .get(ClientResponse.class); |
| Assert.assertEquals(response.getStatus(), 200); |
| EntitySummaryResult summaryResult = response.getEntity(EntitySummaryResult.class); |
| Assert.assertNotNull(summaryResult); |
| } |
| |
| private void scheduleMultipleProcess(int count) throws Exception { |
| for (int i=0; i<count; i++) { |
| context.scheduleProcess(); |
| Thread.sleep(100); |
| } |
| OozieTestUtils.waitForProcessWFtoStart(context); |
| } |
| } |