From 71d268c7c4cd187ae62476c75c0bd5f84fb81462 Mon Sep 17 00:00:00 2001 From: bojanserafimov Date: Thu, 3 Nov 2022 10:24:15 -0400 Subject: [PATCH] Write message serialization test (#2746) --- libs/pageserver_api/src/models.rs | 64 +++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/libs/pageserver_api/src/models.rs b/libs/pageserver_api/src/models.rs index 3453f9672a..e5bd46f260 100644 --- a/libs/pageserver_api/src/models.rs +++ b/libs/pageserver_api/src/models.rs @@ -226,6 +226,7 @@ pub struct TimelineGcRequest { } // Wrapped in libpq CopyData +#[derive(PartialEq, Eq)] pub enum PagestreamFeMessage { Exists(PagestreamExistsRequest), Nblocks(PagestreamNblocksRequest), @@ -242,21 +243,21 @@ pub enum PagestreamBeMessage { DbSize(PagestreamDbSizeResponse), } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] pub struct PagestreamExistsRequest { pub latest: bool, pub lsn: Lsn, pub rel: RelTag, } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] pub struct PagestreamNblocksRequest { pub latest: bool, pub lsn: Lsn, pub rel: RelTag, } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] pub struct PagestreamGetPageRequest { pub latest: bool, pub lsn: Lsn, @@ -264,7 +265,7 @@ pub struct PagestreamGetPageRequest { pub blkno: u32, } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] pub struct PagestreamDbSizeRequest { pub latest: bool, pub lsn: Lsn, @@ -427,3 +428,58 @@ impl PagestreamBeMessage { bytes.into() } } + +#[cfg(test)] +mod tests { + use bytes::Buf; + + use super::*; + + #[test] + fn test_pagestream() { + // Test serialization/deserialization of PagestreamFeMessage + let messages = vec![ + PagestreamFeMessage::Exists(PagestreamExistsRequest { + latest: true, + lsn: Lsn(4), + rel: RelTag { + forknum: 1, + spcnode: 2, + dbnode: 3, + relnode: 4, + }, + }), + PagestreamFeMessage::Nblocks(PagestreamNblocksRequest { + latest: false, + lsn: Lsn(4), + rel: RelTag { + forknum: 1, + spcnode: 2, + dbnode: 3, + relnode: 4, + }, + }), + PagestreamFeMessage::GetPage(PagestreamGetPageRequest { + latest: true, + lsn: Lsn(4), + rel: RelTag { + forknum: 1, + spcnode: 2, + dbnode: 3, + relnode: 4, + }, + blkno: 7, + }), + PagestreamFeMessage::DbSize(PagestreamDbSizeRequest { + latest: true, + lsn: Lsn(4), + dbnode: 7, + }), + ]; + for msg in messages { + let bytes = msg.serialize(); + let reconstructed = PagestreamFeMessage::parse(&mut bytes.reader()).unwrap(); + assert!(msg == reconstructed); + } + } +}