github.com/rentongzhang/docker@v1.8.2-rc1/pkg/plugins/discovery_test.go (about)

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