github.com/ld86/docker@v1.7.1-rc3/pkg/plugins/discovery_test.go (about)

     1  package plugins
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"net"
     7  	"os"
     8  	"path"
     9  	"path/filepath"
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  func TestUnknownLocalPath(t *testing.T) {
    15  	tmpdir, err := ioutil.TempDir("", "docker-test")
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  	defer os.RemoveAll(tmpdir)
    20  
    21  	l := newLocalRegistry(filepath.Join(tmpdir, "unknown"))
    22  	_, err = l.Plugin("foo")
    23  	if err == nil || err != ErrNotFound {
    24  		t.Fatalf("Expected error for unknown directory")
    25  	}
    26  }
    27  
    28  func TestLocalSocket(t *testing.T) {
    29  	tmpdir, err := ioutil.TempDir("", "docker-test")
    30  	if err != nil {
    31  		t.Fatal(err)
    32  	}
    33  	defer os.RemoveAll(tmpdir)
    34  	l, err := net.Listen("unix", filepath.Join(tmpdir, "echo.sock"))
    35  	if err != nil {
    36  		t.Fatal(err)
    37  	}
    38  	defer l.Close()
    39  
    40  	r := newLocalRegistry(tmpdir)
    41  	p, err := r.Plugin("echo")
    42  	if err != nil {
    43  		t.Fatal(err)
    44  	}
    45  
    46  	pp, err := r.Plugin("echo")
    47  	if err != nil {
    48  		t.Fatal(err)
    49  	}
    50  	if !reflect.DeepEqual(p, pp) {
    51  		t.Fatalf("Expected %v, was %v\n", p, pp)
    52  	}
    53  
    54  	if p.Name != "echo" {
    55  		t.Fatalf("Expected plugin `echo`, got %s\n", p.Name)
    56  	}
    57  
    58  	addr := fmt.Sprintf("unix://%s/echo.sock", tmpdir)
    59  	if p.Addr != addr {
    60  		t.Fatalf("Expected plugin addr `%s`, got %s\n", addr, p.Addr)
    61  	}
    62  }
    63  
    64  func TestFileSpecPlugin(t *testing.T) {
    65  	tmpdir, err := ioutil.TempDir("", "docker-test")
    66  	if err != nil {
    67  		t.Fatal(err)
    68  	}
    69  
    70  	cases := []struct {
    71  		path string
    72  		name string
    73  		addr string
    74  		fail bool
    75  	}{
    76  		{filepath.Join(tmpdir, "echo.spec"), "echo", "unix://var/lib/docker/plugins/echo.sock", false},
    77  		{filepath.Join(tmpdir, "foo.spec"), "foo", "tcp://localhost:8080", false},
    78  		{filepath.Join(tmpdir, "bar.spec"), "bar", "localhost:8080", true}, // unknown transport
    79  	}
    80  
    81  	for _, c := range cases {
    82  		if err = os.MkdirAll(path.Dir(c.path), 0755); err != nil {
    83  			t.Fatal(err)
    84  		}
    85  		if err = ioutil.WriteFile(c.path, []byte(c.addr), 0644); err != nil {
    86  			t.Fatal(err)
    87  		}
    88  
    89  		r := newLocalRegistry(tmpdir)
    90  		p, err := r.Plugin(c.name)
    91  		if c.fail && err == nil {
    92  			continue
    93  		}
    94  
    95  		if err != nil {
    96  			t.Fatal(err)
    97  		}
    98  
    99  		if p.Name != c.name {
   100  			t.Fatalf("Expected plugin `%s`, got %s\n", c.name, p.Name)
   101  		}
   102  
   103  		if p.Addr != c.addr {
   104  			t.Fatalf("Expected plugin addr `%s`, got %s\n", c.addr, p.Addr)
   105  		}
   106  		os.Remove(c.path)
   107  	}
   108  }