Преглед на файлове

Merge pull request #537 from mrjana/integ

Introduce test remote plugin in dnet
Madhu Venugopal преди 9 години
родител
ревизия
c062ee449a
променени са 3 файла, в които са добавени 72 реда и са изтрити 8 реда
  1. 64 0
      libnetwork/cmd/dnet/dnet.go
  2. 2 2
      libnetwork/drivers/remote/driver.go
  3. 6 6
      libnetwork/test/integration/dnet/simple.bats

+ 64 - 0
libnetwork/cmd/dnet/dnet.go

@@ -7,6 +7,7 @@ import (
 	"io"
 	"io/ioutil"
 	"net/http"
+	"net/http/httptest"
 	"os"
 	"strings"
 
@@ -19,6 +20,7 @@ import (
 	"github.com/docker/libnetwork"
 	"github.com/docker/libnetwork/api"
 	"github.com/docker/libnetwork/config"
+	"github.com/docker/libnetwork/driverapi"
 	"github.com/docker/libnetwork/netlabel"
 	"github.com/docker/libnetwork/options"
 	"github.com/gorilla/mux"
@@ -134,6 +136,10 @@ type dnetConnection struct {
 }
 
 func (d *dnetConnection) dnetDaemon(cfgFile string) error {
+	if err := startTestDriver(); err != nil {
+		return fmt.Errorf("failed to start test driver: %v\n", err)
+	}
+
 	cfg, err := parseConfig(cfgFile)
 	var cOptions []config.Option
 	if err == nil {
@@ -162,6 +168,64 @@ func (d *dnetConnection) dnetDaemon(cfgFile string) error {
 	return http.ListenAndServe(d.addr, r)
 }
 
+func startTestDriver() error {
+	mux := http.NewServeMux()
+	server := httptest.NewServer(mux)
+	if server == nil {
+		return fmt.Errorf("Failed to start a HTTP Server")
+	}
+
+	mux.HandleFunc("/Plugin.Activate", func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, `{"Implements": ["%s"]}`, driverapi.NetworkPluginEndpointType)
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.GetCapabilities", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, `{"Scope":"global"}`)
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.CreateNetwork", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, "null")
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.DeleteNetwork", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, "null")
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.CreateEndpoint", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, "null")
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.DeleteEndpoint", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, "null")
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.Join", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, "null")
+	})
+
+	mux.HandleFunc(fmt.Sprintf("/%s.Leave", driverapi.NetworkPluginEndpointType), func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1+json")
+		fmt.Fprintf(w, "null")
+	})
+
+	if err := os.MkdirAll("/usr/share/docker/plugins", 0755); err != nil {
+		return err
+	}
+
+	if err := ioutil.WriteFile("/usr/share/docker/plugins/test.spec", []byte(server.URL), 0644); err != nil {
+		return err
+	}
+
+	return nil
+}
+
 func newDnetConnection(val string) (*dnetConnection, error) {
 	url, err := parsers.ParseHost(DefaultHTTPHost, DefaultUnixSocket, val)
 	if err != nil {

+ 2 - 2
libnetwork/drivers/remote/driver.go

@@ -192,8 +192,8 @@ func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo,
 	}
 
 	ifaceName := res.InterfaceName
-	if ifaceName == nil {
-		return fmt.Errorf("no interface name information received")
+	if jinfo.InterfaceName() != nil && ifaceName == nil {
+		return fmt.Errorf("no interface name information received while one is expected")
 	}
 
 	if iface := jinfo.InterfaceName(); iface != nil {

+ 6 - 6
libnetwork/test/integration/dnet/simple.bats

@@ -5,7 +5,7 @@ load helpers
 function setup() {
     if [ "${BATS_TEST_NUMBER}" -eq 1 ]; then
 	start_consul
-	start_dnet 1 simple multihost overlay
+	start_dnet 1 simple multihost test
     fi
 }
 
@@ -26,12 +26,13 @@ function teardown() {
     driver=$(echo ${lines[1]} | cut -d" " -f3)
     echo ${name} ${driver}
     [ "$name" = "multihost" ]
-    [ "$driver" = "overlay" ]
+    [ "$driver" = "test" ]
 }
 
 @test "Test network create" {
     echo $(docker ps)
-    run dnet_cmd $(inst_id2port 1) network create -d overlay mh1
+    run dnet_cmd $(inst_id2port 1) network create -d test mh1
+    echo ${output}
     [ "$status" -eq 0 ]
     line=$(dnet_cmd $(inst_id2port 1) network ls | grep mh1)
     echo ${line}
@@ -39,13 +40,13 @@ function teardown() {
     driver=$(echo ${line} | cut -d" " -f3)
     echo ${name} ${driver}
     [ "$name" = "mh1" ]
-    [ "$driver" = "overlay" ]
+    [ "$driver" = "test" ]
     dnet_cmd $(inst_id2port 1) network rm mh1
 }
 
 @test "Test network delete with id" {
     echo $(docker ps)
-    run dnet_cmd $(inst_id2port 1) network create -d overlay mh1
+    run dnet_cmd $(inst_id2port 1) network create -d test mh1
     [ "$status" -eq 0 ]
     echo ${output}
     dnet_cmd $(inst_id2port 1) network rm ${output}
@@ -82,7 +83,6 @@ function teardown() {
 }
 
 @test "Test service attach" {
-    skip_for_circleci
     echo $(docker ps)
     dnet_cmd $(inst_id2port 1) service publish svc1.multihost
     dnet_cmd $(inst_id2port 1) container create container_1