

Group Membership Service (GMS) Protocol
=======================================


Hopefully these tests can be automated some time in the
future. Currently it takes too much time to write automatic tests. The
tests should be executed before releasing a new version of JGroups.

- All the tests use the JGroups/Demos/Draw program
- All tests should be run with both FD and FD_SOCK
- All test should be run with FLUSH (flush-udp.xml) and without FLUSH (udp.xml)


When *FD only* is used make sure that timeout and max_tries are relatively low. For example,
timeout="2000" and max_tries="3" are good reference values. These settings are important 
for tests 9,10 and 12.

'Leave' means exit the demo program gracefully, ie. through
"Leave&Exit".
'Kill' means just kill the process id



Test 1
------

- Start A, B
- Leave B
  --> B should leave and window should disappear
  --> A should show 1 member



Test 2
------

- Start A, B
- Kill B
  --> B should be suspected
  --> A should show 1 member
(run with FD_SOCK first, then with FD only)


Test 3
------

- Test 3
- Repeatedly start B and kill B
  --> A should always show the correct mbrship



Test 4
------

- Start A, B
- Leave A
  --> A should leave and window should disappear
  --> B should be new coordinator
  --> B should show 1 member


Test 4.1
--------
- Start A, B, C
- Leave A
- Leave B
- Leave C
- Everyone should be able to leave gracefully, no error messages such as
  "FD_SOCK.up(): I was suspected by 192.168.5.2:1466; ignoring the SUSPECT message"


Test 5
------

- Start A, B
- Kill A
  --> A should be suspected
  --> B should become new coordinator
  --> B should show 1 member


Test 6
------

- Start A, B, C, D
- Kill B and C
  --> A and D should show 2 members


Test 7
------

- Start A, B, C, D
- Kill A, B, C simultaneously
  --> D should become new coordinator
  --> D should show 1 member



Test 8
------

- Start A
- Leave A
  --> A should leave in a short time (no hangs)




Test 9
------
- Start A and B concurrently
- They should form a group of 2


Test 10
-------

- Start 20 instances
- Mbrship should be 20
- Kill and leave members randomly
- Last member should show mbrship=1


Test 10a
--------
- Start 10 instances in shell #1
- Start 1 instance in shell #2
- Kill shell #1
- The view of the only surviving instance should be 1


Test 11
-------

- Start A, B
- Suspend A (CTRL-Z)
- Wait until B shows membershiop of 1, then resume A (fg)
- A and B needs to merge back into a group of 2



Pull-the-plug scenarios
=======================

- Run Draw with udp.xml, tcp.xml and tcp-nio.xml, those configurations may need to be adjusted to use
  the IP addresses of the 2 nodes
- Make sure loopback=true in UDP/TCP/TCP_NIO if running on Windows
- 2 nodes, node 1 and node 2, connected to a switch


Test 12
-------

- Pull the plug on node 2
- Node 1 and node 2 should each show 1 member
- Put the plug back in
- Nodes 1 and 2 should merge into a group of 2

Test 13
-------

- Pull the plug on node 1 and node 2
- Node 1 and node 2 should each show 1 member
- Put the plugs back in
- Nodes 1 and 2 should merge into a group of 2


Test 14
-------

- Pull the plug of nodes 1 and 2 *on the switch side*
- Node 1 and node 2 should each show 1 member
- Put the plugs back in
- Nodes 1 and 2 should merge into a group of 2


Test 15
-------

- Kill the switch (pull the power)
- Node 1 and node 2 should each show 1 member
- Power the switch back up
- Nodes 1 and 2 should merge into a group of 2

Test 16
-------
- Kill the switch (or pull the plugs on all nodes)
- Power up the switch (or reinsert the plugs)
- After the merge:
  - Leave the new coordinator
  - The leave should immediately install a new view
    (bug: http://jira.jboss.com/jira/browse/JGRP-350)


Test 17
-------
- Run tests 16-20 with 3 nodes

Test 18
-------
- Run Test 16 with DrawMultiplexer with "tcp" stack


