Skip to content

Commit

Permalink
added unit tests and re-factored project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
Darren Bathgate committed Nov 6, 2015
1 parent 83e6535 commit a2eae43
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 17 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ dependencies {
compile (group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.3')

testCompile group: 'junit', name: 'junit', version: '4.+'
testCompile group: 'org.mockito', name: 'mockito-core', version: '1.10.19'
}

license {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.kenzan.karyon.rxnetty.resource;
package com.kenzan.karyon.rxnetty;

import io.netty.buffer.ByteBuf;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.kenzan.karyon.rxnetty.resource;
package com.kenzan.karyon.rxnetty;

import io.netty.buffer.ByteBuf;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
Expand All @@ -24,6 +24,7 @@
import rx.Observable;

import com.kenzan.karyon.rxnetty.health.HealthCheck;
import com.kenzan.karyon.rxnetty.resource.HelloResource;


public class ExampleRouter implements RequestHandler<ByteBuf, ByteBuf>{
Expand All @@ -38,6 +39,7 @@ public ExampleRouter() {
.addUri("/hello/*", new HelloResource())
.addUri("/healthcheck", new HealthCheckEndpoint(healthCheckHandler));
}

@Override
public Observable<Void> handle(HttpServerRequest<ByteBuf> request,
HttpServerResponse<ByteBuf> response) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
*/
package com.kenzan.karyon.rxnetty;

import com.kenzan.karyon.rxnetty.resource.ExampleRouteInterceptor;

import netflix.adminresources.resources.KaryonWebAdminModule;
import netflix.karyon.Karyon;
import netflix.karyon.ShutdownModule;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kenzan.karyon.rxnetty.endpoint;

import io.netty.buffer.ByteBuf;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;

import java.util.regex.Pattern;

import com.sun.jersey.api.uri.UriPattern;

import rx.Observable;

public class HelloEndpoint {

public Observable<String> getHello() {
return Observable.just("Hello");
}

public Observable<String> getHelloName(HttpServerRequest<ByteBuf> request) {
UriPattern pattern = new UriPattern(Pattern.compile("/hello/(.*)"));
String name = pattern.match(request.getUri()).group(1);

return Observable.just("Hello " + name);
}
}
36 changes: 23 additions & 13 deletions src/main/java/com/kenzan/karyon/rxnetty/resource/HelloResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@
*/
package com.kenzan.karyon.rxnetty.resource;

import java.util.regex.Pattern;

import netflix.karyon.transport.http.SimpleUriRouter;

import com.sun.jersey.api.uri.UriPattern;

import rx.Observable;
import io.netty.buffer.ByteBuf;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
import io.reactivex.netty.protocol.http.server.HttpServerResponse;
import io.reactivex.netty.protocol.http.server.RequestHandler;
import netflix.karyon.transport.http.SimpleUriRouter;
import rx.Observable;
import rx.functions.Func1;

import com.kenzan.karyon.rxnetty.endpoint.HelloEndpoint;

public class HelloResource implements RequestHandler<ByteBuf, ByteBuf>{

private final SimpleUriRouter<ByteBuf, ByteBuf> delegate;
private final HelloEndpoint endpoint;

public HelloResource() {
endpoint = new HelloEndpoint();
delegate = new SimpleUriRouter<>();

delegate
Expand All @@ -40,19 +40,29 @@ public HelloResource() {
public Observable<Void> handle(HttpServerRequest<ByteBuf> request,
HttpServerResponse<ByteBuf> response) {

response.writeString("Hello");
return response.close();
return endpoint.getHello()
.flatMap(new Func1<String, Observable<Void>>() {
@Override
public Observable<Void> call(String body) {
response.writeString(body);
return response.close();
}
});
}
})
.addUriRegex("/hello/(.*)", new RequestHandler<ByteBuf, ByteBuf>() {
@Override
public Observable<Void> handle(HttpServerRequest<ByteBuf> request,
HttpServerResponse<ByteBuf> response) {
UriPattern pattern = new UriPattern(Pattern.compile("/hello/(.*)"));
String name = pattern.match(request.getUri()).group(1);
response.writeString("Hello " + name);

return response.close();
return endpoint.getHelloName(request)
.flatMap(new Func1<String, Observable<Void>>() {
@Override
public Observable<Void> call(String body) {
response.writeString(body);
return response.close();
}
});
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.kenzan.karyon.rxnetty.endpoint;

import io.netty.buffer.ByteBuf;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

import rx.Observable;

@RunWith(MockitoJUnitRunner.class)
public class HelloEndpointTest {

@Mock
private HttpServerRequest<ByteBuf> request;

@Test
public void helloTest() {
HelloEndpoint helloEndpoint = new HelloEndpoint();

Observable<String> hello = helloEndpoint.getHello();

Assert.assertEquals("Hello", hello.toBlocking().first());
}

@Test
public void helloNameTest() {
HelloEndpoint helloEndpoint = new HelloEndpoint();

Mockito.when(request.getUri()).thenReturn("/hello/name");

Observable<String> hello = helloEndpoint.getHelloName(request);

Assert.assertEquals("Hello name", hello.toBlocking().first());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.kenzan.karyon.rxnetty.resource;

import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.util.Attribute;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
import io.reactivex.netty.protocol.http.server.HttpServerResponse;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

import com.kenzan.karyon.rxnetty.resource.HelloResource;

@RunWith(MockitoJUnitRunner.class)
public class HelloResourceTest {

@Mock
private HttpServerRequest<ByteBuf> request;

@Mock
private HttpServerResponse<ByteBuf> response;

@Mock
private Attribute<Object> attribute;

@Mock
private Channel channel;

@Before
public void setup() {
Mockito.when(channel.attr(Matchers.any())).thenReturn(attribute);
Mockito.when(response.getChannel()).thenReturn(channel);
}

@Test
public void helloTest() {
HelloResource helloResource = new HelloResource();

Mockito.when(request.getUri()).thenReturn("/hello");

helloResource.handle(request, response);
}

@Test
public void helloNameTest() {
HelloResource helloResource = new HelloResource();

Mockito.when(request.getUri()).thenReturn("/hello/name");

helloResource.handle(request, response);
}
}

0 comments on commit a2eae43

Please sign in to comment.