docker_api_service_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // +build experimental
  2. package main
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "github.com/go-check/check"
  8. )
  9. func isServiceAvailable(c *check.C, name string, network string) bool {
  10. status, body, err := sockRequest("GET", "/services", nil)
  11. c.Assert(status, check.Equals, http.StatusOK)
  12. c.Assert(err, check.IsNil)
  13. var inspectJSON []struct {
  14. Name string
  15. ID string
  16. Network string
  17. }
  18. if err = json.Unmarshal(body, &inspectJSON); err != nil {
  19. c.Fatalf("unable to unmarshal response body: %v", err)
  20. }
  21. for _, s := range inspectJSON {
  22. if s.Name == name && s.Network == network {
  23. return true
  24. }
  25. }
  26. return false
  27. }
  28. func isServiceNetworkAvailable(c *check.C, name string) bool {
  29. status, body, err := sockRequest("GET", "/networks", nil)
  30. c.Assert(status, check.Equals, http.StatusOK)
  31. c.Assert(err, check.IsNil)
  32. var inspectJSON []struct {
  33. Name string
  34. ID string
  35. Type string
  36. }
  37. if err = json.Unmarshal(body, &inspectJSON); err != nil {
  38. c.Fatalf("unable to unmarshal response body: %v", err)
  39. }
  40. for _, n := range inspectJSON {
  41. if n.Name == name {
  42. return true
  43. }
  44. }
  45. return false
  46. }
  47. func (s *DockerSuite) TestServiceApiCreateDelete(c *check.C) {
  48. name := "testnetwork"
  49. config := map[string]interface{}{
  50. "name": name,
  51. "network_type": "bridge",
  52. }
  53. status, resp, err := sockRequest("POST", "/networks", config)
  54. c.Assert(status, check.Equals, http.StatusCreated)
  55. c.Assert(err, check.IsNil)
  56. if !isServiceNetworkAvailable(c, name) {
  57. c.Fatalf("Network %s not found", name)
  58. }
  59. var nid string
  60. err = json.Unmarshal(resp, &nid)
  61. if err != nil {
  62. c.Fatal(err)
  63. }
  64. sname := "service1"
  65. sconfig := map[string]interface{}{
  66. "name": sname,
  67. "network_name": name,
  68. }
  69. status, resp, err = sockRequest("POST", "/services", sconfig)
  70. c.Assert(status, check.Equals, http.StatusCreated)
  71. c.Assert(err, check.IsNil)
  72. if !isServiceAvailable(c, sname, name) {
  73. c.Fatalf("Service %s.%s not found", sname, name)
  74. }
  75. var id string
  76. err = json.Unmarshal(resp, &id)
  77. if err != nil {
  78. c.Fatal(err)
  79. }
  80. status, _, err = sockRequest("DELETE", fmt.Sprintf("/services/%s", id), nil)
  81. c.Assert(status, check.Equals, http.StatusOK)
  82. c.Assert(err, check.IsNil)
  83. if isServiceAvailable(c, sname, name) {
  84. c.Fatalf("Service %s.%s not deleted", sname, name)
  85. }
  86. status, _, err = sockRequest("DELETE", fmt.Sprintf("/networks/%s", nid), nil)
  87. c.Assert(status, check.Equals, http.StatusOK)
  88. c.Assert(err, check.IsNil)
  89. if isNetworkAvailable(c, name) {
  90. c.Fatalf("Network %s not deleted", name)
  91. }
  92. }