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 }