@Override public synchronized void stop() { close(); Log.i(TAG, "Shutting down"); }
@Test public void testOutputFormat() throws JSONException, DataSinkException { VehicleMessage measurement = new SimpleVehicleMessage(measurementId, value); sink.receive(measurement); sink.flush(); JSONObject message; message = new JSONObject(outputString.toString()); assertTrue(message.getString("name").equals(measurementId)); assertTrue(message.getString("value").equals(value)); }
@Before public void setUp() throws IOException, DataSinkException { outputString = new StringWriter(); opener = new MockFileOpener(); sink = new FileRecorderSink(opener); }
@Test public void testStop() throws DataSinkException { VehicleMessage measurement = new SimpleVehicleMessage("first", true); sink.receive(measurement); measurement = new SimpleVehicleMessage("second", false); sink.receive(measurement); sink.stop(); measurement = new SimpleVehicleMessage("third", true); try { sink.receive(measurement); fail("Expected a DataSinkException"); } catch(DataSinkException e) { } String[] records = outputString.toString().split("\n"); assertEquals(2, records.length); assertTrue(records[0].indexOf("first") != -1); assertTrue(records[1].indexOf("second") != -1); }
@Override public synchronized void receive(VehicleMessage message) throws DataSinkException { if(mLastMessageReceived == null || Calendar.getInstance().getTimeInMillis() - mLastMessageReceived.getTimeInMillis() > INTER_TRIP_THRESHOLD_MINUTES * 60 * 1000) { Log.i(TAG, "Detected a new trip, splitting recorded trace file"); try { openTimestampedFile(); } catch(IOException e) { throw new DataSinkException( "Unable to open file for recording", e); } } if(mWriter == null) { throw new DataSinkException( "No valid writer - not recording trace line"); } mLastMessageReceived = Calendar.getInstance(); try { mWriter.write(JsonFormatter.serialize(message)); mWriter.newLine(); } catch(IOException e) { throw new DataSinkException("Unable to write message to file"); } }
@Test public void testReceiveValueOnly() throws DataSinkException { assertTrue(outputString.toString().indexOf(measurementId) == -1); sink.receive(new SimpleVehicleMessage(measurementId, value)); sink.flush(); assertTrue(outputString.toString().indexOf(measurementId) != -1); assertTrue(outputString.toString().indexOf(value) != -1); }
private void setFileRecordingStatus(boolean enabled) { Log.i(TAG, "Setting recording to " + enabled); if(enabled) { String directory = getPreferenceString(R.string.recording_directory_key); if(directory != null) { if(mFileRecorder == null || !mCurrentDirectory.equals(directory)) { mCurrentDirectory = directory; stopRecording(); mFileRecorder = new FileRecorderSink( new AndroidFileOpener(directory)); getVehicleManager().addSink(mFileRecorder); } } else { Log.d(TAG, "No recording base directory set (" + directory + "), not starting recorder"); } } else { stopRecording(); } }
@Test public void testCounts() throws JSONException, DataSinkException { VehicleMessage measurement = new SimpleVehicleMessage("first", true); sink.receive(measurement); measurement = new SimpleVehicleMessage("first", false); sink.receive(measurement); measurement = new SimpleVehicleMessage("second", true); sink.receive(measurement); measurement = new SimpleVehicleMessage("second", true); sink.receive(measurement); sink.flush(); String[] records = outputString.toString().split("\n"); assertEquals(4, records.length); assertTrue(records[0].indexOf("first") != -1); assertTrue(records[1].indexOf("first") != -1); assertTrue(records[2].indexOf("second") != -1); assertTrue(records[3].indexOf("second") != -1); }
private synchronized void openTimestampedFile() throws IOException { Calendar calendar = Calendar.getInstance(); String filename = sDateFormatter.format( calendar.getTime()) + ".json"; if(mWriter != null) { close(); } mWriter = mFileOpener.openForWriting(filename); Log.i(TAG, "Opened trace file " + filename + " for writing"); } }