github.com/coreos/mantle@v0.13.0/kola/tests/coretest/etcd.go (about)

     1  package coretest
     2  
     3  import (
     4  	"crypto/rand"
     5  	"encoding/hex"
     6  	"fmt"
     7  	"strings"
     8  )
     9  
    10  const (
    11  	targetAddress = "http://127.0.0.1:4001/v2/keys/"
    12  	helloStr      = "Hello world"
    13  	newHelloStr   = "Hello etcd"
    14  	keyNotFound   = "Key not found"
    15  )
    16  
    17  var (
    18  	// retry is used to avoid getting server error when leader election
    19  	retry = []string{"--retry", "5", "--retry-delay", "2", "--silent"}
    20  )
    21  
    22  // generateKey generate's a 16 byte random string.
    23  func generateKey() string {
    24  	b := make([]byte, 16)
    25  	_, err := rand.Read(b)
    26  	if err != nil {
    27  		return ""
    28  	}
    29  
    30  	return hex.EncodeToString(b)
    31  }
    32  
    33  // TestEtcdUpdateValue tests to update value of a key.
    34  // The test coverage includes setting, getting, updating, deleting.
    35  func TestEtcdUpdateValue() error {
    36  	// Use a random key name so members of a cluster don't step on each other.
    37  	target := targetAddress + generateKey() + "?consistent=true"
    38  
    39  	stdout, stderr, err := Run("curl", append(retry, "-L", target, "-XPUT", "-d", fmt.Sprintf("value=\"%s\"", helloStr))...)
    40  	if err != nil {
    41  		return fmt.Errorf("curl set failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
    42  	}
    43  	if !strings.Contains(stdout, helloStr) {
    44  		return fmt.Errorf("Failed getting value %v\nstdout: %v", helloStr, stdout)
    45  	}
    46  
    47  	stdout, stderr, err = Run("curl", append(retry, "-L", target, "-XPUT", "-d", fmt.Sprintf("value=\"%s\"", newHelloStr))...)
    48  	if err != nil {
    49  		return fmt.Errorf("curl update failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
    50  	}
    51  
    52  	stdout, stderr, err = Run("curl", append(retry, "-L", target)...)
    53  	if err != nil {
    54  		return fmt.Errorf("curl get failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
    55  	}
    56  	if !strings.Contains(stdout, newHelloStr) {
    57  		return fmt.Errorf("Failed getting value %v\nstdout: %v", newHelloStr, stdout)
    58  	}
    59  
    60  	stdout, stderr, err = Run("curl", append(retry, "-L", target, "-XDELETE")...)
    61  	if err != nil {
    62  		return fmt.Errorf("curl delete failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
    63  	}
    64  
    65  	stdout, stderr, err = Run("curl", append(retry, "-L", target)...)
    66  	if err != nil {
    67  		return fmt.Errorf("curl get failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
    68  	}
    69  	if !strings.Contains(stdout, keyNotFound) {
    70  		return fmt.Errorf("Failed getting value %v\nstdout: %v", keyNotFound, stdout)
    71  	}
    72  	return nil
    73  }