### Question:
Html5VideoService implements VideoService { @Override public Html5Series[] getSeriesByKeyword(Keyword keyword) throws VideoServiceException { Rss rss = getRssByKeyword(keyword); Html5Series[] retVal = createSeriesArray(rss); return retVal; } Html5VideoService();  Html5VideoService(String username, String password);  Html5VideoService(HttpClient httpClient);  Html5VideoService(HttpClient httpClient, String username, String password); @Override Series[] getAllSeries(); @Override Series getSeries(int seriesId); @Override Series[] getSeries(int... seriesId); @Override Html5Series[] getSeriesByKeyword(Keyword keyword); @Override Series[] getSeriesByAlpha(AlphaKeyword alphaKeyword); @Override Series[] getSeriesByCategory(Category category); @Override Episode[] getEpisodesByKeyword(Keyword keyword); Rss getRssByKeyword(Keyword keyword); Rss getRssByAlpha(AlphaKeyword keyword); @Override Html5Series[] search(String searchQuery); @Override boolean authenticate(Episode episode, Profile profile); @Override URI getUrlForEpisode(Episode episode, Profile profile, Map<String, String> additionalRequestHeaders);  }### Answer:
@Test @Ignore public void testGetSeriesByKeyword() throws VideoServiceException { Html5VideoService service = new Html5VideoService(); CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = new CountDownLatch(3); AVRunnable avr1 = new AVRunnable(service, Keyword.FEATURED, startSignal, doneSignal); AVRunnable avr2 = new AVRunnable(service, Keyword.LAST_CHANCE, startSignal, doneSignal); AVRunnable avr3 = new AVRunnable(service, Keyword.RECENT, startSignal, doneSignal); new Thread(avr1).start(); new Thread(avr2).start(); new Thread(avr3).start(); startSignal.countDown(); Uninterruptibles.awaitUninterruptibly(doneSignal); assertNotNull(avr1.response); assertNotNull(avr2.response); assertNotNull(avr3.response); }