github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/libnetwork/idm/idm_test.go (about)

     1  package idm
     2  
     3  import (
     4  	"testing"
     5  
     6  	_ "github.com/docker/docker/libnetwork/testutils"
     7  )
     8  
     9  func TestNew(t *testing.T) {
    10  	_, err := New(nil, "", 0, 1)
    11  	if err == nil {
    12  		t.Fatal("Expected failure, but succeeded")
    13  	}
    14  
    15  	_, err = New(nil, "myset", 1<<10, 0)
    16  	if err == nil {
    17  		t.Fatal("Expected failure, but succeeded")
    18  	}
    19  
    20  	i, err := New(nil, "myset", 0, 10)
    21  	if err != nil {
    22  		t.Fatalf("Unexpected failure: %v", err)
    23  	}
    24  	if i.handle == nil {
    25  		t.Fatal("set is not initialized")
    26  	}
    27  	if i.start != 0 {
    28  		t.Fatal("unexpected start")
    29  	}
    30  	if i.end != 10 {
    31  		t.Fatal("unexpected end")
    32  	}
    33  }
    34  
    35  func TestAllocate(t *testing.T) {
    36  	i, err := New(nil, "myids", 50, 52)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  
    41  	if err = i.GetSpecificID(49); err == nil {
    42  		t.Fatal("Expected failure but succeeded")
    43  	}
    44  
    45  	if err = i.GetSpecificID(53); err == nil {
    46  		t.Fatal("Expected failure but succeeded")
    47  	}
    48  
    49  	o, err := i.GetID(false)
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  	if o != 50 {
    54  		t.Fatalf("Unexpected first id returned: %d", o)
    55  	}
    56  
    57  	err = i.GetSpecificID(50)
    58  	if err == nil {
    59  		t.Fatal(err)
    60  	}
    61  
    62  	o, err = i.GetID(false)
    63  	if err != nil {
    64  		t.Fatal(err)
    65  	}
    66  	if o != 51 {
    67  		t.Fatalf("Unexpected id returned: %d", o)
    68  	}
    69  
    70  	o, err = i.GetID(false)
    71  	if err != nil {
    72  		t.Fatal(err)
    73  	}
    74  	if o != 52 {
    75  		t.Fatalf("Unexpected id returned: %d", o)
    76  	}
    77  
    78  	o, err = i.GetID(false)
    79  	if err == nil {
    80  		t.Fatalf("Expected failure but succeeded: %d", o)
    81  	}
    82  
    83  	i.Release(50)
    84  
    85  	o, err = i.GetID(false)
    86  	if err != nil {
    87  		t.Fatal(err)
    88  	}
    89  	if o != 50 {
    90  		t.Fatal("Unexpected id returned")
    91  	}
    92  
    93  	i.Release(52)
    94  	err = i.GetSpecificID(52)
    95  	if err != nil {
    96  		t.Fatal(err)
    97  	}
    98  }
    99  
   100  func TestUninitialized(t *testing.T) {
   101  	i := &Idm{}
   102  
   103  	if _, err := i.GetID(false); err == nil {
   104  		t.Fatal("Expected failure but succeeded")
   105  	}
   106  
   107  	if err := i.GetSpecificID(44); err == nil {
   108  		t.Fatal("Expected failure but succeeded")
   109  	}
   110  }
   111  
   112  func TestAllocateInRange(t *testing.T) {
   113  	i, err := New(nil, "myset", 5, 10)
   114  	if err != nil {
   115  		t.Fatal(err)
   116  	}
   117  
   118  	o, err := i.GetIDInRange(6, 6, false)
   119  	if err != nil {
   120  		t.Fatal(err)
   121  	}
   122  	if o != 6 {
   123  		t.Fatalf("Unexpected id returned. Expected: 6. Got: %d", o)
   124  	}
   125  
   126  	if err = i.GetSpecificID(6); err == nil {
   127  		t.Fatalf("Expected failure but succeeded")
   128  	}
   129  
   130  	o, err = i.GetID(false)
   131  	if err != nil {
   132  		t.Fatal(err)
   133  	}
   134  	if o != 5 {
   135  		t.Fatalf("Unexpected id returned. Expected: 5. Got: %d", o)
   136  	}
   137  
   138  	i.Release(6)
   139  
   140  	o, err = i.GetID(false)
   141  	if err != nil {
   142  		t.Fatal(err)
   143  	}
   144  	if o != 6 {
   145  		t.Fatalf("Unexpected id returned. Expected: 6. Got: %d", o)
   146  	}
   147  
   148  	for n := 7; n <= 10; n++ {
   149  		o, err := i.GetIDInRange(7, 10, false)
   150  		if err != nil {
   151  			t.Fatal(err)
   152  		}
   153  		if o != uint64(n) {
   154  			t.Fatalf("Unexpected id returned. Expected: %d. Got: %d", n, o)
   155  		}
   156  	}
   157  
   158  	if err = i.GetSpecificID(7); err == nil {
   159  		t.Fatalf("Expected failure but succeeded")
   160  	}
   161  
   162  	if err = i.GetSpecificID(10); err == nil {
   163  		t.Fatalf("Expected failure but succeeded")
   164  	}
   165  
   166  	i.Release(10)
   167  
   168  	o, err = i.GetIDInRange(5, 10, false)
   169  	if err != nil {
   170  		t.Fatal(err)
   171  	}
   172  	if o != 10 {
   173  		t.Fatalf("Unexpected id returned. Expected: 10. Got: %d", o)
   174  	}
   175  
   176  	i.Release(5)
   177  
   178  	o, err = i.GetIDInRange(5, 10, false)
   179  	if err != nil {
   180  		t.Fatal(err)
   181  	}
   182  	if o != 5 {
   183  		t.Fatalf("Unexpected id returned. Expected: 5. Got: %d", o)
   184  	}
   185  
   186  	for n := 5; n <= 10; n++ {
   187  		i.Release(uint64(n))
   188  	}
   189  
   190  	for n := 5; n <= 10; n++ {
   191  		o, err := i.GetIDInRange(5, 10, false)
   192  		if err != nil {
   193  			t.Fatal(err)
   194  		}
   195  		if o != uint64(n) {
   196  			t.Fatalf("Unexpected id returned. Expected: %d. Got: %d", n, o)
   197  		}
   198  	}
   199  
   200  	for n := 5; n <= 10; n++ {
   201  		if err = i.GetSpecificID(uint64(n)); err == nil {
   202  			t.Fatalf("Expected failure but succeeded for id: %d", n)
   203  		}
   204  	}
   205  
   206  	// New larger set
   207  	ul := uint64((1 << 24) - 1)
   208  	i, err = New(nil, "newset", 0, ul)
   209  	if err != nil {
   210  		t.Fatal(err)
   211  	}
   212  
   213  	o, err = i.GetIDInRange(4096, ul, false)
   214  	if err != nil {
   215  		t.Fatal(err)
   216  	}
   217  	if o != 4096 {
   218  		t.Fatalf("Unexpected id returned. Expected: 4096. Got: %d", o)
   219  	}
   220  
   221  	o, err = i.GetIDInRange(4096, ul, false)
   222  	if err != nil {
   223  		t.Fatal(err)
   224  	}
   225  	if o != 4097 {
   226  		t.Fatalf("Unexpected id returned. Expected: 4097. Got: %d", o)
   227  	}
   228  
   229  	o, err = i.GetIDInRange(4096, ul, false)
   230  	if err != nil {
   231  		t.Fatal(err)
   232  	}
   233  	if o != 4098 {
   234  		t.Fatalf("Unexpected id returned. Expected: 4098. Got: %d", o)
   235  	}
   236  }
   237  
   238  func TestAllocateSerial(t *testing.T) {
   239  	i, err := New(nil, "myids", 50, 55)
   240  	if err != nil {
   241  		t.Fatal(err)
   242  	}
   243  
   244  	if err = i.GetSpecificID(49); err == nil {
   245  		t.Fatal("Expected failure but succeeded")
   246  	}
   247  
   248  	if err = i.GetSpecificID(56); err == nil {
   249  		t.Fatal("Expected failure but succeeded")
   250  	}
   251  
   252  	o, err := i.GetID(true)
   253  	if err != nil {
   254  		t.Fatal(err)
   255  	}
   256  	if o != 50 {
   257  		t.Fatalf("Unexpected first id returned: %d", o)
   258  	}
   259  
   260  	err = i.GetSpecificID(50)
   261  	if err == nil {
   262  		t.Fatal(err)
   263  	}
   264  
   265  	o, err = i.GetID(true)
   266  	if err != nil {
   267  		t.Fatal(err)
   268  	}
   269  	if o != 51 {
   270  		t.Fatalf("Unexpected id returned: %d", o)
   271  	}
   272  
   273  	o, err = i.GetID(true)
   274  	if err != nil {
   275  		t.Fatal(err)
   276  	}
   277  	if o != 52 {
   278  		t.Fatalf("Unexpected id returned: %d", o)
   279  	}
   280  
   281  	i.Release(50)
   282  
   283  	o, err = i.GetID(true)
   284  	if err != nil {
   285  		t.Fatal(err)
   286  	}
   287  	if o != 53 {
   288  		t.Fatal("Unexpected id returned")
   289  	}
   290  
   291  	i.Release(52)
   292  	err = i.GetSpecificID(52)
   293  	if err != nil {
   294  		t.Fatal(err)
   295  	}
   296  }