diff --git a/aeron-rs/src/client/concurrent/ringbuffer.rs b/aeron-rs/src/client/concurrent/ringbuffer.rs index d471e9d..35ba3ce 100644 --- a/aeron-rs/src/client/concurrent/ringbuffer.rs +++ b/aeron-rs/src/client/concurrent/ringbuffer.rs @@ -430,31 +430,6 @@ mod tests { assert_eq!(write_start, 16); } - #[test] - fn write_basic() { - let mut ring_buffer = - ManyToOneRingBuffer::new(vec![0u8; BUFFER_SIZE]).expect("Invalid buffer size"); - - let source_bytes = &mut [12u8, 0, 0, 0][..]; - let source_len = source_bytes.len() as IndexT; - let type_id = 1; - ring_buffer - .write(type_id, &source_bytes, 0, source_len) - .unwrap(); - - let record_len = source_len + record_descriptor::HEADER_LENGTH; - assert_eq!( - ring_buffer.get_i64_volatile(0).unwrap(), - record_descriptor::make_header(record_len, type_id) - ); - assert_eq!( - ring_buffer - .get_i64_volatile(size_of::() as IndexT) - .unwrap(), - 12 - ); - } - #[test] fn read_basic() { // Similar to write basic, put something into the buffer diff --git a/aeron-rs/tests/many_to_one_ring_buffer.rs b/aeron-rs/tests/many_to_one_ring_buffer.rs index b33af25..cab2e4a 100644 --- a/aeron-rs/tests/many_to_one_ring_buffer.rs +++ b/aeron-rs/tests/many_to_one_ring_buffer.rs @@ -155,3 +155,28 @@ fn should_insert_padding_record_plus_message_on_buffer_wrap() { Ok((tail + aligned_record_length + record_descriptor::ALIGNMENT) as i64) ); } + +#[test] +fn should_insert_padding_record_plus_message_on_buffer_wrap_with_head_equal_to_tail() { + let length: IndexT = 100; + let record_length: IndexT = length + record_descriptor::HEADER_LENGTH; + let aligned_record_length: IndexT = align(record_length as usize, record_descriptor::ALIGNMENT as usize) as IndexT; + let tail: IndexT = CAPACITY as IndexT - record_descriptor::ALIGNMENT; + let head: IndexT = tail; + let src_index: IndexT = 0; + + let mut buffer = ManyToOneRingBuffer::new(vec![0u8; BUFFER_SZ]).unwrap(); + buffer.put_i64(HEAD_COUNTER_INDEX, head as i64).unwrap(); + buffer.put_i64(TAIL_COUNTER_INDEX, tail as i64).unwrap(); + + let src_bytes = vec![0u8; BUFFER_SZ]; + let write_res = buffer.write(MSG_TYPE_ID, &src_bytes, src_index, length); + assert_eq!(write_res, Ok(true)); + + assert_eq!(buffer.get_i32(record_descriptor::type_offset(tail)), Ok(record_descriptor::PADDING_MSG_TYPE_ID)); + assert_eq!(buffer.get_i32(record_descriptor::length_offset(tail)), Ok(record_descriptor::ALIGNMENT)); + + assert_eq!(buffer.get_i32(record_descriptor::length_offset(0)), Ok(record_length)); + assert_eq!(buffer.get_i32(record_descriptor::type_offset(0)), Ok(MSG_TYPE_ID)); + assert_eq!(buffer.get_i64(TAIL_COUNTER_INDEX), Ok((tail + aligned_record_length + record_descriptor::ALIGNMENT) as i64)); +} \ No newline at end of file