
次ã®ãªãªãŒã¹ã§ã¯ãããããããæ£ãããªã¯ãšã¹ããæ£ç¢ºã«éä¿¡ããŠããŸããïŒããŸãã¯ãå¿ èŠãªãã¹ãŠã®ãã©ã¡ãŒã¿ãŒããã®ãµãŒãã¹ã«æ£ç¢ºã«éä¿¡ããŠããŸããïŒããšãã質åãããŠãããšæããŸãã ãã¬ãã£ããªã·ããªãªã®ååšãšããžãã£ããªã·ããªãªã®ååšã誰ããèªèãã¹ãã§ãã ãã®ç¥èã¯ããWhat if ..ïŒãã·ãªãŒãºããç©æ¥µçã«è³ªåãæèµ·ããå¿ èŠããããŸãã ãµãŒãã¹ã2æéã®é 延ã§æ¥ç¶ã®åŠçãéå§ããå Žåã¯ã©ããªããŸããïŒ ãµãŒãã¹ãJSON圢åŒã®ããŒã¿ã§ã¯ãªãabracadabraã«å¿çããå Žåã¯ã©ããªããŸããïŒ
ãã®ãããªããšã¯ãéçºããã»ã¹ã§ãã°ãã°å¿ããããŸãã ãã®çš®ã®åé¡ããã§ãã¯ããããšã¯è€éã§ããããããã®ãããªç¶æ³ã®å¯èœæ§ã¯äœãããã®ä»ã®çç±ããããŸãã ããããé倧ãªç¬éã«å¥åŠãªãšã©ãŒãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå ŽåããŠãŒã¶ãŒã¯æ°žé ã«æãã£ãŠããŸãããŠãŒã¶ãŒã¯è£œåã«æ»ããªããªããŸãã Yandexã§ã¯ããããã質åãåžžã«å¿µé ã«çœ®ããæçšãªã¢ã€ãã¢ã䜿çšããŠããã¹ãããã»ã¹ãå¯èœãªéãæé©åããããåªããŠããŸãã ãã®ãããªãã§ãã¯ãç°¡åãçŽæçã èªååããæ¹æ³ã«ã€ããŠã¯ããã®èšäºã§èª¬æããŸãã
å¡©
ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãããµãŒããŒãžãããéšåããå¥ã®éšåãžããµãŒãã¹ãããµãŒãã¹ãžãšã©ã®ããã«ããããŠäœã転éãããããç¥ãããã®å€ãã®é·ãéç¥ãããŠããæ¹æ³ããããŸãã
æãäžè¬çã§æ·±å»ãªæºåãå¿ èŠãšããªãæåã®æ¹æ³ã¯ãç¹å¥ãªããã°ã©ã ãããŒã¿éä¿¡ãŸãã¯åä¿¡ã®ãœãŒã¹ã®1ã€ã«æ¥ç¶ããããšã§ãã ãã®ãããªããã°ã©ã ã¯ã ãã©ãã£ãã¯ã¢ãã©ã€ã¶ãŒãŸãã¯ããé »ç¹ã«ã¹ããã¡ãŒãšåŒã°ããŸã ã
2çªç®ã¯ãããŒãã£ã®1ã€ãå®å šã«äººå·¥çãªå®è£ ã«çœ®ãæããããšã§ãã ãã®ã¢ãããŒãã§ã¯ãç¹å®ã®å Žåã®åäœã®æ確ãªã·ããªãªã決å®ãããã®ãµãŒãã¹ã«éããããã¹ãŠã®æ å ±ãä¿åããããšãã§ããŸãã ãã®ã¢ãããŒãã¯ãã¹ã¿ãïŒ ã¢ãã¯ãªããžã§ã¯ã ïŒã䜿çšããŠåŒã³åºãããŸã ã äž¡æ¹ãèŠãŠãããŸãã
ã¹ããã¡ãŒã䜿çšãã
ãµãŒãã¹ééä¿¡ã«åœ±é¿ããå€æŽã®æ°ãããªãªãŒã¹ãŸãã¯ãããã°ãè¡ãããŸãã å¿ èŠãªã€ã³ã¿ãŒã»ãã¿ãŒããã°ã©ã ïŒ WireSharkãŸãã¯TcpdumpïŒãçšæããŠããŸãã ãã¹ããããŒããã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ã«ã¿ãŒãé©çšããããšã«ãããç®çã®ããŒããžã®ãã©ãã£ãã¯ã®ã€ã³ã¿ãŒã»ãããéå§ããŸãã ç§ãã¡ã¯ãæãããšããè¡ããå¿ èŠãªã³ãã¥ãã±ãŒã·ã§ã³ãéå§ããŸãã ååãåæ¢ããŸãã ãããå解ãå§ããŸãã åãµãŒãã¹ã®è§£æããã»ã¹ã«ã¯ç¬èªã®ããã»ã¹ããããŸãããéåžžã倧åãªGETãPOSTãPUTãªã©ã®ããã¹ãã®ããŒãå ã§ã®ããããçãªæ€çŽ¢ãåžžã«æãåºãããŸãã èŠã€ããïŒ ãã®åŸããªãªãŒã¹ããšã«ãããç¹°ãè¿ããŸãã ããã¯ä»ååž°ãã¹ãã§ãïŒ èŠã€ãããŸããã§ãããïŒ çç±ãç解ãããŸã§ããã£ã«ã¿ãŒã®ããŸããŸãªçµã¿åããã§ãããç¹°ãè¿ããŸãã
ãªãªãŒã¹ãããªãªãŒã¹ãŸã§ïŒ
ããã¯æåã§1åå®è¡ã§ããŸãã ãŸãã¯2ã å€å3ã ãããŠã圌女ã¯ããã«é£œããã§ãããã ãããŠã5åç®ã®ãªãªãŒã¹ã§ã¯ããã®ã³ãã¥ãã±ãŒã·ã§ã³ã«æéãããããŸãã éä¿¡ãäœããã®éç¥ã䌎ãã³ãŒã«ããã¯åŒã³åºãã§ããå Žåãéæ¥çã«ããã«æ°ä»ãã®ã¯ç¹ã«å°é£ã§ãã ãªãªãŒã¹ããšã«ç¹°ãè¿ããããå€ãã®æéãšåŽåãèŠããæ©æ¢°çã¢ã¯ã·ã§ã³ã¯èªååãã䟡å€ããããŸãã JAVAã§è¡ãæ¹æ³ ä»ã®èšèªã§ãåæ§ã®æ¹æ³ã§ãããè¡ãããšãã§ãããšç¢ºä¿¡ããŠããŸãããç¹ã«ãYandexãã¹ãèªååçšã®JUnit4 + Mavenãã³ãã«ã¯æ£åžžã«æ©èœããããèªäœãå®èšŒæžã¿ã§ãã
ãµãŒãã¹ãçµ±åçã«ãã¹ããããšä»®å®ããŸããã€ãŸããå¥ã®ãã·ã³ã§èµ·åãããšæŠéã¢ãŒãã®ããã«èŠããSSHãä»ããŠãµãŒãã¹ã«æ¥ç¶ããŸãã ã©ã€ãã©ãªãSSHã§åäœã ãããµãŒããŒã«æ¥ç¶ãã tcpdumpãå®è¡ããŠããã¡ã€ã«ã«ã§ããããšããã¹ãŠåã蟌ã¿ãŸãïŒãã¹ãŠãæã«äŒŒãŠããŸãïŒã ãã¹ãã®åŸãããã»ã¹ã匷å¶çã«çµäºããgrepãawkãsedãªã©ã䜿çšããŠå¿ èŠãªãã®ããã¡ã€ã«ã§æ¢ããŸãã 次ã«ããã¹ãã®çµæã®ããã»ã¹ã ããªãã¯ãããããŸãããïŒ ããïŒ å¿ èŠãããŸããïŒ
ãªããããããªãã®ã§ããïŒ
ãäžå¿ èŠãã¯ãäžå¯èœããæå³ããªãããšã«æ³šæããŠãã ããã
ã§ããŸãã 次ã®çç±ã«ãããç°¡åãªæ¹æ³ããããŸãã
- 倧ããªæååã®ã³ã³ããŒãã³ããžã®è§£æã¯ãåžžã«å€ãã®ç¹å®ã®ã³ãŒãã§ãããä¿å®ãå°é£ã§ãã
- HTTPã¡ãã»ãŒãžã®è§£æã¯ãäœçŸãã®ã©ã€ãã©ãªã§é·ãéè¡ãããŠããŸããã ãªãæåã«çŸãããŸããïŒ
ç§ãã¡ã¯ãŸãã«ãã®æ¹æ³ãè©ŠããŸããã æåã¯äŸ¿å©ã«æããŸãã-sshãä»ããŠtcpdumpãéå§ããã³åæ¢ããåºåã§å¿ èŠãªéšåæååãèŠã€ããã ãã§ããã æåã®ãµããŒãã®åé¡ã¯ã»ãšãã©ããã«å§ãŸããŸãããæ€çŽ¢ã¯ãšãªã§ã¯ãã¯ãšãªãã©ã¡ãŒã¿ã®é åºãã©ã³ãã ã§ããããšãå€æããŸããã åç §è¡ãããã€ãã«åå²ããåãšã³ããªã確èªããå¿ èŠããããŸããã ãªã¯ãšã¹ããèŠã€ãããªãã£ãå Žåãããšã©ãŒã¡ãã»ãŒãžã¯ææ°æ¶æ²ããŠããŸããã倧éã®ããã¹ãã¯ãèªåèªèº«ãæ§æããé©åãªæ¹æ³ãæäŸããŸããã§ããã éåæãªã¯ãšã¹ããé çã«è¿œå ãããã¢ã¯ã·ã§ã³ã®æ°ååŸã«è¡šç€ºãããå¯èœæ§ããããŸãã åºåã«å¿ èŠãªéšåæååãèŠè¶ããŠãäžå®ã®é 延ã䌎ãããŸãæ§é ãæ§ç¯ããå¿ èŠããããŸããã ãã¹ãã³ãŒãã¯ããã¹ãããã³ãŒããããè€éã«ãªãããšããããŸããã 次ã«ããã®éšåããã¹ãããå¥ã®æ¹æ³ãæ¢ãå§ããŸããã
WebãµãŒãã¹ã®ä»£ããã«ã¹ã¿ãã䜿çšãã
ãã¹ãã«ã€ããŠè©±ããŠããã®ã§ãããããã°ãªãããã¹ããã¡ãŒã®åœ¢ã«ããã ãã§ãªãããµãŒãã¹å šäœã®1ã€ã眮ãæããå¯èœæ§ããã¹ãŠãããŸãã ãã®ã¢ãããŒãã§ã¯ããã¯ãªãŒã³ãªããªã¯ãšã¹ãã人工ãµãŒãã¹ã«å°éããã¡ãã»ãŒãžã®ãšã³ããã€ã³ãã®åäœãå¶åŸ¡ããæ©äŒããããŸãã ãã®ãããªç®çã®ããã«ãçŽ æŽãããWireMockã©ã€ãã©ãªããããŸãã ãã®ã³ãŒãã¯ããããžã§ã¯ãã®GitHubããŒãžã§è¡šç€ºã§ããŸã ã äžçªäžã®è¡ã¯ãWebãµãŒãã¹ãé©åãªREST APIãæäŸãããšããããšã§ããããã¯ãã»ãšãã©ãã¹ãŠã®æ¹æ³ã§æ§æã§ããŸãã ããã¯JAVAã©ã€ãã©ãªã§ãããã¹ã¿ã³ãã¢ãã³ã¢ããªã±ãŒã·ã§ã³ãšããŠå®è¡ããæ©èœããããjreã䜿çšã§ããŸãã ãããŠã詳现ãªããã¥ã¡ã³ããå«ãç°¡åãªã»ããã¢ããã
ä»»æã®å¿çã³ãŒããä»»æã®ã³ã³ãã³ããããã³å¿çãä¿åããŠèªåã§éä¿¡ããæ©èœãåããå®éã®ãµãŒãã¹ãžã®ééçãªèŠæ±ãªãã€ã¬ã¯ãããããŸãã ç¹ã«æ³šæãã¹ãããšã¯ãã¿ã€ã ã¢ãŠããéä¿¡ã®åæãç¡å¹ãªå¿çãªã©ãåŠå®çãªåäœãåçŸããæ©äŒã§ãã çŸäººïŒ ã©ã€ãã©ãªã¯ãJettyãTomcatãªã©ã«ããŠã³ããŒãã§ããWARãšããŠãæ©èœããŸãã ãããŠãæãéèŠãªããšã¯ããã®ã©ã€ãã©ãªã¯JUnitã«ãŒã«ã®ãããªãã¹ãã§çŽæ¥äœ¿çšã§ããããšã§ãïŒ åœŒå¥³èªèº«ããããã£ãã¢ãã¬ã¹ããã©ã¡ãŒã¿ãŒãããããŒãåå²ããããšã«ããããªã¯ãšã¹ãã®è§£æãè¡ããŸãã æ®ã£ãŠããã®ã¯ãé©åãªã¿ã€ãã³ã°ã§æ¥ãŠåºæºãæºãããã¹ãŠã®äººã®ãªã¹ããååŸããããšã§ãã
ã¹ã¿ãã䜿çšããŠãã§ãã¯ãèªååãã
ç¶è¡ããåã«ãæ€èšãã2çªç®ã®ãªãã·ã§ã³ïŒã¢ãã¯ãªããžã§ã¯ãïŒã䜿çšããŠãç°¡åã§èŠèŠçãªèªåãã¹ããæäŸããããã«å¿ èŠãªæé ã決å®ããå¿ èŠããããŸãã
ã¹ããŒãžã®ããããããããã»ã©å°é£ãªãæåã§è¡ãããšãå¯èœã§ããããšã¯æ³šç®ã«å€ããŸãã
ã¹ããŒã
äœããã§ãã¯ããŠããŸããïŒ ã¹ããŒãå ã®
{}
ïŒ
_ -> {} -> _.
ããæ£ç¢ºã«ã¯ãåè·¯ã¯æ¬¡ã®ããã«ãªããŸãã
_ -> _ :( ): {}.
ãããã£ãŠãããã€ãã®ããšãè¡ãå¿ èŠããããŸãã
- ãµãŒãã¹ã¹ã¿ããäžããŠãç¹å®ã®ã¡ãã»ãŒãžãåãå ¥ããããã«åŒ·å¶ããOKã§å¿çããŸãïŒãŸãã¯ãã·ããªãªã«å¿ããŠOKã§ã¯ãããŸããïŒã WireMockããããè¡ããŸãã
- ãµãŒãã¹ã¹ã¿ããžã®ã¡ãã»ãŒãžã®é
ä¿¡ã確èªããŸãïŒã¹ããŒã ã§
->
ïŒã ãã®æ®µéã«ã€ããŠã¯å¥ã«èª¬æããŸãã - æ¥ããã®ãæ€èšŒããã 2ã€ã®ãªãã·ã§ã³ããããŸã-æ€èšŒã«WireMockããŒã«ã䜿çšããããWireMockããŒã«ãããªã¯ãšã¹ãã®ãªã¹ããååŸãããããã«ãããã£ãŒãé©çšããŸãã
人工çãªWebãµãŒãã¹ãäžãã
ãµãŒãã¹ãæåã§äžããæ¹æ³ã«ã€ããŠã¯ãwiremock Webãµã€ãã®ãã¹ã¿ã³ãã¢ãã³ã®å®è¡ãã»ã¯ã·ã§ã³ã§è©³ãã説æãããŠããŸãã JUnitã§ã®äœ¿çšæ¹æ³ã説æãããŠããŸãã ããããä»åŸãããå¿ èŠã«ãªãã®ã§ãå°ãã³ãŒãã瀺ããŸãã
ãã¹ãã®éå§æã«ç®çã®ããŒãã§ãµãŒãã¹ãèµ·åããçµäºåŸã«çµäºããJUnitã«ãŒã«ãäœæããŸãã
@Rule public WireMockRule wiremock = new WireMockRule(LOCAL_MOCKED_PORT);
ãã¹ãã®éå§ã¯æ¬¡ã®ããã«ãªããŸãã
@Test public void shouldSend3Callbacks() throws Exception { // stubFor(any(urlMatching(".*")).willReturn(aResponse() .withStatus(HttpStatus.OK_200).withBody("OK"))); ...
ããã§ã¯ãæ¬äœãOKãã§ã³ãŒã200ã§èŠæ±ãããã¢ãã¬ã¹ã«å¿çããããã«ãäžããããWebãµãŒãã¹ãæ§æããŸãã æ§æããããã®ããã€ãã®ç°¡åãªã¹ãããã®åŸãã€ãã³ããéçºããããã®ããã€ãã®ãªãã·ã§ã³ããããŸãã ãŸããã¯ã©ã€ã¢ã³ããããã¹ããå®è¡ãããŠãããã·ã³ãžã®ããŒããžã®ã¢ã¯ã»ã¹ã«åé¡ã¯ãããŸããã ãã®å Žåããã¹ãã±ãŒã¹å ã§å¿ èŠãªã¢ã¯ã·ã§ã³ãå®è¡ããã ãã§ããã®åŸæ€èšŒã«é²ã¿ãŸãã 2çªç®-sshçµç±ã§ã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã ããã§ããããŒãã¯ãã¡ã€ã¢ãŠã©ãŒã«ã§èŠãããŠããŸãã ããã§ã¯ãsshããŒããã©ã¯ãŒãã£ã³ã°ïŒãŸãã¯ssh-tunnelingïŒã圹ç«ã¡ãŸãã ããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
ããã±ãŒãžãçããã
REMOTEïŒ-Rã¹ã€ããã䜿çšïŒãšãããã«å¿ããŠãã·ã³ãžã®sshã¢ã¯ã»ã¹ãå¿ èŠã§ãã ããã«ããããã¹ããµãŒãã¹ãããŒã«ã«ããŒãã«ã¢ã¯ã»ã¹ã§ããããã«ãªããèªåã®ããŒããèãããšãã§ããŸãã ãããŠããã¹ãŠãæ©èœããŸãã
ç°¡åã«èšãã°ãsshããŒã転éïŒãŸãã¯ssh-tunnelingïŒã¯ããªã¢ãŒããã·ã³ã®ããŒãããããŒã«ã«ãã·ã³ã®ããŒãã«sshæ¥ç¶ãä»ããŠãã€ãããããšã§ãã 䜿çšæ¹æ³ã«ã€ããŠã¯ã www.debianadmin.comãã芧ãã ããã
ãã®ããã»ã¹ãèªååããŠããããããã¹ãã§ãã®ã¡ã«ããºã ã䟿å©ã«äœ¿çšããæ¹æ³ã詳现ã«æ€èšããŸãã äžçªäžã®ã¬ãã«-junitã«ãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ããå§ããŸãããã ããã«ããããã¹ããéå§ããåã«
__: -> ssh -> ____:_
ãã¹ãããããå®äºåŸã«ãã³ãã«ãéããããšãã§ããŸãã
ããŒã転éJUnitã«ãŒã«ã®äœæ
Ganymed SSH2ã©ã€ãã©ãªãæãåºããŠãã ããã Mavenã䜿çšããŠæ¥ç¶ããŸãã
<!--https://code.google.com/p/ganymed-ssh-2/--> <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>${last-ganymed-ssh-ver}</version> </dependency>
ïŒãªãªãŒã¹ããŒãžã§ã³ã¯ãåžžã«Maven Centralã§ç¢ºèªã§ããŸããïŒ
ãã®ã©ã€ãã©ãªã䜿çšããŠãsshãä»ããŠãã³ãã«ãäœæããäŸãéããŸãã 4ã€ã®ãã©ã¡ãŒã¿ãŒãå¿ èŠã§ããããšãç解ããŠããŸãã ãã¹ãã¯ããŒã«ã«ããŒããä»ããŠã話ããããšãåæãšããŠããããã
__
ã
127.0.0.1
ãšåçãš
__
ãŸãã
次ã®3ã€ã®ãã©ã¡ãŒã¿ãŒãæå®ããå¿ èŠããããŸãã
@Rule public SshRemotePortForwardingRule forward = onRemoteHost(props().serviceURI()) .whenRemoteUsesPort(BIND_PORT_ON_REMOTE) .forwardToLocal().withForwardToPort(LOCAL_MOCKED_PORT);
.forwardToLocal()
ã¯æ¬¡ã®ãšããã§ãã
public SshRemotePortForwardingRule forwardToLocal() { try { hostToForward = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { throw new RuntimeException("Can't get localhost address", e); } return this; }
JUnitã«ãŒã«ã
ExternalResource
ç¶æ¿è ãšããŠäœæãããšäŸ¿å©ã§ãããã³ãã«ãèš±å¯ããŠäžãã
before()
ãšãã³ãã«ãšæ¥ç¶ãéãã
after()
åå®çŸ©ããŸãã
æ¥ç¶èªäœã¯æ¬¡ã®ããã«ãªããŸãã
logger.info(format("Try to create port forwarding: `ssh %s -l %s -f -N -R %s:%s:%s:%s`", connection.getHostname(), SSH_LOGIN, hostOnRemote, portOnRemote, hostToForward, portToForward )); connection.requestRemotePortForwarding(hostOnRemote, portOnRemote, hostToForward, portToForward);
æ€èšŒãã
ãããã£ããµãŒãã¹ã§ãªã¯ãšã¹ããæ£åžžã«ãã£ããããããæ®ã£ãŠããã®ã¯ãããããã§ãã¯ããããšã ãã§ãã æãç°¡åãªæ¹æ³ã¯ãçµã¿èŸŒã¿ã®WireMockããŒã«ã䜿çšããããšã§ãã
// , verify(3, postRequestedFor(urlMatching(".*callback.*")) .withRequestBody(matching("^status=.*")));
ããæè»ãªæ¹æ³ã¯ãå¿ èŠãªã¯ãšãªã®ãªã¹ããååŸããç¹å®ã®ãã©ã¡ãŒã¿ãŒãååŸãããããããã«ãã§ãã¯ãé©çšããããšã§ãã
List<LoggedRequest> all = findAll(allRequests()); assertThat(" 1 ", all, hasSize(greaterThan(0))); assertThat(" ", all.get(0).getBodyAsString(), containsString("Wow, it's callback!"));
Yandexã§ã®ä»çµã¿
äžèšã¯ãã¹ãŠãæ·±å»ãªäžè¬çãªã¢ãããŒãã§ãã å šäœãŸãã¯äžéšã®å€ãã®å Žæã§äœ¿çšã§ããŸãã çŸåšãçµ±åã¬ãã«ã§ã®ã¹ã¿ãã®äœ¿çšã¯ããµãŒãã¹ã®ããŸããŸãªæ©èœã眮ãæããå€ãã®å€§èŠæš¡ãããžã§ã¯ãã§ããŸãæ©èœããŠããŸãã ããšãã°ãYandexã«ã¯ããã¡ã€ã«ã«é¢ããæ å ±ãç¬ç«ããŠã§ã¯ãªãå¥ã®ãµãŒãã¹ãéããŠèšé²ãããã¡ã€ã«ã¢ããããŒããµãŒãã¹ããããŸãã ãã¡ã€ã«ã®ããŠã³ããŒããéå§ããŸãã-ãªã¯ãšã¹ããéä¿¡ããŸããã ããŒããããã«ãŠã³ãããããã§ãã¯ãµã -å¥ã®èŠæ±ã ãã¡ã€ã«ã®ãŠã€ã«ã¹ããã§ãã¯ãããã¡ã€ã«ã®æäœãç¶è¡ããæºåãã§ããŸãã-ãã1ã€ã§ãã 次ã®å段éã¯ãåã®æ®µéãžã®åçã«å¿ããŠç¶ç¶ããŸããããµãŒãã¹éã®æ¥ç¶æ°ã¯å¶éãããŸãã
ãªã¯ãšã¹ããæ¬åœã«ãªããªãããã¡ã€ã«ã«é¢ãããã¹ãŠã®æ å ±ãæ£ãã圢åŒã§å«ãŸããŠããããšã確èªããã«ã¯ã©ãããã°ããã§ããïŒ ãªã¯ãšã¹ãã¯åãå ¥ãããããå¿çããªãã£ãå Žåã«ã©ããªããã確èªããã«ã¯ã©ãããã°ããã§ããïŒ æåã«ãã€ãã³ãã®çºçãšããããžãã£ããªã·ããªãªã確èªããŸããããŒã¿ããŒã¹ã«æžã蟌ããµãŒãã¹ã人工çãªãã®ã«çœ®ãæãããã©ãã£ãã¯ãåä¿¡ããŠââåæããŸãã ïŒäžèšã®ã³ãŒãäŸã¯ããã¹ãã§è¡ãããããšã®ã³ããŒã§ããïŒã¹ãŒããŒãŠãŒã¶ãŒæš©éãæããªãèªåãã¹ãããããŒã«ã«ãã·ã³äžã®ç¹å®ã®ããŒãã«ãã€ã³ãã§ããããã«ãsshãä»ãããã³ãã«ãå¿ èŠã§ããããªã¯ãšã¹ããéä¿¡ãããã€ã³ãã¯ãç¶ç¶çã«ããŒã«ã«ã¢ãã¬ã¹ãšããŒãã§ãã
ããžãã£ããªã·ããªãªã®ãã¹ãã«æåããã®ã§ããã¬ãã£ããªãã®ã®ãã§ãã¯ãè¿œå ããããšã¯é£ãããããŸããã§ããã WireMockã®å¿çé 延æéããã¡ã€ã«ããŠã³ããŒããµãŒãã¹ã®åŸ æ©æéããã倧ããå€ã«å¢ããã ãã§ããªã¯ãšã¹ããéä¿¡ããããã®ããã€ãã®è©Šè¡ãéå§ããããšãã§ããŸããã
// , 61 //( 1) stubFor(any(urlMatching(".*")).willReturn(aResponse() .withFixedDelay((int) SECONDS.toMillis(61)) .withStatus(HttpStatus.OK_200).withBody("")));
120ç§ã§ç¢ºèªãã60ç§ã§ãµãŒãã¹ãžã®å¿çãåŸ ã£ãŠããéã«2ã€ã®èŠæ±ãå°çããéèŠãªç¬éã«ãã¡ã€ã«ããŠã³ããŒããµãŒãã¹ããã³ã°ããªãããšã確èªããŸããã
waitFor(120, SECONDS); verify(2, postRequestedFor(urlMatching(".*service/callback.*")) .withRequestBody(matching("^status_xml.*")));
ãã®ãããéçºè ã¯ãã®ãããªã€ãã³ãã®éçºãæ³å®ããŠããããã®ç¶æ³ã§ã¯ãã®å Žæã§ã¯ãããŠã³ããŒãã«é¢ããæ å ±ã¯å€±ãããŸããã åæ§ã«ãããããã®ãµãŒãã¹ã§ãã°ãèŠã€ãããŸããã ããã¯ããµãŒãã¹ãããã«å¿çãããªãå Žåãå€éšç£èŠãµãŒãã¹ã«ãã£ãŠåŒ·å¶çã«éãããããŸã§ãæ¥ç¶ãæ°æééãããŸãŸã«ãªããšããäºå®ã«ãããŸããã ããã«ãããçæéã§ãããã¯ãŒã¯ã«åé¡ãçºçããå Žåãæ¥ç¶å¶éãå®å šã«äœ¿ãæããããå¯èœæ§ããããä»ã®ã¯ã©ã€ã¢ã³ãã¯æ°æéåŸ æ©ããå¿ èŠããããŸãã 以åã«ããã確èªããã®ã¯è¯ãããšã§ã
ä»ã«äœãèšã䟡å€ããã
ãã®ã¢ãããŒãã«ã¯å€ãã®å¶éããããŸãã
- ãã·ã³ãžã®sshã¢ã¯ã»ã¹ãå¿ èŠã§ãã
- ãã®ãã·ã³ã§ããŒã転éãæå¹ã«ããå¿ èŠããããŸãã
- ããŒããååŸããŠã¹ã¿ãã«çœ®ãæããå¿ èŠãããå Žåã¯ããµãŒãã¹ãåæ¢ããå¿ èŠããããŸãã ããã¯ããŠãŒã¶ãŒããã¹ã¯ãŒããªãã§ãµãŒãã¹ãåæ¢ããæš©å©ãå¿ èŠãšããŠããããšãæå³ããŸãã ããã¯ã1024ãŸã§ã®çªå·ã®ããŒãã«ãé©çšãããŸãã
- äžéšã®çµç¹ã§ã¯ã管çè ã®èš±å¯ãªãã«ããŒãã転éã§ããŸããã
ããŒã«ã«ããŒã転é
ãªã¢ãŒãã«å ããŠã
-L
ã¹ã€ããã䜿çšããLOCALïŒããŒã«ã«ïŒããããŸãã ããã«ãããããŒã«ã«ãã·ã³ã®äžéšã®ããŒããåç §ããäžèšã®ãã©ãŒã¯ããã¡ã€ã¢ãŠã©ãŒã«ã®èåŸã«é ããããªã¢ãŒããã·ã³ã®å éšããŒãã«å°éã§ããŸãã ãã®ã¢ãããŒãã¯ãsshã䜿çšããŠãã¹ã察象ã®ãµãŒããŒã«å ¥ããcurlãwgetãåŒã³åºããã¹ãã®ä»£æ¿æ段ãšãªããŸãã
代æ¿æ¡
ãã¹ãã§ã¯ãWireMockã«å ããŠãã¢ããã°ãèå³æ·±ãå ŽåããããŸãïŒ github.com/jadler-mocking/jadlerãŸãã¯github.com/robfletcher/betamax