Skip to content

Support TLS when using the Mysql driver#71

Merged
szkiba merged 4 commits intografana:masterfrom
surajvshankar:tls-support
Sep 6, 2024
Merged

Support TLS when using the Mysql driver#71
szkiba merged 4 commits intografana:masterfrom
surajvshankar:tls-support

Conversation

@surajvshankar
Copy link
Copy Markdown
Contributor

Summary

Extended xk6-sql to support mysql connection over TLS.

Details

The mysql driver already supports TLS. These are additions to make xk6-sql TLS aware; such that, the TLS settings can be passed to the underlying drivers.

Note

  1. No changes are required for the existing scripts. The open interface is retained as-is.
  2. TLS is registered only if enableTLS: true is passed to loadTLS

Testing Done

./k6 run examples/mysql_secure_test.js -v
DEBU[0000] Logger format: TEXT                          
DEBU[0000] k6 version: v0.51.0 (commit/a3010c8ad2-dirty, go1.22.6, darwin/arm64) 

          /\      |‾‾| /‾‾/   /‾‾/   
     /\  /  \     |  |/  /   /  /    
    /  \/    \    |     (   /   ‾‾\  
   /          \   |  |\  \ |  (‾)  | 
  / __________ \  |__| \__\ \_____/ .io

DEBU[0000] Resolving and reading test 'examples/mysql_secure_test.js'... 
DEBU[0000] Loading...                                    moduleSpecifier="file:///<redacted>/xk6-sql/examples/mysql_secure_test.js" originalModuleSpecifier=examples/mysql_secure_test.js
DEBU[0000] 'examples/mysql_secure_test.js' resolved to 'file:///<redacted>/code/xk6-sql/examples/mysql_secure_test.js' and successfully loaded 1141 bytes! 
DEBU[0000] Gathering k6 runtime options...              
DEBU[0000] Initializing k6 runner for 'examples/mysql_secure_test.js' (file:///<redacted>/code/xk6-sql/examples/mysql_secure_test.js)... 
DEBU[0000] Detecting test type for...                    test_path="file:///<redacted>/code/xk6-sql/examples/mysql_secure_test.js"
DEBU[0000] Trying to load as a JS test...                test_path="file:///<redacted>/code/xk6-sql/examples/mysql_secure_test.js"
DEBU[0000] Babel: Transformed                            t=40.119292ms
DEBU[0000] Runner successfully initialized!             
DEBU[0000] Parsing CLI flags...                         
DEBU[0000] Consolidating config layers...               
DEBU[0000] Parsing thresholds and validating config...  
DEBU[0000] Initializing the execution scheduler...      
DEBU[0000] Starting 2 outputs...                         component=output-manager
DEBU[0000] Starting...                                   component=metrics-engine-ingester
DEBU[0000] Started!                                      component=metrics-engine-ingester
     execution: local
        script: examples/mysql_secure_test.js
        output: -

     scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1 iterations for each of 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)

DEBU[0000] Trapping interrupt signals so k6 can handle them gracefully... 
DEBU[0000] Starting emission of VUs and VUsMax metrics... 
DEBU[0000] Start of initialization                       executorsCount=1 neededVUs=1 phase=execution-scheduler-init
DEBU[0000] Starting the REST API server on localhost:6565 
DEBU[0000] Initialized VU #1                             phase=execution-scheduler-init
DEBU[0000] Finished initializing needed VUs, start initializing executors...  phase=execution-scheduler-init
DEBU[0000] Initialized executor default                  phase=execution-scheduler-init
DEBU[0000] Initialization completed                      phase=execution-scheduler-init
DEBU[0000] Start of test run                             executorsCount=1 phase=execution-scheduler-run
DEBU[0000] Running setup()...                           
DEBU[0000] Start all executors...                        phase=execution-scheduler-run
DEBU[0000] Starting executor                             executor=default startTime=0s type=per-vu-iterations
DEBU[0000] Starting executor run...                      executor=per-vu-iterations iterations=1 maxDuration=10m0s scenario=default type=per-vu-iterations vus=1
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
INFO[0000] key: plugin-name, value: k6-plugin-sql        source=console
DEBU[0000] Regular duration is done, waiting for iterations to gracefully finish  executor=per-vu-iterations gracefulStop=30s scenario=default
DEBU[0000] Executor finished successfully                executor=default startTime=0s type=per-vu-iterations
DEBU[0000] Running teardown()...                        
DEBU[0000] Test finished cleanly                        
DEBU[0000] Stopping vus and vux_max metrics emission...  phase=execution-scheduler-init
DEBU[0000] Metrics emission of VUs and VUsMax metrics stopped 
DEBU[0000] Releasing signal trap...                     
DEBU[0000] Sending usage report...                      
DEBU[0000] Waiting for metrics and traces processing to finish... 
DEBU[0000] Metrics and traces processing finished!      
DEBU[0000] Stopping outputs...                          
DEBU[0000] Stopping 2 outputs...                         component=output-manager
DEBU[0000] Stopping...                                   component=metrics-engine-ingester
DEBU[0000] Stopped!                                      component=metrics-engine-ingester
DEBU[0000] Generating the end-of-test summary...        

     data_received........: 0 B 0 B/s
     data_sent............: 0 B 0 B/s
     iteration_duration...: avg=9.11ms min=6.87µs med=13.57ms max=13.75ms p(90)=13.72ms p(95)=13.74ms
     iterations...........: 1   26.986911/s


running (00m00.0s), 0/1 VUs, 1 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs  00m00.0s/10m0s  1/1 iters, 1 per VU
DEBU[0000] Usage report sent successfully               
DEBU[0000] Everything has finished, exiting k6 normally! 

@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Aug 27, 2024

CLA assistant check
All committers have signed the CLA.

Comment thread sql.go Outdated
Comment thread sql.go Outdated
Comment thread sql.go Outdated
Comment thread sql.go Outdated
Comment thread examples/mysql_secure_test.js
Comment thread sql.go
@surajvshankar surajvshankar marked this pull request as ready for review August 29, 2024 16:24
@surajvshankar surajvshankar requested a review from a team as a code owner August 29, 2024 16:24
@surajvshankar surajvshankar requested review from szkiba and removed request for a team August 29, 2024 16:24
@surajvshankar
Copy link
Copy Markdown
Contributor Author

@szkiba : We are attempting to add TLS support to the mysql driver used by this plugin. Could you please review and provide your feedback?

@szkiba
Copy link
Copy Markdown
Contributor

szkiba commented Sep 4, 2024

@szkiba : We are attempting to add TLS support to the mysql driver used by this plugin. Could you please review and provide your feedback?

@surajvshankar
Of course. Could you fix the linter problem first?

1. Updates to readme.
2. Error on bad TLS version.
3. Make Linter happy code. And gofumpt'ed.
4. Test for existing tls=not-custom in DSN.
@szkiba
Copy link
Copy Markdown
Contributor

szkiba commented Sep 5, 2024

@surajvshankar
Copy link
Copy Markdown
Contributor Author

@surajvshankar still has linter issues https://github.com/grafana/xk6-sql/actions/runs/10721473919/job/29735069904?pr=71

Thank you @szkiba. I have fixed the double import.

I have ensured that on manually running the linter at my end, it now succeeds:

golangci-lint run
WARN [config_reader] The configuration option `linters.govet.check-shadowing` is deprecated. Please enable `shadow` instead, if you are not using `enable-all`. 
WARN The linter 'exportloopref' is deprecated (since v1.60.2) due to: Since Go1.22 (loopvar) this linter is no longer relevant. Replaced by copyloopvar. 

Copy link
Copy Markdown
Contributor

@szkiba szkiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@szkiba szkiba merged commit e38fd45 into grafana:master Sep 6, 2024
@surajvshankar
Copy link
Copy Markdown
Contributor Author

surajvshankar commented Sep 10, 2024 via email

@szkiba
Copy link
Copy Markdown
Contributor

szkiba commented Sep 10, 2024

Done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants