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 }