github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/ipamutils/utils_test.go (about) 1 package ipamutils 2 3 import ( 4 "net" 5 "testing" 6 7 _ "github.com/docker/libnetwork/testutils" 8 "gotest.tools/v3/assert" 9 is "gotest.tools/v3/assert/cmp" 10 ) 11 12 func initBroadPredefinedNetworks() []*net.IPNet { 13 pl := make([]*net.IPNet, 0, 31) 14 mask := []byte{255, 255, 0, 0} 15 for i := 17; i < 32; i++ { 16 pl = append(pl, &net.IPNet{IP: []byte{172, byte(i), 0, 0}, Mask: mask}) 17 } 18 mask20 := []byte{255, 255, 240, 0} 19 for i := 0; i < 16; i++ { 20 pl = append(pl, &net.IPNet{IP: []byte{192, 168, byte(i << 4), 0}, Mask: mask20}) 21 } 22 return pl 23 } 24 25 func initGranularPredefinedNetworks() []*net.IPNet { 26 pl := make([]*net.IPNet, 0, 256*256) 27 mask := []byte{255, 255, 255, 0} 28 for i := 0; i < 256; i++ { 29 for j := 0; j < 256; j++ { 30 pl = append(pl, &net.IPNet{IP: []byte{10, byte(i), byte(j), 0}, Mask: mask}) 31 } 32 } 33 return pl 34 } 35 36 func initGlobalScopeNetworks() []*net.IPNet { 37 pl := make([]*net.IPNet, 0, 256*256) 38 mask := []byte{255, 255, 255, 0} 39 for i := 0; i < 256; i++ { 40 for j := 0; j < 256; j++ { 41 pl = append(pl, &net.IPNet{IP: []byte{30, byte(i), byte(j), 0}, Mask: mask}) 42 } 43 } 44 return pl 45 } 46 47 func TestDefaultNetwork(t *testing.T) { 48 for _, nw := range PredefinedGlobalScopeDefaultNetworks { 49 if ones, bits := nw.Mask.Size(); bits != 32 || ones != 24 { 50 t.Fatalf("Unexpected size for network in granular list: %v", nw) 51 } 52 } 53 54 for _, nw := range PredefinedLocalScopeDefaultNetworks { 55 if ones, bits := nw.Mask.Size(); bits != 32 || (ones != 20 && ones != 16) { 56 t.Fatalf("Unexpected size for network in broad list: %v", nw) 57 } 58 } 59 60 originalBroadNets := initBroadPredefinedNetworks() 61 m := make(map[string]bool) 62 for _, v := range originalBroadNets { 63 m[v.String()] = true 64 } 65 for _, nw := range PredefinedLocalScopeDefaultNetworks { 66 _, ok := m[nw.String()] 67 assert.Check(t, ok) 68 delete(m, nw.String()) 69 } 70 71 assert.Check(t, is.Len(m, 0)) 72 73 originalGranularNets := initGranularPredefinedNetworks() 74 75 m = make(map[string]bool) 76 for _, v := range originalGranularNets { 77 m[v.String()] = true 78 } 79 for _, nw := range PredefinedGlobalScopeDefaultNetworks { 80 _, ok := m[nw.String()] 81 assert.Check(t, ok) 82 delete(m, nw.String()) 83 } 84 85 assert.Check(t, is.Len(m, 0)) 86 } 87 88 func TestConfigGlobalScopeDefaultNetworks(t *testing.T) { 89 err := ConfigGlobalScopeDefaultNetworks([]*NetworkToSplit{{"30.0.0.0/8", 24}}) 90 assert.NilError(t, err) 91 92 originalGlobalScopeNetworks := initGlobalScopeNetworks() 93 m := make(map[string]bool) 94 for _, v := range originalGlobalScopeNetworks { 95 m[v.String()] = true 96 } 97 for _, nw := range PredefinedGlobalScopeDefaultNetworks { 98 _, ok := m[nw.String()] 99 assert.Check(t, ok) 100 delete(m, nw.String()) 101 } 102 103 assert.Check(t, is.Len(m, 0)) 104 } 105 106 func TestInitAddressPools(t *testing.T) { 107 err := ConfigLocalScopeDefaultNetworks([]*NetworkToSplit{{"172.80.0.0/16", 24}, {"172.90.0.0/16", 24}}) 108 assert.NilError(t, err) 109 110 // Check for Random IPAddresses in PredefinedLocalScopeDefaultNetworks ex: first , last and middle 111 assert.Check(t, is.Len(PredefinedLocalScopeDefaultNetworks, 512), "Failed to find PredefinedLocalScopeDefaultNetworks") 112 assert.Check(t, is.Equal(PredefinedLocalScopeDefaultNetworks[0].String(), "172.80.0.0/24")) 113 assert.Check(t, is.Equal(PredefinedLocalScopeDefaultNetworks[127].String(), "172.80.127.0/24")) 114 assert.Check(t, is.Equal(PredefinedLocalScopeDefaultNetworks[255].String(), "172.80.255.0/24")) 115 assert.Check(t, is.Equal(PredefinedLocalScopeDefaultNetworks[256].String(), "172.90.0.0/24")) 116 assert.Check(t, is.Equal(PredefinedLocalScopeDefaultNetworks[383].String(), "172.90.127.0/24")) 117 assert.Check(t, is.Equal(PredefinedLocalScopeDefaultNetworks[511].String(), "172.90.255.0/24")) 118 }