github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/daemon/network/filter_test.go (about) 1 // +build !windows 2 3 package network // import "github.com/docker/docker/daemon/network" 4 5 import ( 6 "strings" 7 "testing" 8 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/filters" 11 ) 12 13 func TestFilterNetworks(t *testing.T) { 14 networks := []types.NetworkResource{ 15 { 16 Name: "host", 17 Driver: "host", 18 Scope: "local", 19 }, 20 { 21 Name: "bridge", 22 Driver: "bridge", 23 Scope: "local", 24 }, 25 { 26 Name: "none", 27 Driver: "null", 28 Scope: "local", 29 }, 30 { 31 Name: "myoverlay", 32 Driver: "overlay", 33 Scope: "swarm", 34 }, 35 { 36 Name: "mydrivernet", 37 Driver: "mydriver", 38 Scope: "local", 39 }, 40 { 41 Name: "mykvnet", 42 Driver: "mykvdriver", 43 Scope: "global", 44 }, 45 } 46 47 bridgeDriverFilters := filters.NewArgs() 48 bridgeDriverFilters.Add("driver", "bridge") 49 50 overlayDriverFilters := filters.NewArgs() 51 overlayDriverFilters.Add("driver", "overlay") 52 53 nonameDriverFilters := filters.NewArgs() 54 nonameDriverFilters.Add("driver", "noname") 55 56 customDriverFilters := filters.NewArgs() 57 customDriverFilters.Add("type", "custom") 58 59 builtinDriverFilters := filters.NewArgs() 60 builtinDriverFilters.Add("type", "builtin") 61 62 invalidDriverFilters := filters.NewArgs() 63 invalidDriverFilters.Add("type", "invalid") 64 65 localScopeFilters := filters.NewArgs() 66 localScopeFilters.Add("scope", "local") 67 68 swarmScopeFilters := filters.NewArgs() 69 swarmScopeFilters.Add("scope", "swarm") 70 71 globalScopeFilters := filters.NewArgs() 72 globalScopeFilters.Add("scope", "global") 73 74 testCases := []struct { 75 filter filters.Args 76 resultCount int 77 err string 78 name string 79 }{ 80 { 81 filter: bridgeDriverFilters, 82 resultCount: 1, 83 err: "", 84 name: "bridge driver filters", 85 }, 86 { 87 filter: overlayDriverFilters, 88 resultCount: 1, 89 err: "", 90 name: "overlay driver filters", 91 }, 92 { 93 filter: nonameDriverFilters, 94 resultCount: 0, 95 err: "", 96 name: "no name driver filters", 97 }, 98 { 99 filter: customDriverFilters, 100 resultCount: 3, 101 err: "", 102 name: "custom driver filters", 103 }, 104 { 105 filter: builtinDriverFilters, 106 resultCount: 3, 107 err: "", 108 name: "builtin driver filters", 109 }, 110 { 111 filter: invalidDriverFilters, 112 resultCount: 0, 113 err: "invalid filter: 'type'='invalid'", 114 name: "invalid driver filters", 115 }, 116 { 117 filter: localScopeFilters, 118 resultCount: 4, 119 err: "", 120 name: "local scope filters", 121 }, 122 { 123 filter: swarmScopeFilters, 124 resultCount: 1, 125 err: "", 126 name: "swarm scope filters", 127 }, 128 { 129 filter: globalScopeFilters, 130 resultCount: 1, 131 err: "", 132 name: "global scope filters", 133 }, 134 } 135 136 for _, testCase := range testCases { 137 t.Run(testCase.name, func(t *testing.T) { 138 ls := make([]types.NetworkResource, 0, len(networks)) 139 ls = append(ls, networks...) 140 result, err := FilterNetworks(ls, testCase.filter) 141 if testCase.err != "" { 142 if err == nil { 143 t.Fatalf("expect error '%s', got no error", testCase.err) 144 145 } else if !strings.Contains(err.Error(), testCase.err) { 146 t.Fatalf("expect error '%s', got '%s'", testCase.err, err) 147 } 148 } else { 149 if err != nil { 150 t.Fatalf("expect no error, got error '%s'", err) 151 } 152 // Make sure result is not nil 153 if result == nil { 154 t.Fatal("filterNetworks should not return nil") 155 } 156 157 if len(result) != testCase.resultCount { 158 t.Fatalf("expect '%d' networks, got '%d' networks", testCase.resultCount, len(result)) 159 } 160 } 161 }) 162 } 163 }