This is an automated email from the ASF dual-hosted git repository. brandonwilliams pushed a commit to branch CASSANDRA-16588 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit a46407d8d72b22d8abaae6c2e97c679a03e1c7c5 Author: Brandon Williams <[email protected]> AuthorDate: Fri Apr 16 14:35:03 2021 -0500 Update tests --- .../org/apache/cassandra/gms/ShadowRoundTest.java | 67 +++++++++++++++++++++- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java index 5ce72b5..880c0cf 100644 --- a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java +++ b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java @@ -19,9 +19,16 @@ package org.apache.cassandra.gms; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import org.apache.cassandra.dht.IPartitioner; import org.junit.After; import org.junit.BeforeClass; import org.junit.Test; @@ -128,17 +135,71 @@ public class ShadowRoundTest { while (!Gossiper.instance.isEnabled()) ; } + InetAddress junkaddr; + try + { + junkaddr = InetAddress.getByName("1.1.1.1"); + } + catch (UnknownHostException e) + { + throw new RuntimeException(e); + } + + HeartBeatState hb = new HeartBeatState(123, 456); + EndpointState state = new EndpointState(hb); + List<GossipDigest> gDigests = new ArrayList<GossipDigest>(); + gDigests.add(new GossipDigest(FBUtilities.getBroadcastAddress(), hb.getGeneration(), hb.getHeartBeatVersion())); + gDigests.add(new GossipDigest(junkaddr, hb.getGeneration(), hb.getHeartBeatVersion())); + Map<InetAddress, EndpointState> smap = new HashMap<InetAddress, EndpointState>() + { + { + put(FBUtilities.getBroadcastAddress(), state); + put(junkaddr, state); + } + }; + GossipDigestAck payload = new GossipDigestAck(gDigests, smap); + + logger.debug("Simulating bad digest ACK reply"); + return MessageIn.create(to, payload, Collections.emptyMap(), MessagingService.Verb.GOSSIP_DIGEST_ACK, MessagingService.current_version); + }, 1); + + System.setProperty(Config.PROPERTY_PREFIX + "auto_bootstrap", "false"); + try + { + StorageService.instance.initServer(); + } + catch (Exception e) + { + assertEquals("Unable to gossip with any peers", e.getMessage()); + } + } + @Test + public void testPreviouslyAssassinatedInShadow() + { + final AtomicBoolean ackSend = new AtomicBoolean(false); + MockMessagingSpy spySyn = MockMessagingService.when(verb(MessagingService.Verb.GOSSIP_DIGEST_SYN)) + .respondN((msgOut, to) -> + { + // ACK with self assassinated in shadow round + if (!ackSend.compareAndSet(false, true)) + { + while (!Gossiper.instance.isEnabled()) ; + } HeartBeatState hb = new HeartBeatState(123, 456); EndpointState state = new EndpointState(hb); + state.addApplicationState(ApplicationState.STATUS, + new VersionedValue.VersionedValueFactory(DatabaseDescriptor.getPartitioner()).left( + Collections.singletonList(DatabaseDescriptor.getPartitioner().getRandomToken()), 1L)); GossipDigestAck payload = new GossipDigestAck( - Collections.singletonList(new GossipDigest(FBUtilities.getBroadcastAddress(), hb.getGeneration(), hb.getHeartBeatVersion())), - Collections.singletonMap(FBUtilities.getBroadcastAddress(), state)); + Collections.singletonList(new GossipDigest(FBUtilities.getBroadcastAddress(), hb.getGeneration(), hb.getHeartBeatVersion())), + Collections.singletonMap(FBUtilities.getBroadcastAddress(), state)); - logger.warn("Simulating digest ACK reply, {}", payload); + logger.debug("Simulating bad digest ACK reply"); return MessageIn.create(to, payload, Collections.emptyMap(), MessagingService.Verb.GOSSIP_DIGEST_ACK, MessagingService.current_version); }, 1); + System.setProperty(Config.PROPERTY_PREFIX + "auto_bootstrap", "false"); try { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
