From 5f021b6d594ca0c4cf97621f5c893297e65f1879 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Thu, 24 Aug 2017 10:33:15 +0200 Subject: Do not fail if CloseableComponent's shutdown fails Change-Id: I6875874f5b388a4d289c538f2d3dbfd4ff6feec3 Signed-off-by: Marek Gradzki --- .../fd/honeycomb/impl/ShutdownHandlerImplTest.java | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 infra/minimal-distribution-test/src/test/java/io/fd/honeycomb/impl/ShutdownHandlerImplTest.java (limited to 'infra/minimal-distribution-test/src') diff --git a/infra/minimal-distribution-test/src/test/java/io/fd/honeycomb/impl/ShutdownHandlerImplTest.java b/infra/minimal-distribution-test/src/test/java/io/fd/honeycomb/impl/ShutdownHandlerImplTest.java new file mode 100644 index 000000000..4e8135488 --- /dev/null +++ b/infra/minimal-distribution-test/src/test/java/io/fd/honeycomb/impl/ShutdownHandlerImplTest.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * 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 io.fd.honeycomb.impl; + +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.Mockito; + +public class ShutdownHandlerImplTest { + + private ShutdownHandlerImpl shutdownHandler; + + @Before + public void setUp() { + shutdownHandler = new ShutdownHandlerImpl(); + } + + @Test + public void testShutdownOrder() throws Exception { + AutoCloseable component0 = mock(AutoCloseable.class); + AutoCloseable component1 = mock(AutoCloseable.class); + AutoCloseable component2 = mock(AutoCloseable.class); + InOrder inOrder = Mockito.inOrder(component0, component1, component2); + shutdownHandler.register("component0", component0); + shutdownHandler.register("component1", component1); + shutdownHandler.register("component2", component2); + shutdownHandler.performShutdown(); + + // check the order was reversed + inOrder.verify(component2).close(); + inOrder.verify(component1).close(); + inOrder.verify(component0).close(); + } + + @Test + public void testShutdownFail() throws Exception { + AutoCloseable component0 = mock(AutoCloseable.class); + AutoCloseable component1 = mock(AutoCloseable.class); + doThrow(new IllegalStateException()).when(component1).close(); + AutoCloseable component2 = mock(AutoCloseable.class); + InOrder inOrder = Mockito.inOrder(component0, component1, component2); + shutdownHandler.register("component0", component0); + shutdownHandler.register("component1", component1); + shutdownHandler.register("component2", component2); + shutdownHandler.performShutdown(); + + // shoutdown failed for component1, but other components should be closed + inOrder.verify(component2).close(); + inOrder.verify(component0).close(); + inOrder.verifyNoMoreInteractions(); + } + +} -- cgit 1.2.3-korg