You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2021/04/19 13:47:54 UTC

[cassandra] 06/07: Update tests

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 <br...@apache.org>
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: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org