Wrote Remove method. Started tests.

This commit is contained in:
Jay
2026-04-15 13:57:56 -04:00
parent 8c28e2cca2
commit 35e499620e
2 changed files with 97 additions and 0 deletions

32
pool.go
View File

@@ -170,3 +170,35 @@ func (p *Pool) Add(rawURL string) error {
return nil return nil
} }
func (p *Pool) Remove(rawURL string) error {
url, err := NormalizeURL(rawURL)
if err != nil {
return err
}
p.mu.Lock()
if p.closed {
p.mu.Unlock()
return errors.NewPoolError("pool is closed")
}
conn, exists := p.connections[url]
if !exists {
p.mu.Unlock()
return errors.NewPoolError("connection not found")
}
delete(p.connections, url)
p.mu.Unlock()
close(conn.stop)
conn.inner.Close()
select {
case p.events <- PoolEvent{URL: url, Kind: EventDisconnected}:
case <-p.done:
return nil
}
return nil
}

View File

@@ -95,3 +95,68 @@ func TestPoolAdd(t *testing.T) {
pool.Close() pool.Close()
}) })
} }
func TestPoolRemove(t *testing.T) {
t.Run("removes known url", func(t *testing.T) {
mockSocket := NewMockSocket()
mockDialer := &MockDialer{
DialFunc: func(string, http.Header) (Socket, *http.Response, error) {
return mockSocket, nil, nil
},
}
pool, err := NewPool(nil, nil)
assert.NoError(t, err)
pool.dialer = mockDialer
pool.Add("wss://peer1")
pool.Add("wss://peer2")
// expect two connection events
counter := 2
assert.Eventually(t, func() bool {
if counter == 0 {
return true
}
select {
case e := <-pool.events:
counter = counter - 1
assert.Equal(t, EventConnected, e.Kind)
}
return false
}, testTimeout, testTick, "expected connection events")
// remove a connection
err = pool.Remove("wss://peer2/")
assert.NoError(t, err)
// expect a disconnected event
assert.Eventually(t, func() bool {
select {
case e := <-pool.events:
return assert.Equal(t, EventDisconnected, e.Kind)
default:
return false
}
}, testTimeout, testTick, "expected disconnected event")
// connection no longer in pool
pool.mu.Lock()
defer pool.mu.Unlock()
_, ok := pool.connections["wss://peer2"]
assert.False(t, ok, "connection is still in pool")
})
t.Run("normalizes url before lookup", func(t *testing.T) {
})
t.Run("unknown url returns error", func(t *testing.T) {
})
t.Run("closed pool returns error", func(t *testing.T) {
})
}