package test import ( "context" "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 { 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 { _, err = cli.NetworkCreate(ctx, nm.networkName, network.CreateOptions{ Driver: "bridge", }) require.NoError(t, err) } nm.initialized = true } slog.Info("get network", "name", nm.networkName) return nm.networkName }