Skip to content

Commit

Permalink
Use unique names for relayer images & cleanup when purpose served
Browse files Browse the repository at this point in the history
  • Loading branch information
vimystic committed Aug 28, 2023
1 parent 3415e6a commit 222b868
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 21 deletions.
13 changes: 8 additions & 5 deletions interchaintest/client_threshold_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,16 @@ func TestScenarioClientThresholdUpdate(t *testing.T) {
g0, g1 := chains[0], chains[1]

client, network := interchaintest.DockerSetup(t)
relayerinterchaintest.BuildRelayerImage(t)
uuid := relayerinterchaintest.UniqueRelayerImageName()
relayerinterchaintest.BuildRelayerImage(t, uuid)

// Relayer is set with "--time-threshold 5m"
// The client being created below also has a trusting period of 5m.
// The relayer should automatically update the client after chains re in sync.
r := interchaintest.NewBuiltinRelayerFactory(
ibc.CosmosRly,
zaptest.NewLogger(t),
interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"),
interchaintestrelayer.CustomDockerImage(uuid, "latest", "100:1000"),
interchaintestrelayer.ImagePull(false),
interchaintestrelayer.StartupFlags("--time-threshold", "20s"),
).Build(t, client, network)
Expand Down Expand Up @@ -102,6 +103,7 @@ func TestScenarioClientThresholdUpdate(t *testing.T) {
require.NoError(t, r.StartRelayer(ctx, eRep, ibcPath))
t.Cleanup(func() {
_ = r.StopRelayer(ctx, eRep)
relayerinterchaintest.DestroyRelayerImage(t, uuid)
})

const heightOffset = 10
Expand Down Expand Up @@ -164,15 +166,16 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) {
g0, g1 := chains[0], chains[1]

client, network := interchaintest.DockerSetup(t)
relayerinterchaintest.BuildRelayerImage(t)
uuid := relayerinterchaintest.UniqueRelayerImageName()
relayerinterchaintest.BuildRelayerImage(t, uuid)
logger := zaptest.NewLogger(t)

// Relayer is set with "--time-threshold 0"
// The Relayer should NOT continuously update clients
r := interchaintest.NewBuiltinRelayerFactory(
ibc.CosmosRly,
logger,
interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"),
zaptest.NewLogger(t),
interchaintestrelayer.CustomDockerImage(uuid, "latest", "100:1000"),
interchaintestrelayer.ImagePull(false),
).Build(t, client, network)

Expand Down
28 changes: 25 additions & 3 deletions interchaintest/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (

dockertypes "github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/archive"
"github.com/google/uuid"
"github.com/moby/moby/client"
"github.com/stretchr/testify/require"
)

const RelayerImageName = "interchaintestrelayer"
const RelayerImagePrefix = "interchaintestrelayer"

type dockerLogLine struct {
Stream string `json:"stream"`
Expand All @@ -29,7 +30,15 @@ type dockerErrorDetail struct {
Message string `json:"message"`
}

func BuildRelayerImage(t *testing.T) {
func UniqueRelayerImageName() string {
uuid, err := uuid.NewRandom()
if err != nil {
fmt.Printf("Failed to generate UUID: %v\n", err)
}
return RelayerImagePrefix + uuid.String()[:6]
}

func BuildRelayerImage(t *testing.T, uniquestr string) {
_, b, _, _ := runtime.Caller(0)
basepath := filepath.Join(filepath.Dir(b), "..")

Expand All @@ -41,14 +50,27 @@ func BuildRelayerImage(t *testing.T) {

res, err := cli.ImageBuild(context.Background(), tar, dockertypes.ImageBuildOptions{
Dockerfile: "local.Dockerfile",
Tags: []string{RelayerImageName},
Tags: []string{uniquestr},
})
require.NoError(t, err, "error building docker image")

defer res.Body.Close()
handleDockerBuildOutput(t, res.Body)
}

func DestroyRelayerImage(t *testing.T, uniquestr string) {
// Create a Docker client
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
require.NoError(t, err, "error building docker client")

// Remove the Docker image using the provided tag (uniquestr)
_, err = cli.ImageRemove(context.Background(), uniquestr, dockertypes.ImageRemoveOptions{
Force: true, // Force remove the image
PruneChildren: true, // Remove all child images
})
require.NoError(t, err, "error removing docker image")
}

func handleDockerBuildOutput(t *testing.T, body io.Reader) {
var logLine dockerLogLine

Expand Down
24 changes: 15 additions & 9 deletions interchaintest/ibc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (
// so it uses only one pair of chains.
//
// The canonical set of test chains are defined in the interchaintest repository.
func interchaintestConformance(t *testing.T, rf interchaintest.RelayerFactory) {
func interchaintestConformance(t *testing.T, rf interchaintest.RelayerFactory, uuid string) {
cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{
{Name: "gaia", Version: "v7.0.1", ChainConfig: ibc.ChainConfig{ChainID: "cosmoshub-1004"}},
{Name: "osmosis", Version: "v7.2.0", ChainConfig: ibc.ChainConfig{ChainID: "osmosis-1001"}},
Expand All @@ -33,13 +33,16 @@ func interchaintestConformance(t *testing.T, rf interchaintest.RelayerFactory) {
[]interchaintest.RelayerFactory{rf},
testreporter.NewNopReporter(),
)
if uuid != "" {
relayerinterchaintest.DestroyRelayerImage(t, uuid)
}
}

// TestRelayerInProcess runs the interchaintest conformance tests against
// the current state of this relayer implementation running in process.
func TestRelayerInProcess(t *testing.T) {
t.Parallel()
interchaintestConformance(t, relayerinterchaintest.RelayerFactory{})
interchaintestConformance(t, relayerinterchaintest.RelayerFactory{}, "")
}

// TestRelayerDockerEventProcessor runs the interchaintest conformance tests against
Expand All @@ -48,33 +51,36 @@ func TestRelayerInProcess(t *testing.T) {
func TestRelayerDockerEventProcessor(t *testing.T) {
t.Parallel()

uuid := relayerinterchaintest.UniqueRelayerImageName()
relayerinterchaintest.BuildRelayerImage(t, uuid)
rf := interchaintest.NewBuiltinRelayerFactory(
ibc.CosmosRly,
zaptest.NewLogger(t),
interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"),
interchaintestrelayer.CustomDockerImage(uuid, "latest", "100:1000"),
interchaintestrelayer.ImagePull(false),
interchaintestrelayer.StartupFlags("--processor", "events", "--block-history", "100"),
)

interchaintestConformance(t, rf)
interchaintestConformance(t, rf, uuid)
}

// TestRelayerDockerLegacyProcessor runs the interchaintest conformance tests against
// the current state of this relayer implementation built in docker.
// Relayer runs using the legacy processor.
func TestRelayerDockerLegacyProcessor(t *testing.T) {
t.Parallel()
relayerinterchaintest.BuildRelayerImage(t)
uuid := relayerinterchaintest.UniqueRelayerImageName()
relayerinterchaintest.BuildRelayerImage(t, uuid)

rf := interchaintest.NewBuiltinRelayerFactory(
ibc.CosmosRly,
zaptest.NewLogger(t),
interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"),
interchaintestrelayer.CustomDockerImage(uuid, "latest", "100:1000"),
interchaintestrelayer.ImagePull(false),
interchaintestrelayer.StartupFlags("--processor", "legacy"),
)

interchaintestConformance(t, rf)
interchaintestConformance(t, rf, uuid)
}

// TestRelayerEventProcessor runs the interchaintest conformance tests against
Expand All @@ -86,7 +92,7 @@ func TestRelayerEventProcessor(t *testing.T) {
interchaintestConformance(t, relayerinterchaintest.NewRelayerFactory(relayerinterchaintest.RelayerConfig{
Processor: relayer.ProcessorEvents,
InitialBlockHistory: 0,
}))
}), "")
}

// TestRelayerLegacyProcessor runs the interchaintest conformance tests against
Expand All @@ -97,5 +103,5 @@ func TestRelayerLegacyProcessor(t *testing.T) {

interchaintestConformance(t, relayerinterchaintest.NewRelayerFactory(relayerinterchaintest.RelayerConfig{
Processor: relayer.ProcessorLegacy,
}))
}), "")
}
6 changes: 4 additions & 2 deletions interchaintest/multi_channel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ import (
)

func TestMultipleChannelsOneConnection(t *testing.T) {
relayerinterchaintest.BuildRelayerImage(t)
uuid := relayerinterchaintest.UniqueRelayerImageName()
relayerinterchaintest.BuildRelayerImage(t, uuid)

client, network := interchaintest.DockerSetup(t)
r := interchaintest.NewBuiltinRelayerFactory(
ibc.CosmosRly,
zaptest.NewLogger(t),
interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"),
interchaintestrelayer.CustomDockerImage(uuid, "latest", "100:1000"),
interchaintestrelayer.ImagePull(false),
).Build(t, client, network)

Expand Down Expand Up @@ -109,6 +110,7 @@ func TestMultipleChannelsOneConnection(t *testing.T) {
if err != nil {
t.Logf("an error occured while stopping the relayer: %s", err)
}
relayerinterchaintest.DestroyRelayerImage(t, uuid)
},
)

Expand Down
6 changes: 4 additions & 2 deletions interchaintest/relayer_override_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@ import (
// is a client-id present in the relative path config. If the override flag is present, the relayer should always
// attempt to create a new light client and then overwrite the config file if successful.
func TestClientOverrideFlag(t *testing.T) {
relayerinterchaintest.BuildRelayerImage(t)
uuid := relayerinterchaintest.UniqueRelayerImageName()
relayerinterchaintest.BuildRelayerImage(t, uuid)

client, network := interchaintest.DockerSetup(t)
r := interchaintest.NewBuiltinRelayerFactory(
ibc.CosmosRly,
zaptest.NewLogger(t),
interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"),
interchaintestrelayer.CustomDockerImage(uuid, "latest", "100:1000"),
interchaintestrelayer.ImagePull(false),
).Build(t, client, network)

Expand Down Expand Up @@ -95,6 +96,7 @@ func TestClientOverrideFlag(t *testing.T) {
if err != nil {
t.Logf("an error occured while stopping the relayer: %s", err)
}
relayerinterchaintest.DestroyRelayerImage(t, uuid)
},
)

Expand Down

0 comments on commit 222b868

Please sign in to comment.