blob: 9a4cca19ebcd204b50dab8e11ac666463656874a [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.ambari.server.controller;
import org.apache.ambari.server.api.AmbariPersistFilter;
import org.apache.ambari.server.orm.entities.ViewEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceEntityTest;
import org.apache.ambari.server.security.AmbariViewsSecurityHeaderFilter;
import org.apache.ambari.server.view.ViewRegistry;
import org.easymock.Capture;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.web.filter.DelegatingFilterProxy;
import javax.inject.Provider;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
/**
* AmbariHandlerList tests.
*/
public class AmbariHandlerListTest {
private final AmbariViewsSecurityHeaderFilter ambariViewsSecurityHeaderFilter = createNiceMock(AmbariViewsSecurityHeaderFilter.class);
private final AmbariPersistFilter persistFilter = createNiceMock(AmbariPersistFilter.class);
private final DelegatingFilterProxy springSecurityFilter = createNiceMock(DelegatingFilterProxy.class);
@Test
public void testAddViewInstance() throws Exception {
ViewInstanceEntity viewInstanceEntity = ViewInstanceEntityTest.getViewInstanceEntity();
final WebAppContext handler = createNiceMock(WebAppContext.class);
Server server = createNiceMock(Server.class);
expect(handler.getServer()).andReturn(server);
handler.setServer(null);
Capture<FilterHolder> securityHeaderFilterCapture = new Capture<FilterHolder>();
Capture<FilterHolder> persistFilterCapture = new Capture<FilterHolder>();
Capture<FilterHolder> securityFilterCapture = new Capture<FilterHolder>();
handler.addFilter(capture(securityHeaderFilterCapture), eq("/*"), eq(AmbariServer.DISPATCHER_TYPES));
handler.addFilter(capture(persistFilterCapture), eq("/*"), eq(AmbariServer.DISPATCHER_TYPES));
handler.addFilter(capture(securityFilterCapture), eq("/*"), eq(AmbariServer.DISPATCHER_TYPES));
handler.setAllowNullPathInfo(true);
replay(handler, server);
AmbariHandlerList handlerList = getAmbariHandlerList(handler);
handlerList.addViewInstance(viewInstanceEntity);
ArrayList<Handler> handlers = new ArrayList<Handler>(Arrays.asList(handlerList.getHandlers()));
Assert.assertTrue(handlers.contains(handler));
Assert.assertEquals(ambariViewsSecurityHeaderFilter, securityHeaderFilterCapture.getValue().getFilter());
Assert.assertEquals(persistFilter, persistFilterCapture.getValue().getFilter());
Assert.assertEquals(springSecurityFilter, securityFilterCapture.getValue().getFilter());
verify(handler, server);
}
@Test
public void testRemoveViewInstance() throws Exception {
ViewInstanceEntity viewInstanceEntity = ViewInstanceEntityTest.getViewInstanceEntity();
final WebAppContext handler = createNiceMock(WebAppContext.class);
Server server = createNiceMock(Server.class);
expect(handler.getServer()).andReturn(server);
handler.setServer(null);
replay(handler, server);
AmbariHandlerList handlerList = getAmbariHandlerList(handler);
handlerList.addViewInstance(viewInstanceEntity);
ArrayList<Handler> handlers = new ArrayList<Handler>(Arrays.asList(handlerList.getHandlers()));
Assert.assertTrue(handlers.contains(handler));
handlerList.removeViewInstance(viewInstanceEntity);
handlers = new ArrayList<Handler>(Arrays.asList(handlerList.getHandlers()));
Assert.assertFalse(handlers.contains(handler));
verify(handler, server);
}
@Test
public void testHandle() throws Exception {
final WebAppContext handler = createNiceMock(WebAppContext.class);
ViewRegistry viewRegistry = createNiceMock(ViewRegistry.class);
ViewEntity viewEntity = createNiceMock(ViewEntity.class);
ClassLoader classLoader = createNiceMock(ClassLoader.class);
Request baseRequest = createNiceMock(Request.class);
HttpServletRequest request = createNiceMock(HttpServletRequest.class);
HttpServletResponse response = createNiceMock(HttpServletResponse.class);
expect(viewRegistry.getDefinition("TEST", "1.0.0")).andReturn(viewEntity).anyTimes();
expect(viewEntity.getClassLoader()).andReturn(classLoader).anyTimes();
expect(handler.isStarted()).andReturn(true).anyTimes();
replay(handler, viewRegistry, viewEntity);
handler.handle("/api/v1/views/TEST/versions/1.0.0/instances/INSTANCE_1/resources/test",
baseRequest, request, response);
AmbariHandlerList handlerList = getAmbariHandlerList(handler);
handlerList.viewRegistry = viewRegistry;
handlerList.start();
handlerList.addHandler(handler);
handlerList.handle("/api/v1/views/TEST/versions/1.0.0/instances/INSTANCE_1/resources/test",
baseRequest, request, response);
verify(handler, viewRegistry, viewEntity);
}
private AmbariHandlerList getAmbariHandlerList(final WebAppContext handler) {
AmbariHandlerList handlerList = new AmbariHandlerList();
handlerList.webAppContextProvider = new HandlerProvider(handler);
handlerList.ambariViewsSecurityHeaderFilter = ambariViewsSecurityHeaderFilter;
handlerList.persistFilter = persistFilter;
handlerList.springSecurityFilter = springSecurityFilter;
return handlerList;
}
private static class HandlerProvider implements Provider<WebAppContext> {
private final WebAppContext context;
private HandlerProvider(WebAppContext context) {
this.context = context;
}
@Override
public WebAppContext get() {
return context;
}
}
}