Beispiel #1
0
func TestServer(t *testing.T) {
	l := sockets.NewInmemSocket("test", 1)
	testDialers[l.Addr().String()] = l.Dial
	handlers := map[byte]Handler{
		'1': newTestHandler(l.Addr(), '1'),
		'2': newTestHandler(l.Addr(), '2'),
	}
	srv := NewServer(l, handlers)
	defer srv.Close()

	for msgType := range handlers {
		conn, err := l.Dial("test", "test")
		if err != nil {
			t.Fatal(err)
		}
		defer conn.Close()
		if _, err := conn.Write([]byte{byte(msgType)}); err != nil {
			t.Fatal(err)
		}

		// the test handler just writes out the message type it uses, so let's read and compare to what we're expecting
		buf := make([]byte, 1)
		if _, err := conn.Read(buf); err != nil {
			t.Fatal(err)
		}
		if buf[0] != byte(msgType) {
			t.Fatalf("expected conn from %q, got %q", msgType, buf[0])
		}
	}
}
Beispiel #2
0
func newTestCluster(size int, prefixAddr string) ([]*drax.Cluster, error) {
	var nodes []*drax.Cluster
	for i := 0; i < size; i++ {
		addr := prefixAddr + strconv.Itoa(i)
		home, err := ioutil.TempDir("", addr)
		if err != nil {
			return nil, err
		}
		l := sockets.NewInmemSocket(addr, 1)
		clusterDialers[addr] = l.Dial
		dialer := func(addr string, timeout time.Duration) (net.Conn, error) {
			h, ok := clusterDialers[addr]
			if !ok {
				return nil, fmt.Errorf("unreachable")
			}
			return h("inmem", addr)
		}
		var peer string
		if i > 0 {
			peer = nodes[i-1].Addr()
		}
		c, err := drax.New(l, dialer, home, addr, peer, nil)
		if err != nil {
			return nil, err
		}
		nodes = append(nodes, c)
	}
	return nodes, nil
}
func TestVolumeDriver(t *testing.T) {
	h := NewHandlerFromVolumeDriver(testVolumeDriver{})
	l := sockets.NewInmemSocket("test", 0)
	go h.Serve(l)
	defer l.Close()

	client := &http.Client{Transport: &http.Transport{
		Dial: l.Dial,
	}}

	resp, err := pluginRequest(client, "/VolumeDriver.Create", volumeplugin.Request{Name: "foo"})
	if err != nil {
		t.Fatal(err)
	}
	if resp.Err != "" {
		t.Fatalf("error while creating volume: %v", err)
	}
}
func TestHandler(t *testing.T) {
	p := &testPlugin{}
	h := NewHandler(p)
	l := sockets.NewInmemSocket("test", 0)
	go h.Serve(l)
	defer l.Close()

	client := &http.Client{Transport: &http.Transport{
		Dial: l.Dial,
	}}

	// Create
	resp, err := pluginRequest(client, createPath, Request{Name: "foo"})
	if err != nil {
		t.Fatal(err)
	}
	if resp.Err != "" {
		t.Fatalf("error while creating volume: %v", err)
	}
	if p.create != 1 {
		t.Fatalf("expected create 1, got %d", p.create)
	}

	// Get
	resp, err = pluginRequest(client, getPath, Request{Name: "foo"})
	if err != nil {
		t.Fatal(err)
	}
	if resp.Err != "" {
		t.Fatalf("got error getting volume: %s", resp.Err)
	}
	if resp.Volume.Name != "foo" {
		t.Fatalf("expected volume `foo`, got %v", resp.Volume)
	}
	if p.get != 1 {
		t.Fatalf("expected get 1, got %d", p.get)
	}

	// List
	resp, err = pluginRequest(client, listPath, Request{Name: "foo"})
	if err != nil {
		t.Fatal(err)
	}
	if resp.Err != "" {
		t.Fatalf("expected no volume, got: %s", resp.Err)
	}
	if len(resp.Volumes) != 1 {
		t.Fatalf("expected 1 volume, got %v", resp.Volumes)
	}
	if resp.Volumes[0].Name != "foo" {
		t.Fatalf("expected volume `foo`, got %v", resp.Volumes[0])
	}
	if p.list != 1 {
		t.Fatalf("expected list 1, got %d", p.list)
	}

	// Path
	if _, err := pluginRequest(client, hostVirtualPath, Request{Name: "foo"}); err != nil {
		t.Fatal(err)
	}
	if p.path != 1 {
		t.Fatalf("expected path 1, got %d", p.path)
	}

	// Mount
	if _, err := pluginRequest(client, mountPath, Request{Name: "foo"}); err != nil {
		t.Fatal(err)
	}
	if p.mount != 1 {
		t.Fatalf("expected mount 1, got %d", p.mount)
	}

	// Unmount
	if _, err := pluginRequest(client, unmountPath, Request{Name: "foo"}); err != nil {
		t.Fatal(err)
	}
	if p.unmount != 1 {
		t.Fatalf("expected unmount 1, got %d", p.unmount)
	}

	// Remove
	resp, err = pluginRequest(client, removePath, Request{Name: "foo"})
	if err != nil {
		t.Fatal(err)
	}
	if resp.Err != "" {
		t.Fatalf("got error removing volume: %s", resp.Err)
	}
	if p.remove != 1 {
		t.Fatalf("expected remove 1, got %d", p.remove)
	}

	// Capabilities
	resp, err = pluginRequest(client, capabilitiesPath, Request{})
	if err != nil {
		t.Fatal(err)
	}
	if resp.Err != "" {
		t.Fatalf("got error removing volume: %s", resp.Err)
	}
	if p.capabilities != 1 {
		t.Fatalf("expected remove 1, got %d", p.capabilities)
	}
}