github.com/olljanat/moby@v1.13.1/cli/command/service/inspect_test.go (about)

     1  package service
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"strings"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/docker/docker/api/types/swarm"
    11  	"github.com/docker/docker/cli/command/formatter"
    12  	"github.com/docker/docker/pkg/testutil/assert"
    13  )
    14  
    15  func formatServiceInspect(t *testing.T, format formatter.Format, now time.Time) string {
    16  	b := new(bytes.Buffer)
    17  
    18  	endpointSpec := &swarm.EndpointSpec{
    19  		Mode: "vip",
    20  		Ports: []swarm.PortConfig{
    21  			{
    22  				Protocol:   swarm.PortConfigProtocolTCP,
    23  				TargetPort: 5000,
    24  			},
    25  		},
    26  	}
    27  
    28  	two := uint64(2)
    29  
    30  	s := swarm.Service{
    31  		ID: "de179gar9d0o7ltdybungplod",
    32  		Meta: swarm.Meta{
    33  			Version:   swarm.Version{Index: 315},
    34  			CreatedAt: now,
    35  			UpdatedAt: now,
    36  		},
    37  		Spec: swarm.ServiceSpec{
    38  			Annotations: swarm.Annotations{
    39  				Name:   "my_service",
    40  				Labels: map[string]string{"com.label": "foo"},
    41  			},
    42  			TaskTemplate: swarm.TaskSpec{
    43  				ContainerSpec: swarm.ContainerSpec{
    44  					Image: "foo/bar@sha256:this_is_a_test",
    45  				},
    46  			},
    47  			Mode: swarm.ServiceMode{
    48  				Replicated: &swarm.ReplicatedService{
    49  					Replicas: &two,
    50  				},
    51  			},
    52  			UpdateConfig: nil,
    53  			Networks: []swarm.NetworkAttachmentConfig{
    54  				{
    55  					Target:  "5vpyomhb6ievnk0i0o60gcnei",
    56  					Aliases: []string{"web"},
    57  				},
    58  			},
    59  			EndpointSpec: endpointSpec,
    60  		},
    61  		Endpoint: swarm.Endpoint{
    62  			Spec: *endpointSpec,
    63  			Ports: []swarm.PortConfig{
    64  				{
    65  					Protocol:      swarm.PortConfigProtocolTCP,
    66  					TargetPort:    5000,
    67  					PublishedPort: 30000,
    68  				},
    69  			},
    70  			VirtualIPs: []swarm.EndpointVirtualIP{
    71  				{
    72  					NetworkID: "6o4107cj2jx9tihgb0jyts6pj",
    73  					Addr:      "10.255.0.4/16",
    74  				},
    75  			},
    76  		},
    77  		UpdateStatus: swarm.UpdateStatus{
    78  			StartedAt:   now,
    79  			CompletedAt: now,
    80  		},
    81  	}
    82  
    83  	ctx := formatter.Context{
    84  		Output: b,
    85  		Format: format,
    86  	}
    87  
    88  	err := formatter.ServiceInspectWrite(ctx, []string{"de179gar9d0o7ltdybungplod"}, func(ref string) (interface{}, []byte, error) {
    89  		return s, nil, nil
    90  	})
    91  	if err != nil {
    92  		t.Fatal(err)
    93  	}
    94  	return b.String()
    95  }
    96  
    97  func TestPrettyPrintWithNoUpdateConfig(t *testing.T) {
    98  	s := formatServiceInspect(t, formatter.NewServiceFormat("pretty"), time.Now())
    99  	if strings.Contains(s, "UpdateStatus") {
   100  		t.Fatal("Pretty print failed before parsing UpdateStatus")
   101  	}
   102  }
   103  
   104  func TestJSONFormatWithNoUpdateConfig(t *testing.T) {
   105  	now := time.Now()
   106  	// s1: [{"ID":..}]
   107  	// s2: {"ID":..}
   108  	s1 := formatServiceInspect(t, formatter.NewServiceFormat(""), now)
   109  	t.Log("// s1")
   110  	t.Logf("%s", s1)
   111  	s2 := formatServiceInspect(t, formatter.NewServiceFormat("{{json .}}"), now)
   112  	t.Log("// s2")
   113  	t.Logf("%s", s2)
   114  	var m1Wrap []map[string]interface{}
   115  	if err := json.Unmarshal([]byte(s1), &m1Wrap); err != nil {
   116  		t.Fatal(err)
   117  	}
   118  	if len(m1Wrap) != 1 {
   119  		t.Fatalf("strange s1=%s", s1)
   120  	}
   121  	m1 := m1Wrap[0]
   122  	t.Logf("m1=%+v", m1)
   123  	var m2 map[string]interface{}
   124  	if err := json.Unmarshal([]byte(s2), &m2); err != nil {
   125  		t.Fatal(err)
   126  	}
   127  	t.Logf("m2=%+v", m2)
   128  	assert.DeepEqual(t, m2, m1)
   129  }