package org.jooby.aws;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
import org.jooby.Env;
import org.jooby.internal.aws.AwsShutdownSupport;
import org.jooby.test.MockUnit;
import org.junit.Test;
import com.amazonaws.AmazonWebServiceClient;
import com.amazonaws.ClientConfiguration;
import com.google.inject.Binder;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.typesafe.config.Config;
import net.sf.cglib.proxy.Factory;
public class AwsTest {
@Test
public void defaults() throws Exception {
new MockUnit(Env.class, Config.class, Binder.class)
.run(unit -> {
new Aws()
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
});
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test
public void withServiceWithInterface() throws Exception {
new MockUnit(Env.class, Config.class, Binder.class, AmazonWebServiceClient.class)
.expect(unit -> {
Config config = unit.get(Config.class);
expect(config.hasPath("aws.s3.accessKey")).andReturn(false);
expect(config.hasPath("aws.s3.secretKey")).andReturn(false);
expect(config.hasPath("aws.s3.sessionToken")).andReturn(false);
expect(config.hasPath("aws.sessionToken")).andReturn(false);
expect(config.getString("aws.accessKey")).andReturn("accessKey");
expect(config.getString("aws.secretKey")).andReturn("secretKey");
})
.expect(unit -> {
AmazonWebServiceClient aws = unit.get(AmazonWebServiceClient.class);
expect(aws.getServiceName()).andReturn("s3");
})
.expect(unit -> {
AmazonWebServiceClient aws = unit.get(AmazonWebServiceClient.class);
AnnotatedBindingBuilder abbAWSC = unit.mock(AnnotatedBindingBuilder.class);
abbAWSC.toInstance(aws);
abbAWSC.toInstance(aws);
Binder binder = unit.get(Binder.class);
expect(binder.bind(Factory.class)).andReturn(abbAWSC);
expect(binder.bind(aws.getClass())).andReturn(abbAWSC);
})
.expect(unit -> {
Env env = unit.get(Env.class);
expect(env.onStop(isA(AwsShutdownSupport.class))).andReturn(env);
})
.run(unit -> {
new Aws()
.with(creds -> unit.get(AmazonWebServiceClient.class))
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
});
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test
public void withServiceWithoutInterface() throws Exception {
AmazonWebServiceClient aws = new AmazonWebServiceClient(new ClientConfiguration()) {
@Override
public String getServiceName() {
return "s3";
}
};
new MockUnit(Env.class, Config.class, Binder.class)
.expect(unit -> {
Config config = unit.get(Config.class);
expect(config.hasPath("aws.s3.accessKey")).andReturn(false);
expect(config.hasPath("aws.s3.secretKey")).andReturn(false);
expect(config.hasPath("aws.s3.sessionToken")).andReturn(false);
expect(config.hasPath("aws.sessionToken")).andReturn(false);
expect(config.getString("aws.accessKey")).andReturn("accessKey");
expect(config.getString("aws.secretKey")).andReturn("secretKey");
})
.expect(unit -> {
AnnotatedBindingBuilder abbAWSC = unit.mock(AnnotatedBindingBuilder.class);
abbAWSC.toInstance(aws);
Binder binder = unit.get(Binder.class);
expect(binder.bind(aws.getClass())).andReturn(abbAWSC);
})
.expect(unit -> {
Env env = unit.get(Env.class);
expect(env.onStop(isA(AwsShutdownSupport.class))).andReturn(env);
})
.run(unit -> {
new Aws()
.with(creds -> aws)
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
});
}
}