blob: 3a26585779b60bb196c8ab4ede35139e7335fd08 [file] [log] [blame]
/**
* Licensed 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.winegrower.servlet;
import static java.util.stream.Collectors.joining;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Hashtable;
import javax.inject.Inject;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.spi.Provider;
import org.apache.meecrowave.Meecrowave;
import org.apache.meecrowave.junit5.MeecrowaveConfig;
import org.apache.meecrowave.testing.ConfigurationInject;
import org.apache.winegrower.Ripener;
import org.apache.winegrower.api.InjectedService;
import org.junit.jupiter.api.Test;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
@MeecrowaveConfig
class RipenerLifecycleTest {
@Inject
private ServletContext context;
@InjectedService
private Provider log4j;
@ConfigurationInject
private Meecrowave.Builder serverConfig;
@Test
void ensureIsStarted() throws IOException {
final Object attribute = context.getAttribute(Ripener.class.getName());
assertNotNull(attribute);
final Ripener ripener = Ripener.class.cast(attribute);
assertTrue(ripener.getRegistry().getBundles().size() > 3 /* cxf, log4j, .... */);
assertTrue(ripener.getStartTime() > 0);
assertNull(log4j);
ripener.getServices().inject(this);
assertNotNull(log4j);
final String output;
try (final BufferedReader reader = new BufferedReader(
new InputStreamReader(new URL(String.format("http://localhost:%d/example", serverConfig.getHttpPort())).openStream()))) {
output = reader.lines().collect(joining("\n"));
}
assertEquals("Example", output.trim());
}
@WebServlet(name = "ExampleServlet", urlPatterns = "/example")
public static class ExampleServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
try (final PrintWriter writer = response.getWriter()) {
writer.println("Example");
}
}
public static class Registrar implements BundleActivator {
@Override
public void start(final BundleContext context) {
context.registerService(HttpServlet.class, new ExampleServlet(), new Hashtable<>());
}
@Override
public void stop(final BundleContext context) {
// no-op
}
}
}
}