mirror of
https://github.com/sablierapp/sablier.git
synced 2026-01-03 19:44:59 +01:00
stop test
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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 {
|
||||
|
||||
22
pkg/provider/docker/stop.go
Normal file
22
pkg/provider/docker/stop.go
Normal 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{})
|
||||
}
|
||||
66
pkg/provider/docker/stop_test.go
Normal file
66
pkg/provider/docker/stop_test.go
Normal 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")
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user