Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testifylint->go-require - Should we enable it? #15535

Open
zak-pawel opened this issue Jun 20, 2024 · 5 comments
Open

testifylint->go-require - Should we enable it? #15535

zak-pawel opened this issue Jun 20, 2024 · 5 comments
Labels

Comments

@zak-pawel
Copy link
Collaborator

Description

This issue starts a discussion about enabling:

  • linter: testifylint - Checks usage of github.com/stretchr/testify.
  • checker: go-require - Incorrect use of functions.

This checker is a radically improved analogue of go vet's testinggoroutine check.

The point of the check is that, according to the documentation, functions leading to t.FailNow (essentially to runtime.GoExit) must only be used in the goroutine that runs the test. Otherwise, they will not work as declared, namely, finish the test function.

You can continue to use require as the current goroutine finisher, but this could lead

  1. to possible resource leaks in tests;
  2. to increasing of confusion, because functions will be not used as intended.

Typically, any assertions inside goroutines are a marker of poor test architecture. Try to execute them in the main goroutine and distribute the data necessary for this into it (example).

Also a bad solution would be to simply replace all require in goroutines with assert (like here) – this will only mask the problem.

In addition, the checker warns about require in HTTP handlers (functions and methods whose signature matches http.HandlerFunc), because handlers run in a separate service goroutine that services the HTTP connection. Terminating these goroutines can lead to undefined behaviour and difficulty debugging tests. You can turn off the check using the --go-require.ignore-http-handlers flag.

P.S. Look at testify's issue, related to assertions in the goroutines.

Example

go func() {
    conn, err = lis.Accept()
    require.NoError(t, err) ❌

    if assert.Error(err) {     ✅
        assert.FailNow(t, msg) ❌
    }
}()

Expected output

Decision about enabling or not enabling this checker.

Findings

For this checker, the following findings were found in the current codebase:

config/config_test.go:523:3                                                   testifylint  go-require: do not use require in http handlers
migrations/inputs_httpjson/migration_test.go:116:6                            testifylint  go-require: do not use require in http handlers
plugins/common/cookie/cookie_test.go:64:5                                     testifylint  go-require: do not use require in http handlers
plugins/common/cookie/cookie_test.go:91:5                                     testifylint  go-require: do not use require in http handlers
plugins/common/proxy/socks5_test.go:35:14                                     testifylint  go-require: require must only be used in the goroutine running the test function
plugins/common/shim/goshim_test.go:54:3                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/common/shim/input_test.go:51:3                                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/common/shim/input_test.go:78:3                                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/common/shim/output_test.go:32:3                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/common/shim/processor_test.go:51:3                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/common/shim/processor_test.go:92:3                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/activemq/activemq_test.go:153:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/activemq/activemq_test.go:157:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/activemq/activemq_test.go:161:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/apache/apache_test.go:36:3                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/apcupsd/apcupsd_test.go:47:5                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/apcupsd/apcupsd_test.go:51:5                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/apcupsd/apcupsd_test.go:55:5                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/apcupsd/apcupsd_test.go:62:6                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/aurora/aurora_test.go:251:5                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/aurora/aurora_test.go:252:5                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/aurora/aurora_test.go:255:5                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:32:4                                         testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:36:3                                         testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:38:3                                         testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:176:4                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:180:3                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:181:3                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:182:3                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:183:3                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:184:3                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/beat/beat_test.go:187:3                                        testifylint  go-require: do not use require in http handlers
plugins/inputs/chrony/chrony_test.go:746:5                                    testifylint  go-require: s.serve contains assertions that must only be used in the goroutine running the test function
plugins/inputs/clickhouse/clickhouse_test.go:77:5                             testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:94:5                             testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:111:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:128:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:139:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:150:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:161:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:174:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:185:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:200:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:215:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:232:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:261:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:272:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:301:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:454:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:465:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:476:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:512:4                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:523:4                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:548:4                            testifylint  go-require: do not use require in http handlers
plugins/inputs/clickhouse/clickhouse_test.go:634:5                            testifylint  go-require: do not use require in http handlers
plugins/inputs/consul_agent/consul_agent_test.go:79:6                         testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:40:3                   testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:84:5                   testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:122:3                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:127:3                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:133:3                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:140:4                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:142:4                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:146:5                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:149:5                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:152:5                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:156:5                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer_test.go:159:4                  testifylint  go-require: do not use require in http handlers
plugins/inputs/dovecot/dovecot_test.go:62:3                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/dovecot/dovecot_test.go:65:3                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/dovecot/dovecot_test.go:71:3                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/dovecot/dovecot_test.go:76:3                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/dovecot/dovecot_test.go:80:3                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_connector_test.go:99:6                               testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:151:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:200:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:226:7                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:245:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:258:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:278:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:279:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/dpdk/dpdk_test.go:306:6                                        testifylint  go-require: simulateSocketResponse contains assertions that must only be used in the goroutine running the test function
plugins/inputs/execd/shim/shim_posix_test.go:40:5                             testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/execd/shim/shim_test.go:77:3                                   testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/fibaro/fibaro_test.go:45:4                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:49:4                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:53:4                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:58:3                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:161:4                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:165:4                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:169:4                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/fibaro/fibaro_test.go:174:3                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/fireboard/fireboard_test.go:21:3                               testifylint  go-require: do not use require in http handlers
plugins/inputs/fluentd/fluentd_test.go:175:3                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/gnmi/gnmi_test.go:99:3                                         testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/gnmi/gnmi_test.go:158:3                                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/gnmi/gnmi_test.go:1015:5                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/gnmi/gnmi_test.go:1067:3                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/gnmi/gnmi_test.go:1099:3                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/gnmi/gnmi_test.go:1203:5                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/google_cloud_storage/google_cloud_storage_test.go:208:4        testifylint  go-require: do not use require in http handlers
plugins/inputs/google_cloud_storage/google_cloud_storage_test.go:212:4        testifylint  go-require: do not use require in http handlers
plugins/inputs/google_cloud_storage/google_cloud_storage_test.go:269:5        testifylint  go-require: do not use require in http handlers
plugins/inputs/google_cloud_storage/google_cloud_storage_test.go:318:5        testifylint  go-require: do not use require in http handlers
plugins/inputs/haproxy/haproxy_test.go:50:4                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/haproxy/haproxy_test.go:56:4                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/haproxy/haproxy_test.go:60:4                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/haproxy/haproxy_test.go:97:3                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/haproxy/haproxy_test.go:218:3                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/hddtemp/go-hddtemp/hddtemp_test.go:83:3                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/hddtemp/go-hddtemp/hddtemp_test.go:86:3                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/hddtemp/go-hddtemp/hddtemp_test.go:87:3                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/http_response/http_response_test.go:182:3                      testifylint  go-require: do not use require in http handlers
plugins/inputs/http_response/http_response_test.go:183:3                      testifylint  go-require: do not use require in http handlers
plugins/inputs/http_response/http_response_test.go:184:3                      testifylint  go-require: do not use require in http handlers
plugins/inputs/http_response/http_response_test.go:1124:3                     testifylint  go-require: do not use require in http handlers
plugins/inputs/http_response/http_response_test.go:1167:3                     testifylint  go-require: do not use require in http handlers
plugins/inputs/http_response/http_response_test.go:1344:3                     testifylint  go-require: do not use require in http handlers
plugins/inputs/icinga2/icinga2_test.go:73:4                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/icinga2/icinga2_test.go:136:4                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/icinga2/icinga2_test.go:195:4                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/icinga2/icinga2_test.go:265:4                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:22:4                                 testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:73:4                                 testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:145:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:185:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:220:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:239:4                                testifylint  go-require: do not use require in http handlers
plugins/inputs/influxdb/influxdb_test.go:258:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/intel_dlb/intel_dlb_test.go:428:6                              testifylint  go-require: simulateSocketResponseForGather contains assertions that must only be used in the goroutine running the test function
plugins/inputs/jolokia2_agent/jolokia2_agent_test.go:631:3                    testifylint  go-require: do not use require in http handlers
plugins/inputs/jolokia2_proxy/jolokia2_proxy_test.go:88:3                     testifylint  go-require: do not use require in http handlers
plugins/inputs/jolokia2_proxy/jolokia2_proxy_test.go:91:3                     testifylint  go-require: do not use require in http handlers
plugins/inputs/kafka_consumer/kafka_consumer_test.go:354:3                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/kafka_consumer/kafka_consumer_test.go:355:3                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/kapacitor/kapacitor_test.go:83:3                               testifylint  go-require: do not use require in http handlers
plugins/inputs/kapacitor/kapacitor_test.go:102:4                              testifylint  go-require: do not use require in http handlers
plugins/inputs/kubernetes/kubernetes_test.go:19:4                             testifylint  go-require: do not use require in http handlers
plugins/inputs/kubernetes/kubernetes_test.go:24:4                             testifylint  go-require: do not use require in http handlers
plugins/inputs/logstash/logstash_test.go:32:3                                 testifylint  go-require: do not use require in http handlers
plugins/inputs/logstash/logstash_test.go:77:3                                 testifylint  go-require: do not use require in http handlers
plugins/inputs/logstash/logstash_test.go:123:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/logstash/logstash_test.go:221:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/logstash/logstash_test.go:563:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/logstash/logstash_test.go:627:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/mailchimp/mailchimp_test.go:21:5                               testifylint  go-require: do not use require in http handlers
plugins/inputs/mailchimp/mailchimp_test.go:86:5                               testifylint  go-require: do not use require in http handlers
plugins/inputs/mailchimp/mailchimp_test.go:152:5                              testifylint  go-require: do not use require in http handlers
plugins/inputs/marklogic/marklogic_test.go:20:3                               testifylint  go-require: do not use require in http handlers
plugins/inputs/monit/monit_test.go:594:3                                      testifylint  go-require: do not use require in http handlers
plugins/inputs/monit/monit_test.go:621:3                                      testifylint  go-require: do not use require in http handlers
plugins/inputs/nats/nats_test.go:74:3                                         testifylint  go-require: do not use require in http handlers
plugins/inputs/nats/nats_test.go:78:3                                         testifylint  go-require: do not use require in http handlers
plugins/inputs/neptune_apex/neptune_apex_test.go:21:3                         testifylint  go-require: do not use require in http handlers
plugins/inputs/neptune_apex/neptune_apex_test.go:413:5                        testifylint  go-require: do not use require in http handlers
plugins/inputs/net_response/net_response_test.go:109:5                        testifylint  go-require: TCPServer contains assertions that must only be used in the goroutine running the test function
plugins/inputs/net_response/net_response_test.go:154:5                        testifylint  go-require: TCPServer contains assertions that must only be used in the goroutine running the test function
plugins/inputs/net_response/net_response_test.go:236:5                        testifylint  go-require: UDPServer contains assertions that must only be used in the goroutine running the test function
plugins/inputs/nginx/nginx_test.go:49:4                                       testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx/nginx_test.go:53:3                                       testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_plus/nginx_plus_test.go:256:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_plus/nginx_plus_test.go:262:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_plus_api/nginx_plus_api_metrics_test.go:1500:3           testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_plus_api/nginx_plus_api_metrics_test.go:1557:3           testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_plus_api/nginx_plus_api_metrics_test.go:1561:3           testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_sts/nginx_sts_test.go:170:3                              testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_sts/nginx_sts_test.go:176:3                              testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:49:3         testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:55:3         testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:106:3        testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:112:3        testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:114:3        testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:115:3        testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:116:3        testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_upstream_check/nginx_upstream_check_test.go:117:3        testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_vts/nginx_vts_test.go:207:3                              testifylint  go-require: do not use require in http handlers
plugins/inputs/nginx_vts/nginx_vts_test.go:213:3                              testifylint  go-require: do not use require in http handlers
plugins/inputs/nomad/nomad_test.go:86:6                                       testifylint  go-require: do not use require in http handlers
plugins/inputs/nsq/nsq_test.go:19:3                                           testifylint  go-require: do not use require in http handlers
plugins/inputs/nsq/nsq_test.go:276:3                                          testifylint  go-require: do not use require in http handlers
plugins/inputs/phpfpm/fcgi_test.go:247:4                                      testifylint  go-require: do not use require in http handlers
plugins/inputs/phpfpm/phpfpm_test.go:45:3                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/phpfpm/phpfpm_test.go:49:3                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/phpfpm/phpfpm_test.go:92:3                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:57:3                             testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:87:4                             testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:90:4                             testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:93:4                             testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:143:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:177:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:213:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:240:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:272:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:301:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:331:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:353:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:373:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:407:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:476:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:502:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:601:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/prometheus/prometheus_test.go:642:3                            testifylint  go-require: do not use require in http handlers
plugins/inputs/rabbitmq/rabbitmq_test.go:41:3                                 testifylint  go-require: do not use require in http handlers
plugins/inputs/rabbitmq/rabbitmq_test.go:44:3                                 testifylint  go-require: do not use require in http handlers
plugins/inputs/rabbitmq/rabbitmq_test.go:252:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/rabbitmq/rabbitmq_test.go:255:3                                testifylint  go-require: do not use require in http handlers
plugins/inputs/radius/radius_test.go:53:5                                     testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/radius/radius_test.go:121:5                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/raindrops/raindrops_test.go:52:3                               testifylint  go-require: do not use require in http handlers
plugins/inputs/raindrops/raindrops_test.go:56:3                               testifylint  go-require: do not use require in http handlers
plugins/inputs/ravendb/ravendb_test.go:30:4                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/ravendb/ravendb_test.go:34:3                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/ravendb/ravendb_test.go:37:3                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/ravendb/ravendb_test.go:230:4                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ravendb/ravendb_test.go:234:3                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/ravendb/ravendb_test.go:237:3                                  testifylint  go-require: do not use require in http handlers
plugins/inputs/riak/riak_test.go:20:3                                         testifylint  go-require: do not use require in http handlers
plugins/inputs/statsd/statsd_test.go:206:5                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/statsd/statsd_test.go:243:5                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/statsd/statsd_test.go:280:5                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/tacacs/tacacs_test.go:149:3                                    testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/teamspeak/teamspeak_test.go:64:5                               testifylint  go-require: handleRequest contains assertions that must only be used in the goroutine running the test function
plugins/inputs/tengine/tengine_test.go:32:3                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/tomcat/tomcat_test.go:45:3                                     testifylint  go-require: do not use require in http handlers
plugins/inputs/tomcat/tomcat_test.go:130:3                                    testifylint  go-require: do not use require in http handlers
plugins/inputs/vault/vault_test.go:81:6                                       testifylint  go-require: do not use require in http handlers
plugins/inputs/vault/vault_test.go:83:6                                       testifylint  go-require: do not use require in http handlers
plugins/inputs/x509_cert/x509_cert_test.go:92:5                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/x509_cert/x509_cert_test.go:103:5                              testifylint  go-require: require must only be used in the goroutine running the test function
plugins/inputs/xtremio/xtremio_test.go:85:6                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/xtremio/xtremio_test.go:88:6                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/xtremio/xtremio_test.go:91:6                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/xtremio/xtremio_test.go:94:6                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/xtremio/xtremio_test.go:97:6                                   testifylint  go-require: do not use require in http handlers
plugins/inputs/xtremio/xtremio_test.go:159:5                                  testifylint  go-require: do not use require in http handlers
plugins/outputs/bigquery/bigquery_test.go:270:4                               testifylint  go-require: do not use require in http handlers
plugins/outputs/bigquery/bigquery_test.go:274:4                               testifylint  go-require: do not use require in http handlers
plugins/outputs/bigquery/bigquery_test.go:278:4                               testifylint  go-require: do not use require in http handlers
plugins/outputs/bigquery/bigquery_test.go:282:4                               testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:29:3                              testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:54:3                              testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:78:3                              testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:135:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:150:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:220:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:223:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:224:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:225:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:226:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:227:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:228:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:229:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:232:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:266:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:273:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:307:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:311:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:312:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:313:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:314:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:315:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:316:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:317:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:320:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:354:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:357:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:358:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:359:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:361:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:395:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:398:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:399:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:400:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:401:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:402:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:404:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:438:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:441:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:442:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:443:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:444:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:445:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:447:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:481:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:484:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:485:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:486:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:487:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/dynatrace/dynatrace_test.go:489:3                             testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:660:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:661:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:663:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:667:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:695:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:697:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:701:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:729:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:731:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/elasticsearch/elasticsearch_test.go:735:4                     testifylint  go-require: do not use require in http handlers
plugins/outputs/file/file_test.go:268:3                                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:86:3                                testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:87:3                                testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:88:3                                testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:170:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:171:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:172:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:703:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:704:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:705:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:718:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:720:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:721:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:722:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:735:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:736:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:737:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:750:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:752:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:753:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:754:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:767:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:768:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:769:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:782:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:784:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:785:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:786:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:799:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:800:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:801:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:814:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:816:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:817:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graphite/graphite_test.go:818:3                               testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graylog/graylog_test_linux.go:194:3                           testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graylog/graylog_test_linux.go:195:3                           testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graylog/graylog_test_linux.go:196:3                           testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/graylog/graylog_test_linux.go:197:3                           testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/groundwork/groundwork_test.go:33:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:38:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:41:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:42:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:43:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:44:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:45:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:46:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:47:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:50:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:85:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:90:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:93:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:94:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:95:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:96:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:97:3                            testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:100:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:146:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:151:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:154:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:155:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:156:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:157:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:158:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:159:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:160:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:161:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:162:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:163:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:164:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:165:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:166:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/groundwork/groundwork_test.go:169:3                           testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:111:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:319:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:368:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:374:6                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:378:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:379:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:435:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:436:5                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/http/http_test.go:663:4                                       testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:584:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:587:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:589:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:591:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:711:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:712:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:715:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:716:5                                   testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:1028:6                                  testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:1101:6                                  testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb/http_test.go:1111:6                                  testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:73:5                                 testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:74:5                                 testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:77:5                                 testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:78:5                                 testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:133:5                                testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:134:5                                testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:137:5                                testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:138:5                                testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:191:5                                testifylint  go-require: do not use require in http handlers
plugins/outputs/influxdb_v2/http_test.go:194:5                                testifylint  go-require: do not use require in http handlers
plugins/outputs/instrumental/instrumental_test.go:92:3                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:97:3                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:99:3                        testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:101:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:104:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:106:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:110:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:115:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:117:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:119:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:122:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:125:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:128:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:131:3                       testifylint  go-require: require must only be used in the goroutine running the test function
plugins/outputs/instrumental/instrumental_test.go:134:3                       testifylint  go-require: require must only be used in the goroutine running the test function
...
and more, total: 557 findings

Additional configuration

For this checker, additional configuration can be provided:

    go-require:
      # To ignore HTTP handlers (like http.HandlerFunc).
      # Default: false
      ignore-http-handlers: true
@srebhan
Copy link
Member

srebhan commented Jun 24, 2024

Yeah we should enable this as the findings show how likely it is that you misuse FailNow or in turn require.<whatever> in goroutines.

@srebhan srebhan removed their assignment Jun 24, 2024
@powersj
Copy link
Contributor

powersj commented Jun 25, 2024

+1

@zak-pawel
Copy link
Collaborator Author

@srebhan @DStrand1

Folks, after the recent PRs, for the following configuration:

    go-require:
      # To ignore HTTP handlers (like http.HandlerFunc).
      # Default: false
      ignore-http-handlers: true

all findings have been addressed, and we could enable this checker.

As you can see, this configuration disables the check for functions and methods whose signature matches http.HandlerFunc. These handlers run in a separate service goroutine that handles the HTTP connection. Terminating these goroutines can lead to undefined behavior and difficulty in debugging tests.

There are currently 448 findings in those functions. What's the plan? What do we do with them?
My suggestion is (similar to the previous findings) to use t.Error(...) instead of require.XXX() to mark the test as failed (along with showing the line number where the failure occurred)."

@srebhan
Copy link
Member

srebhan commented Oct 10, 2024

To be honest we should return a 500 http error with the error message as body just as a HTTP server would do. I expect all tests to fail with this feedback. :-)

@zak-pawel
Copy link
Collaborator Author

@srebhan
We can return a 500 status code in such cases (although in some tests, a 500 is the expected value), but there's an issue with the error message - we would also need to handle the error returned by w.Write([]byte(err.Error())).
Example:
image

I would set the status to 500, fail the test using t.Error(err) (just like I did in previous PRs: t.Error() calls Fail, which marks the function as having failed but continues execution - this way, it will be clear in exactly which line the unexpected error occurred), and then return.
Like this:
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants