Skip to content

Commit

Permalink
rs-mock
Browse files Browse the repository at this point in the history
  • Loading branch information
ccaner committed Jun 28, 2012
1 parent 0dbfe34 commit ac6c415
Show file tree
Hide file tree
Showing 29 changed files with 558 additions and 340 deletions.
36 changes: 31 additions & 5 deletions baseline/service/src/main/java/play/baseline/model/Pet.java
@@ -1,14 +1,16 @@
package play.baseline.model;

public class Pet {
import java.io.Serializable;

public class Pet implements Serializable {

int id;
private int id;

String name;
private String name;

int age;
private int age;

String owner;
private String owner;

public Pet() {
}
Expand Down Expand Up @@ -44,4 +46,28 @@ public String getOwner() {
public void setOwner(String owner) {
this.owner = owner;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Pet pet = (Pet) o;

if (age != pet.age) return false;
if (id != pet.id) return false;
if (name != null ? !name.equals(pet.name) : pet.name != null) return false;
if (owner != null ? !owner.equals(pet.owner) : pet.owner != null) return false;

return true;
}

@Override
public int hashCode() {
int result = id;
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + age;
result = 31 * result + (owner != null ? owner.hashCode() : 0);
return result;
}
}
Expand Up @@ -77,6 +77,7 @@ private Callable<?> getExecutableByUri(final URI requestURI) {
return new Callable<Object>() {
@Override
public Object call() throws Exception {
System.out.println("method = " + getArgs(method, requestURI.getPath())[0]);
return method.invoke(service, getArgs(method, requestURI.getPath()));
}
};
Expand Down
15 changes: 4 additions & 11 deletions baseline/service/src/main/resources/applicationContext.xml
Expand Up @@ -7,20 +7,13 @@
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

<import resource="dao-context.xml"/>

<bean name="baselineService" class="play.baseline.BaselineServiceImpl" >
<property name="petDao" ref="petDao" />
</bean>

<bean name="petDao" class="play.baseline.dao.PetDaoImpl" >
<constructor-arg ref="embeddedDb" />
</bean>

<jdbc:embedded-database id="embeddedDb" type="HSQL">
<jdbc:script location="classpath:db/schema.sql"/>
<jdbc:script location="classpath:db/pets.sql"/>
</jdbc:embedded-database>

<bean name="myServiceExporter"
<bean name="baselineServiceExporter"
class="play.baseline.util.SimpleHttpExporter">
<constructor-arg ref="baselineService"/>
<constructor-arg value="play.baseline.BaselineService"/>
Expand All @@ -30,7 +23,7 @@
class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
<property name="contexts">
<util:map>
<entry key="/" value-ref="myServiceExporter"/>
<entry key="/" value-ref="baselineServiceExporter"/>
</util:map>
</property>
<property name="port" value="8118" />
Expand Down
19 changes: 19 additions & 0 deletions baseline/service/src/main/resources/dao-context.xml
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

<bean name="petDao" class="play.baseline.dao.PetDaoImpl">
<constructor-arg ref="dataSource"/>
</bean>

<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:db/schema.sql"/>
<jdbc:script location="classpath:db/pets.sql"/>
</jdbc:embedded-database>

</beans>
10 changes: 10 additions & 0 deletions baseline/service/src/main/resources/log4j.properties
@@ -0,0 +1,10 @@
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
log4j.logger.org.springframework=INFO

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
76 changes: 76 additions & 0 deletions baseline/service/src/test/java/remotemock/IntegrationTest.java
@@ -0,0 +1,76 @@
package remotemock;

import com.google.common.collect.Lists;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mock;
import org.springframework.util.AntPathMatcher;
import play.baseline.BaselineService;
import play.baseline.Main;
import play.baseline.model.Pet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static org.mockito.Mockito.doReturn;

/**
* Run server. (with database)
* Make a call & check result
*/
public class IntegrationTest {

private static String PATH_QUERY_BY_NAME = "/pets/list/name={name}&age={age}";

private static Process server;

@BeforeClass
public static void startServer() throws IOException, InterruptedException {
String classpath = System.getProperty("java.class.path");
String className = Main.class.getCanonicalName();
ProcessBuilder pb = new ProcessBuilder("java", "-cp", classpath, className, "-Dlog4j.debug=true");
pb.inheritIO();
server = pb.start();
Thread.sleep(5000);
}

@org.junit.Test
public void testListByNameAndAge() throws InterruptedException, IOException {
String query = PATH_QUERY_BY_NAME.replace("{name}", "Cango").replace("{age}", "3");
String response = getResponse(query);

ObjectMapper mapper = new ObjectMapper();
List<Pet> pets = mapper.readValue(response, new TypeReference<List<Pet>>() {
});

Pet pet = new Pet();
pet.setId(1);
pet.setName("Cango");
pet.setAge(3);
pet.setOwner("Osman Bosman");
List<Pet> exptected = Lists.newArrayList(pet);

Assert.assertEquals("Invalid return value", exptected, pets);
}

@AfterClass
public static void stopServer() throws IOException {
server.destroy();
}

private String getResponse(String path) throws IOException {
URL url = new URL("http://localhost:8118" + path);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
return reader.readLine();
}

}
27 changes: 0 additions & 27 deletions baseline/service/src/test/java/remotemock/TestMock.java

This file was deleted.

@@ -1,6 +1,9 @@
package play.resultsetmock.jdbc;
package remotemock;

import org.junit.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import play.baseline.dao.PetDao;
import play.baseline.dao.PetDaoImpl;
import play.baseline.model.Pet;
Expand All @@ -11,25 +14,16 @@
import java.util.List;

/**
* Assume db contains;
*
* <table>
* <tr><th>name</th><th>age</th><th>owner_firstname</th><th>owner_lastname</th></tr>
* <tr><td>Cango</td><td>3</td><td>Osman</td><td>Bosman</td></tr>
* <tr><td>Koko</td><td>8</td><td>Hakan</td><td>Tarkan</td></tr>
* <tr><td>Toto</td><td>9</td><td>Osman</td><td>Bosman</td></tr>
* </table>
*
* The aim is to make this test pass using different DataSources
* Use actual db.
*/
public class UnitTestPetDao {

DataSource dataSource; // injected
private static PetDao petDao; // class under test

private PetDao petDao; // class under test

public void init() {
petDao = new PetDaoImpl(dataSource);
@BeforeClass
public static void setup() {
ApplicationContext context = new ClassPathXmlApplicationContext("dao-context.xml");
petDao = (PetDao) context.getBean("petDao");
}

@org.junit.Test
Expand Down
5 changes: 5 additions & 0 deletions baseline/stub-service/pom.xml
Expand Up @@ -29,5 +29,10 @@
<artifactId>remotemock</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>ccaner.play</groupId>
<artifactId>resultsetmock</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,23 @@
package play.baseline.stub;

import play.resultsetmock.annotations.Param;
import play.resultsetmock.annotations.Query;

/**
* With this interface we map sql queries, updates, calls to Java methods.
*/
public interface MockDatabase {

@Query("select * from pets where name = ? and age = ?")
public QueryResult queryPetsTable(
@Param("name") String name,
@Param("age") int age);

/*
@Query("select * from pets where owner_firstname = ?")
public QueryResult queryPetsTable(
@Param("owner_firstname") String ownerFirstName);
*/


}
@@ -0,0 +1,28 @@
package play.baseline.stub;

import play.baseline.model.Pet;
import play.remotemock.annotation.Remotable;
import play.resultsetmock.annotations.Param;
import play.resultsetmock.annotations.Query;

import java.util.List;

/**
* Default responses for sql calls, updates, queries... So that stub server starts up without errors.
*/
@Remotable(MockDatabase.class)
public class MockDatabaseImpl implements MockDatabase {

@Override
public QueryResult queryPetsTable(String name, int age) {
return null;
}

/*
@Override
public QueryResult queryPetsTable(String ownerFirstName) {
return null;
}
*/

}
@@ -0,0 +1,13 @@
package play.baseline.stub;

import java.io.Serializable;

/**
* Created by IntelliJ IDEA.
* User: akpinarc
* Date: 6/28/12
* Time: 2:02 PM
* To change this template use File | Settings | File Templates.
*/
public interface QueryResult extends Serializable {
}

This file was deleted.

0 comments on commit ac6c415

Please sign in to comment.