blob: fe83679990ee908a080d27be66fa58f5e4e22203 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You 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.geode.unsafe.internal.sun.misc;
import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import org.junit.Test;
public class SignalTest {
@Test
public void wrapsSunSignal() {
final Signal geodeSignal = new Signal("INT");
final sun.misc.Signal sunSignal = new sun.misc.Signal("INT");
assertThat(geodeSignal.signal).isEqualTo(sunSignal);
assertThat(geodeSignal.getName()).isNotNull().isEqualTo(sunSignal.getName());
assertThat(geodeSignal.getNumber()).isEqualTo(sunSignal.getNumber());
assertThat(geodeSignal.hashCode()).isEqualTo(sunSignal.hashCode());
}
@Test
public void unknownSignalThrowsException() {
assertThatThrownBy(() -> new Signal("FAKE")).isInstanceOf(IllegalArgumentException.class);
}
@Test
public void handleWrapsSunHandler() {
final sun.misc.SignalHandler sunHandler = mock(sun.misc.SignalHandler.class);
final sun.misc.Signal sunSignal = new sun.misc.Signal("INT");
final sun.misc.SignalHandler originalSunHandler = sun.misc.Signal.handle(sunSignal, sunHandler);
try {
final Signal geodeSignal = new Signal("INT");
final SignalHandler geodeHandler = signal -> {
};
final SignalHandler originalGeodeHandler = Signal.handle(geodeSignal, geodeHandler);
try {
assertThat(originalGeodeHandler).isNotNull().isInstanceOf(Signal.SunSignalHandler.class);
assertThat(((Signal.SunSignalHandler) originalGeodeHandler).signalHandler)
.isSameAs(sunHandler);
originalGeodeHandler.handle(geodeSignal);
verify(sunHandler).handle(sunSignal);
verifyNoMoreInteractions(sunHandler);
} finally {
assertThat(Signal.handle(geodeSignal, originalGeodeHandler)).isSameAs(geodeHandler);
}
} finally {
assertThat(sun.misc.Signal.handle(sunSignal, originalSunHandler)).isSameAs(sunHandler);
}
}
@Test
public void handleNullThrowsException() {
assertThatThrownBy(() -> Signal.handle(new Signal("INT"), null))
.isInstanceOf(NullPointerException.class);
assertThatThrownBy(() -> Signal.handle(null, signal -> {
}))
.isInstanceOf(NullPointerException.class);
}
@Test
public void raiseInvokesSunRaise() {
final sun.misc.SignalHandler sunHandler = mock(sun.misc.SignalHandler.class);
final sun.misc.Signal sunSignal = new sun.misc.Signal("INT");
final sun.misc.SignalHandler originalSunHandler = sun.misc.Signal.handle(sunSignal, sunHandler);
try {
Signal.raise(new Signal("INT"));
await().untilAsserted(() -> verify(sunHandler).handle(sunSignal));
verifyNoMoreInteractions(sunHandler);
} finally {
sun.misc.Signal.handle(sunSignal, originalSunHandler);
}
}
@Test
public void raiseInvokesGeodeHandler() {
final Signal geodeSignal = new Signal("INT");
final SignalHandler geodeHandler = mock(SignalHandler.class);
final SignalHandler originalGeodeHandler = Signal.handle(geodeSignal, geodeHandler);
try {
Signal.raise(geodeSignal);
await().untilAsserted(() -> verify(geodeHandler).handle(geodeSignal));
verifyNoMoreInteractions(geodeHandler);
} finally {
Signal.handle(geodeSignal, originalGeodeHandler);
}
}
@Test
public void raiseNullThrowsException() {
assertThatThrownBy(() -> Signal.raise(null)).isInstanceOf(NullPointerException.class);
}
}