github.com/amrnt/deis@v1.3.1/tests/etcdutils/etcdutils.go (about)

     1  // Package etcdutils helps test interactions with etcd.
     2  
     3  package etcdutils
     4  
     5  import (
     6  	"fmt"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/coreos/go-etcd/etcd"
    11  	"github.com/deis/deis/tests/utils"
    12  )
    13  
    14  // EtcdHandle is used to set keys and values in a test etcd instance.
    15  type EtcdHandle struct {
    16  	Dirs []string
    17  	Keys []string
    18  	C    *etcd.Client
    19  }
    20  
    21  func etcdClient(port string) *etcd.Client {
    22  	machines := []string{"http://" + utils.HostAddress() + ":" + port}
    23  	return etcd.NewClient(machines)
    24  }
    25  
    26  // InitEtcd configures a test etcd instance.
    27  func InitEtcd(setdir, setkeys []string, port string) *EtcdHandle {
    28  	cli := etcdClient(port)
    29  	controllerHandle := new(EtcdHandle)
    30  	controllerHandle.Dirs = setdir
    31  	controllerHandle.Keys = setkeys
    32  	controllerHandle.C = cli
    33  	fmt.Println("Etcd client initialized")
    34  	return controllerHandle
    35  }
    36  
    37  // SetSingle sets a key and value into a test etcd instance.
    38  func SetSingle(t *testing.T, key string, value string, port string) {
    39  	c := etcdClient(port)
    40  	_, err := c.Set(key, value, 0)
    41  	if err != nil {
    42  		t.Fatal(err)
    43  	}
    44  }
    45  
    46  // SetEtcd sets an array of values into a test etcd instance.
    47  func SetEtcd(t *testing.T, keys []string, values []string, c *etcd.Client) {
    48  	for i, key := range keys {
    49  		_, err := c.Set(key, values[i], 0)
    50  		if err != nil {
    51  			t.Fatal(err)
    52  		}
    53  	}
    54  }
    55  
    56  // VerifyEtcdKey verifies that an etcd key exists.
    57  func VerifyEtcdKey(t *testing.T, key string, port string) {
    58  	c := etcdClient(port)
    59  	_, err := c.Get(key, true, true)
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  }
    64  
    65  // VerifyEtcdValue verifies the value of an etcd key.
    66  func VerifyEtcdValue(t *testing.T, key string, expectedValue string, port string) {
    67  	c := etcdClient(port)
    68  	result, err := c.Get(key, true, true)
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	if result.Node.Value != expectedValue {
    73  		t.Errorf(key + ": expected '" + expectedValue + "', got '" + result.Node.Value + "'.")
    74  	}
    75  }
    76  
    77  // PublishEtcd sets canonical etcd values into a test etcd instance.
    78  func PublishEtcd(t *testing.T, ecli *EtcdHandle) {
    79  	fmt.Println("--- Publish etcd keys and values")
    80  	for _, dir := range ecli.Dirs {
    81  		_, err := ecli.C.SetDir(dir, 0)
    82  		if err != nil {
    83  			t.Fatal(err)
    84  		}
    85  	}
    86  	for _, key := range ecli.Keys {
    87  		switch true {
    88  		case (strings.Contains(key, "host")):
    89  			_, err := ecli.C.Set(key, "172.17.8.100", 0)
    90  			if err != nil {
    91  				t.Fatal(err)
    92  			}
    93  		case (strings.Contains(key, "port")):
    94  			_, err := ecli.C.Set(key, "10881", 0)
    95  			if err != nil {
    96  				t.Fatal(err)
    97  			}
    98  		default:
    99  			_, err := ecli.C.Set(key, "deis", 0)
   100  			if err != nil {
   101  				t.Fatal(err)
   102  			}
   103  		}
   104  	}
   105  }