delete_handler_test.go 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package v2
  2. import (
  3. "fmt"
  4. "net/url"
  5. "testing"
  6. "github.com/coreos/etcd/server"
  7. "github.com/coreos/etcd/tests"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. // Ensures that a key is deleted.
  11. //
  12. // $ curl -X PUT localhost:4001/v2/keys/foo/bar -d value=XXX
  13. // $ curl -X DELETE localhost:4001/v2/keys/foo/bar
  14. //
  15. func TestV2DeleteKey(t *testing.T) {
  16. tests.RunServer(func(s *server.Server) {
  17. v := url.Values{}
  18. v.Set("value", "XXX")
  19. resp, err := tests.PutForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo/bar"), v)
  20. tests.ReadBody(resp)
  21. resp, err = tests.DeleteForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo/bar"), url.Values{})
  22. body := tests.ReadBody(resp)
  23. assert.Nil(t, err, "")
  24. assert.Equal(t, string(body), `{"action":"delete","node":{"key":"/foo/bar","modifiedIndex":3,"createdIndex":2}}`, "")
  25. })
  26. }
  27. // Ensures that an empty directory is deleted when dir is set.
  28. //
  29. // $ curl -X PUT localhost:4001/v2/keys/foo?dir=true
  30. // $ curl -X DELETE localhost:4001/v2/keys/foo ->fail
  31. // $ curl -X DELETE localhost:4001/v2/keys/foo?dir=true
  32. //
  33. func TestV2DeleteEmptyDirectory(t *testing.T) {
  34. tests.RunServer(func(s *server.Server) {
  35. resp, err := tests.PutForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo?dir=true"), url.Values{})
  36. tests.ReadBody(resp)
  37. resp, err = tests.DeleteForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo"), url.Values{})
  38. bodyJson := tests.ReadBodyJSON(resp)
  39. assert.Equal(t, bodyJson["errorCode"], 102, "")
  40. resp, err = tests.DeleteForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo?dir=true"), url.Values{})
  41. body := tests.ReadBody(resp)
  42. assert.Nil(t, err, "")
  43. assert.Equal(t, string(body), `{"action":"delete","node":{"key":"/foo","dir":true,"modifiedIndex":3,"createdIndex":2}}`, "")
  44. })
  45. }
  46. // Ensures that a not-empty directory is deleted when dir is set.
  47. //
  48. // $ curl -X PUT localhost:4001/v2/keys/foo/bar?dir=true
  49. // $ curl -X DELETE localhost:4001/v2/keys/foo?dir=true ->fail
  50. // $ curl -X DELETE localhost:4001/v2/keys/foo?dir=true&recursive=true
  51. //
  52. func TestV2DeleteNonEmptyDirectory(t *testing.T) {
  53. tests.RunServer(func(s *server.Server) {
  54. resp, err := tests.PutForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo/bar?dir=true"), url.Values{})
  55. tests.ReadBody(resp)
  56. resp, err = tests.DeleteForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo?dir=true"), url.Values{})
  57. bodyJson := tests.ReadBodyJSON(resp)
  58. assert.Equal(t, bodyJson["errorCode"], 108, "")
  59. resp, err = tests.DeleteForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo?dir=true&recursive=true"), url.Values{})
  60. body := tests.ReadBody(resp)
  61. assert.Nil(t, err, "")
  62. assert.Equal(t, string(body), `{"action":"delete","node":{"key":"/foo","dir":true,"modifiedIndex":3,"createdIndex":2}}`, "")
  63. })
  64. }
  65. // Ensures that a directory is deleted when recursive is set.
  66. //
  67. // $ curl -X PUT localhost:4001/v2/keys/foo?dir=true
  68. // $ curl -X DELETE localhost:4001/v2/keys/foo?recursive=true
  69. //
  70. func TestV2DeleteDirectoryRecursiveImpliesDir(t *testing.T) {
  71. tests.RunServer(func(s *server.Server) {
  72. resp, err := tests.PutForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo?dir=true"), url.Values{})
  73. tests.ReadBody(resp)
  74. resp, err = tests.DeleteForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo?recursive=true"), url.Values{})
  75. body := tests.ReadBody(resp)
  76. assert.Nil(t, err, "")
  77. assert.Equal(t, string(body), `{"action":"delete","node":{"key":"/foo","dir":true,"modifiedIndex":3,"createdIndex":2}}`, "")
  78. })
  79. }