/** * Add additional bytes to the buffer from the data source. * * @param bytes an array of bytes received from the interface. * @param length number of bytes received, and thus the amount that should * be read from the array. */ public void receive(byte[] bytes, int length) { mBytesReceived += length; logTransferStats(); }
@Override public void receive(byte[] bytes, int length) { super.receive(bytes, length); mBuffer.write(bytes, 0, length); } }
@Override public VehicleMessage parseNextMessage() { String line = readToDelimiter(); if(line != null) { try { return JsonFormatter.deserialize(line); } catch(UnrecognizedMessageTypeException e) { Log.w(TAG, "Unable to deserialize JSON", e); } } return null; }
@Test public void deserializeSerialized() throws SerializationException { byte[] data = streamer.serializeForStream(message); streamer.receive(data, data.length); VehicleMessage deserialized = streamer.parseNextMessage(); assertEquals(message, deserialized); }
@Test public void deserializeSerialized() { byte[] data = streamer.serializeForStream(message); streamer.receive(data, data.length); VehicleMessage deserialized = streamer.parseNextMessage(); assertEquals(message, deserialized); }
@Test public void paritalJsonDoesntContainJson() { assertFalse(JsonStreamer.containsJson("{\"name\": \"foo\"}\u0000\u0001\u0002")); }
public void receive(VehicleMessage command) throws DataSinkException { if(isConnected()) { VehicleMessageStreamer streamer; synchronized(this) { streamer = mStreamHandler; if(streamer == null) { // See https://github.com/openxc/openxc-android/issues/181 streamer = new JsonStreamer(); Log.i(getTag(), "Payload format unknown, guessing JSON"); } } try { if(!write(streamer.serializeForStream(command))) { throw new DataSinkException("Unable to send command"); } } catch(SerializationException e) { throw new DataSinkException( "Unable to serialize command for sending", e); } } else { throw new DataSinkException("Not connected"); } }
@Before public void setup() { streamer = new JsonStreamer(); }
@Before public void setup() { streamer = new BinaryStreamer(); }
@Test public void deserializeBadLengthReturnsNull() throws SerializationException { byte[] data = new byte[]{0,1,2,3,4}; streamer.receive(data, data.length); assertThat(streamer.parseNextMessage(), nullValue()); }
@Test public void emptyHasNoMessages() { assertThat(streamer.parseNextMessage(), nullValue()); }
@Test public void emptyHasNoMessages() { assertThat(streamer.parseNextMessage(), nullValue()); }
@Test(expected=SerializationException.class) public void serializeEmptyFails() throws SerializationException { streamer.serializeForStream(new VehicleMessage()); }
@Test public void logTransferStatsAfterMegabyte() throws SerializationException { byte[] data = streamer.serializeForStream(message); for(int i = 0; i < 10000; i++) { streamer.receive(data, data.length); } for(int i = 0; i < 10000; i++) { VehicleMessage deserialized = streamer.parseNextMessage(); assertEquals(message, deserialized); } } }
@Test public void logTransferStatsAfterMegabyte() { byte[] data = streamer.serializeForStream(message); for(int i = 0; i < 10000; i++) { streamer.receive(data, data.length); } for(int i = 0; i < 10000; i++) { VehicleMessage deserialized = streamer.parseNextMessage(); assertEquals(message, deserialized); } } }
@Test public void notJsonDoesntContainJson() { assertFalse(JsonStreamer.containsJson("\u0000\u0001\u0002")); }
@Override public void receive(byte[] bytes, int length) { super.receive(bytes, length); // Creating a new String object for each message causes the // GC to go a little crazy, but I don't see another obvious way // of converting the byte[] to something the StringBuilder can // accept (either char[] or String). See #151. mBuffer.append(new String(bytes, 0, length)); }
@Test public void receiveLessThanFullBufferDoesntGrabAll() throws SerializationException { byte[] serialized = streamer.serializeForStream(message); streamer.receive(serialized, serialized.length / 2); assertThat(streamer.parseNextMessage(), nullValue()); }
@Test public void jsonContainsJson() { assertTrue(JsonStreamer.containsJson("{\"name\": \"foo\"}\u0000")); }
@Test public void readLinesOne() throws SerializationException { byte[] serialized = streamer.serializeForStream(message); streamer.receive(serialized, serialized.length); VehicleMessage deserialized = streamer.parseNextMessage(); assertThat(deserialized, notNullValue()); assertThat(deserialized, instanceOf(NamedVehicleMessage.class)); NamedVehicleMessage deserializedMessage = (NamedVehicleMessage) deserialized; assertThat(message, equalTo(deserializedMessage)); assertThat(streamer.parseNextMessage(), nullValue()); }