/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . google . api . kotlin . generator . grpc Ċ Ċ import Ġcom . google . api . kotlin . Client Plugin Options Ċ import Ġcom . google . api . kotlin . Generator Context Ċ import Ġcom . google . api . kotlin . as Normalized String Ċ import Ġcom . google . api . kotlin . config . Auth Options Ċ import Ġcom . google . api . kotlin . config . Auth Types Ċ import Ġcom . google . api . kotlin . config . Client Retry Ċ import Ġcom . google . api . kotlin . config . Configuration Ċ import Ġcom . google . api . kotlin . config . Method Options Ċ import Ġcom . google . api . kotlin . config . Service Options Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . google . rpc . Code Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Return Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . reset Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġkotlin . test . Before Test Ċ import Ġkotlin . test . Test Ċ Ċ /** Ċ Ġ* ĠTests Ġbasic Ġfunctionality . Ċ Ġ* Ċ Ġ* Ġmore Ġcomplex Ġtests Ġuse Ġthe Ġtest Ġprotos Ġin Ġ[ GRPC Generator Test ]. Ċ Ġ*/ Ċ internal Ġclass ĠComp anion Object Impl Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġctx : ĠGenerator Context Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġmeta : ĠConfiguration Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġservice Options : ĠService Options Ġ= Ġmock () ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġreset ( ctx , Ġmeta , Ġservice Options ) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . metadata ). do Return ( meta ) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . service Options ). do Return ( service Options ) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" blah . test . bar ", Ġ" Comp s ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . command Line Options ). do Return ( Client Plugin Options ( auth Google Cloud Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġwhenever ( meta . authentication ). do Return ( Auth Options ( listOf ( Auth Types . GOOGLE _ CLOUD ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġdefault Ġscopes Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" a ", Ġ" b Ġc Ġd Ġe ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" foo . bar ", Ġ" Scopes Test ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprop Ġ= Ġtype . property Specs . first Ġ{ Ġit . name Ġ== Ġ" ALL _ SCOPES " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( prop . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠDefault Ġscopes Ġto Ġuse . ĠUse Ġ[ prepare ] Ġto Ġoverride Ġas Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| val ĠALL _ SCOPES : Ġkotlin . collections . List < kotlin . String > Ġ= ĠlistOf (" a ", Ġ" b Ġc Ġd Ġe ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġdefault Ġretry Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" foo . bar ", Ġ" Retry Test ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprop Ġ= Ġtype . property Specs . first Ġ{ Ġit . name Ġ== Ġ" RETRY " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( prop . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠDefault Ġoperations Ġto Ġretry Ġon Ġfailure . ĠUse Ġ[ prepare ] Ġto Ġoverride Ġas Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠNote : ĠThis Ġsetting Ġcontrols Ġclient Ġside Ġretries . ĠIf Ġyou Ġenable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* Ġserver Ġmanaged Ġretries Ġon Ġthe Ġchannel Ġdo Ġnot Ġuse Ġthis . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static Ġval ĠRET RY : Ġcom . google . api . kg ax . Retry Ġ= Ġcom . google . api . kg ax . grpc . Grpc Basic Retry ( map Of ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġdefault Ġretry Ġproperty Ġwith Ġvalues `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" foo . bar ", Ġ" Retry Test ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . methods ). do Return ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Options (" has Retry ", Ġretry Ġ= ĠClient Retry ( listOf ( Code . ABORT ED ))), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Options (" has None "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Options (" has Some ", Ġretry Ġ= ĠClient Retry ( listOf ( Code . CANCEL LED , ĠCode . DATA _ LO SS ))), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Options (" empty ", Ġretry Ġ= ĠClient Retry ( listOf ())) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprop Ġ= Ġtype . property Specs . first Ġ{ Ġit . name Ġ== Ġ" RETRY " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( prop . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠDefault Ġoperations Ġto Ġretry Ġon Ġfailure . ĠUse Ġ[ prepare ] Ġto Ġoverride Ġas Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠNote : ĠThis Ġsetting Ġcontrols Ġclient Ġside Ġretries . ĠIf Ġyou Ġenable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* Ġserver Ġmanaged Ġretries Ġon Ġthe Ġchannel Ġdo Ġnot Ġuse Ġthis . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static Ġval ĠRET RY : Ġcom . google . api . kg ax . Retry Ġ= Ġcom . google . api . kg ax . grpc . Grpc Basic Retry ( map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" has Retry " Ġto Ġset Of ( io . grpc . Status . Code . ABORT ED ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" has Some " Ġto Ġset Of ( io . grpc . Status . Code . CANCEL LED , Ġio . grpc . Status . Code . DATA _ LO SS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġfactory Ġwith Ġaccess Ġtoken `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" a ", Ġ" b Ġc Ġd Ġe ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" r . r . r ", Ġ" Clazz ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġtype . fun Specs . first Ġ{ Ġit . name Ġ== Ġ" from AccessToken " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( method . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠCreate Ġa ĠCl azz Ġwith Ġthe Ġprovided Ġ[ accessToken ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠIf Ġa Ġ[ channel ] Ġis Ġnot Ġprovided Ġone Ġwill Ġbe Ġcreated Ġautomatically Ġ( recommended ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Over loads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| fun Ġfrom AccessToken ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠaccessToken : Ġcom . google . auth . oauth 2 . AccessToken , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġscopes : Ġkotlin . collections . List < kotlin . String > Ġ= ĠALL _ SCOPES , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġchannel : Ġio . grpc . Managed Channel ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ): Ġr . r . r . Clazz Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġcredentials Ġ= Ġcom . google . auth . oauth 2 . Google Credentials . create ( accessToken ). create Scoped ( scopes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġr . r . r . Clazz ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġchannel Ġ?: Ġcreate Channel (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġcom . google . api . kg ax . grpc . Client Call Options ( credentials Ġ= Ġio . grpc . auth . More Call Credentials . from ( credentials ), Ġretry Ġ= ĠRET RY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġfactory Ġwith Ġcredentials `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" a ", Ġ" b Ġc Ġd Ġe ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" r . r . r ", Ġ" Clazz ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġtype . fun Specs . first Ġ{ Ġit . name Ġ== Ġ" from Credentials " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( method . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠCreate Ġa ĠCl azz Ġwith Ġthe Ġprovided Ġ[ credentials ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠIf Ġa Ġ[ channel ] Ġis Ġnot Ġprovided Ġone Ġwill Ġbe Ġcreated Ġautomatically Ġ( recommended ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Over loads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| fun Ġfrom Credentials ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcredentials : Ġcom . google . auth . oauth 2 . Google Credentials ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġchannel : Ġio . grpc . Managed Channel ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ): Ġr . r . r . Clazz Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġcred Ġ= Ġcredentials ?. let Ġ{ Ġio . grpc . auth . More Call Credentials . from ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġr . r . r . Clazz ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġchannel Ġ?: Ġcreate Channel (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġcom . google . api . kg ax . grpc . Client Call Options ( credentials Ġ= Ġcred , Ġretry Ġ= ĠRET RY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġfactory Ġwith Ġservice Account `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" a ", Ġ" b Ġc Ġd Ġe ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" r . r . r ", Ġ" Clazz ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġtype . fun Specs . first Ġ{ Ġit . name Ġ== Ġ" from ServiceAccount " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( method . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠCreate Ġa ĠCl azz Ġwith Ġservice Ġaccount Ġcredentials Ġfrom Ġa ĠJSON Ġ[ key File ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠIf Ġa Ġ[ channel ] Ġis Ġnot Ġprovided Ġone Ġwill Ġbe Ġcreated Ġautomatically Ġ( recommended ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Over loads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| fun Ġfrom ServiceAccount ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġkey File : Ġjava . io . InputStream , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġscopes : Ġkotlin . collections . List < kotlin . String > Ġ= ĠALL _ SCOPES , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġchannel : Ġio . grpc . Managed Channel ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ): Ġr . r . r . Clazz Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġcredentials Ġ= Ġcom . google . auth . oauth 2 . Google Credentials . from Stream ( key File ). create Scoped ( scopes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġr . r . r . Clazz ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġchannel Ġ?: Ġcreate Channel (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġcom . google . api . kg ax . grpc . Client Call Options ( credentials Ġ= Ġio . grpc . auth . More Call Credentials . from ( credentials ), Ġretry Ġ= ĠRET RY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġfactory Ġwith Ġenvironment `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" a ", Ġ" b Ġc Ġd Ġe ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" r . r . r ", Ġ" Clazz ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġtype . fun Specs . first Ġ{ Ġit . name Ġ== Ġ" from Environment " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( method . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠCreate Ġa ĠCl azz Ġfrom Ġthe Ġcurrent Ġsystem 's Ġenvironment . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠCurrently , Ġthis Ġmethod Ġonly Ġsupports Ġservice Ġaccount Ġcredentials Ġthat Ġare Ġread Ġfrom Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* Ġpath Ġdefined Ġby Ġthe Ġenvironment Ġ[ variable Name ], Ġwhich Ġis Ġ` GOOGLE _ APPLICATION _ CRED ENTIAL S ` Ġby Ġdefault . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠIf Ġa Ġ[ channel ] Ġis Ġnot Ġprovided Ġone Ġwill Ġbe Ġcreated Ġautomatically Ġ( recommended ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Over loads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| fun Ġfrom Environment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġvariable Name : Ġkotlin . String Ġ= Ġ" GOOGLE _ APPLICATION _ CRED ENTIAL S ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġscopes : Ġkotlin . collections . List < kotlin . String > Ġ= ĠALL _ SCOPES , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġchannel : Ġio . grpc . Managed Channel ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ): Ġr . r . r . Clazz Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġpath Ġ= ĠSystem . getenv ( variable Name ) Ġ?: Ġthrow Ġjava . lang . IllegalStateException (" Credentials Ġenvironment Ġvariable Ġis Ġnot Ġset : Ġ${ '$ '} variable Name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġjava . io . File ( path ). inputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġr . r . r . Clazz . from ServiceAccount ( it , Ġscopes , Ġchannel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġfactory Ġwith Ġstub s `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" a ", Ġ" b Ġc Ġd Ġe ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" r . r . r ", Ġ" Clazz ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġtype . fun Specs . first Ġ{ Ġit . name Ġ== Ġ" create " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( method . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠCreate Ġa ĠCl azz Ġwith Ġthe Ġprovided Ġ[ channel ], Ġ[ options ], Ġor Ġstub Ġ[ factory ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠThis Ġis Ġan Ġadvanced Ġmethod . ĠP refer Ġusing Ġ[ from AccessToken ], Ġ[ from ServiceAccount ], Ġor Ġ[ from Credentials ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Over loads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| fun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġchannel : Ġio . grpc . Managed Channel ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġoptions : Ġcom . google . api . kg ax . grpc . Client Call Options ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfactory : ĠStub s . Factory ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ): Ġr . r . r . Clazz Ġ= Ġr . r . r . Clazz ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġchannel Ġ?: Ġcreate Channel (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġoptions Ġ?: Ġcom . google . api . kg ax . grpc . Client Call Options (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfactory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gener ates Ġcreate Ġchannel Ġmethod `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( service Options . scopes ). do Return ( listOf (" x ", Ġ" y ")) ĊĠĠĠĠĠĠĠ Ġwhenever ( ctx . className ). do Return ( ClassName (" a . b . c ", Ġ" Clazz ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠComp anion Object Impl (). generate ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġtype . fun Specs . first Ġ{ Ġit . name Ġ== Ġ" create Channel " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( method . toString (). as Normalized String ()). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠCreate Ġa Ġ[ Managed Channel ] Ġto Ġuse Ġwith Ġa ĠCl azz . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * Ġ[ enable Retry ] Ġcan Ġbe Ġused Ġto Ġenable Ġserver Ġmanaged Ġretries , Ġwhich Ġis Ġcurrently ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * Ġexperimental . ĠYou Ġshould Ġnot Ġuse Ġany Ġclient Ġretry Ġsettings Ġif Ġyou Ġenable Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| * ĠThis Ġis Ġan Ġadvanced Ġmethod . ĠP refer Ġusing Ġ[ from AccessToken ], Ġ[ from ServiceAccount ], Ġor Ġ[ from Credentials ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ kotlin . jvm . Jvm Over loads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| fun Ġcreate Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġhost : Ġkotlin . String Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġport : Ġkotlin . Int Ġ= Ġ 4 4 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġenable Retry : Ġkotlin . Boolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ): Ġio . grpc . Managed Channel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġbuilder Ġ= Ġio . grpc . Managed Channel Builder . for Address ( host , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġif Ġ( enable Retry ) Ġ{ Ġbuilder . enable Retry () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. as Normalized String () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ