Skip to content

Commit 6d2e169

Browse files
mdelapenyaclaude
andcommitted
chore(opensearch): use Run function
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 25897bd commit 6d2e169

File tree

1 file changed

+52
-68
lines changed

1 file changed

+52
-68
lines changed

modules/opensearch/opensearch.go

Lines changed: 52 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,27 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
3535

3636
// Run creates an instance of the OpenSearch container type
3737
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*OpenSearchContainer, error) {
38-
req := testcontainers.ContainerRequest{
39-
Image: img,
40-
ExposedPorts: []string{defaultHTTPPort, "9600/tcp"},
41-
Env: map[string]string{
38+
// Gather all config options (defaults and then apply provided options)
39+
settings := defaultOptions()
40+
for _, opt := range opts {
41+
if apply, ok := opt.(Option); ok {
42+
apply(settings)
43+
}
44+
}
45+
46+
username := settings.Username
47+
password := settings.Password
48+
49+
moduleOpts := []testcontainers.ContainerCustomizer{
50+
testcontainers.WithEnv(map[string]string{
4251
"discovery.type": "single-node",
4352
"DISABLE_INSTALL_DEMO_CONFIG": "true",
4453
"DISABLE_SECURITY_PLUGIN": "true",
45-
"OPENSEARCH_USERNAME": defaultUsername,
46-
"OPENSEARCH_PASSWORD": defaultPassword,
47-
},
48-
HostConfigModifier: func(hc *container.HostConfig) {
54+
"OPENSEARCH_USERNAME": username,
55+
"OPENSEARCH_PASSWORD": password,
56+
}),
57+
testcontainers.WithExposedPorts(defaultHTTPPort, "9600/tcp"),
58+
testcontainers.WithHostConfigModifier(func(hc *container.HostConfig) {
4959
hc.Ulimits = []*units.Ulimit{
5060
{
5161
Name: "memlock",
@@ -58,73 +68,47 @@ func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustom
5868
Hard: 65536,
5969
},
6070
}
61-
},
62-
}
63-
64-
genericContainerReq := testcontainers.GenericContainerRequest{
65-
ContainerRequest: req,
66-
Started: true,
71+
}),
72+
// the wait strategy does not support TLS at the moment,
73+
// so we need to disable it in the strategy for now.
74+
testcontainers.WithWaitStrategy(wait.ForHTTP("/").
75+
WithPort("9200").
76+
WithTLS(false).
77+
WithStartupTimeout(120*time.Second).
78+
WithStatusCodeMatcher(func(status int) bool {
79+
return status == 200
80+
}).
81+
WithBasicAuth(username, password).
82+
WithResponseMatcher(func(body io.Reader) bool {
83+
bs, err := io.ReadAll(body)
84+
if err != nil {
85+
return false
86+
}
87+
88+
type response struct {
89+
Tagline string `json:"tagline"`
90+
}
91+
92+
var r response
93+
err = json.Unmarshal(bs, &r)
94+
if err != nil {
95+
return false
96+
}
97+
98+
return r.Tagline == "The OpenSearch Project: https://opensearch.org/"
99+
})),
67100
}
68101

69-
// Gather all config options (defaults and then apply provided options)
70-
settings := defaultOptions()
71-
for _, opt := range opts {
72-
if apply, ok := opt.(Option); ok {
73-
apply(settings)
74-
}
75-
if err := opt.Customize(&genericContainerReq); err != nil {
76-
return nil, err
77-
}
78-
}
79-
80-
// set credentials if they are provided, otherwise use the defaults
81-
if settings.Username != "" {
82-
genericContainerReq.Env["OPENSEARCH_USERNAME"] = settings.Username
83-
}
84-
if settings.Password != "" {
85-
genericContainerReq.Env["OPENSEARCH_PASSWORD"] = settings.Password
86-
}
87-
88-
username := genericContainerReq.Env["OPENSEARCH_USERNAME"]
89-
password := genericContainerReq.Env["OPENSEARCH_PASSWORD"]
90-
91-
// the wat strategy does not support TLS at the moment,
92-
// so we need to disable it in the strategy for now.
93-
genericContainerReq.WaitingFor = wait.ForHTTP("/").
94-
WithPort("9200").
95-
WithTLS(false).
96-
WithStartupTimeout(120*time.Second).
97-
WithStatusCodeMatcher(func(status int) bool {
98-
return status == 200
99-
}).
100-
WithBasicAuth(username, password).
101-
WithResponseMatcher(func(body io.Reader) bool {
102-
bs, err := io.ReadAll(body)
103-
if err != nil {
104-
return false
105-
}
106-
107-
type response struct {
108-
Tagline string `json:"tagline"`
109-
}
110-
111-
var r response
112-
err = json.Unmarshal(bs, &r)
113-
if err != nil {
114-
return false
115-
}
116-
117-
return r.Tagline == "The OpenSearch Project: https://opensearch.org/"
118-
})
102+
moduleOpts = append(moduleOpts, opts...)
119103

120-
container, err := testcontainers.GenericContainer(ctx, genericContainerReq)
104+
ctr, err := testcontainers.Run(ctx, img, moduleOpts...)
121105
var c *OpenSearchContainer
122-
if container != nil {
123-
c = &OpenSearchContainer{Container: container, User: username, Password: password}
106+
if ctr != nil {
107+
c = &OpenSearchContainer{Container: ctr, User: username, Password: password}
124108
}
125109

126110
if err != nil {
127-
return c, fmt.Errorf("generic container: %w", err)
111+
return c, fmt.Errorf("run opensearch: %w", err)
128112
}
129113

130114
return c, nil

0 commit comments

Comments
 (0)