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  }