/* * 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.solr.client.solrj.embedded; import java.io.File; import java.net.URL; import java.util.Locale; import java.util.Random; import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule; import org.apache.commons.io.IOUtils; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.HttpClients; import org.apache.solr.SolrJettyTestBase; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.client.solrj.impl.HttpClientUtil; import org.apache.solr.util.ExternalPaths; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.session.HashSessionIdManager; import org.eclipse.jetty.webapp.WebAppContext; import org.junit.Rule; import org.junit.rules.RuleChain; import org.junit.rules.TestRule; /** * * @since solr 1.3 */ public class JettyWebappTest extends SolrTestCaseJ4 { int port = 0; static final String context = "/test"; @Rule public TestRule solrTestRules = RuleChain.outerRule(new SystemPropertiesRestoreRule()); Server server; @Override public void setUp() throws Exception { super.setUp(); System.setProperty("solr.solr.home", SolrJettyTestBase.legacyExampleCollection1SolrHome()); System.setProperty("tests.shardhandler.randomSeed", Long.toString(random().nextLong())); System.setProperty("solr.tests.doContainerStreamCloseAssert", "false"); File dataDir = createTempDir().toFile(); dataDir.mkdirs(); System.setProperty("solr.data.dir", dataDir.getCanonicalPath()); String path = ExternalPaths.WEBAPP_HOME; server = new Server(port); // insecure: only use for tests!!!! server.setSessionIdManager(new HashSessionIdManager(new Random(random().nextLong()))); new WebAppContext(server, path, context ); ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory()); connector.setIdleTimeout(1000 * 60 * 60); connector.setSoLingerTime(-1); connector.setPort(0); server.setConnectors(new Connector[]{connector}); server.setStopAtShutdown( true ); server.start(); port = connector.getLocalPort(); } @Override public void tearDown() throws Exception { try { server.stop(); } catch( Exception ex ) {} System.clearProperty("tests.shardhandler.randomSeed"); System.clearProperty("solr.data.dir"); System.clearProperty("solr.tests.doContainerStreamCloseAssert"); super.tearDown(); } public void testAdminUI() throws Exception { // Currently not an extensive test, but it does fire up the JSP pages and make // sure they compile ok String adminPath = "http://127.0.0.1:"+port+context+"/"; byte[] bytes = IOUtils.toByteArray( new URL(adminPath).openStream() ); assertNotNull( bytes ); // real error will be an exception HttpClient client = HttpClients.createDefault(); HttpRequestBase m = new HttpGet(adminPath); HttpResponse response = client.execute(m, HttpClientUtil.createNewHttpClientRequestContext()); assertEquals(200, response.getStatusLine().getStatusCode()); Header header = response.getFirstHeader("X-Frame-Options"); assertEquals("DENY", header.getValue().toUpperCase(Locale.ROOT)); m.releaseConnection(); } }