Browse Source

Merge pull request #1688 from svenkubiak/mangooio

Mangooio
Mike Smith 10 years ago
parent
commit
522673f15f
29 changed files with 700 additions and 0 deletions
  1. 1 0
      .travis.yml
  2. 2 0
      frameworks/Java/mangooio/README.md
  3. 28 0
      frameworks/Java/mangooio/benchmark_config.json
  4. 3 0
      frameworks/Java/mangooio/install.sh
  5. 123 0
      frameworks/Java/mangooio/pom.xml
  6. 10 0
      frameworks/Java/mangooio/setup.sh
  7. 24 0
      frameworks/Java/mangooio/src/main/java/conf/Lifecycle.java
  8. 15 0
      frameworks/Java/mangooio/src/main/java/conf/Module.java
  9. 23 0
      frameworks/Java/mangooio/src/main/java/conf/Routes.java
  10. 69 0
      frameworks/Java/mangooio/src/main/java/controllers/ApplicationController.java
  11. 7 0
      frameworks/Java/mangooio/src/main/java/interfaces/Constants.java
  12. 40 0
      frameworks/Java/mangooio/src/main/java/models/Fortune.java
  13. 9 0
      frameworks/Java/mangooio/src/main/java/models/Message.java
  14. 39 0
      frameworks/Java/mangooio/src/main/java/models/World.java
  15. 62 0
      frameworks/Java/mangooio/src/main/java/services/DataService.java
  16. 11 0
      frameworks/Java/mangooio/src/main/java/utils/RandomUtils.java
  17. 50 0
      frameworks/Java/mangooio/src/main/resources/application.conf
  18. 13 0
      frameworks/Java/mangooio/src/main/resources/ehcache.xml
  19. 1 0
      frameworks/Java/mangooio/src/main/resources/files/assets/javascripts/jquery.min.js
  20. 2 0
      frameworks/Java/mangooio/src/main/resources/files/robots.txt
  21. 13 0
      frameworks/Java/mangooio/src/main/resources/logback.prod.xml
  22. 11 0
      frameworks/Java/mangooio/src/main/resources/logback.xml
  23. 14 0
      frameworks/Java/mangooio/src/main/resources/templates/ApplicationController/fortunes.ftl
  24. 8 0
      frameworks/Java/mangooio/src/main/resources/templates/layout.ftl
  25. 2 0
      frameworks/Java/mangooio/src/main/resources/translations/messages.properties
  26. 2 0
      frameworks/Java/mangooio/src/main/resources/translations/messages_de.properties
  27. 1 0
      frameworks/Java/mangooio/src/main/resources/translations/messages_en.properties
  28. 6 0
      frameworks/Java/mangooio/src/test/java/mangooio/TestSuite.java
  29. 111 0
      frameworks/Java/mangooio/src/test/java/mangooio/controllers/ApplicationControllerTest.java

+ 1 - 0
.travis.yml

@@ -70,6 +70,7 @@ env:
     - "TESTDIR=Java/jawn"
     - "TESTDIR=Java/jawn"
     - "TESTDIR=Java/jetty-servlet"
     - "TESTDIR=Java/jetty-servlet"
     - "TESTDIR=Java/jetty"
     - "TESTDIR=Java/jetty"
+    - "TESTDIR=Java/mangooio"
     - "TESTDIR=Java/netty"
     - "TESTDIR=Java/netty"
     - "TESTDIR=Java/ninja-standalone"
     - "TESTDIR=Java/ninja-standalone"
     - "TESTDIR=Java/play1"
     - "TESTDIR=Java/play1"

+ 2 - 0
frameworks/Java/mangooio/README.md

@@ -0,0 +1,2 @@
+FrameworkBenchmarks-mangooio
+=============================

+ 28 - 0
frameworks/Java/mangooio/benchmark_config.json

@@ -0,0 +1,28 @@
+{
+  "framework": "mangooio",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "MongoDB",
+      "framework": "mangooio",
+      "language": "Java",
+      "orm": "Full",
+      "platform": "Undertow",
+      "webserver": "Undertow",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "mangoo I/O",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 3 - 0
frameworks/Java/mangooio/install.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+fw_depends java8 maven

+ 123 - 0
frameworks/Java/mangooio/pom.xml

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns="http://maven.apache.org/POM/4.0.0"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>mangooio</artifactId>
+	<groupId>de.svenkubiak.techempower</groupId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>jar</packaging>
+	<url>https://mangoo.io</url>
+	<properties>
+		<mangooio.version>1.0.0-Beta1</mangooio.version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+	<build>
+		<resources>
+			<resource>
+				<directory>src/main/java</directory>
+				<includes>
+					<include>**/*</include>
+				</includes>
+				<excludes>
+					<exclude>**/*.java</exclude>
+				</excludes>
+			</resource>
+			<resource>
+				<directory>src/main/resources</directory>
+				<includes>
+					<include>**/*</include>
+				</includes>
+			</resource>
+		</resources>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.18.1</version>
+				<configuration>
+					<includes>
+						<include>**/*TestSuite.java</include>
+					</includes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.2</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+					<compilerArgument>-parameters</compilerArgument>
+					<optimize>true</optimize>
+					<debug>false</debug>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>de.svenkubiak</groupId>
+				<artifactId>mangooio-maven-plugin</artifactId>
+				<version>${mangooio.version}</version>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.2</version>
+				<configuration>
+					<createDependencyReducedPom>false</createDependencyReducedPom>
+					<filters>
+						<filter>
+							<artifact>*:*</artifact>
+							<excludes>
+								<exclude>META-INF/*.SF</exclude>
+								<exclude>META-INF/*.DSA</exclude>
+								<exclude>META-INF/*.RSA</exclude>
+							</excludes>
+						</filter>
+					</filters>
+					<finalName>mangooioapp</finalName>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<configuration>
+							<transformers>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+									<mainClass>mangoo.io.core.Application</mainClass>
+								</transformer>
+							</transformers>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>de.svenkubiak</groupId>
+			<artifactId>mangooio-core</artifactId>
+			<version>${mangooio.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>de.svenkubiak</groupId>
+			<artifactId>mangooio-test-utilities</artifactId>
+			<version>${mangooio.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>de.svenkubiak</groupId>
+			<artifactId>embedded-mongodb</artifactId>
+			<version>4.1.1</version>
+		</dependency>
+		<dependency>
+			<groupId>de.svenkubiak</groupId>
+			<artifactId>mangooio-mongodb-extension</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+	</dependencies>
+</project>

+ 10 - 0
frameworks/Java/mangooio/setup.sh

@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# load java environment variables
+source $IROOT/java8.installed
+
+sed -i 's|mongodb.host=.*|mongodb.host='"${DBHOST}"'|g' src/main/resources/application.conf
+
+mvn clean package -Dmaven.test.skip=true
+
+java -jar target/mangooioapp.jar &

+ 24 - 0
frameworks/Java/mangooio/src/main/java/conf/Lifecycle.java

@@ -0,0 +1,24 @@
+package conf;
+
+import mangoo.io.core.Application;
+import mangoo.io.interfaces.MangooLifecycle;
+
+import com.google.inject.Singleton;
+
+import de.svenkubiak.embeddedmongodb.EmbeddedMongo;
+
+@Singleton
+public class Lifecycle implements MangooLifecycle {
+
+	@Override
+	public void applicationInitialized() {
+		if (Application.inTestMode()) {
+			EmbeddedMongo.DB.port(29019).start();
+		}
+	}
+
+	@Override
+    public void applicationStarted() {
+		// Do nothing for now
+	}
+}

+ 15 - 0
frameworks/Java/mangooio/src/main/java/conf/Module.java

@@ -0,0 +1,15 @@
+package conf;
+
+import mangoo.io.interfaces.MangooLifecycle;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Singleton;
+
+@Singleton
+public class Module extends AbstractModule {
+    
+	@Override
+    protected void configure() {
+        bind(MangooLifecycle.class).to(Lifecycle.class);
+    }
+}

+ 23 - 0
frameworks/Java/mangooio/src/main/java/conf/Routes.java

@@ -0,0 +1,23 @@
+package conf;
+
+import com.google.inject.Singleton;
+
+import io.undertow.util.Methods;
+import mangoo.io.interfaces.MangooRoutes;
+import mangoo.io.routing.Router;
+import controllers.ApplicationController;
+
+@Singleton
+public class Routes implements MangooRoutes {
+    
+	@Override
+    public void routify() {
+		Router.mapRequest(Methods.GET).toUrl("/").onClassAndMethod(ApplicationController.class, "index");
+        Router.mapRequest(Methods.GET).toUrl("/json").onClassAndMethod(ApplicationController.class, "json");
+        Router.mapRequest(Methods.GET).toUrl("/db").onClassAndMethod(ApplicationController.class, "db");
+        Router.mapRequest(Methods.GET).toUrl("/queries").onClassAndMethod(ApplicationController.class, "queries");
+        Router.mapRequest(Methods.GET).toUrl("/plaintext").onClassAndMethod(ApplicationController.class, "plaintext");
+        Router.mapRequest(Methods.GET).toUrl("/fortunes").onClassAndMethod(ApplicationController.class, "fortunes");
+        Router.mapRequest(Methods.GET).toUrl("/updates").onClassAndMethod(ApplicationController.class, "updates");
+    }
+}

+ 69 - 0
frameworks/Java/mangooio/src/main/java/controllers/ApplicationController.java

@@ -0,0 +1,69 @@
+package controllers;
+
+import interfaces.Constants;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import mangoo.io.routing.Response;
+import models.Fortune;
+import models.Message;
+import models.World;
+import services.DataService;
+import utils.RandomUtils;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class ApplicationController {
+	
+	@Inject
+	private DataService dataService;
+	
+	public Response index() {
+		return Response.withOk().andEmptyBody();
+	}
+
+	public Response json() {
+    	return Response.withOk().andJsonBody(new Message(Constants.HELLO_WORLD));
+    }
+	
+	public Response db() {
+		World world = dataService.findById(RandomUtils.getRandomId()); 
+    	return Response.withOk().andJsonBody(world);
+    }
+	
+	public Response queries(String queries) {
+		List<World> worlds = dataService.getWorlds(queries);
+		return Response.withOk().andJsonBody(worlds);
+    }
+	
+	public Response plaintext() {
+    	return Response.withOk().andTextBody(Constants.HELLO_WORLD);
+    }
+	
+	public Response fortunes() {
+		List<Fortune> fortunes = dataService.findAllFortunes();
+		fortunes.add(new Fortune(0, Constants.FORTUNE_MESSAGE));
+		Collections.sort(fortunes);
+		
+    	return Response.withOk().andContent("fortunes", fortunes);
+    }
+	
+	public Response updates(String queries) {
+		List<World> worldUpdates = new ArrayList<World>();
+		
+		List<World> worlds = dataService.getWorlds(queries);
+		for (World world : worlds) {
+			int randomNumber = RandomUtils.getRandomId();
+			world.setRandomnumber(randomNumber);
+			dataService.save(world);
+			
+			worldUpdates.add(world);
+		}
+		
+		return Response.withOk().andJsonBody(worldUpdates);
+    }
+}

+ 7 - 0
frameworks/Java/mangooio/src/main/java/interfaces/Constants.java

@@ -0,0 +1,7 @@
+package interfaces;
+
+public interface Constants {
+	public static final int ROWS = 10000;
+	public static final String HELLO_WORLD = "Hello, World!";
+	public static final String FORTUNE_MESSAGE = "Additional fortune added at request time.";
+}

+ 40 - 0
frameworks/Java/mangooio/src/main/java/models/Fortune.java

@@ -0,0 +1,40 @@
+package models;
+
+import java.io.Serializable;
+
+import org.bson.types.ObjectId;
+import org.mongodb.morphia.annotations.Id;
+import org.mongodb.morphia.annotations.Indexed;
+
+public class Fortune  implements Serializable, Comparable<Fortune> {
+	private static final long serialVersionUID = 3493429313579555024L;
+
+    @Id
+    protected ObjectId objectId;
+	
+	@Indexed(unique=true)
+	private long id;
+	
+	private String message;
+	
+	public Fortune(){
+	}
+	
+	public Fortune(long id, String message) {
+		this.id = id;
+		this.message = message;
+ 	}
+
+	public String getMessage() {
+		return message;
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	@Override
+    public int compareTo(Fortune other) {
+        return message.compareTo(other.message);
+    }
+}

+ 9 - 0
frameworks/Java/mangooio/src/main/java/models/Message.java

@@ -0,0 +1,9 @@
+package models;
+
+public class Message {
+	public final String message;
+
+	public Message(String message) {
+		this.message = message;
+	}
+}

+ 39 - 0
frameworks/Java/mangooio/src/main/java/models/World.java

@@ -0,0 +1,39 @@
+package models;
+
+import java.io.Serializable;
+
+import org.bson.types.ObjectId;
+import org.mongodb.morphia.annotations.Id;
+import org.mongodb.morphia.annotations.Indexed;
+
+public class World implements Serializable {
+	private static final long serialVersionUID = -3219780537751230815L;
+
+    @Id
+    protected ObjectId objectId;
+	
+	@Indexed(unique=true)
+	private long id;
+	
+	private int randomNumber;
+	
+	public World() {
+	}
+	
+	public World(long id, int randomNumber) {
+		this.id = id;
+		this.randomNumber = randomNumber;
+	}
+
+	public int getRandomNumber() {
+		return this.randomNumber;
+	}
+
+	public void setRandomnumber(int randomNumber) {
+		this.randomNumber = randomNumber;
+	}
+	
+	public long getId() {
+		return id;
+	}
+}

+ 62 - 0
frameworks/Java/mangooio/src/main/java/services/DataService.java

@@ -0,0 +1,62 @@
+package services;
+
+import interfaces.Constants;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+import org.apache.commons.lang.StringUtils;
+
+import models.Fortune;
+import models.World;
+
+import com.google.inject.Inject;
+
+import de.svenkubiak.mangoo.mongodb.MongoDB;
+
+public class DataService {
+    private MongoDB mongoDB;
+
+    @Inject
+    public DataService(MongoDB mongoDB) {
+    	this.mongoDB = mongoDB;
+        this.mongoDB.ensureIndexes(true);
+    }
+
+    public World findById(int id) {
+        return this.mongoDB.getDatastore().find(World.class).field("id").equal(id).retrievedFields(false, "_id").get();
+    }
+    
+    public List<World> find(int queries) {
+    	return this.mongoDB.getDatastore().find(World.class).retrievedFields(false, "_id").asList();
+    }
+
+	public void save(Object object) {
+		this.mongoDB.getDatastore().save(object);
+	}
+	
+	public List<World> getWorlds(String queries) {
+		int query = 1;
+		if (StringUtils.isNotBlank(queries) && StringUtils.isNumeric(queries)) {
+			query = Integer.valueOf(queries);
+		}
+		
+		if (query <= 1) {
+			query = 1;
+		} else if (query > 500) {
+			query = 500;
+		}
+		
+		List<World> worlds = new ArrayList<World>();
+		for (int i=0; i < query; i++) {
+			int id = ThreadLocalRandom.current().nextInt(Constants.ROWS) + 1;
+			worlds.add(findById(id));
+		}
+		return worlds;
+	}
+
+	public List<Fortune> findAllFortunes() {
+		return this.mongoDB.getDatastore().find(Fortune.class).retrievedFields(false, "_id").asList();
+	}
+}

+ 11 - 0
frameworks/Java/mangooio/src/main/java/utils/RandomUtils.java

@@ -0,0 +1,11 @@
+package utils;
+
+import interfaces.Constants;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+public final class RandomUtils {
+	public static int getRandomId() {
+		return ThreadLocalRandom.current().nextInt(Constants.ROWS) + 1;
+	}
+}

+ 50 - 0
frameworks/Java/mangooio/src/main/resources/application.conf

@@ -0,0 +1,50 @@
+# The main properties file to configure your application
+#
+# Properties can be prefixed by "%".
+# "%"" matches a mode you can set as system property. For instance when you
+# are using maven you can do: mvn -Dmode=test jetty:run
+#
+# Using that the following property:
+# %test.myproperty=test property
+# would overwrite the property
+# myproperty=my property
+
+application.host=localhost
+application.port=8080
+%test.application.host=localhost
+%test.application.port=10808
+
+application.name=mangooio.techempower
+application.secret=myvoiceismypassword
+application.language=en
+
+cookie.name=${application.name}-SESSION
+cookie.expires=86400
+cookie.encryption=false
+
+smtp.host=localhost
+smtp.port=3025
+%test.smtp.host=localhost
+%test.smtp.port=3055
+
+smtp.username=
+smtp.password=
+smtp.ssl=false
+
+mongodb.host127.0.0.1
+mongodb.port=27017           
+mongodb.dbname=hello_world     
+mongodb.user=         
+mongodb.pass=         
+mongodb.authdb=     
+morphia.package=models     
+morphia.init=true
+
+%test.mongodb.host127.0.0.1
+%test.mongodb.port=29019           
+%test.mongodb.dbname=test     
+%test.mongodb.user=         
+%test.mongodb.pass=         
+%test.mongodb.authdb=     
+%test.morphia.package=models     
+%test.morphia.init=true       

+ 13 - 0
frameworks/Java/mangooio/src/main/resources/ehcache.xml

@@ -0,0 +1,13 @@
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">
+    <defaultCache
+            maxElementsInMemory="10000"
+            eternal="false"
+            timeToIdleSeconds="120"
+            timeToLiveSeconds="120"
+            overflowToDisk="false"
+            maxElementsOnDisk="10000000"
+            diskPersistent="false"
+            diskExpiryThreadIntervalSeconds="120"
+            memoryStoreEvictionPolicy="LRU"
+    /> 
+</ehcache>

File diff suppressed because it is too large
+ 1 - 0
frameworks/Java/mangooio/src/main/resources/files/assets/javascripts/jquery.min.js


+ 2 - 0
frameworks/Java/mangooio/src/main/resources/files/robots.txt

@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /

+ 13 - 0
frameworks/Java/mangooio/src/main/resources/logback.prod.xml

@@ -0,0 +1,13 @@
+<configuration>
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>info</level>
+		</filter>
+		<encoder>
+			<pattern>%d{dd.MM.yyyy;HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+		</encoder>
+	</appender>
+	<root level="FATAL">
+		<appender-ref ref="STDOUT" />
+	</root>
+</configuration>

+ 11 - 0
frameworks/Java/mangooio/src/main/resources/logback.xml

@@ -0,0 +1,11 @@
+<configuration>
+	<logger name="org.mongodb" level="FATAL"/>
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>%d{dd.MM.yyyy;HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+		</encoder>
+	</appender>
+	<root level="FATAL">
+		<appender-ref ref="STDOUT" />
+	</root>
+</configuration>

+ 14 - 0
frameworks/Java/mangooio/src/main/resources/templates/ApplicationController/fortunes.ftl

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head><title>Fortunes</title></head>
+<body>
+<table>
+<tr><th>id</th><th>message</th></tr>
+<#if fortunes?has_content>
+<#list fortunes as fortune>
+<tr><td>${fortune.id}</td><td>${fortune.message}</td></tr>
+</#list>
+</#if>
+</table>
+</body>
+</html>

File diff suppressed because it is too large
+ 8 - 0
frameworks/Java/mangooio/src/main/resources/templates/layout.ftl


+ 2 - 0
frameworks/Java/mangooio/src/main/resources/translations/messages.properties

@@ -0,0 +1,2 @@
+welcome=willkommen
+test=dies ist der {0} test dieser {1} super app

+ 2 - 0
frameworks/Java/mangooio/src/main/resources/translations/messages_de.properties

@@ -0,0 +1,2 @@
+welcome=willkommen
+test=dies ist der {0} test dieser {1} super app

+ 1 - 0
frameworks/Java/mangooio/src/main/resources/translations/messages_en.properties

@@ -0,0 +1 @@
+welcome=welcome

+ 6 - 0
frameworks/Java/mangooio/src/test/java/mangooio/TestSuite.java

@@ -0,0 +1,6 @@
+package mangooio;
+
+import mangoo.io.testing.MangooRunner;
+
+public class TestSuite extends MangooRunner {
+}

+ 111 - 0
frameworks/Java/mangooio/src/test/java/mangooio/controllers/ApplicationControllerTest.java

@@ -0,0 +1,111 @@
+package mangooio.controllers;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import interfaces.Constants;
+import io.undertow.util.StatusCodes;
+
+import java.util.UUID;
+
+import mangoo.io.core.Application;
+import mangoo.io.testing.MangooRequest;
+import mangoo.io.testing.MangooResponse;
+import models.Fortune;
+import models.World;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import services.DataService;
+import utils.RandomUtils;
+import de.svenkubiak.embeddedmongodb.EmbeddedMongo;
+
+public class ApplicationControllerTest {
+	private static final String HELLO_WORLD_JSON = "{\"message\":\"Hello, World!\"}";
+	
+	@BeforeClass()
+	public static void preloadData() {
+		DataService dataService = Application.getInjector().getInstance(DataService.class);
+		for (int i=0; i < Constants.ROWS; i++) {
+			World world = new World(i + 1, RandomUtils.getRandomId());
+			dataService.save(world);
+			
+			Fortune fortune = new Fortune(i + 1, UUID.randomUUID().toString());
+			dataService.save(fortune);
+		}
+	}
+
+	@Test
+	public void testIndex() {
+		MangooResponse mangooResponse = MangooRequest.get("/").execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+	}
+	
+	@Test
+	public void testJson() {
+		MangooResponse mangooResponse = MangooRequest.get("/json").execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+		assertEquals(HELLO_WORLD_JSON, mangooResponse.getContent());
+	}
+	
+	@Test
+	public void testDb() {
+		MangooResponse mangooResponse = MangooRequest.get("/db").execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+		assertTrue(mangooResponse.getContent().contains("id"));
+		assertTrue(mangooResponse.getContent().contains("randomNumber"));
+	}
+	
+	@Test
+	public void testQueries() {
+		int queries = RandomUtils.getRandomId();
+		MangooResponse mangooResponse = MangooRequest.get("/db?queries=" + queries).execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+		assertTrue(mangooResponse.getContent().contains("id"));
+		assertTrue(mangooResponse.getContent().contains("randomNumber"));
+	}
+	
+	@Test
+	public void testPlaintext() {
+		MangooResponse mangooResponse = MangooRequest.get("/plaintext").execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+		assertEquals(Constants.HELLO_WORLD, mangooResponse.getContent());
+	}
+	
+	@Test
+	public void testFortunes() {
+		MangooResponse mangooResponse = MangooRequest.get("/fortunes").execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+		assertTrue(mangooResponse.getContent().contains("id"));
+		assertTrue(mangooResponse.getContent().contains(Constants.FORTUNE_MESSAGE));
+	}
+	
+	@Test
+	public void testUpdates() {
+		int queries = RandomUtils.getRandomId();
+		MangooResponse mangooResponse = MangooRequest.get("/updates?queries=" + queries).execute();
+		
+		assertNotNull(mangooResponse);
+		assertEquals(StatusCodes.OK, mangooResponse.getStatusCode());
+		assertTrue(mangooResponse.getContent().contains("id"));
+	}
+	
+	@AfterClass
+	public static void stopMongoDB() {
+		EmbeddedMongo.DB.stop();
+	}
+}

Some files were not shown because too many files changed in this diff