func TestAcquireLease(t *testing.T) { msr := newMockSubnetRegistry(0) sm, err := NewSubnetManager(msr) if err != nil { t.Fatalf("Failed to create subnet manager: %s", err) } extIP, _ := ip.ParseIP4("1.2.3.4") attrs := LeaseAttrs{ PublicIP: extIP, } cancel := make(chan bool) sn, err := sm.AcquireLease(&attrs, cancel) if err != nil { t.Fatal("AcquireLease failed: ", err) } if sn.String() != "10.3.3.0/24" { t.Fatal("Subnet mismatch: expected 10.3.3.0/24, got: ", sn) } // Acquire again, should reuse if sn, err = sm.AcquireLease(&attrs, cancel); err != nil { t.Fatal("AcquireLease failed: ", err) } if sn.String() != "10.3.3.0/24" { t.Fatal("Subnet mismatch: expected 10.3.3.0/24, got: ", sn) } }
func TestRenewLease(t *testing.T) { msr := newMockSubnetRegistry(1) sm, err := NewSubnetManager(msr) if err != nil { t.Fatalf("Failed to create subnet manager: %v", err) } // Create LeaseAttrs extIP, _ := ip.ParseIP4("1.2.3.4") attrs := LeaseAttrs{ PublicIP: extIP, BackendType: "vxlan", } ld, err := json.Marshal(&leaseData{Dummy: "test string"}) if err != nil { t.Fatalf("Failed to marshal leaseData: %v", err) } attrs.BackendData = json.RawMessage(ld) // Acquire lease cancel := make(chan bool) defer close(cancel) sn, err := sm.AcquireLease(&attrs, cancel) if err != nil { t.Fatal("AcquireLease failed: ", err) } go sm.LeaseRenewer(cancel) fmt.Println("Waiting for lease to pass original expiration") time.Sleep(2 * time.Second) // check that it's still good msr.mtx.RLock() defer msr.mtx.RUnlock() for subnet, v := range msr.subnets { if subnet == sn.StringSep(".", "-") { if v.expiration.Before(time.Now()) { t.Error("Failed to renew lease: expiration did not advance") } a := LeaseAttrs{} if err := json.Unmarshal(v.attrs, &a); err != nil { t.Errorf("Failed to JSON-decode LeaseAttrs: %v", err) return } if !reflect.DeepEqual(a, attrs) { t.Errorf("LeaseAttrs changed: was %#v, now %#v", attrs, a) } return } } t.Fatalf("Failed to find acquired lease") }