diff --git a/go.mod b/go.mod index 054c999f42bd0..d5a5131b22ad8 100644 --- a/go.mod +++ b/go.mod @@ -177,7 +177,7 @@ require ( github.com/srebhan/protobufquery v0.0.0-20230803132024-ae4c0d878e55 github.com/stretchr/testify v1.8.4 github.com/tbrandon/mbserver v0.0.0-20170611213546-993e1772cc62 - github.com/testcontainers/testcontainers-go v0.26.0 + github.com/testcontainers/testcontainers-go v0.27.0 github.com/testcontainers/testcontainers-go/modules/kafka v0.26.1-0.20231116140448-68d5f8983d09 github.com/thomasklein94/packer-plugin-libvirt v0.5.0 github.com/tidwall/gjson v1.17.0 diff --git a/go.sum b/go.sum index c12128eb74574..6f3afda3ba5a5 100644 --- a/go.sum +++ b/go.sum @@ -2154,8 +2154,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/tbrandon/mbserver v0.0.0-20170611213546-993e1772cc62 h1:Oj2e7Sae4XrOsk3ij21QjjEgAcVSeo9nkp0dI//cD2o= github.com/tbrandon/mbserver v0.0.0-20170611213546-993e1772cc62/go.mod h1:qUzPVlSj2UgxJkVbH0ZwuuiR46U8RBMDT5KLY78Ifpw= github.com/tedsuo/ifrit v0.0.0-20180802180643-bea94bb476cc/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0= -github.com/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c= -github.com/testcontainers/testcontainers-go v0.26.0/go.mod h1:ICriE9bLX5CLxL9OFQ2N+2N+f+803LNJ1utJb1+Inx0= +github.com/testcontainers/testcontainers-go v0.27.0 h1:IeIrJN4twonTDuMuBNQdKZ+K97yd7VrmNGu+lDpYcDk= +github.com/testcontainers/testcontainers-go v0.27.0/go.mod h1:+HgYZcd17GshBUZv9b+jKFJ198heWPQq3KQIp2+N+7U= github.com/testcontainers/testcontainers-go/modules/kafka v0.26.1-0.20231116140448-68d5f8983d09 h1:jqohCgCKphLrxHl6crzKJbmlmo8GYUNpTiw/Ib+AFLo= github.com/testcontainers/testcontainers-go/modules/kafka v0.26.1-0.20231116140448-68d5f8983d09/go.mod h1:MBqGe6sHltLHRmjk1K1axtIboCjjATh3+oZObcWYFMg= github.com/thomasklein94/packer-plugin-libvirt v0.5.0 h1:aj2HLHZZM/ClGLIwVp9rrgh+2TOU/w4EiaZHAwCpOgs= diff --git a/plugins/inputs/dovecot/dovecot_test.go b/plugins/inputs/dovecot/dovecot_test.go index 56cbaa2115e0b..4268a90de0d37 100644 --- a/plugins/inputs/dovecot/dovecot_test.go +++ b/plugins/inputs/dovecot/dovecot_test.go @@ -192,7 +192,7 @@ func TestDovecotContainerIntegration(t *testing.T) { container := testutil.Container{ Image: "dovecot/dovecot", ExposedPorts: []string{servicePort}, - BindMounts: map[string]string{ + Files: map[string]string{ "/etc/dovecot/dovecot.conf": testdata, }, WaitingFor: wait.ForAll( diff --git a/plugins/inputs/ldap/ldap_test.go b/plugins/inputs/ldap/ldap_test.go index ee01123868843..c512ac25c7a80 100644 --- a/plugins/inputs/ldap/ldap_test.go +++ b/plugins/inputs/ldap/ldap_test.go @@ -293,7 +293,7 @@ func TestOpenLDAPStartTLSIntegration(t *testing.T) { "LDAP_TLS_CERT_FILE": "server.crt", "LDAP_TLS_KEY_FILE": "server.key", }, - BindMounts: map[string]string{ + Files: map[string]string{ "/server.pem": pkiPaths.ServerPem, "/server.crt": pkiPaths.ServerCert, "/server.key": pkiPaths.ServerKey, @@ -401,7 +401,7 @@ func TestOpenLDAPLDAPSIntegration(t *testing.T) { "LDAP_TLS_CERT_FILE": "server.crt", "LDAP_TLS_KEY_FILE": "server.key", }, - BindMounts: map[string]string{ + Files: map[string]string{ "/server.pem": pkiPaths.ServerPem, "/server.crt": pkiPaths.ServerCert, "/server.key": pkiPaths.ServerKey, diff --git a/plugins/inputs/openldap/openldap_test.go b/plugins/inputs/openldap/openldap_test.go index 8bd230370d5da..8617e1efb4cf8 100644 --- a/plugins/inputs/openldap/openldap_test.go +++ b/plugins/inputs/openldap/openldap_test.go @@ -120,7 +120,7 @@ func TestOpenldapStartTLSIntegration(t *testing.T) { "LDAP_TLS_CERT_FILE": "server.crt", "LDAP_TLS_KEY_FILE": "server.key", }, - BindMounts: map[string]string{ + Files: map[string]string{ "/server.pem": tlsPem, "/server.crt": tlsCert, "/server.key": tlsKey, @@ -181,7 +181,7 @@ func TestOpenldapLDAPSIntegration(t *testing.T) { "LDAP_TLS_CERT_FILE": "server.crt", "LDAP_TLS_KEY_FILE": "server.key", }, - BindMounts: map[string]string{ + Files: map[string]string{ "/server.pem": tlsPem, "/server.crt": tlsCert, "/server.key": tlsKey, @@ -237,7 +237,7 @@ func TestOpenldapInvalidSSLIntegration(t *testing.T) { "LDAP_TLS_CERT_FILE": "server.crt", "LDAP_TLS_KEY_FILE": "server.key", }, - BindMounts: map[string]string{ + Files: map[string]string{ "/server.pem": tlsPem, "/server.crt": tlsCert, "/server.key": tlsKey, diff --git a/plugins/inputs/radius/radius_test.go b/plugins/inputs/radius/radius_test.go index cc8e7bdff2381..04a20f88333de 100644 --- a/plugins/inputs/radius/radius_test.go +++ b/plugins/inputs/radius/radius_test.go @@ -98,7 +98,7 @@ func TestRadiusIntegration(t *testing.T) { container := testutil.Container{ Image: "freeradius/freeradius-server", ExposedPorts: []string{"1812/udp"}, - BindMounts: map[string]string{ + Files: map[string]string{ "/etc/raddb/clients.conf": testdata, "/etc/raddb/mods-config/files/authorize": testdataa, "/etc/raddb/radiusd.conf": testdataaa, diff --git a/plugins/inputs/redis_sentinel/redis_sentinel_test.go b/plugins/inputs/redis_sentinel/redis_sentinel_test.go index bf17488a19d64..938c05d1af4bd 100644 --- a/plugins/inputs/redis_sentinel/redis_sentinel_test.go +++ b/plugins/inputs/redis_sentinel/redis_sentinel_test.go @@ -11,7 +11,7 @@ import ( "github.com/docker/go-connections/nat" "github.com/stretchr/testify/require" - "github.com/testcontainers/testcontainers-go" + "github.com/testcontainers/testcontainers-go/network" "github.com/testcontainers/testcontainers-go/wait" "github.com/influxdata/telegraf" @@ -19,7 +19,6 @@ import ( ) const masterName = "mymaster" -const networkName = "telegraf-test-redis-sentinel" const sentinelServicePort = "26379" func TestRedisSentinelConnectIntegration(t *testing.T) { @@ -28,24 +27,18 @@ func TestRedisSentinelConnectIntegration(t *testing.T) { } ctx := context.Background() - net, err := testcontainers.GenericNetwork(ctx, testcontainers.GenericNetworkRequest{ - NetworkRequest: testcontainers.NetworkRequest{ - Name: networkName, - Attachable: true, - CheckDuplicate: true, - }, - }) + net, err := network.New(ctx, network.WithCheckDuplicate()) require.NoError(t, err) defer func() { require.NoError(t, net.Remove(ctx), "terminating network failed") }() - redis := createRedisContainer() + redis := createRedisContainer(net.Name) err = redis.Start() require.NoError(t, err, "failed to start container") defer redis.Terminate() - firstSentinel := createSentinelContainer(redis.Name, wait.ForAll( + firstSentinel := createSentinelContainer(redis.Name, net.Name, wait.ForAll( wait.ForLog("+monitor master"), wait.ForListeningPort(nat.Port(sentinelServicePort)), )) @@ -53,7 +46,7 @@ func TestRedisSentinelConnectIntegration(t *testing.T) { require.NoError(t, err, "failed to start container") defer firstSentinel.Terminate() - secondSentinel := createSentinelContainer(redis.Name, wait.ForAll( + secondSentinel := createSentinelContainer(redis.Name, net.Name, wait.ForAll( wait.ForLog("+sentinel sentinel"), wait.ForListeningPort(nat.Port(sentinelServicePort)), )) @@ -356,7 +349,7 @@ func TestRedisSentinelInfoAll(t *testing.T) { testutil.RequireMetricsEqual(t, expectedMetrics, actualMetrics) } -func createRedisContainer() testutil.Container { +func createRedisContainer(networkName string) testutil.Container { return testutil.Container{ Image: "redis:7.0-alpine", Name: "telegraf-test-redis-sentinel-redis", @@ -369,7 +362,7 @@ func createRedisContainer() testutil.Container { } } -func createSentinelContainer(redisAddress string, waitingFor wait.Strategy) testutil.Container { +func createSentinelContainer(redisAddress string, networkName string, waitingFor wait.Strategy) testutil.Container { return testutil.Container{ Image: "bitnami/redis-sentinel:7.0", ExposedPorts: []string{sentinelServicePort}, diff --git a/plugins/inputs/sql/sql_test.go b/plugins/inputs/sql/sql_test.go index 6f434dff27f20..a93f11b246e55 100644 --- a/plugins/inputs/sql/sql_test.go +++ b/plugins/inputs/sql/sql_test.go @@ -40,7 +40,7 @@ func TestMariaDBIntegration(t *testing.T) { database := "foo" // Determine the test-data mountpoint - testdata, err := filepath.Abs("testdata/mariadb") + testdata, err := filepath.Abs("testdata/mariadb/expected.sql") require.NoError(t, err, "determining absolute path of test-data failed") container := testutil.Container{ @@ -50,8 +50,8 @@ func TestMariaDBIntegration(t *testing.T) { "MYSQL_ROOT_PASSWORD": passwd, "MYSQL_DATABASE": database, }, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": testdata, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/expected.sql": testdata, }, WaitingFor: wait.ForAll( wait.ForLog("mariadbd: ready for connections.").WithOccurrence(2), @@ -139,7 +139,7 @@ func TestPostgreSQLIntegration(t *testing.T) { database := "foo" // Determine the test-data mountpoint - testdata, err := filepath.Abs("testdata/postgres") + testdata, err := filepath.Abs("testdata/postgres/expected.sql") require.NoError(t, err, "determining absolute path of test-data failed") container := testutil.Container{ @@ -149,8 +149,8 @@ func TestPostgreSQLIntegration(t *testing.T) { "POSTGRES_PASSWORD": passwd, "POSTGRES_DB": database, }, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": testdata, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/expected.sql": testdata, }, WaitingFor: wait.ForAll( wait.ForLog("database system is ready to accept connections").WithOccurrence(2), @@ -237,14 +237,14 @@ func TestClickHouseIntegration(t *testing.T) { user := "default" // Determine the test-data mountpoint - testdata, err := filepath.Abs("testdata/clickhouse") + testdata, err := filepath.Abs("testdata/clickhouse/expected.sql") require.NoError(t, err, "determining absolute path of test-data failed") container := testutil.Container{ Image: "yandex/clickhouse-server", ExposedPorts: []string{port, "8123"}, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": testdata, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/expected.sql": testdata, }, WaitingFor: wait.ForAll( wait.NewHTTPStrategy("/").WithPort(nat.Port("8123")), diff --git a/plugins/inputs/supervisor/supervisor_test.go b/plugins/inputs/supervisor/supervisor_test.go index 3d51d8d74c975..5a1e913172c49 100644 --- a/plugins/inputs/supervisor/supervisor_test.go +++ b/plugins/inputs/supervisor/supervisor_test.go @@ -140,7 +140,7 @@ func TestIntegration_BasicGathering(t *testing.T) { ctr := testutil.Container{ Image: "niasar/supervisor:stretch-3.3", ExposedPorts: []string{supervisorPort}, - BindMounts: map[string]string{ + Files: map[string]string{ "/etc/supervisor/supervisord.conf": supervisorConfig, }, WaitingFor: wait.ForAll( diff --git a/plugins/outputs/mongodb/mongodb_test.go b/plugins/outputs/mongodb/mongodb_test.go index e6d5050647cfa..9a588e5db4162 100644 --- a/plugins/outputs/mongodb/mongodb_test.go +++ b/plugins/outputs/mongodb/mongodb_test.go @@ -56,15 +56,15 @@ func TestConnectAndWriteIntegrationSCRAMAuth(t *testing.T) { t.Skip("Skipping integration test in short mode") } - initdb, err := filepath.Abs("testdata/auth_scram") + initdb, err := filepath.Abs("testdata/auth_scram/setup.js") require.NoError(t, err) servicePort := "27017" container := testutil.Container{ Image: "mongo", ExposedPorts: []string{servicePort}, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": initdb, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/setup.js": initdb, }, WaitingFor: wait.ForAll( wait.NewHTTPStrategy("/").WithPort(nat.Port(servicePort)), @@ -146,7 +146,7 @@ func TestConnectAndWriteIntegrationX509Auth(t *testing.T) { pki := testutil.NewPKI("../../../testutil/pki") // bind mount files - initdb, err := filepath.Abs("testdata/auth_x509") + initdb, err := filepath.Abs("testdata/auth_x509/setup.js") require.NoError(t, err) cacert, err := filepath.Abs(pki.CACertPath()) require.NoError(t, err) @@ -157,10 +157,10 @@ func TestConnectAndWriteIntegrationX509Auth(t *testing.T) { container := testutil.Container{ Image: "mongo", ExposedPorts: []string{servicePort}, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": initdb, - "/cacert.pem": cacert, - "/server.pem": serverpem, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/setup.js": initdb, + "/cacert.pem": cacert, + "/server.pem": serverpem, }, Entrypoint: []string{ "docker-entrypoint.sh", diff --git a/plugins/outputs/mqtt/mqtt_test.go b/plugins/outputs/mqtt/mqtt_test.go index bc370b55427f0..74ebd6eb9f855 100644 --- a/plugins/outputs/mqtt/mqtt_test.go +++ b/plugins/outputs/mqtt/mqtt_test.go @@ -30,7 +30,7 @@ func launchTestContainer(t *testing.T) *testutil.Container { Image: "eclipse-mosquitto:2", ExposedPorts: []string{servicePort}, WaitingFor: wait.ForListeningPort(servicePort), - BindMounts: map[string]string{ + Files: map[string]string{ "/mosquitto/config/mosquitto.conf": conf, }, } @@ -146,7 +146,7 @@ func TestIntegrationMQTTv3(t *testing.T) { Image: "eclipse-mosquitto:2", ExposedPorts: []string{servicePort}, WaitingFor: wait.ForListeningPort(servicePort), - BindMounts: map[string]string{ + Files: map[string]string{ "/mosquitto/config/mosquitto.conf": conf, }, } @@ -298,7 +298,7 @@ func TestIntegrationMQTTLayoutNonBatch(t *testing.T) { Image: "eclipse-mosquitto:2", ExposedPorts: []string{servicePort}, WaitingFor: wait.ForListeningPort(servicePort), - BindMounts: map[string]string{ + Files: map[string]string{ "/mosquitto/config/mosquitto.conf": conf, }, } @@ -385,7 +385,7 @@ func TestIntegrationMQTTLayoutBatch(t *testing.T) { Image: "eclipse-mosquitto:2", ExposedPorts: []string{servicePort}, WaitingFor: wait.ForListeningPort(servicePort), - BindMounts: map[string]string{ + Files: map[string]string{ "/mosquitto/config/mosquitto.conf": conf, }, } @@ -475,7 +475,7 @@ func TestIntegrationMQTTLayoutField(t *testing.T) { Image: "eclipse-mosquitto:2", ExposedPorts: []string{servicePort}, WaitingFor: wait.ForListeningPort(servicePort), - BindMounts: map[string]string{ + Files: map[string]string{ "/mosquitto/config/mosquitto.conf": conf, }, } @@ -590,7 +590,7 @@ func TestIntegrationMQTTLayoutHomieV4(t *testing.T) { Image: "eclipse-mosquitto:2", ExposedPorts: []string{servicePort}, WaitingFor: wait.ForListeningPort(servicePort), - BindMounts: map[string]string{ + Files: map[string]string{ "/mosquitto/config/mosquitto.conf": conf, }, } diff --git a/plugins/outputs/sql/sql_test.go b/plugins/outputs/sql/sql_test.go index d8f47153d5bc8..7c223630d1046 100644 --- a/plugins/outputs/sql/sql_test.go +++ b/plugins/outputs/sql/sql_test.go @@ -159,7 +159,7 @@ func TestMysqlIntegration(t *testing.T) { t.Skip("Skipping integration test in short mode") } - initdb, err := filepath.Abs("testdata/mariadb/initdb") + initdb, err := filepath.Abs("testdata/mariadb/initdb/script.sql") require.NoError(t, err) // initdb/script.sql creates this database @@ -178,9 +178,9 @@ func TestMysqlIntegration(t *testing.T) { Env: map[string]string{ "MARIADB_ROOT_PASSWORD": password, }, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": initdb, - "/out": outDir, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/script.sql": initdb, + "/out": outDir, }, ExposedPorts: []string{servicePort}, WaitingFor: wait.ForAll( @@ -244,7 +244,7 @@ func TestPostgresIntegration(t *testing.T) { t.Skip("Skipping integration test in short mode") } - initdb, err := filepath.Abs("testdata/postgres/initdb") + initdb, err := filepath.Abs("testdata/postgres/initdb/init.sql") require.NoError(t, err) // initdb/init.sql creates this database @@ -262,9 +262,9 @@ func TestPostgresIntegration(t *testing.T) { Env: map[string]string{ "POSTGRES_PASSWORD": password, }, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": initdb, - "/out": outDir, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/script.sql": initdb, + "/out": outDir, }, ExposedPorts: []string{servicePort}, WaitingFor: wait.ForAll( @@ -330,7 +330,7 @@ func TestClickHouseIntegration(t *testing.T) { t.Skip("Skipping integration test in short mode") } - initdb, err := filepath.Abs("testdata/clickhouse/initdb") + initdb, err := filepath.Abs("testdata/clickhouse/initdb/init.sql") require.NoError(t, err) // initdb/init.sql creates this database @@ -345,9 +345,9 @@ func TestClickHouseIntegration(t *testing.T) { container := testutil.Container{ Image: "yandex/clickhouse-server", ExposedPorts: []string{servicePort, "8123"}, - BindMounts: map[string]string{ - "/docker-entrypoint-initdb.d": initdb, - "/out": outDir, + Files: map[string]string{ + "/docker-entrypoint-initdb.d/script.sql": initdb, + "/out": outDir, }, WaitingFor: wait.ForAll( wait.NewHTTPStrategy("/").WithPort(nat.Port("8123")), diff --git a/testutil/container.go b/testutil/container.go index 994df82ff7b50..a4283ed07dc5a 100644 --- a/testutil/container.go +++ b/testutil/container.go @@ -23,9 +23,9 @@ func (g *TestLogConsumer) Accept(l testcontainers.Log) { } type Container struct { - BindMounts map[string]string Entrypoint []string Env map[string]string + Files map[string]string HostConfigModifier func(*dockercontainer.HostConfig) ExposedPorts []string Cmd []string @@ -46,17 +46,21 @@ type Container struct { func (c *Container) Start() error { c.ctx = context.Background() - containerMounts := make([]testcontainers.ContainerMount, 0, len(c.BindMounts)) - for k, v := range c.BindMounts { - containerMounts = append(containerMounts, testcontainers.BindMount(v, testcontainers.ContainerMountTarget(k))) + files := make([]testcontainers.ContainerFile, 0, len(c.Files)) + for k, v := range c.Files { + files = append(files, testcontainers.ContainerFile{ + ContainerFilePath: k, + HostFilePath: v, + FileMode: 0o755, + }) } req := testcontainers.GenericContainerRequest{ ContainerRequest: testcontainers.ContainerRequest{ - Mounts: testcontainers.Mounts(containerMounts...), Entrypoint: c.Entrypoint, Env: c.Env, ExposedPorts: c.ExposedPorts, + Files: files, HostConfigModifier: c.HostConfigModifier, Cmd: c.Cmd, Image: c.Image,