diff --git a/server/v1/set_key_handler.go b/server/v1/set_key_handler.go index 887c8c22e..5e29fafe6 100644 --- a/server/v1/set_key_handler.go +++ b/server/v1/set_key_handler.go @@ -30,12 +30,20 @@ func SetKeyHandler(w http.ResponseWriter, req *http.Request, s Server) error { // If the "prevValue" is specified then test-and-set. Otherwise create a new key. var c raft.Command - if prevValueArr, ok := req.Form["prevValue"]; ok && len(prevValueArr) > 0 { - c = &store.CompareAndSwapCommand{ - Key: key, - Value: value, - PrevValue: prevValueArr[0], - ExpireTime: expireTime, + if prevValueArr, ok := req.Form["prevValue"]; ok { + if len(prevValueArr[0]) > 0 { // test against previous value + c = &store.CompareAndSwapCommand{ + Key: key, + Value: value, + PrevValue: prevValueArr[0], + ExpireTime: expireTime, + } + } else { + c = &store.CreateCommand{ // test against existence + Key: key, + Value: value, + ExpireTime: expireTime, + } } } else { diff --git a/store/event.go b/store/event.go index 14ba1e529..92c0b9647 100644 --- a/store/event.go +++ b/store/event.go @@ -55,13 +55,16 @@ func (event *Event) Response() interface{} { Expiration: event.Expiration, } - if response.Action == Create || response.Action == Set { - response.Action = "set" + if response.Action == Set { if response.PrevValue == "" { response.NewKey = true } } + if response.Action == CompareAndSwap || response.Action == Create { + response.Action = "testAndSet" + } + return response } else { responses := make([]*Response, len(event.KVPairs)) diff --git a/test.sh b/test.sh index a99e3f178..66f745ed4 100755 --- a/test.sh +++ b/test.sh @@ -1,15 +1,19 @@ #!/bin/sh set -e -# Unit tests -echo "-- UNIT TESTS --" -go test -v ./server/v2/tests -go test -v ./store - # Get GOPATH, etc from build -echo "-- BUILDING BINARY --" . ./build +# use right GOPATH +export GOPATH="${PWD}" + +# Unit tests +go test -i ./server/v2/tests +go test -v ./server/v2/tests + +go test -i ./store +go test -v ./store + # Functional tests -echo "-- FUNCTIONAL TESTS --" -ETCD_BIN_PATH=$(PWD)/etcd go test -v ./tests/functional +go test -i ./tests/functional +ETCD_BIN_PATH=$(pwd)/etcd go test -v ./tests/functional