### Question:
GCalScheduleUpdater extends GCalScheduleUpdaterBase { @Override public Map<Thermostat, SortedMap<Period, ZoneStatus>> update() throws IOException { ThreadContext.push("update"); Marker m = new Marker("update"); Map<Thermostat, SortedMap<Period, ZoneStatus>> ts2schedule = new TreeMap<Thermostat, SortedMap<Period, ZoneStatus>>(); try { HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory(new File(System.getProperty("user.home"), STORED_CREDENTIALS)); m.checkpoint("instantiated tools"); Credential credential = authorize(httpTransport, jsonFactory, dataStoreFactory); m.checkpoint("authorized"); credential.setExpiresInSeconds(60L * 60L * 24L * 365L); Calendar calendarClient = new Calendar.Builder(httpTransport, jsonFactory, credential).setApplicationName(LITERAL_APP_NAME).build(); m.checkpoint("instantiated client"); CalendarList feed = calendarClient.calendarList().list().execute(); List<CalendarListEntry> calendars = feed.getItems(); m.checkpoint("retrieved feed"); logger.info(calendars.size() + " calendars found:"); for (Iterator<CalendarListEntry> i = calendars.iterator(); i.hasNext(); ) { CalendarListEntry c = i.next(); logger.info(" calendar: " + c.getSummary()); } m.checkpoint("retrieved summary"); for (Iterator<CalendarListEntry> i = calendars.iterator(); i.hasNext(); ) { CalendarListEntry calendar = i.next(); updateCalendar(ts2schedule, calendarClient, calendar); } ThreadContext.push("schedule"); for (Iterator<Entry<Thermostat, SortedMap<Period, ZoneStatus>>> i = ts2schedule.entrySet().iterator(); i.hasNext(); ) { Entry<Thermostat, SortedMap<Period, ZoneStatus>> pair = i.next(); logger.info(pair.getKey().getName() + ": " + pair.getValue().size() + " entries"); for (Iterator<Entry<Period, ZoneStatus>> i2 = pair.getValue().entrySet().iterator(); i2.hasNext(); ) { logger.info(" " + i2.next()); } } ThreadContext.pop(); return ts2schedule; } catch (GeneralSecurityException ex) { throw new IllegalStateException("Oops", ex); } finally { m.close(); ThreadContext.pop(); } } GCalScheduleUpdater(Map<Thermostat, String> ts2source); @Override Map<Thermostat, SortedMap<Period, ZoneStatus>> update();  }### Answer:
@Ignore @Test public void testDST() { ThreadContext.push("testDST"); Marker m = new Marker("testDST"); try { Map<Thermostat, String> ts2source = new TreeMap<Thermostat, String>(); Thermostat ts1 = new NullThermostat("DZ Test Case: DST Test (with DST)"); ts2source.put(ts1, ts1.getName()); logger.info("Targets: " + ts2source); ScheduleUpdater updater = new GCalScheduleUpdater(ts2source); long start = System.currentTimeMillis(); Map<Thermostat, SortedMap<Period, ZoneStatus>> schedule = updater.update(); logger.info("Took " + (System.currentTimeMillis() - start) + "ms to complete"); logger.info("Schedule retrieved: " + schedule); SortedMap<Period, ZoneStatus> events = schedule.values().iterator().next(); testEvents(events); } catch (AssertionFailedError ex) { throw ex; } catch (Throwable t) { logger.error("Oops", t); fail("Unexpected exception, see logs"); } finally { m.close(); ThreadContext.pop(); } }