public void testJGRP_1876() throws Exception {
        e=createChannel("E", true);
        f=createChannel("F", true);
        g=createChannel("G", true);
        h=createChannel("H", true);
        Util.waitUntilAllChannelsHaveSameView(10000, 500, a, b, c, d, e, f, g, h);
        enableInfoSender(false, a,b,c,d,e,f,g,h); // stops INFO sending in MERGE3
        for(JChannel ch: Arrays.asList(a,b,c,d,e,f,g,h))
            System.out.println(ch.getName() + ": " + ch.getView());
        View v1=View.create(a.getAddress(), 10, a.getAddress(), b.getAddress(), c.getAddress(), d.getAddress());
        View v2=View.create(a.getAddress(), 9, a.getAddress(), b.getAddress(), c.getAddress(), d.getAddress(), e.getAddress(), f.getAddress());
        View v3=View.create(g.getAddress(), 8, g.getAddress(), h.getAddress());

        injectView(v1, a,b,c,d);
        injectView(v2, e,f);
        injectView(v3, g,h);
        enableInfoSender(false, a,b,c,d,e,f,g,h); // stops INFO sending in MERGE3
        Util.waitUntilAllChannelsHaveSameView(10000, 500, a, b, c, d);
        for(int x=0; x < 10; x++) { // can't use waitUntilAllChannelsHaveSameSize() as the channel list's length != view !
            if(e.getView().size() == v2.size() && f.getView().size() == v2.size())
                break;
            Util.sleep(500);
        }
        assert e.getView().size() == v2.size() : "E's view: " + e.getView();
        assert f.getView().size() == v2.size() : "F's view: " + f.getView();
        Util.waitUntilAllChannelsHaveSameView(10000, 500, g, h);

        System.out.printf("\nPartitions:\n");
        for(JChannel ch: Arrays.asList(a,b,c,d,e,f,g,h))
            System.out.println(ch.getName() + ": " + ch.getView());

        enableInfoSender(true,a,b,c,d,e,f,g,h);
        System.out.println("\nEnabling INFO sending in merge protocols to merge subclusters");

        Util.waitUntilAllChannelsHaveSameView(30000, 1000, a, b, c, d, e, f, g, h);
        System.out.println("\nResulting views:");
        for(JChannel ch: Arrays.asList(a,b,c,d,e,f,g,h)) {
            GMS gms=ch.getProtocolStack().findProtocol(GMS.class);
            View mv=gms.view();
            System.out.println(mv);
        }
        for(JChannel ch: Arrays.asList(a,b,c,d,e,f,g,h)) {
            GMS gms=ch.getProtocolStack().findProtocol(GMS.class);
            View mv=gms.view();
            assert mv instanceof MergeView;
            assert mv.size() == 8;
            assert ((MergeView)mv).getSubgroups().size() == 3;
        }
        for(JChannel ch: Arrays.asList(a,b,c,d,e,f,g,h)) {
            View view=ch.getView();
            assert view.size() == 8 : "view should have 8 members: " + view;
        }
    }