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]

Reply via email to