github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/ngaut/go-zookeeper/zk/cluster_test.go (about)

     1  package zk
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func TestBasicCluster(t *testing.T) {
     9  	ts, err := StartTestCluster(3)
    10  	if err != nil {
    11  		t.Fatal(err)
    12  	}
    13  	defer ts.Stop()
    14  	zk1, err := ts.Connect(0)
    15  	if err != nil {
    16  		t.Fatalf("Connect returned error: %+v", err)
    17  	}
    18  	defer zk1.Close()
    19  	zk2, err := ts.Connect(1)
    20  	if err != nil {
    21  		t.Fatalf("Connect returned error: %+v", err)
    22  	}
    23  	defer zk2.Close()
    24  
    25  	if _, err := zk1.Create("/gozk-test", []byte("foo-cluster"), 0, WorldACL(PermAll)); err != nil {
    26  		t.Fatalf("Create failed on node 1: %+v", err)
    27  	}
    28  	if by, _, err := zk2.Get("/gozk-test"); err != nil {
    29  		t.Fatalf("Get failed on node 2: %+v", err)
    30  	} else if string(by) != "foo-cluster" {
    31  		t.Fatal("Wrong data for node 2")
    32  	}
    33  }
    34  
    35  func TestClientClusterFailover(t *testing.T) {
    36  	ts, err := StartTestCluster(3)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	defer ts.Stop()
    41  	zk, err := ts.ConnectAll()
    42  	if err != nil {
    43  		t.Fatalf("Connect returned error: %+v", err)
    44  	}
    45  	defer zk.Close()
    46  
    47  	if _, err := zk.Create("/gozk-test", []byte("foo-cluster"), 0, WorldACL(PermAll)); err != nil {
    48  		t.Fatalf("Create failed on node 1: %+v", err)
    49  	}
    50  
    51  	ts.Servers[0].Srv.Stop()
    52  
    53  	if by, _, err := zk.Get("/gozk-test"); err != nil {
    54  		t.Fatalf("Get failed on node 2: %+v", err)
    55  	} else if string(by) != "foo-cluster" {
    56  		t.Fatal("Wrong data for node 2")
    57  	}
    58  }
    59  
    60  func TestWaitForClose(t *testing.T) {
    61  	ts, err := StartTestCluster(1)
    62  	if err != nil {
    63  		t.Fatal(err)
    64  	}
    65  	defer ts.Stop()
    66  	zk, err := ts.Connect(0)
    67  	if err != nil {
    68  		t.Fatalf("Connect returned error: %+v", err)
    69  	}
    70  	timeout := time.After(30*time.Second)
    71  CONNECTED:
    72  	for{
    73  		select{
    74  		case ev := <-zk.eventChan :
    75  			if ev.State == StateConnected {
    76  				break CONNECTED;
    77  			}
    78  		case <-timeout:
    79  			zk.Close()
    80  			t.Fatal("Timeout")
    81  		}
    82  	}
    83  	zk.Close()
    84  	for{
    85  		select{
    86  		case _,ok := <-zk.eventChan :
    87  			if !ok {
    88  				return
    89  			}
    90  		case <-timeout:
    91  			t.Fatal("Timeout")
    92  		}
    93  	}
    94  }