stop test

This commit is contained in:
Alexis Couvreur
2024-12-27 17:10:17 -05:00
parent fbb35e583d
commit 6ab0e704dd
5 changed files with 95 additions and 22 deletions

View File

@@ -3,8 +3,6 @@ package docker
import (
"context"
"fmt"
"github.com/docker/docker/api/types/checkpoint"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/rs/zerolog"
"github.com/sablierapp/sablier/pkg/sablier"
@@ -45,21 +43,6 @@ func NewDockerProvider(cli *client.Client) (*DockerProvider, error) {
}, nil
}
func (d *DockerProvider) Stop(ctx context.Context, name string) error {
if d.UsePause {
return d.Client.ContainerPause(ctx, name)
}
if d.UseCheckpoint {
return d.Client.CheckpointCreate(ctx, name, checkpoint.CreateOptions{
CheckpointID: name,
Exit: true,
})
}
return d.Client.ContainerStop(ctx, name, container.StopOptions{})
}
func (d *DockerProvider) Events(ctx context.Context) (<-chan sablier.Message, <-chan error) {
//TODO implement me
panic("implement me")

View File

@@ -16,6 +16,7 @@ func (d *DockerProvider) Start(ctx context.Context, name string, opts provider.S
if instance.Status == sablier.InstanceReady {
// <-time.After()
// TODO: What to do with that ?
return nil
}
@@ -42,7 +43,7 @@ func (d *DockerProvider) Start(ctx context.Context, name string, opts provider.S
func (d *DockerProvider) start(ctx context.Context, name string, opts provider.StartOptions) error {
readyCh := d.AfterReady(ctx, name)
d.log.Trace().Str("name", name).Msg("start request received")
err := d.Client.ContainerStart(ctx, name, container.StartOptions{})
if err != nil {

View File

@@ -0,0 +1,22 @@
package docker
import (
"context"
"github.com/docker/docker/api/types/checkpoint"
"github.com/docker/docker/api/types/container"
)
func (d *DockerProvider) Stop(ctx context.Context, name string) error {
if d.UsePause {
return d.Client.ContainerPause(ctx, name)
}
if d.UseCheckpoint {
return d.Client.CheckpointCreate(ctx, name, checkpoint.CreateOptions{
CheckpointID: name,
Exit: true,
})
}
return d.Client.ContainerStop(ctx, name, container.StopOptions{})
}

View File

@@ -0,0 +1,66 @@
package docker_test
import (
"context"
"encoding/json"
"github.com/sablierapp/sablier/pkg/provider"
"github.com/sablierapp/sablier/pkg/provider/docker"
"github.com/stretchr/testify/assert"
"testing"
"time"
)
func TestDockerProvider_Stop(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
dind, err := setupDinD(t, ctx)
if err != nil {
t.Fatal(err)
}
p, err := docker.NewDockerProvider(dind.client)
if err != nil {
t.Fatal(err)
}
mimic, err := dind.CreateMimic(ctx, MimicOptions{
WithHealth: true,
HealthyAfter: 2 * time.Second,
RunningAfter: 1 * time.Second,
SablierGroup: "test",
})
if err != nil {
t.Fatal(err)
}
err = p.Start(ctx, mimic.ID, provider.StartOptions{
DesiredReplicas: 1,
ConsiderReadyAfter: 0,
})
if err != nil {
t.Fatal(err)
}
err = <-p.AfterReady(ctx, mimic.ID)
if err != nil {
t.Fatal(err)
}
err = p.Stop(ctx, mimic.ID)
if err != nil {
t.Fatal(err)
}
inspect, err := dind.client.ContainerInspect(ctx, mimic.ID)
if err != nil {
t.Fatal(err)
}
resp, err := json.Marshal(inspect)
if err != nil {
t.Fatal(err)
}
t.Logf("inspect: %+v\n", string(resp))
assert.Equal(t, inspect.State.Status, "exited")
}

View File

@@ -2,13 +2,14 @@ package sablier
import (
"context"
"maps"
"slices"
"sync"
"time"
"github.com/sablierapp/sablier/pkg/promise"
"github.com/sablierapp/sablier/pkg/tinykv"
log "github.com/sirupsen/logrus"
"golang.org/x/exp/maps"
)
type Sablier struct {
@@ -62,7 +63,7 @@ func (s *Sablier) stop(ctx context.Context) {
func (s *Sablier) RegisteredInstances() []string {
s.pmu.RLock()
defer s.pmu.RUnlock()
return maps.Keys(s.promises)
return slices.Collect(maps.Keys(s.promises))
}
func (s *Sablier) SetGroups(groups map[string][]InstanceConfig) {
@@ -78,8 +79,8 @@ func (s *Sablier) GetGroup(group string) ([]InstanceConfig, bool) {
return instances, ok
}
func (s *Sablier) Groups() any {
func (s *Sablier) Groups() []string {
s.gmu.Lock()
defer s.gmu.Unlock()
return maps.Keys(s.groups)
return slices.Collect(maps.Keys(s.groups))
}