| // +build !windows |
| |
| package network // import "github.com/docker/docker/daemon/network" |
| |
| import ( |
| "strings" |
| "testing" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/api/types/filters" |
| ) |
| |
| func TestFilterNetworks(t *testing.T) { |
| networks := []types.NetworkResource{ |
| { |
| Name: "host", |
| Driver: "host", |
| Scope: "local", |
| }, |
| { |
| Name: "bridge", |
| Driver: "bridge", |
| Scope: "local", |
| }, |
| { |
| Name: "none", |
| Driver: "null", |
| Scope: "local", |
| }, |
| { |
| Name: "myoverlay", |
| Driver: "overlay", |
| Scope: "swarm", |
| }, |
| { |
| Name: "mydrivernet", |
| Driver: "mydriver", |
| Scope: "local", |
| }, |
| { |
| Name: "mykvnet", |
| Driver: "mykvdriver", |
| Scope: "global", |
| }, |
| } |
| |
| bridgeDriverFilters := filters.NewArgs() |
| bridgeDriverFilters.Add("driver", "bridge") |
| |
| overlayDriverFilters := filters.NewArgs() |
| overlayDriverFilters.Add("driver", "overlay") |
| |
| nonameDriverFilters := filters.NewArgs() |
| nonameDriverFilters.Add("driver", "noname") |
| |
| customDriverFilters := filters.NewArgs() |
| customDriverFilters.Add("type", "custom") |
| |
| builtinDriverFilters := filters.NewArgs() |
| builtinDriverFilters.Add("type", "builtin") |
| |
| invalidDriverFilters := filters.NewArgs() |
| invalidDriverFilters.Add("type", "invalid") |
| |
| localScopeFilters := filters.NewArgs() |
| localScopeFilters.Add("scope", "local") |
| |
| swarmScopeFilters := filters.NewArgs() |
| swarmScopeFilters.Add("scope", "swarm") |
| |
| globalScopeFilters := filters.NewArgs() |
| globalScopeFilters.Add("scope", "global") |
| |
| testCases := []struct { |
| filter filters.Args |
| resultCount int |
| err string |
| name string |
| }{ |
| { |
| filter: bridgeDriverFilters, |
| resultCount: 1, |
| err: "", |
| name: "bridge driver filters", |
| }, |
| { |
| filter: overlayDriverFilters, |
| resultCount: 1, |
| err: "", |
| name: "overlay driver filters", |
| }, |
| { |
| filter: nonameDriverFilters, |
| resultCount: 0, |
| err: "", |
| name: "no name driver filters", |
| }, |
| { |
| filter: customDriverFilters, |
| resultCount: 3, |
| err: "", |
| name: "custom driver filters", |
| }, |
| { |
| filter: builtinDriverFilters, |
| resultCount: 3, |
| err: "", |
| name: "builtin driver filters", |
| }, |
| { |
| filter: invalidDriverFilters, |
| resultCount: 0, |
| err: "invalid filter: 'type'='invalid'", |
| name: "invalid driver filters", |
| }, |
| { |
| filter: localScopeFilters, |
| resultCount: 4, |
| err: "", |
| name: "local scope filters", |
| }, |
| { |
| filter: swarmScopeFilters, |
| resultCount: 1, |
| err: "", |
| name: "swarm scope filters", |
| }, |
| { |
| filter: globalScopeFilters, |
| resultCount: 1, |
| err: "", |
| name: "global scope filters", |
| }, |
| } |
| |
| for _, testCase := range testCases { |
| t.Run(testCase.name, func(t *testing.T) { |
| ls := make([]types.NetworkResource, 0, len(networks)) |
| ls = append(ls, networks...) |
| result, err := FilterNetworks(ls, testCase.filter) |
| if testCase.err != "" { |
| if err == nil { |
| t.Fatalf("expect error '%s', got no error", testCase.err) |
| |
| } else if !strings.Contains(err.Error(), testCase.err) { |
| t.Fatalf("expect error '%s', got '%s'", testCase.err, err) |
| } |
| } else { |
| if err != nil { |
| t.Fatalf("expect no error, got error '%s'", err) |
| } |
| // Make sure result is not nil |
| if result == nil { |
| t.Fatal("filterNetworks should not return nil") |
| } |
| |
| if len(result) != testCase.resultCount { |
| t.Fatalf("expect '%d' networks, got '%d' networks", testCase.resultCount, len(result)) |
| } |
| } |
| }) |
| } |
| } |