blob: 46c4393a5da1e4478979a006090b1fc431f0704c [file] [log] [blame]
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.jclouds.rest;
import static org.testng.Assert.assertEquals;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.jclouds.http.RequiresHttp;
import org.jclouds.http.config.ConfiguresHttpCommandExecutorService;
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
import org.jclouds.logging.config.LoggingModule;
import org.jclouds.logging.config.NullLoggingModule;
import org.jclouds.logging.jdk.config.JDKLoggingModule;
import org.testng.annotations.Test;
import com.google.inject.AbstractModule;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.TypeLiteral;
/**
* Tests behavior of modules configured in RestContextBuilder<String,String>
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "rest.RestContextBuilderTest")
public class RestContextBuilderTest {
@ConfiguresHttpCommandExecutorService
static class HttpModule extends AbstractModule {
@Override
protected void configure() {
}
}
class TestRestContext implements RestContext<String, String> {
public void close() {
}
public String getApi() {
return "";
}
public String getAsyncApi() {
return "";
}
public String getAccount() {
return "";
}
public URI getEndPoint() {
return URI.create("http://localhost");
}
public <T> T getApi(Class<T> clazz) {
return null;
}
}
class TestRestContextBuilder extends RestContextBuilder<String, String> {
protected TestRestContextBuilder(Properties properties) {
super(new TypeLiteral<String>() {
}, new TypeLiteral<String>() {
}, properties);
}
@Override
public TestRestContext buildContext() {
return new TestRestContext();
}
@Override
protected void addContextModule(List<Module> modules) {
// ignored as we add it directly above without use of injection
}
@Override
protected void addClientModule(List<Module> modules) {
}
}
@Test
public void testAddHttpModuleIfNotPresent() {
List<Module> modules = new ArrayList<Module>();
HttpModule module = new HttpModule();
modules.add(module);
new TestRestContextBuilder(new Properties()).addHttpModuleIfNeededAndNotPresent(modules);
assertEquals(modules.size(), 1);
assertEquals(modules.remove(0), module);
}
@Test
public void testAddLoggingModuleIfNotPresent() {
List<Module> modules = new ArrayList<Module>();
LoggingModule module = new NullLoggingModule();
modules.add(module);
new TestRestContextBuilder(new Properties()).addLoggingModuleIfNotPresent(modules);
assertEquals(modules.size(), 1);
assertEquals(modules.remove(0), module);
}
@Test
public void testAddNone() {
List<Module> modules = new ArrayList<Module>();
LoggingModule loggingModule = new NullLoggingModule();
modules.add(loggingModule);
HttpModule httpModule = new HttpModule();
modules.add(httpModule);
TestRestContextBuilder builder = new TestRestContextBuilder(new Properties());
builder.addHttpModuleIfNeededAndNotPresent(modules);
builder.addLoggingModuleIfNotPresent(modules);
assertEquals(modules.size(), 2);
assertEquals(modules.remove(0), loggingModule);
assertEquals(modules.remove(0), httpModule);
}
@Test
public void testAddBothWhenDoesntRequireHttp() {
List<Module> modules = new ArrayList<Module>();
TestRestContextBuilder builder = new TestRestContextBuilder(new Properties());
builder.addHttpModuleIfNeededAndNotPresent(modules);
builder.addLoggingModuleIfNotPresent(modules);
assertEquals(modules.size(), 1);
assert modules.remove(0) instanceof JDKLoggingModule;
}
@RequiresHttp
class RequiresHttpModule implements Module {
public void configure(Binder arg0) {
}
}
@Test
public void testAddBothWhenLive() {
List<Module> modules = new ArrayList<Module>();
modules.add(new RequiresHttpModule());
TestRestContextBuilder builder = new TestRestContextBuilder(new Properties());
builder.addHttpModuleIfNeededAndNotPresent(modules);
builder.addLoggingModuleIfNotPresent(modules);
assertEquals(modules.size(), 3);
assert modules.remove(0) instanceof RequiresHttpModule;
assert modules.remove(0) instanceof JavaUrlHttpCommandExecutorServiceModule;
assert modules.remove(0) instanceof JDKLoggingModule;
}
public void testBuilder() {
AbstractModule module1 = new AbstractModule() {
@Override
protected void configure() {
}
};
AbstractModule module2 = new AbstractModule() {
@Override
protected void configure() {
}
};
TestRestContextBuilder builder = new TestRestContextBuilder(new Properties());
builder.withModules(module1, module2);
}
}