github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/libnetwork/idm/idm_test.go (about)

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