diff --git a/dht/routing_table.go b/dht/routing_table.go index 410420f..5f30521 100644 --- a/dht/routing_table.go +++ b/dht/routing_table.go @@ -258,13 +258,17 @@ type routingTable struct { func newRoutingTable(id bits.Bitmap) *routingTable { var rt routingTable rt.id = id + rt.reset() + return &rt +} + +func (rt *routingTable) reset() { for i := range rt.buckets { rt.buckets[i] = bucket{ peers: make([]peer, 0, bucketSize), lock: &sync.RWMutex{}, } } - return &rt } func (rt *routingTable) BucketInfo() string { @@ -415,6 +419,7 @@ func (rt *routingTable) UnmarshalJSON(b []byte) error { if err != nil { return errors.Prefix("decoding ID", err) } + rt.reset() for _, s := range data.Contacts { parts := strings.Split(s, rtContactSep) diff --git a/dht/routing_table_test.go b/dht/routing_table_test.go index 7a48467..cc35a30 100644 --- a/dht/routing_table_test.go +++ b/dht/routing_table_test.go @@ -195,6 +195,20 @@ func TestRoutingTable_Save(t *testing.T) { goldie.Assert(t, t.Name(), data) } -func TestRoutingTable_Load(t *testing.T) { +func TestRoutingTable_Load_ID(t *testing.T) { + id := "1c8aff71b99462464d9eeac639595ab99664be3482cb91a29d87467515c7d9158fe72aa1f1582dab07d8f8b5db277f41" + data := []byte(`{"id": "` + id + `","contacts": []}`) + + rt := routingTable{} + err := json.Unmarshal(data, &rt) + if err != nil { + t.Error(err) + } + if rt.id.Hex() != id { + t.Error("id mismatch") + } +} + +func TestRoutingTable_Load_Contacts(t *testing.T) { t.Skip("TODO") }