123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- package libnetwork_test
- import (
- "net"
- "testing"
- log "github.com/Sirupsen/logrus"
- "github.com/docker/libnetwork"
- _ "github.com/docker/libnetwork/drivers/bridge"
- "github.com/docker/libnetwork/netutils"
- "github.com/docker/libnetwork/pkg/options"
- )
- var bridgeName = "dockertest0"
- func createTestNetwork(networkType, networkName string, option options.Generic) (libnetwork.Network, error) {
- controller := libnetwork.New()
- driver, err := controller.NewNetworkDriver(networkType, option)
- if err != nil {
- return nil, err
- }
- network, err := controller.NewNetwork(driver, networkName, "")
- if err != nil {
- return nil, err
- }
- return network, nil
- }
- func TestSimplebridge(t *testing.T) {
- defer netutils.SetupTestNetNS(t)()
- ip, subnet, err := net.ParseCIDR("192.168.100.1/24")
- if err != nil {
- t.Fatal(err)
- }
- subnet.IP = ip
- ip, cidr, err := net.ParseCIDR("192.168.100.2/28")
- if err != nil {
- t.Fatal(err)
- }
- cidr.IP = ip
- ip, cidrv6, err := net.ParseCIDR("fe90::1/96")
- if err != nil {
- t.Fatal(err)
- }
- cidrv6.IP = ip
- log.Debug("Adding a simple bridge")
- option := options.Generic{
- "BridgeName": bridgeName,
- "AddressIPv4": subnet,
- "FixedCIDR": cidr,
- "FixedCIDRv6": cidrv6,
- "EnableIPv6": true,
- "EnableIPTables": true,
- "EnableIPMasquerade": true,
- "EnableICC": true,
- "EnableIPForwarding": true,
- "AllowNonDefaultBridge": true}
- network, err := createTestNetwork("simplebridge", "testnetwork", option)
- if err != nil {
- t.Fatal(err)
- }
- ep, err := network.CreateEndpoint("testep", "", "")
- if err != nil {
- t.Fatal(err)
- }
- epList := network.Endpoints()
- if len(epList) != 1 {
- t.Fatal(err)
- }
- if ep != epList[0] {
- t.Fatal(err)
- }
- if err := ep.Delete(); err != nil {
- t.Fatal(err)
- }
- if err := network.Delete(); err != nil {
- t.Fatal(err)
- }
- }
- func TestUnknownDriver(t *testing.T) {
- defer netutils.SetupTestNetNS(t)()
- _, err := createTestNetwork("unknowndriver", "testnetwork", options.Generic{})
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if _, ok := err.(libnetwork.NetworkTypeError); !ok {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- }
- func TestNilDriver(t *testing.T) {
- controller := libnetwork.New()
- option := options.Generic{}
- _, err := controller.NewNetwork(nil, "dummy", option)
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if err != libnetwork.ErrNilNetworkDriver {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- }
- func TestNoInitDriver(t *testing.T) {
- controller := libnetwork.New()
- option := options.Generic{}
- _, err := controller.NewNetwork(&libnetwork.NetworkDriver{}, "dummy", option)
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if err != libnetwork.ErrInvalidNetworkDriver {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- }
- func TestDuplicateNetwork(t *testing.T) {
- defer netutils.SetupTestNetNS(t)()
- controller := libnetwork.New()
- option := options.Generic{}
- driver, err := controller.NewNetworkDriver("simplebridge", option)
- if err != nil {
- t.Fatal(err)
- }
- _, err = controller.NewNetwork(driver, "testnetwork", "")
- if err != nil {
- t.Fatal(err)
- }
- _, err = controller.NewNetwork(driver, "testnetwork", "")
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if _, ok := err.(libnetwork.NetworkNameError); !ok {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- }
- func TestNetworkName(t *testing.T) {
- networkName := "testnetwork"
- n, err := createTestNetwork("simplebridge", networkName, options.Generic{})
- if err != nil {
- t.Fatal(err)
- }
- if n.Name() != networkName {
- t.Fatalf("Expected network name %s, got %s", networkName, n.Name())
- }
- }
- func TestNetworkType(t *testing.T) {
- networkType := "simplebridge"
- n, err := createTestNetwork(networkType, "testnetwork", options.Generic{})
- if err != nil {
- t.Fatal(err)
- }
- if n.Type() != networkType {
- t.Fatalf("Expected network type %s, got %s", networkType, n.Type())
- }
- }
- func TestNetworkID(t *testing.T) {
- networkType := "simplebridge"
- n, err := createTestNetwork(networkType, "testnetwork", options.Generic{})
- if err != nil {
- t.Fatal(err)
- }
- if n.ID() == "" {
- t.Fatal("Expected non-empty network id")
- }
- }
- func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
- defer netutils.SetupTestNetNS(t)()
- option := options.Generic{
- "BridgeName": bridgeName,
- "AllowNonDefaultBridge": true}
- network, err := createTestNetwork("simplebridge", "testnetwork", option)
- if err != nil {
- t.Fatal(err)
- }
- ep, err := network.CreateEndpoint("testep", "", "")
- if err != nil {
- t.Fatal(err)
- }
- err = network.Delete()
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if _, ok := err.(*libnetwork.ActiveEndpointsError); !ok {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- // Done testing. Now cleanup.
- if err := ep.Delete(); err != nil {
- t.Fatal(err)
- }
- if err := network.Delete(); err != nil {
- t.Fatal(err)
- }
- }
- func TestUnknownNetwork(t *testing.T) {
- defer netutils.SetupTestNetNS(t)()
- option := options.Generic{
- "BridgeName": bridgeName,
- "AllowNonDefaultBridge": true}
- network, err := createTestNetwork("simplebridge", "testnetwork", option)
- if err != nil {
- t.Fatal(err)
- }
- err = network.Delete()
- if err != nil {
- t.Fatal(err)
- }
- err = network.Delete()
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if _, ok := err.(*libnetwork.UnknownNetworkError); !ok {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- }
- func TestUnknownEndpoint(t *testing.T) {
- defer netutils.SetupTestNetNS(t)()
- ip, subnet, err := net.ParseCIDR("192.168.100.1/24")
- if err != nil {
- t.Fatal(err)
- }
- subnet.IP = ip
- option := options.Generic{
- "BridgeName": bridgeName,
- "AddressIPv4": subnet,
- "AllowNonDefaultBridge": true}
- network, err := createTestNetwork("simplebridge", "testnetwork", option)
- if err != nil {
- t.Fatal(err)
- }
- ep, err := network.CreateEndpoint("testep", "", "")
- if err != nil {
- t.Fatal(err)
- }
- err = ep.Delete()
- if err != nil {
- t.Fatal(err)
- }
- err = ep.Delete()
- if err == nil {
- t.Fatal("Expected to fail. But instead succeeded")
- }
- if _, ok := err.(*libnetwork.UnknownEndpointError); !ok {
- t.Fatalf("Did not fail with expected error. Actual error: %v", err)
- }
- // Done testing. Now cleanup
- if err := network.Delete(); err != nil {
- t.Fatal(err)
- }
- }
|