github.com/torfuzx/docker@v1.8.1/integration-cli/docker_api_service_test.go (about)

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