1
0
mirror of https://github.com/amir20/dozzle.git synced 2025-12-21 13:23:07 +01:00

fix: tries to reconnect of remote host disconnects (#2876)

This commit is contained in:
Amir Raminfar
2024-04-08 11:59:03 -07:00
committed by GitHub
parent 3d2036c97a
commit 83f488ecef
15 changed files with 196 additions and 101 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"testing"
"github.com/amir20/dozzle/internal/utils"
"github.com/magiconair/properties/assert"
"github.com/stretchr/testify/mock"
)
@@ -23,9 +24,9 @@ func (m *mockedClient) FindContainer(id string) (Container, error) {
return args.Get(0).(Container), args.Error(1)
}
func (m *mockedClient) Events(ctx context.Context, events chan<- ContainerEvent) <-chan error {
func (m *mockedClient) Events(ctx context.Context, events chan<- ContainerEvent) error {
args := m.Called(ctx, events)
return args.Get(0).(chan error)
return args.Error(0)
}
func (m *mockedClient) ContainerStats(ctx context.Context, id string, stats chan<- ContainerStat) error {
@@ -33,6 +34,11 @@ func (m *mockedClient) ContainerStats(ctx context.Context, id string, stats chan
return args.Error(0)
}
func (m *mockedClient) Host() *Host {
args := m.Called()
return args.Get(0).(*Host)
}
func TestContainerStore_List(t *testing.T) {
client := new(mockedClient)
@@ -42,12 +48,18 @@ func TestContainerStore_List(t *testing.T) {
Name: "test",
},
}, nil)
client.On("Events", mock.Anything, mock.AnythingOfType("chan<- docker.ContainerEvent")).Return(make(chan error))
client.On("Events", mock.Anything, mock.AnythingOfType("chan<- docker.ContainerEvent")).Return(nil).Run(func(args mock.Arguments) {
ctx := args.Get(0).(context.Context)
<-ctx.Done()
})
client.On("Host").Return(&Host{
ID: "localhost",
})
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)
store := NewContainerStore(ctx, client)
containers := store.List()
containers, _ := store.List()
assert.Equal(t, containers[0].ID, "1234")
}
@@ -59,22 +71,24 @@ func TestContainerStore_die(t *testing.T) {
ID: "1234",
Name: "test",
State: "running",
Stats: utils.NewRingBuffer[ContainerStat](300),
},
}, nil)
client.On("Events", mock.Anything, mock.AnythingOfType("chan<- docker.ContainerEvent")).Return(make(chan error)).
client.On("Events", mock.Anything, mock.AnythingOfType("chan<- docker.ContainerEvent")).Return(nil).
Run(func(args mock.Arguments) {
ctx := args.Get(0).(context.Context)
events := args.Get(1).(chan<- ContainerEvent)
go func() {
events <- ContainerEvent{
Name: "die",
ActorID: "1234",
Host: "localhost",
}
<-ctx.Done()
}()
events <- ContainerEvent{
Name: "die",
ActorID: "1234",
Host: "localhost",
}
<-ctx.Done()
})
client.On("Host").Return(&Host{
ID: "localhost",
})
client.On("ContainerStats", mock.Anything, "1234", mock.AnythingOfType("chan<- docker.ContainerStat")).Return(nil)
@@ -87,6 +101,6 @@ func TestContainerStore_die(t *testing.T) {
store.Subscribe(ctx, events)
<-events
containers := store.List()
containers, _ := store.List()
assert.Equal(t, containers[0].State, "exited")
}