blob: 319fac0b4c3d487e5bfb1c69ff698cfc988403e9 [file] [log] [blame]
/**
* 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.apache.aurora;
import java.util.List;
import javax.inject.Singleton;
import com.google.common.collect.ImmutableList;
import com.google.inject.AbstractModule;
import com.google.inject.CreationException;
import com.google.inject.Guice;
import com.google.inject.Injector;
import org.apache.aurora.GuiceUtils.AllowUnchecked;
import org.junit.Test;
import static org.junit.Assert.fail;
public class GuiceUtilsTest {
interface Flaky {
void get();
void append(List<String> strings);
void skipped();
}
interface AlsoFlaky extends Flaky {
void get(int value);
void put(String s);
}
static class NotSoFlakyImpl implements AlsoFlaky {
@Override
public void put(String s) {
throw new RuntimeException("Call failed");
}
@Override
public void append(List<String> strings) {
throw new RuntimeException("Call failed");
}
@AllowUnchecked
@Override
public void skipped() {
throw new RuntimeException("Call failed");
}
@Override
public void get(int value) {
throw new RuntimeException("Call failed");
}
@Override
public void get() {
throw new RuntimeException("Call failed");
}
}
@Test
public void testExceptionTrapping() {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
GuiceUtils.bindExceptionTrap(binder(), Flaky.class);
bind(Flaky.class).to(NotSoFlakyImpl.class);
bind(AlsoFlaky.class).to(NotSoFlakyImpl.class);
bind(NotSoFlakyImpl.class).in(Singleton.class);
}
});
AlsoFlaky flaky = injector.getInstance(AlsoFlaky.class);
flaky.get();
flaky.append(ImmutableList.of("hi"));
try {
flaky.put("hello");
fail("Should have thrown");
} catch (RuntimeException e) {
// Expected.
}
try {
flaky.get(2);
fail("Should have thrown");
} catch (RuntimeException e) {
// Expected.
}
try {
flaky.skipped();
fail("Should have thrown");
} catch (RuntimeException e) {
// Expected.
}
}
interface NonVoid {
int get();
}
@Test(expected = CreationException.class)
public void testNoTrappingNonVoidMethods() {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
GuiceUtils.bindExceptionTrap(binder(), NonVoid.class);
fail("Bind should have failed.");
}
});
}
interface NonVoidWhitelisted {
@AllowUnchecked
int getWhitelisted();
}
@Test
public void testWhitelistNonVoidMethods() {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
GuiceUtils.bindExceptionTrap(binder(), NonVoidWhitelisted.class);
}
});
}
}