blob: 567c605ca92f27d2f8975f286c18d1187c216a41 [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.sling.launchpad.testservices.serversidetests;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.junit.annotations.SlingAnnotationsTestRunner;
import org.apache.sling.junit.annotations.TestReference;
import org.apache.sling.launchpad.testservices.events.EventsCounter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RunWith(SlingAnnotationsTestRunner.class)
public class MappingEventsTest {
public static final String PROP_REDIRECT_EXTERNAL = "sling:redirect";
private static final Logger logger = LoggerFactory.getLogger(MappingEventsTest.class);
private static Session session;
private Node mapRoot;
private static List<String> toDelete = new ArrayList<String>();
private static final int N_STEPS = 20;
@TestReference
private EventsCounter eventsCounter;
@TestReference
private SlingRepository repository;
private Node maybeCreateNode(Node parent, String name, String type) throws RepositoryException {
if(parent.hasNode(name)) {
return parent.getNode(name);
} else {
return parent.addNode(name, type);
}
}
@Before
public synchronized void setup() throws Exception {
// Do the mappings setup only once, and clean it up
// after all tests
session = repository.loginAdministrative(null);
final Node rootNode = maybeCreateNode(session.getRootNode(), "content", "nt:unstructured");
session.save();
assertTrue("toDelete should be empty before test", toDelete.isEmpty());
mapRoot = maybeCreateNode(session.getRootNode(), "etc", "nt:folder");
final Node map = maybeCreateNode(mapRoot, "map", "sling:Mapping");
final Node http = maybeCreateNode(map, "http", "sling:Mapping");
maybeCreateNode(http, "localhost.80", "sling:Mapping");
final Node https = maybeCreateNode(map, "https", "sling:Mapping");
maybeCreateNode(https, "localhost.443", "sling:Mapping");
toDelete.add(map.getPath());
toDelete.add(rootNode.getPath());
}
@After
public void deleteTestNodes() throws Exception {
logger.debug("{} test done, deleting test nodes", MappingEventsTest.class.getSimpleName());
try {
for(String path : toDelete) {
if(session.itemExists(path)) {
session.getItem(path).remove();
}
}
toDelete.clear();
session.save();
} finally {
session.logout();
}
}
/** Test SLING-4058 - unexpected timeouts in saveMappings */
@Test public void testSaveMappings() throws Exception {
final Node base = mapRoot.getNode("map/https/localhost.443");
final MappingsFacade f = new MappingsFacade(eventsCounter);
try {
int count = N_STEPS;
while(count-- > 0) {
base.setProperty(PROP_REDIRECT_EXTERNAL,"http://somehost." + count);
final String result = f.saveMappings(session);
if(result != null) {
fail(result);
}
}
} finally {
base.setProperty(PROP_REDIRECT_EXTERNAL,"");
session.save();
}
}
@Test public void testVanityPaths() throws Exception {
final MappingsFacade f = new MappingsFacade(eventsCounter);
final Node vanityTest = maybeCreateNode(session.getRootNode(), "vanityTest", "sling:Folder");
toDelete.add(vanityTest.getPath());
int count = N_STEPS;
while(count-- > 0) {
final String [] paths = { "one", "two", "three_" + count };
vanityTest.setProperty("sling:vanityPath", paths);
final String result = f.saveMappings(session);
if(result != null) {
fail(result);
}
}
}
}