()
| 3836 | |
| 3837 | #[test] |
| 3838 | fn encode_prefix_write_error() { |
| 3839 | use crate::codec::AvroFieldBuilder; |
| 3840 | use crate::schema::{AvroSchema, FingerprintAlgorithm}; |
| 3841 | use std::io; |
| 3842 | |
| 3843 | struct FailWriter { |
| 3844 | failed: bool, |
| 3845 | } |
| 3846 | |
| 3847 | impl io::Write for FailWriter { |
| 3848 | fn write(&mut self, _buf: &[u8]) -> io::Result<usize> { |
| 3849 | if !self.failed { |
| 3850 | self.failed = true; |
| 3851 | Err(io::Error::other("fail write")) |
| 3852 | } else { |
| 3853 | Ok(0) |
| 3854 | } |
| 3855 | } |
| 3856 | |
| 3857 | fn flush(&mut self) -> io::Result<()> { |
| 3858 | Ok(()) |
| 3859 | } |
| 3860 | } |
| 3861 | |
| 3862 | let schema = ArrowSchema::new(vec![Field::new("x", DataType::Int32, false)]); |
| 3863 | let arr = Int32Array::from(vec![42]); |
| 3864 | let batch = RecordBatch::try_new(Arc::new(schema.clone()), vec![Arc::new(arr)]).unwrap(); |
| 3865 | let avro_schema = AvroSchema::try_from(&schema).unwrap(); |
| 3866 | let fingerprint = avro_schema |
| 3867 | .fingerprint(FingerprintAlgorithm::Rabin) |
| 3868 | .unwrap(); |
| 3869 | let avro_root = AvroFieldBuilder::new(&avro_schema.schema().unwrap()) |
| 3870 | .build() |
| 3871 | .unwrap(); |
| 3872 | let encoder = RecordEncoderBuilder::new(&avro_root, &schema) |
| 3873 | .with_fingerprint(Some(fingerprint)) |
| 3874 | .build() |
| 3875 | .unwrap(); |
| 3876 | |
| 3877 | let mut writer = FailWriter { failed: false }; |
| 3878 | let err = encoder.encode(&mut writer, &batch).unwrap_err(); |
| 3879 | let msg = format!("{err}"); |
| 3880 | assert!(msg.contains("write prefix"), "unexpected error: {msg}"); |
| 3881 | } |
| 3882 | } |
nothing calls this directly
no test coverage detected