public static void upgradeClusterMembers(
     TestHazelcastInstanceFactory factory,
     final HazelcastInstance[] membersToUpgrade,
     MemberVersion version,
     Config config,
     boolean assertClusterSize) {
   try {
     System.setProperty(HAZELCAST_INTERNAL_OVERRIDE_VERSION, version.toString());
     // upgrade one by one each member of the cluster to the next version
     for (int i = 0; i < membersToUpgrade.length; i++) {
       membersToUpgrade[i].shutdown();
       waitAllForSafeState(membersToUpgrade);
       // if new node's version is incompatible, then node startup will fail with
       // IllegalStateException
       membersToUpgrade[i] = factory.newHazelcastInstance(config);
       waitAllForSafeState(membersToUpgrade);
       if (assertClusterSize) {
         // assert all members are in the cluster
         assertTrueEventually(
             new AssertTask() {
               @Override
               public void run() throws Exception {
                 assertEquals(
                     membersToUpgrade.length,
                     membersToUpgrade[0].getCluster().getMembers().size());
               }
             },
             30);
       }
     }
   } finally {
     System.clearProperty(HAZELCAST_INTERNAL_OVERRIDE_VERSION);
   }
 }
 // return a new HazelcastInstance at given version
 public static HazelcastInstance newHazelcastInstance(
     TestHazelcastInstanceFactory factory, MemberVersion version, Config config) {
   try {
     System.setProperty(HAZELCAST_INTERNAL_OVERRIDE_VERSION, version.toString());
     return factory.newHazelcastInstance(config);
   } finally {
     System.clearProperty(HAZELCAST_INTERNAL_OVERRIDE_VERSION);
   }
 }
  @Test
  public void testMemberLeftException_usingSimpleMember() throws Exception {
    String uuid = UuidUtil.newUnsecureUuidString();
    String host = "127.0.0.1";
    int port = 5000;

    Member member =
        new SimpleMemberImpl(MemberVersion.of("3.8.0"), uuid, new InetSocketAddress(host, port));
    testMemberLeftException(uuid, host, port, member);
  }
  @Test
  public void testMemberLeftException_usingMemberImpl() throws Exception {
    String uuid = UuidUtil.newUnsecureUuidString();
    String host = "127.0.0.1";
    int port = 5000;

    Member member =
        new MemberImpl(new Address(host, port), MemberVersion.of("3.8.0"), false, uuid, null);

    testMemberLeftException(uuid, host, port, member);
  }