github.com/rhatdan/docker@v0.7.7-0.20180119204836-47a0dcbcd20a/api/server/router/network/filter_test.go (about)

     1  // +build !windows
     2  
     3  package 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  	}{
    79  		{
    80  			filter:      bridgeDriverFilters,
    81  			resultCount: 1,
    82  			err:         "",
    83  		},
    84  		{
    85  			filter:      overlayDriverFilters,
    86  			resultCount: 1,
    87  			err:         "",
    88  		},
    89  		{
    90  			filter:      nonameDriverFilters,
    91  			resultCount: 0,
    92  			err:         "",
    93  		},
    94  		{
    95  			filter:      customDriverFilters,
    96  			resultCount: 3,
    97  			err:         "",
    98  		},
    99  		{
   100  			filter:      builtinDriverFilters,
   101  			resultCount: 3,
   102  			err:         "",
   103  		},
   104  		{
   105  			filter:      invalidDriverFilters,
   106  			resultCount: 0,
   107  			err:         "Invalid filter: 'type'='invalid'",
   108  		},
   109  		{
   110  			filter:      localScopeFilters,
   111  			resultCount: 4,
   112  			err:         "",
   113  		},
   114  		{
   115  			filter:      swarmScopeFilters,
   116  			resultCount: 1,
   117  			err:         "",
   118  		},
   119  		{
   120  			filter:      globalScopeFilters,
   121  			resultCount: 1,
   122  			err:         "",
   123  		},
   124  	}
   125  
   126  	for _, testCase := range testCases {
   127  		result, err := filterNetworks(networks, testCase.filter)
   128  		if testCase.err != "" {
   129  			if err == nil {
   130  				t.Fatalf("expect error '%s', got no error", testCase.err)
   131  
   132  			} else if !strings.Contains(err.Error(), testCase.err) {
   133  				t.Fatalf("expect error '%s', got '%s'", testCase.err, err)
   134  			}
   135  		} else {
   136  			if err != nil {
   137  				t.Fatalf("expect no error, got error '%s'", err)
   138  			}
   139  			// Make sure result is not nil
   140  			if result == nil {
   141  				t.Fatal("filterNetworks should not return nil")
   142  			}
   143  
   144  			if len(result) != testCase.resultCount {
   145  				t.Fatalf("expect '%d' networks, got '%d' networks", testCase.resultCount, len(result))
   146  			}
   147  		}
   148  	}
   149  }