github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/command/formatter/plugin_test.go (about)

     1  package formatter
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/docker/docker/api/types"
    10  	"github.com/docker/docker/pkg/stringid"
    11  	"github.com/docker/docker/pkg/testutil/assert"
    12  )
    13  
    14  func TestPluginContext(t *testing.T) {
    15  	pluginID := stringid.GenerateRandomID()
    16  
    17  	var ctx pluginContext
    18  	cases := []struct {
    19  		pluginCtx pluginContext
    20  		expValue  string
    21  		expHeader string
    22  		call      func() string
    23  	}{
    24  		{pluginContext{
    25  			p:     types.Plugin{ID: pluginID},
    26  			trunc: false,
    27  		}, pluginID, pluginIDHeader, ctx.ID},
    28  		{pluginContext{
    29  			p:     types.Plugin{ID: pluginID},
    30  			trunc: true,
    31  		}, stringid.TruncateID(pluginID), pluginIDHeader, ctx.ID},
    32  		{pluginContext{
    33  			p: types.Plugin{Name: "plugin_name"},
    34  		}, "plugin_name", nameHeader, ctx.Name},
    35  		{pluginContext{
    36  			p: types.Plugin{Config: types.PluginConfig{Description: "plugin_description"}},
    37  		}, "plugin_description", descriptionHeader, ctx.Description},
    38  	}
    39  
    40  	for _, c := range cases {
    41  		ctx = c.pluginCtx
    42  		v := c.call()
    43  		if strings.Contains(v, ",") {
    44  			compareMultipleValues(t, v, c.expValue)
    45  		} else if v != c.expValue {
    46  			t.Fatalf("Expected %s, was %s\n", c.expValue, v)
    47  		}
    48  
    49  		h := ctx.FullHeader()
    50  		if h != c.expHeader {
    51  			t.Fatalf("Expected %s, was %s\n", c.expHeader, h)
    52  		}
    53  	}
    54  }
    55  
    56  func TestPluginContextWrite(t *testing.T) {
    57  	cases := []struct {
    58  		context  Context
    59  		expected string
    60  	}{
    61  
    62  		// Errors
    63  		{
    64  			Context{Format: "{{InvalidFunction}}"},
    65  			`Template parsing error: template: :1: function "InvalidFunction" not defined
    66  `,
    67  		},
    68  		{
    69  			Context{Format: "{{nil}}"},
    70  			`Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
    71  `,
    72  		},
    73  		// Table format
    74  		{
    75  			Context{Format: NewPluginFormat("table", false)},
    76  			`ID                  NAME                DESCRIPTION         ENABLED
    77  pluginID1           foobar_baz          description 1       true
    78  pluginID2           foobar_bar          description 2       false
    79  `,
    80  		},
    81  		{
    82  			Context{Format: NewPluginFormat("table", true)},
    83  			`pluginID1
    84  pluginID2
    85  `,
    86  		},
    87  		{
    88  			Context{Format: NewPluginFormat("table {{.Name}}", false)},
    89  			`NAME
    90  foobar_baz
    91  foobar_bar
    92  `,
    93  		},
    94  		{
    95  			Context{Format: NewPluginFormat("table {{.Name}}", true)},
    96  			`NAME
    97  foobar_baz
    98  foobar_bar
    99  `,
   100  		},
   101  		// Raw Format
   102  		{
   103  			Context{Format: NewPluginFormat("raw", false)},
   104  			`plugin_id: pluginID1
   105  name: foobar_baz
   106  description: description 1
   107  enabled: true
   108  
   109  plugin_id: pluginID2
   110  name: foobar_bar
   111  description: description 2
   112  enabled: false
   113  
   114  `,
   115  		},
   116  		{
   117  			Context{Format: NewPluginFormat("raw", true)},
   118  			`plugin_id: pluginID1
   119  plugin_id: pluginID2
   120  `,
   121  		},
   122  		// Custom Format
   123  		{
   124  			Context{Format: NewPluginFormat("{{.Name}}", false)},
   125  			`foobar_baz
   126  foobar_bar
   127  `,
   128  		},
   129  	}
   130  
   131  	for _, testcase := range cases {
   132  		plugins := []*types.Plugin{
   133  			{ID: "pluginID1", Name: "foobar_baz", Config: types.PluginConfig{Description: "description 1"}, Enabled: true},
   134  			{ID: "pluginID2", Name: "foobar_bar", Config: types.PluginConfig{Description: "description 2"}, Enabled: false},
   135  		}
   136  		out := bytes.NewBufferString("")
   137  		testcase.context.Output = out
   138  		err := PluginWrite(testcase.context, plugins)
   139  		if err != nil {
   140  			assert.Error(t, err, testcase.expected)
   141  		} else {
   142  			assert.Equal(t, out.String(), testcase.expected)
   143  		}
   144  	}
   145  }
   146  
   147  func TestPluginContextWriteJSON(t *testing.T) {
   148  	plugins := []*types.Plugin{
   149  		{ID: "pluginID1", Name: "foobar_baz"},
   150  		{ID: "pluginID2", Name: "foobar_bar"},
   151  	}
   152  	expectedJSONs := []map[string]interface{}{
   153  		{"Description": "", "Enabled": false, "ID": "pluginID1", "Name": "foobar_baz", "PluginReference": ""},
   154  		{"Description": "", "Enabled": false, "ID": "pluginID2", "Name": "foobar_bar", "PluginReference": ""},
   155  	}
   156  
   157  	out := bytes.NewBufferString("")
   158  	err := PluginWrite(Context{Format: "{{json .}}", Output: out}, plugins)
   159  	if err != nil {
   160  		t.Fatal(err)
   161  	}
   162  	for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") {
   163  		var m map[string]interface{}
   164  		if err := json.Unmarshal([]byte(line), &m); err != nil {
   165  			t.Fatal(err)
   166  		}
   167  		assert.DeepEqual(t, m, expectedJSONs[i])
   168  	}
   169  }
   170  
   171  func TestPluginContextWriteJSONField(t *testing.T) {
   172  	plugins := []*types.Plugin{
   173  		{ID: "pluginID1", Name: "foobar_baz"},
   174  		{ID: "pluginID2", Name: "foobar_bar"},
   175  	}
   176  	out := bytes.NewBufferString("")
   177  	err := PluginWrite(Context{Format: "{{json .ID}}", Output: out}, plugins)
   178  	if err != nil {
   179  		t.Fatal(err)
   180  	}
   181  	for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") {
   182  		var s string
   183  		if err := json.Unmarshal([]byte(line), &s); err != nil {
   184  			t.Fatal(err)
   185  		}
   186  		assert.Equal(t, s, plugins[i].ID)
   187  	}
   188  }