github.com/technosophos/deis@v1.7.1-0.20150915173815-f9005256004b/tests/etcdutils/etcdutils.go (about)

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