github.com/vvnotw/moby@v1.13.1/pkg/plugins/discovery_test.go (about)

     1  package plugins
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  )
     9  
    10  func Setup(t *testing.T) (string, func()) {
    11  	tmpdir, err := ioutil.TempDir("", "docker-test")
    12  	if err != nil {
    13  		t.Fatal(err)
    14  	}
    15  	backup := socketsPath
    16  	socketsPath = tmpdir
    17  	specsPaths = []string{tmpdir}
    18  
    19  	return tmpdir, func() {
    20  		socketsPath = backup
    21  		os.RemoveAll(tmpdir)
    22  	}
    23  }
    24  
    25  func TestFileSpecPlugin(t *testing.T) {
    26  	tmpdir, unregister := Setup(t)
    27  	defer unregister()
    28  
    29  	cases := []struct {
    30  		path string
    31  		name string
    32  		addr string
    33  		fail bool
    34  	}{
    35  		// TODO Windows: Factor out the unix:// variants.
    36  		{filepath.Join(tmpdir, "echo.spec"), "echo", "unix://var/lib/docker/plugins/echo.sock", false},
    37  		{filepath.Join(tmpdir, "echo", "echo.spec"), "echo", "unix://var/lib/docker/plugins/echo.sock", false},
    38  		{filepath.Join(tmpdir, "foo.spec"), "foo", "tcp://localhost:8080", false},
    39  		{filepath.Join(tmpdir, "foo", "foo.spec"), "foo", "tcp://localhost:8080", false},
    40  		{filepath.Join(tmpdir, "bar.spec"), "bar", "localhost:8080", true}, // unknown transport
    41  	}
    42  
    43  	for _, c := range cases {
    44  		if err := os.MkdirAll(filepath.Dir(c.path), 0755); err != nil {
    45  			t.Fatal(err)
    46  		}
    47  		if err := ioutil.WriteFile(c.path, []byte(c.addr), 0644); err != nil {
    48  			t.Fatal(err)
    49  		}
    50  
    51  		r := newLocalRegistry()
    52  		p, err := r.Plugin(c.name)
    53  		if c.fail && err == nil {
    54  			continue
    55  		}
    56  
    57  		if err != nil {
    58  			t.Fatal(err)
    59  		}
    60  
    61  		if p.name != c.name {
    62  			t.Fatalf("Expected plugin `%s`, got %s\n", c.name, p.name)
    63  		}
    64  
    65  		if p.Addr != c.addr {
    66  			t.Fatalf("Expected plugin addr `%s`, got %s\n", c.addr, p.Addr)
    67  		}
    68  
    69  		if p.TLSConfig.InsecureSkipVerify != true {
    70  			t.Fatalf("Expected TLS verification to be skipped")
    71  		}
    72  	}
    73  }
    74  
    75  func TestFileJSONSpecPlugin(t *testing.T) {
    76  	tmpdir, unregister := Setup(t)
    77  	defer unregister()
    78  
    79  	p := filepath.Join(tmpdir, "example.json")
    80  	spec := `{
    81    "Name": "plugin-example",
    82    "Addr": "https://example.com/docker/plugin",
    83    "TLSConfig": {
    84      "CAFile": "/usr/shared/docker/certs/example-ca.pem",
    85      "CertFile": "/usr/shared/docker/certs/example-cert.pem",
    86      "KeyFile": "/usr/shared/docker/certs/example-key.pem"
    87  	}
    88  }`
    89  
    90  	if err := ioutil.WriteFile(p, []byte(spec), 0644); err != nil {
    91  		t.Fatal(err)
    92  	}
    93  
    94  	r := newLocalRegistry()
    95  	plugin, err := r.Plugin("example")
    96  	if err != nil {
    97  		t.Fatal(err)
    98  	}
    99  
   100  	if expected, actual := "example", plugin.name; expected != actual {
   101  		t.Fatalf("Expected plugin %q, got %s\n", expected, actual)
   102  	}
   103  
   104  	if plugin.Addr != "https://example.com/docker/plugin" {
   105  		t.Fatalf("Expected plugin addr `https://example.com/docker/plugin`, got %s\n", plugin.Addr)
   106  	}
   107  
   108  	if plugin.TLSConfig.CAFile != "/usr/shared/docker/certs/example-ca.pem" {
   109  		t.Fatalf("Expected plugin CA `/usr/shared/docker/certs/example-ca.pem`, got %s\n", plugin.TLSConfig.CAFile)
   110  	}
   111  
   112  	if plugin.TLSConfig.CertFile != "/usr/shared/docker/certs/example-cert.pem" {
   113  		t.Fatalf("Expected plugin Certificate `/usr/shared/docker/certs/example-cert.pem`, got %s\n", plugin.TLSConfig.CertFile)
   114  	}
   115  
   116  	if plugin.TLSConfig.KeyFile != "/usr/shared/docker/certs/example-key.pem" {
   117  		t.Fatalf("Expected plugin Key `/usr/shared/docker/certs/example-key.pem`, got %s\n", plugin.TLSConfig.KeyFile)
   118  	}
   119  }
   120  
   121  func TestFileJSONSpecPluginWithoutTLSConfig(t *testing.T) {
   122  	tmpdir, unregister := Setup(t)
   123  	defer unregister()
   124  
   125  	p := filepath.Join(tmpdir, "example.json")
   126  	spec := `{
   127    "Name": "plugin-example",
   128    "Addr": "https://example.com/docker/plugin"
   129  }`
   130  
   131  	if err := ioutil.WriteFile(p, []byte(spec), 0644); err != nil {
   132  		t.Fatal(err)
   133  	}
   134  
   135  	r := newLocalRegistry()
   136  	plugin, err := r.Plugin("example")
   137  	if err != nil {
   138  		t.Fatal(err)
   139  	}
   140  
   141  	if expected, actual := "example", plugin.name; expected != actual {
   142  		t.Fatalf("Expected plugin %q, got %s\n", expected, actual)
   143  	}
   144  
   145  	if plugin.Addr != "https://example.com/docker/plugin" {
   146  		t.Fatalf("Expected plugin addr `https://example.com/docker/plugin`, got %s\n", plugin.Addr)
   147  	}
   148  
   149  	if plugin.TLSConfig != nil {
   150  		t.Fatalf("Expected plugin TLSConfig nil, got %v\n", plugin.TLSConfig)
   151  	}
   152  }