package org.jooby.internal.aws;
import org.jooby.test.MockUnit;
import org.junit.Test;
import com.amazonaws.AmazonWebServiceClient;
public class AwsShutdownSupportTest {
public static class NoShutdown {
}
public static class ShutdownOverloaded {
public void shutdownNow() {
}
public void shutdownNow(final boolean now) {
}
}
public static class ShutdownErr {
public void shutdown() {
throw new UnsupportedOperationException();
}
}
@Test
public void defaults() throws Exception {
new MockUnit(AmazonWebServiceClient.class)
.run(unit -> {
new AwsShutdownSupport(unit.get(AmazonWebServiceClient.class));
});
}
@Test
public void stop() throws Exception {
new MockUnit(AmazonWebServiceClient.class)
.expect(unit -> {
unit.get(AmazonWebServiceClient.class).shutdown();
})
.run(unit -> {
AwsShutdownSupport aws = new AwsShutdownSupport(unit.get(AmazonWebServiceClient.class));
aws.run();
aws.run();
});
}
@Test
public void nostop() throws Exception {
new MockUnit(NoShutdown.class)
.run(unit -> {
AwsShutdownSupport aws = new AwsShutdownSupport(unit.get(NoShutdown.class));
aws.run();
});
}
@Test
@SuppressWarnings("unused")
public void shouldIgnorePrivateStop() throws Exception {
new MockUnit()
.run(unit -> {
AwsShutdownSupport aws = new AwsShutdownSupport(new Object() {
private void shutdown() {
throw new UnsupportedOperationException();
}
});
aws.run();
});
}
@Test
public void shutdownOverloaded() throws Exception {
new MockUnit(ShutdownOverloaded.class)
.expect(unit -> {
unit.get(ShutdownOverloaded.class).shutdownNow();
})
.run(unit -> {
AwsShutdownSupport aws = new AwsShutdownSupport(unit.get(ShutdownOverloaded.class));
aws.run();
});
}
@Test(expected = UnsupportedOperationException.class)
public void stopErr() throws Exception {
new MockUnit()
.run(unit -> {
AwsShutdownSupport aws = new AwsShutdownSupport(new ShutdownErr());
aws.run();
});
}
@Test(expected = IllegalStateException.class)
@SuppressWarnings("unused")
public void stopNoRuntimeErr() throws Exception {
new MockUnit()
.run(unit -> {
AwsShutdownSupport aws = new AwsShutdownSupport(new Object() {
public void shutdown() throws Throwable {
throw new Throwable();
}
});
aws.run();
});
}
}