package app.registry.com.aol.micro.server;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutionException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.aol.micro.server.MicroserverApp;
import com.aol.micro.server.application.registry.RegisterEntry;
import com.aol.micro.server.config.Microserver;
import com.aol.micro.server.rest.client.nio.AsyncRestClient;
import com.aol.micro.server.rest.jackson.JacksonUtil;
import com.aol.micro.server.testing.RestAgent;
@Microserver(properties = { "service.registry.url", "http://localhost:8080/registry-app", "target.endpoint",
"configured-target" })
public class RegistryAppRunner {
RestAgent rest = new RestAgent();
private final AsyncRestClient restAsync = new AsyncRestClient(
100, 2000);
MicroserverApp server;
@Before
public void startServer() {
server = new MicroserverApp(
() -> "registry-app");
server.start();
}
@After
public void stopServer() {
server.stop();
}
@Test
public void runAppAndBasicTest() throws InterruptedException, ExecutionException {
SimpleDateFormat f = new SimpleDateFormat(
"EEE");
String date = f.format(new Date());
Thread.sleep(1000);
assertThat(rest.post("http://localhost:8080/registry-app/service-registry/schedule"),
is("{\"status\":\"success\"}"));
Thread.sleep(1000);
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("[{\"port\":8080,"));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("externalPort\":8080"));
sendPing(new RegisterEntry(
8081, "use-ip", "hello", "world", new Date(), "my-target", 8082));
Thread.sleep(1000);
System.out.println(rest.getJson("http://localhost:8080/registry-app/service-registry/list"));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("{\"port\":8081,"));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("\"target\":\"my-target\""));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("\"target\":\"configured-target\""));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
not(containsString("\"hostname\":\"test-host\"")));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("\"formattedDate\""));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("\"manifest\""));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"),
containsString("Manifest-Version"));
assertThat(rest.getJson("http://localhost:8080/registry-app/service-registry/list"), containsString(date));
}
private void sendPing(RegisterEntry entry) {
try {
restAsync.post("http://localhost:8080/registry-app/service-registry/register",
JacksonUtil.serializeToJson(entry))
.join();
} catch (Exception e) {
}
}
}