| /** |
| * 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); |
| } |
| }); |
| } |
| } |