Files
query-orchestration/internal/test/network.go
T
Michael McGuinness dd2eebf13a Merged in feature/testingopts (pull request #129)
Testing Options and Clean Up

* bitsandbobs

* lint

* healthchecks

* imgintests

* singlegenerate

* testclean

* network

* networkclean

* cmds
2025-05-03 01:16:53 +00:00

71 lines
1.3 KiB
Go

package test
import (
"context"
"fmt"
"log/slog"
"sync"
"testing"
"github.com/docker/docker/api/types/network"
"github.com/docker/docker/client"
"github.com/stretchr/testify/require"
)
type NetworkManager struct {
networkName string
mutex sync.Mutex
initialized bool
}
var (
DepNetwork = &NetworkManager{}
)
const (
networkName = "queryorchestration_test"
)
func (nm *NetworkManager) Get(t testing.TB, ctx context.Context) string {
nm.mutex.Lock()
defer nm.mutex.Unlock()
if nm.initialized {
return nm.networkName
}
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
require.NoError(t, err)
nm.networkName = networkName
current, err := cli.NetworkList(ctx, network.ListOptions{})
require.NoError(t, err)
found := false
for _, c := range current {
if c.Name == nm.networkName {
found = true
continue
}
}
if found {
return nm.networkName
}
_, err = cli.NetworkCreate(ctx, nm.networkName, network.CreateOptions{
Driver: "bridge",
})
conflictErrorMsg := fmt.Sprintf("Error response from daemon: network with name %s already exists", nm.networkName)
if err != nil && err.Error() != conflictErrorMsg {
require.NoError(t, err)
}
slog.Info("created network", "name", nm.networkName)
nm.initialized = true
return nm.networkName
}