diff --git a/libnetwork/api/api_test.go b/libnetwork/api/api_test.go index 6477a8d590..e22cce5b9e 100644 --- a/libnetwork/api/api_test.go +++ b/libnetwork/api/api_test.go @@ -92,6 +92,7 @@ func createTestNetwork(t *testing.T, network string) (libnetwork.NetworkControll if err != nil { t.Fatal(err) } + defer c.Stop() netOption := options.Generic{ netlabel.GenericData: options.Generic{ @@ -179,6 +180,7 @@ func TestCreateDeleteNetwork(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() badBody, err := json.Marshal("bad body") if err != nil { @@ -253,6 +255,7 @@ func TestGetNetworksAndEndpoints(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() ops := options.Generic{ netlabel.GenericData: map[string]string{ @@ -522,6 +525,7 @@ func TestProcGetServices(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() // Create 2 networks netName1 := "production" @@ -999,6 +1003,7 @@ func TestDetectGetNetworksInvalidQueryComposition(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() vars := map[string]string{urlNwName: "x", urlNwPID: "y"} _, errRsp := procGetNetworks(c, vars, nil) @@ -1106,6 +1111,7 @@ func TestCreateDeleteEndpoints(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() nc := networkCreate{Name: "firstNet", NetworkType: bridgeNetType} body, err := json.Marshal(nc) @@ -1228,6 +1234,7 @@ func TestJoinLeave(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() nb, err := json.Marshal(networkCreate{Name: "network", NetworkType: bridgeNetType}) if err != nil { @@ -1667,6 +1674,7 @@ func TestHttpHandlerUninit(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() h := &httpHandler{c: c} h.initRouter() @@ -1733,6 +1741,7 @@ func TestHttpHandlerBadBody(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() handleRequest := NewHTTPHandler(c) req, err := http.NewRequest("POST", "/v1.19/networks", &localReader{beBad: true}) @@ -1765,6 +1774,7 @@ func TestEndToEnd(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() handleRequest := NewHTTPHandler(c) @@ -2213,6 +2223,7 @@ func TestEndToEndErrorMessage(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() handleRequest := NewHTTPHandler(c) body := []byte{} diff --git a/libnetwork/controller.go b/libnetwork/controller.go index f834b7b370..d36e88a8ab 100644 --- a/libnetwork/controller.go +++ b/libnetwork/controller.go @@ -487,6 +487,9 @@ func (c *controller) loadDriver(networkType string) (*driverData, error) { } func (c *controller) Stop() { + if c.localStore != nil { + c.localStore.KVStore().Close() + } c.stopExternalKeyListener() osl.GC() } diff --git a/libnetwork/libnetwork_internal_test.go b/libnetwork/libnetwork_internal_test.go index bd93129cc6..21f1fae88c 100644 --- a/libnetwork/libnetwork_internal_test.go +++ b/libnetwork/libnetwork_internal_test.go @@ -13,6 +13,7 @@ func TestDriverRegistration(t *testing.T) { if err != nil { t.Fatal(err) } + defer c.Stop() err = c.(*controller).RegisterDriver(bridgeNetType, nil, driverapi.Capability{}) if err == nil { t.Fatalf("Expecting the RegisterDriver to fail for %s", bridgeNetType) diff --git a/libnetwork/libnetwork_test.go b/libnetwork/libnetwork_test.go index 82e3dd642a..169ea02107 100644 --- a/libnetwork/libnetwork_test.go +++ b/libnetwork/libnetwork_test.go @@ -53,7 +53,9 @@ func TestMain(m *testing.M) { libnetwork.SetTestDataStore(controller, datastore.NewCustomDataStore(datastore.NewMockStore())) - os.Exit(m.Run()) + x := m.Run() + controller.Stop() + os.Exit(x) } func createController() error { @@ -2071,12 +2073,13 @@ func TestInvalidRemoteDriver(t *testing.T) { t.Fatal(err) } - controller, err := libnetwork.New() + ctrlr, err := libnetwork.New() if err != nil { t.Fatal(err) } + defer ctrlr.Stop() - _, err = controller.NewNetwork("invalid-network-driver", "dummy", + _, err = ctrlr.NewNetwork("invalid-network-driver", "dummy", libnetwork.NetworkOptionGeneric(getEmptyGenericOption())) if err == nil { t.Fatal("Expected to fail. But instead succeeded") diff --git a/libnetwork/store_test.go b/libnetwork/store_test.go index d43057010c..a8a8d50181 100644 --- a/libnetwork/store_test.go +++ b/libnetwork/store_test.go @@ -15,20 +15,21 @@ import ( ) func TestZooKeeperBackend(t *testing.T) { - if err := testNewController(t, "zk", "127.0.0.1:2181"); err != nil { + c, err := testNewController(t, "zk", "127.0.0.1:2181") + if err != nil { t.Fatal(err) } + c.Stop() } -func testNewController(t *testing.T, provider, url string) error { +func testNewController(t *testing.T, provider, url string) (NetworkController, error) { cfgOptions, err := OptionBoltdbWithRandomDBFile() if err != nil { - return err + return nil, err } cfgOptions = append(cfgOptions, config.OptionKVProvider(provider)) cfgOptions = append(cfgOptions, config.OptionKVProviderURL(url)) - _, err = New(cfgOptions...) - return err + return New(cfgOptions...) } func TestBoltdbBackend(t *testing.T) { @@ -51,6 +52,7 @@ func testLocalBackend(t *testing.T, provider, url string, storeConfig *store.Con genericOption[netlabel.GenericData] = driverOptions cfgOptions = append(cfgOptions, config.OptionDriverConfig("host", genericOption)) + fmt.Printf("URL : %s\n", url) ctrl, err := New(cfgOptions...) if err != nil { t.Fatalf("Error new controller: %v", err) @@ -108,14 +110,10 @@ func TestLocalStoreLockTimeout(t *testing.T) { if err != nil { t.Fatalf("Error new controller: %v", err) } + defer ctrl.Stop() // Use the same boltdb file without closing the previous controller _, err = New(cfgOptions...) if err == nil { t.Fatalf("Multiple boldtdb connection must fail") } - store := ctrl.(*controller).localStore.KVStore() - if store == nil { - t.Fatalf("Invalid LocalStore access connection") - } - store.Close() }