{"action":"closed","number":138,"pull_request":{"url":"https://api.github.com/repos/istio/fortio/pulls/138","id":170028246,"html_url":"https://github.com/istio/fortio/pull/138","diff_url":"https://github.com/istio/fortio/pull/138.diff","patch_url":"https://github.com/istio/fortio/pull/138.patch","issue_url":"https://api.github.com/repos/istio/fortio/issues/138","number":138,"state":"closed","locked":false,"title":"(client only) support secure grpc connections with default tls and insecure https connection option","user":{"login":"ldemailly","id":3664595,"avatar_url":"https://avatars2.githubusercontent.com/u/3664595?v=4","gravatar_id":"","url":"https://api.github.com/users/ldemailly","html_url":"https://github.com/ldemailly","followers_url":"https://api.github.com/users/ldemailly/followers","following_url":"https://api.github.com/users/ldemailly/following{/other_user}","gists_url":"https://api.github.com/users/ldemailly/gists{/gist_id}","starred_url":"https://api.github.com/users/ldemailly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ldemailly/subscriptions","organizations_url":"https://api.github.com/users/ldemailly/orgs","repos_url":"https://api.github.com/users/ldemailly/repos","events_url":"https://api.github.com/users/ldemailly/events{/privacy}","received_events_url":"https://api.github.com/users/ldemailly/received_events","type":"User","site_admin":false},"body":"Fixes #137 \r\n\r\nAlso removed unnecessary globals\r\n\r\nPotential todo: suport client cert\r\n\r\nManual tests: (also tested without -grpc-secure on port 80)\r\n```\r\n$ fortio grpcping -grpc-secure -health fortio-stage.istio.io:443\r\nRTT histogram usec : count 1 avg 368887.19 +/- 0 min 368887.18799999997\r\nmax 368887.18799999997 sum 368887.188\r\n# range, mid point, percentile, count\r\n>= 368887 <= 368887 , 368887 , 100.00, 1\r\n# target 50% 368887\r\nStatuses map[SERVING:1]\r\n\r\nfortio load -grpc -grpc-secure fortio-stage.istio.io:443\r\nFortio 0.7.0-pre running at 8 queries per second, 8->8 procs, for 5s:\r\nfortio-stage.istio.io:443\r\n10:23:11 I grpcrunner.go:88> Starting grpc test for\r\nfortio-stage.istio.io:443 with 4 threads at 8.0 qps\r\nStarting at 8 qps with 4 thread(s) [gomax 8] for 5s : 10 calls each\r\n(total 40)\r\n10:23:20 I periodic.go:519> T001 ended after 6.324224757s : 10 calls.\r\nqps=1.581221475237965\r\n10:23:20 I periodic.go:519> T000 ended after 6.326271277s : 10 calls.\r\nqps=1.5807099572786782\r\n10:23:20 I periodic.go:519> T003 ended after 6.326312999s : 10 calls.\r\nqps=1.5806995325050626\r\n10:23:20 I periodic.go:519> T002 ended after 6.326369323s : 10 calls.\r\nqps=1.5806854594536925\r\nEnded after 6.326418055s : 40 calls. qps=6.3227\r\nAggregated Sleep Time : count 36 avg 0.27554571 +/- 0.5432 min\r\n-1.257935742 max 0.493364646 sum 9.91964568\r\n# range, mid point, percentile, count\r\n>= -1.25794 <= -0.001 , -0.629468 , 11.11, 4\r\n> 0.349 <= 0.399 , 0.374 , 22.22, 4\r\n> 0.399 <= 0.449 , 0.424 , 33.33, 4\r\n> 0.449 <= 0.493365 , 0.471182 , 100.00, 24\r\n# target 50% 0.460091\r\nWARNING 11.11% of sleep were falling behind\r\nAggregated Function Time : count 40 avg 0.2564448 +/- 0.519 min\r\n0.05979103 max 1.8104835019999999 sum 10.2577918\r\n# range, mid point, percentile, count\r\n>= 0.059791 <= 0.06 , 0.0598955 , 2.50, 1\r\n> 0.06 <= 0.07 , 0.065 , 60.00, 23\r\n> 0.07 <= 0.08 , 0.075 , 70.00, 4\r\n> 0.12 <= 0.14 , 0.13 , 80.00, 4\r\n> 0.16 <= 0.18 , 0.17 , 90.00, 4\r\n> 1 <= 1.81048 , 1.40524 , 100.00, 4\r\n# target 50% 0.0682609\r\n# target 75% 0.13\r\n# target 90% 0.18\r\n# target 99% 1.72944\r\n# target 99.9% 1.80238\r\nHealth SERVING : 40\r\nAll done 40 calls (plus 4 warmup) 256.445 ms avg, 6.3 qps\r\n```\r\n\r\nalso fixes #106 with --https-insecure option\r\n\r\nManual tested using\r\n```\r\n$ fortio curl https://35.230.91.76/\r\n10:52:46 W http.go:106> https requested, switching to standard go client\r\n10:52:46 E http.go:222> Unable to send request for\r\nhttps://35.230.91.76/debug : Get https://35.230.91.76/debug: x509:\r\ncannot validate certificate for 35.230.91.76 because it doesn't contain\r\nany IP SANs\r\nGet https://35.230.91.76/debug: x509: cannot validate certificate for\r\n35.230.91.76 because it doesn't contain any IP SANs10:52:46 E\r\nfortio_main.go:192> Error status 400 : Get https://35.230.91.76/debug:\r\nx509: cannot validate certificate for 35.230.91.76 because it doesn't\r\ncontain any IP SANs\r\n$ fortio curl -https-insecure https://35.230.91.76/\r\n10:53:02 W http.go:106> https requested, switching to standard go client\r\n10:53:02 E fortio_main.go:192> Error status 404 :\r\n```\r\n\r\n\r\nps: this is stacked on top of #135 ","created_at":"2018-02-19T18:28:35Z","updated_at":"2018-02-20T23:14:42Z","closed_at":"2018-02-20T23:14:42Z","merged_at":"2018-02-20T23:14:41Z","merge_commit_sha":"0bb1a20eaf045eb8b69de29b5925b3132a985b51","assignee":null,"assignees":[],"requested_reviewers":[{"login":"costinm","id":84202,"avatar_url":"https://avatars1.githubusercontent.com/u/84202?v=4","gravatar_id":"","url":"https://api.github.com/users/costinm","html_url":"https://github.com/costinm","followers_url":"https://api.github.com/users/costinm/followers","following_url":"https://api.github.com/users/costinm/following{/other_user}","gists_url":"https://api.github.com/users/costinm/gists{/gist_id}","starred_url":"https://api.github.com/users/costinm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/costinm/subscriptions","organizations_url":"https://api.github.com/users/costinm/orgs","repos_url":"https://api.github.com/users/costinm/repos","events_url":"https://api.github.com/users/costinm/events{/privacy}","received_events_url":"https://api.github.com/users/costinm/received_events","type":"User","site_admin":false},{"login":"rkpagadala","id":9270018,"avatar_url":"https://avatars2.githubusercontent.com/u/9270018?v=4","gravatar_id":"","url":"https://api.github.com/users/rkpagadala","html_url":"https://github.com/rkpagadala","followers_url":"https://api.github.com/users/rkpagadala/followers","following_url":"https://api.github.com/users/rkpagadala/following{/other_user}","gists_url":"https://api.github.com/users/rkpagadala/gists{/gist_id}","starred_url":"https://api.github.com/users/rkpagadala/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rkpagadala/subscriptions","organizations_url":"https://api.github.com/users/rkpagadala/orgs","repos_url":"https://api.github.com/users/rkpagadala/repos","events_url":"https://api.github.com/users/rkpagadala/events{/privacy}","received_events_url":"https://api.github.com/users/rkpagadala/received_events","type":"User","site_admin":false},{"login":"andraxylia","id":10883640,"avatar_url":"https://avatars0.githubusercontent.com/u/10883640?v=4","gravatar_id":"","url":"https://api.github.com/users/andraxylia","html_url":"https://github.com/andraxylia","followers_url":"https://api.github.com/users/andraxylia/followers","following_url":"https://api.github.com/users/andraxylia/following{/other_user}","gists_url":"https://api.github.com/users/andraxylia/gists{/gist_id}","starred_url":"https://api.github.com/users/andraxylia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andraxylia/subscriptions","organizations_url":"https://api.github.com/users/andraxylia/orgs","repos_url":"https://api.github.com/users/andraxylia/repos","events_url":"https://api.github.com/users/andraxylia/events{/privacy}","received_events_url":"https://api.github.com/users/andraxylia/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/istio/fortio/pulls/138/commits","review_comments_url":"https://api.github.com/repos/istio/fortio/pulls/138/comments","review_comment_url":"https://api.github.com/repos/istio/fortio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/istio/fortio/issues/138/comments","statuses_url":"https://api.github.com/repos/istio/fortio/statuses/61ec6740f8588fe1dd72dad8cd01274e8836dcdf","head":{"label":"istio:tls","ref":"tls","sha":"61ec6740f8588fe1dd72dad8cd01274e8836dcdf","user":{"login":"istio","id":23534644,"avatar_url":"https://avatars1.githubusercontent.com/u/23534644?v=4","gravatar_id":"","url":"https://api.github.com/users/istio","html_url":"https://github.com/istio","followers_url":"https://api.github.com/users/istio/followers","following_url":"https://api.github.com/users/istio/following{/other_user}","gists_url":"https://api.github.com/users/istio/gists{/gist_id}","starred_url":"https://api.github.com/users/istio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/istio/subscriptions","organizations_url":"https://api.github.com/users/istio/orgs","repos_url":"https://api.github.com/users/istio/repos","events_url":"https://api.github.com/users/istio/events{/privacy}","received_events_url":"https://api.github.com/users/istio/received_events","type":"Organization","site_admin":false},"repo":{"id":106351459,"name":"fortio","full_name":"istio/fortio","owner":{"login":"istio","id":23534644,"avatar_url":"https://avatars1.githubusercontent.com/u/23534644?v=4","gravatar_id":"","url":"https://api.github.com/users/istio","html_url":"https://github.com/istio","followers_url":"https://api.github.com/users/istio/followers","following_url":"https://api.github.com/users/istio/following{/other_user}","gists_url":"https://api.github.com/users/istio/gists{/gist_id}","starred_url":"https://api.github.com/users/istio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/istio/subscriptions","organizations_url":"https://api.github.com/users/istio/orgs","repos_url":"https://api.github.com/users/istio/repos","events_url":"https://api.github.com/users/istio/events{/privacy}","received_events_url":"https://api.github.com/users/istio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/istio/fortio","description":"Fortio load testing library and command line tool and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats.","fork":false,"url":"https://api.github.com/repos/istio/fortio","forks_url":"https://api.github.com/repos/istio/fortio/forks","keys_url":"https://api.github.com/repos/istio/fortio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/istio/fortio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/istio/fortio/teams","hooks_url":"https://api.github.com/repos/istio/fortio/hooks","issue_events_url":"https://api.github.com/repos/istio/fortio/issues/events{/number}","events_url":"https://api.github.com/repos/istio/fortio/events","assignees_url":"https://api.github.com/repos/istio/fortio/assignees{/user}","branches_url":"https://api.github.com/repos/istio/fortio/branches{/branch}","tags_url":"https://api.github.com/repos/istio/fortio/tags","blobs_url":"https://api.github.com/repos/istio/fortio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/istio/fortio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/istio/fortio/git/refs{/sha}","trees_url":"https://api.github.com/repos/istio/fortio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/istio/fortio/statuses/{sha}","languages_url":"https://api.github.com/repos/istio/fortio/languages","stargazers_url":"https://api.github.com/repos/istio/fortio/stargazers","contributors_url":"https://api.github.com/repos/istio/fortio/contributors","subscribers_url":"https://api.github.com/repos/istio/fortio/subscribers","subscription_url":"https://api.github.com/repos/istio/fortio/subscription","commits_url":"https://api.github.com/repos/istio/fortio/commits{/sha}","git_commits_url":"https://api.github.com/repos/istio/fortio/git/commits{/sha}","comments_url":"https://api.github.com/repos/istio/fortio/comments{/number}","issue_comment_url":"https://api.github.com/repos/istio/fortio/issues/comments{/number}","contents_url":"https://api.github.com/repos/istio/fortio/contents/{+path}","compare_url":"https://api.github.com/repos/istio/fortio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/istio/fortio/merges","archive_url":"https://api.github.com/repos/istio/fortio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/istio/fortio/downloads","issues_url":"https://api.github.com/repos/istio/fortio/issues{/number}","pulls_url":"https://api.github.com/repos/istio/fortio/pulls{/number}","milestones_url":"https://api.github.com/repos/istio/fortio/milestones{/number}","notifications_url":"https://api.github.com/repos/istio/fortio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/istio/fortio/labels{/name}","releases_url":"https://api.github.com/repos/istio/fortio/releases{/id}","deployments_url":"https://api.github.com/repos/istio/fortio/deployments","created_at":"2017-10-10T01:01:39Z","updated_at":"2018-02-19T22:08:33Z","pushed_at":"2018-02-20T23:14:41Z","git_url":"git://github.com/istio/fortio.git","ssh_url":"git@github.com:istio/fortio.git","clone_url":"https://github.com/istio/fortio.git","svn_url":"https://github.com/istio/fortio","homepage":"","size":737,"stargazers_count":233,"watchers_count":233,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":23,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":14,"open_issues":23,"watchers":233,"default_branch":"master"}},"base":{"label":"istio:master","ref":"master","sha":"705511cb2a19a09c7a07a10d1b365312a755eb00","user":{"login":"istio","id":23534644,"avatar_url":"https://avatars1.githubusercontent.com/u/23534644?v=4","gravatar_id":"","url":"https://api.github.com/users/istio","html_url":"https://github.com/istio","followers_url":"https://api.github.com/users/istio/followers","following_url":"https://api.github.com/users/istio/following{/other_user}","gists_url":"https://api.github.com/users/istio/gists{/gist_id}","starred_url":"https://api.github.com/users/istio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/istio/subscriptions","organizations_url":"https://api.github.com/users/istio/orgs","repos_url":"https://api.github.com/users/istio/repos","events_url":"https://api.github.com/users/istio/events{/privacy}","received_events_url":"https://api.github.com/users/istio/received_events","type":"Organization","site_admin":false},"repo":{"id":106351459,"name":"fortio","full_name":"istio/fortio","owner":{"login":"istio","id":23534644,"avatar_url":"https://avatars1.githubusercontent.com/u/23534644?v=4","gravatar_id":"","url":"https://api.github.com/users/istio","html_url":"https://github.com/istio","followers_url":"https://api.github.com/users/istio/followers","following_url":"https://api.github.com/users/istio/following{/other_user}","gists_url":"https://api.github.com/users/istio/gists{/gist_id}","starred_url":"https://api.github.com/users/istio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/istio/subscriptions","organizations_url":"https://api.github.com/users/istio/orgs","repos_url":"https://api.github.com/users/istio/repos","events_url":"https://api.github.com/users/istio/events{/privacy}","received_events_url":"https://api.github.com/users/istio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/istio/fortio","description":"Fortio load testing library and command line tool and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats.","fork":false,"url":"https://api.github.com/repos/istio/fortio","forks_url":"https://api.github.com/repos/istio/fortio/forks","keys_url":"https://api.github.com/repos/istio/fortio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/istio/fortio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/istio/fortio/teams","hooks_url":"https://api.github.com/repos/istio/fortio/hooks","issue_events_url":"https://api.github.com/repos/istio/fortio/issues/events{/number}","events_url":"https://api.github.com/repos/istio/fortio/events","assignees_url":"https://api.github.com/repos/istio/fortio/assignees{/user}","branches_url":"https://api.github.com/repos/istio/fortio/branches{/branch}","tags_url":"https://api.github.com/repos/istio/fortio/tags","blobs_url":"https://api.github.com/repos/istio/fortio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/istio/fortio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/istio/fortio/git/refs{/sha}","trees_url":"https://api.github.com/repos/istio/fortio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/istio/fortio/statuses/{sha}","languages_url":"https://api.github.com/repos/istio/fortio/languages","stargazers_url":"https://api.github.com/repos/istio/fortio/stargazers","contributors_url":"https://api.github.com/repos/istio/fortio/contributors","subscribers_url":"https://api.github.com/repos/istio/fortio/subscribers","subscription_url":"https://api.github.com/repos/istio/fortio/subscription","commits_url":"https://api.github.com/repos/istio/fortio/commits{/sha}","git_commits_url":"https://api.github.com/repos/istio/fortio/git/commits{/sha}","comments_url":"https://api.github.com/repos/istio/fortio/comments{/number}","issue_comment_url":"https://api.github.com/repos/istio/fortio/issues/comments{/number}","contents_url":"https://api.github.com/repos/istio/fortio/contents/{+path}","compare_url":"https://api.github.com/repos/istio/fortio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/istio/fortio/merges","archive_url":"https://api.github.com/repos/istio/fortio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/istio/fortio/downloads","issues_url":"https://api.github.com/repos/istio/fortio/issues{/number}","pulls_url":"https://api.github.com/repos/istio/fortio/pulls{/number}","milestones_url":"https://api.github.com/repos/istio/fortio/milestones{/number}","notifications_url":"https://api.github.com/repos/istio/fortio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/istio/fortio/labels{/name}","releases_url":"https://api.github.com/repos/istio/fortio/releases{/id}","deployments_url":"https://api.github.com/repos/istio/fortio/deployments","created_at":"2017-10-10T01:01:39Z","updated_at":"2018-02-19T22:08:33Z","pushed_at":"2018-02-20T23:14:41Z","git_url":"git://github.com/istio/fortio.git","ssh_url":"git@github.com:istio/fortio.git","clone_url":"https://github.com/istio/fortio.git","svn_url":"https://github.com/istio/fortio","homepage":"","size":737,"stargazers_count":233,"watchers_count":233,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":23,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":14,"open_issues":23,"watchers":233,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/istio/fortio/pulls/138"},"html":{"href":"https://github.com/istio/fortio/pull/138"},"issue":{"href":"https://api.github.com/repos/istio/fortio/issues/138"},"comments":{"href":"https://api.github.com/repos/istio/fortio/issues/138/comments"},"review_comments":{"href":"https://api.github.com/repos/istio/fortio/pulls/138/comments"},"review_comment":{"href":"https://api.github.com/repos/istio/fortio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/istio/fortio/pulls/138/commits"},"statuses":{"href":"https://api.github.com/repos/istio/fortio/statuses/61ec6740f8588fe1dd72dad8cd01274e8836dcdf"}},"author_association":"MEMBER","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"ldemailly","id":3664595,"avatar_url":"https://avatars2.githubusercontent.com/u/3664595?v=4","gravatar_id":"","url":"https://api.github.com/users/ldemailly","html_url":"https://github.com/ldemailly","followers_url":"https://api.github.com/users/ldemailly/followers","following_url":"https://api.github.com/users/ldemailly/following{/other_user}","gists_url":"https://api.github.com/users/ldemailly/gists{/gist_id}","starred_url":"https://api.github.com/users/ldemailly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ldemailly/subscriptions","organizations_url":"https://api.github.com/users/ldemailly/orgs","repos_url":"https://api.github.com/users/ldemailly/repos","events_url":"https://api.github.com/users/ldemailly/events{/privacy}","received_events_url":"https://api.github.com/users/ldemailly/received_events","type":"User","site_admin":false},"comments":8,"review_comments":0,"maintainer_can_modify":false,"commits":11,"additions":75,"deletions":38,"changed_files":5}}
{"actor":{"display_login":"ldemailly"}}