1- // +build integration
1+ //+build integration
22
33package e2e_test
44
77 "database/sql"
88 "fmt"
99 "github.com/odpf/meteor/test/utils"
10+ "github.com/ory/dockertest/v3"
11+ "github.com/ory/dockertest/v3/docker"
1012 "log"
1113 "net"
1214 "os"
@@ -23,8 +25,6 @@ import (
2325 _ "github.com/odpf/meteor/plugins/extractors"
2426 _ "github.com/odpf/meteor/plugins/processors"
2527 _ "github.com/odpf/meteor/plugins/sinks"
26- "github.com/ory/dockertest/v3"
27- "github.com/ory/dockertest/v3/docker"
2828 "github.com/pkg/errors"
2929 "github.com/segmentio/kafka-go"
3030 "github.com/stretchr/testify/assert"
@@ -88,75 +88,8 @@ func TestMain(m *testing.M) {
8888 os .Exit (code )
8989}
9090
91- // kafkaDockerSetup sets up a kafka docker container
92- func kafkaDockerSetup () (purge func () error , err error ) {
93- // kafka setup test
94- kafkaOpts := dockertest.RunOptions {
95- Repository : "moeenz/docker-kafka-kraft" ,
96- Tag : "latest" ,
97- Env : []string {
98- "KRAFT_CONTAINER_HOST_NAME=kafka" ,
99- },
100- ExposedPorts : []string {"9093" },
101- PortBindings : map [docker.Port ][]docker.PortBinding {
102- "9093" : {
103- {HostIP : "localhost" , HostPort : "9093" },
104- },
105- },
106- }
107- // exponential backoff-retry, because the application in the container might not be ready to accept connections yet
108- kafkaRetryFn := func (resource * dockertest.Resource ) (err error ) {
109- // create client
110- if conn , err = kafka .Dial ("tcp" , brokerHost ); err != nil {
111- return errors .Wrap (err , "failed to kafka create client" )
112- }
113- if broker , err = conn .Controller (); err != nil {
114- return errors .Wrap (err , "failed to generate broker request" )
115- }
116- return
117- }
118- purgeContainer , err := utils .CreateContainer (kafkaOpts , kafkaRetryFn )
119- if err != nil {
120- log .Fatal (err )
121- }
122-
123- return purgeContainer , nil
124- }
125-
126- // mysqlDockerSetup sets up a mysql docker container
127- func mysqlDockerSetup () (purge func () error , err error ) {
128- // mysql setup test
129- mysqlOpts := dockertest.RunOptions {
130- Repository : "mysql" ,
131- Tag : "latest" ,
132- Env : []string {
133- "MYSQL_ROOT_PASSWORD=" + pass ,
134- },
135- ExposedPorts : []string {"3306" },
136- PortBindings : map [docker.Port ][]docker.PortBinding {
137- "3306" : {
138- {HostIP : "0.0.0.0" , HostPort : "3306" },
139- },
140- },
141- }
142- // exponential backoff-retry, because the application in the container might not be ready to accept connections yet
143- mysqlRetryFn := func (resource * dockertest.Resource ) (err error ) {
144- db , err = sql .Open ("mysql" , fmt .Sprintf ("root:%s@tcp(%s)/" , pass , mysqlHost ))
145- if err != nil {
146- return errors .Wrap (err , "failed to create mysql client" )
147- }
148- return db .Ping ()
149- }
150- purgeContainer , err := utils .CreateContainer (mysqlOpts , mysqlRetryFn )
151- if err != nil {
152- log .Fatal (err )
153- }
154-
155- return purgeContainer , nil
156- }
157-
158- // TestRecipe tests the recipe from source to sink completely
159- func TestRecipe (t * testing.T ) {
91+ // TestMySqlToKafka tests the recipe from source to sink completely
92+ func TestMySqlToKafka (t * testing.T ) {
16093 err := setupKafka ()
16194 if err != nil {
16295 t .Fatal (err )
@@ -218,6 +151,7 @@ func listenToTopic(ctx context.Context, topic string, data *[]*assets.Table) err
218151 msg , err := reader .ReadMessage (ctx )
219152 if err != nil {
220153 break
154+
221155 }
222156 var convertMsg assets.Table
223157 if err := proto .Unmarshal (msg .Value , & convertMsg ); err != nil {
@@ -229,7 +163,7 @@ func listenToTopic(ctx context.Context, topic string, data *[]*assets.Table) err
229163 return nil
230164}
231165
232- // setupKafka intializes kafka broker with topic and partition
166+ // setupKafka initializes kafka broker with topic and partition
233167func setupKafka () error {
234168 conn , err := kafka .DialLeader (context .TODO (), "tcp" , net .JoinHostPort (broker .Host , strconv .Itoa (broker .Port )), testTopic , partition )
235169 if err != nil {
@@ -293,6 +227,73 @@ func execute(db *sql.DB, queries []string) (err error) {
293227 return
294228}
295229
230+ // kafkaDockerSetup sets up a kafka docker container
231+ func kafkaDockerSetup () (purge func () error , err error ) {
232+ // kafka setup test
233+ kafkaOpts := dockertest.RunOptions {
234+ Repository : "moeenz/docker-kafka-kraft" ,
235+ Tag : "latest" ,
236+ Env : []string {
237+ "KRAFT_CONTAINER_HOST_NAME=kafka" ,
238+ },
239+ ExposedPorts : []string {"9093" },
240+ PortBindings : map [docker.Port ][]docker.PortBinding {
241+ "9093" : {
242+ {HostIP : "localhost" , HostPort : "9093" },
243+ },
244+ },
245+ }
246+ // exponential backoff-retry, because the application in the container might not be ready to accept connections yet
247+ kafkaRetryFn := func (resource * dockertest.Resource ) (err error ) {
248+ // create client
249+ if conn , err = kafka .Dial ("tcp" , brokerHost ); err != nil {
250+ return errors .Wrap (err , "failed to kafka create client" )
251+ }
252+ if broker , err = conn .Controller (); err != nil {
253+ return errors .Wrap (err , "failed to generate broker request" )
254+ }
255+ return
256+ }
257+ purgeContainer , err := utils .CreateContainer (kafkaOpts , kafkaRetryFn )
258+ if err != nil {
259+ log .Fatal (err )
260+ }
261+
262+ return purgeContainer , nil
263+ }
264+
265+ // mysqlDockerSetup sets up a mysql docker container
266+ func mysqlDockerSetup () (purge func () error , err error ) {
267+ // mysql setup test
268+ mysqlOpts := dockertest.RunOptions {
269+ Repository : "mysql" ,
270+ Tag : "latest" ,
271+ Env : []string {
272+ "MYSQL_ROOT_PASSWORD=" + pass ,
273+ },
274+ ExposedPorts : []string {"3306" },
275+ PortBindings : map [docker.Port ][]docker.PortBinding {
276+ "3306" : {
277+ {HostIP : "0.0.0.0" , HostPort : "3306" },
278+ },
279+ },
280+ }
281+ // exponential backoff-retry, because the application in the container might not be ready to accept connections yet
282+ mysqlRetryFn := func (resource * dockertest.Resource ) (err error ) {
283+ db , err = sql .Open ("mysql" , fmt .Sprintf ("root:%s@tcp(%s)/" , pass , mysqlHost ))
284+ if err != nil {
285+ return errors .Wrap (err , "failed to create mysql client" )
286+ }
287+ return db .Ping ()
288+ }
289+ purgeContainer , err := utils .CreateContainer (mysqlOpts , mysqlRetryFn )
290+ if err != nil {
291+ log .Fatal (err )
292+ }
293+
294+ return purgeContainer , nil
295+ }
296+
296297// getExpectedTables returns the expected tables
297298func getExpectedTables () []* assets.Table {
298299 return []* assets.Table {
0 commit comments