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  }