blob: 3c840d3f628418e25be919d3bc0afa8ccaf3ae5d [file] [log] [blame]
/*
* 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.hadoop.yarn.server.resourcemanager.webapp;
import org.apache.hadoop.thirdparty.com.google.common.collect.Sets;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest;
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
import org.apache.hadoop.yarn.webapp.BadRequestException;
import org.junit.Test;
import java.io.IOException;
import java.util.Set;
import static org.apache.hadoop.yarn.server.webapp.WebServices.parseQueries;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TestApplicationsRequestBuilder {
private GetApplicationsRequest getDefaultRequest() {
GetApplicationsRequest req = GetApplicationsRequest.newInstance();
req.setStartRange(0, Long.MAX_VALUE);
req.setFinishRange(0, Long.MAX_VALUE);
return req;
}
@Test
public void testDefaultRequest() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullStateQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStateQuery(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyStateQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStateQuery("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidStateQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStateQuery("invalidState").build();
}
@Test
public void testRequestWithValidStateQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStateQuery(YarnApplicationState.NEW_SAVING.toString()).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
Set<String> appStates =
Sets.newHashSet(YarnApplicationState.NEW_SAVING.toString());
Set<String> appStatesLowerCase = parseQueries(appStates, true);
expectedRequest.setApplicationStates(appStatesLowerCase);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyStateQueries() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStatesQuery(Sets.newHashSet()).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidStateQueries() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStatesQuery(Sets.newHashSet("a1", "a2", "")).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullStateQueries() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStatesQuery(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidStateQueries() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStatesQuery(
Sets.newHashSet(YarnApplicationState.NEW_SAVING.toString(),
YarnApplicationState.NEW.toString()))
.build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
Set<String> appStates =
Sets.newHashSet(YarnApplicationState.NEW_SAVING.toString(),
YarnApplicationState.NEW.toString());
Set<String> appStatesLowerCase = parseQueries(appStates, true);
expectedRequest.setApplicationStates(appStatesLowerCase);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullUserQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withUserQuery(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyUserQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withUserQuery("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithUserQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withUserQuery("user1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setUsers(Sets.newHashSet("user1"));
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullQueueQuery() {
ResourceManager rm = mock(ResourceManager.class);
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withQueueQuery(rm, null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyQueueQuery() {
ResourceManager rm = mock(ResourceManager.class);
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withQueueQuery(rm, "").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithQueueQueryExistingQueue() {
ResourceManager rm = mock(ResourceManager.class);
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withQueueQuery(rm, "queue1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setQueues(Sets.newHashSet("queue1"));
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithQueueQueryNotExistingQueue() throws IOException {
CapacityScheduler cs = mock(CapacityScheduler.class);
when(cs.getQueueInfo(eq("queue1"), anyBoolean(), anyBoolean()))
.thenThrow(new IOException());
ResourceManager rm = mock(ResourceManager.class);
when(rm.getResourceScheduler()).thenReturn(cs);
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withQueueQuery(rm, "queue1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setQueues(Sets.newHashSet("queue1"));
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullLimitQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withLimit(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyLimitQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withLimit("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidLimitQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withLimit("bla").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidNegativeLimitQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withLimit("-10").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidLimitQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withLimit("999").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setLimit(999L);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullStartedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeBegin(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyStartedTimeBeginQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStartedTimeBegin("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidStartedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeBegin("bla").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidNegativeStartedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeBegin("-1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidStartedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeBegin("999").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setStartRange(999L, Long.MAX_VALUE);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullStartedTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStartedTimeEnd(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptywithStartedTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStartedTimeEnd("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidStartedTimeEndQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeEnd("bla").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidNegativeStartedTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withStartedTimeEnd("-1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidStartedTimeEndQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeEnd("999").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setStartRange(0L, 999L);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullFinishedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withFinishTimeBegin(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyFinishedTimeBeginQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withFinishTimeBegin("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidFinishedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withFinishTimeBegin("bla").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidNegativeFinishedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withFinishTimeBegin("-1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidFinishedTimeBeginQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withFinishTimeBegin("999").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setFinishRange(999L, Long.MAX_VALUE);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullFinishedTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withFinishTimeEnd(null).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithEmptyFinishTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withFinishTimeEnd("").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidFinishTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withFinishTimeEnd("bla").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidNegativeFinishedTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withFinishTimeEnd("-1").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidFinishTimeEndQuery() {
GetApplicationsRequest request =
ApplicationsRequestBuilder.create().withFinishTimeEnd("999").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setFinishRange(0L, 999L);
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidStartTimeRangeQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeBegin("1000").withStartedTimeEnd("2000").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setStartRange(1000L, 2000L);
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidStartTimeRangeQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withStartedTimeBegin("2000").withStartedTimeEnd("1000").build();
}
@Test
public void testRequestWithValidFinishTimeRangeQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withFinishTimeBegin("1000").withFinishTimeEnd("2000").build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setFinishRange(1000L, 2000L);
assertEquals(expectedRequest, request);
}
@Test(expected = BadRequestException.class)
public void testRequestWithInvalidFinishTimeRangeQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withFinishTimeBegin("2000").withFinishTimeEnd("1000").build();
}
@Test
public void testRequestWithNullApplicationTypesQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withApplicationTypes(null).build();
}
@Test
public void testRequestWithEmptyApplicationTypesQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withApplicationTypes(Sets.newHashSet()).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setApplicationTypes(Sets.newHashSet());
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidApplicationTypesQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withApplicationTypes(Sets.newHashSet("type1")).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setApplicationTypes(Sets.newHashSet("type1"));
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithNullApplicationTagsQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withApplicationTags(null).build();
}
@Test
public void testRequestWithEmptyApplicationTagsQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withApplicationTags(Sets.newHashSet()).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setApplicationTags(Sets.newHashSet());
assertEquals(expectedRequest, request);
}
@Test
public void testRequestWithValidApplicationTagsQuery() {
GetApplicationsRequest request = ApplicationsRequestBuilder.create()
.withApplicationTags(Sets.newHashSet("tag1")).build();
GetApplicationsRequest expectedRequest = getDefaultRequest();
expectedRequest.setApplicationTags(Sets.newHashSet("tag1"));
assertEquals(expectedRequest, request);
}
}