Java tutorial
/* * Copyright (c) 2014 the original author or authors * * 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 * * 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 io.werval.maven; import io.werval.runtime.util.Holder; import java.io.File; import java.io.IOException; import java.nio.file.Files; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.junit.Test; import static com.jayway.awaitility.Awaitility.await; import static java.util.concurrent.TimeUnit.SECONDS; import static org.hamcrest.core.StringContains.containsString; import static org.junit.Assert.assertThat; /** * DevShellMojo Integration Test. * <p> * Generates a project, run it in dev mode using the plugin, change source code and assert code is reloaded. */ public class DevShellMojoIT extends AbstractRunGoalIT { @Test public void devshellMojoIntegrationTest() throws InterruptedException, IOException { final Holder<Exception> errorHolder = new Holder<>(); Thread devshellThread = new Thread(newRunnable(errorHolder, "werval:devshell"), "maven-werval-devshell-thread"); try { devshellThread.start(); await().atMost(60, SECONDS).until(() -> lock.exists()); if (errorHolder.isSet()) { throw new RuntimeException("Error during devhell invocation: " + errorHolder.get().getMessage(), errorHolder.get()); } HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet("http://localhost:23023/"); ResponseHandler<String> handler = new BasicResponseHandler(); assertThat(client.execute(get, handler), containsString("I ran!")); Files.write(new File(tmp.getRoot(), "src/main/java/controllers/Application.java").toPath(), CONTROLLER_CHANGED.getBytes(UTF_8)); // Wait for source code change to be detected Thread.sleep(2000); assertThat(client.execute(get, handler), containsString("I ran changed!")); assertThat(client.execute(new HttpGet("http://localhost:23023/@doc"), handler), containsString("Werval Documentation")); client.getConnectionManager().shutdown(); } finally { devshellThread.interrupt(); } } }