Skip to content

Commit c46b4b7

Browse files
committed
Clean up experiment
1 parent 7f889a7 commit c46b4b7

File tree

1 file changed

+50
-153
lines changed

1 file changed

+50
-153
lines changed

src/tc/actions/tunnel_key.rs

Lines changed: 50 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ pub enum TcActionTunnelKeyOption {
192192
KeyEncTos(u8),
193193
/// Encapsulation TTL.
194194
KeyEncTtl(u8),
195-
/// Flag which indicated that the "do not fragment" bit should be set in
195+
/// Flag which indicates that the "do not fragment" bit should be set in
196196
/// the outer header.
197197
KeyNoFrag,
198198
/// Other option unknown at the time of writing.
@@ -363,8 +363,6 @@ fn parse_ipv6(data: &[u8]) -> Result<Ipv6Addr, DecodeError> {
363363

364364
#[cfg(test)]
365365
mod tests {
366-
use std::fmt::Debug;
367-
368366
use crate::tc::TcActionAttribute::Kind;
369367
use crate::tc::TcActionMessageAttribute::Actions;
370368
use crate::tc::TcTunnelKeyAction::{Release, Set};
@@ -377,90 +375,6 @@ mod tests {
377375

378376
use super::*;
379377

380-
trait ParseBuffer {
381-
fn parse_buffer(buf: Vec<u8>) -> Self;
382-
}
383-
384-
trait SerializeToBuffer {
385-
fn serialize_to_buffer(&self) -> Vec<u8>;
386-
}
387-
388-
trait AssertParsesFrom {
389-
fn assert_parses_from(&self, serialized: Vec<u8>);
390-
}
391-
392-
trait AssertSerializesTo {
393-
fn assert_serializes_to(&self, serialized: Vec<u8>);
394-
}
395-
396-
trait AssertSerThenParse {
397-
fn assert_ser_then_parse(&self);
398-
}
399-
400-
trait AssertParseThenSer {
401-
fn assert_parse_then_ser(serialized: Vec<u8>);
402-
}
403-
404-
impl<Message> AssertSerThenParse for Message
405-
where
406-
Message: SerializeToBuffer + ParseBuffer + Debug + Eq,
407-
{
408-
fn assert_ser_then_parse(&self) {
409-
let serialized = self.serialize_to_buffer();
410-
let parsed = Message::parse_buffer(serialized);
411-
assert_eq!(parsed, *self);
412-
}
413-
}
414-
415-
impl<Message> AssertParseThenSer for Message
416-
where
417-
Message: SerializeToBuffer + ParseBuffer + Debug + Eq,
418-
{
419-
fn assert_parse_then_ser(serialized: Vec<u8>) {
420-
let parsed = Message::parse_buffer(serialized.clone());
421-
let reserialized = parsed.serialize_to_buffer();
422-
assert_eq!(reserialized, serialized);
423-
}
424-
}
425-
426-
impl<Message> AssertParsesFrom for Message
427-
where
428-
Message: ParseBuffer + Debug + Eq,
429-
{
430-
fn assert_parses_from(&self, serialized: Vec<u8>) {
431-
assert_eq!(self, &Message::parse_buffer(serialized));
432-
}
433-
}
434-
435-
impl<Message> AssertSerializesTo for Message
436-
where
437-
Message: SerializeToBuffer + Debug + Eq,
438-
{
439-
fn assert_serializes_to(&self, serialized: Vec<u8>) {
440-
assert_eq!(self.serialize_to_buffer(), serialized);
441-
}
442-
}
443-
444-
impl<Message> SerializeToBuffer for Message
445-
where
446-
Message: Emitable,
447-
{
448-
fn serialize_to_buffer(&self) -> Vec<u8> {
449-
let mut buffer = vec![0; self.buffer_len()];
450-
self.emit(&mut buffer);
451-
buffer
452-
}
453-
}
454-
455-
impl ParseBuffer for TcActionMessage {
456-
fn parse_buffer(buf: Vec<u8>) -> TcActionMessage {
457-
TcActionMessage::parse(
458-
&TcActionMessageBuffer::new_checked(&buf).unwrap(),
459-
)
460-
.unwrap()
461-
}
462-
}
463-
464378
mod list {
465379
use crate::tc::TcActionAttribute;
466380
use crate::tc::TcActionAttribute::{InHwCount, Options, Stats};
@@ -472,12 +386,33 @@ mod tests {
472386

473387
use super::*;
474388

475-
const LIST_REQUEST: &str = "0000000018000100140001000f00010074756e6e656c5f6b657900000c0002000100000001000000";
476-
fn reference_list_request_serialized() -> Vec<u8> {
477-
hex::decode(LIST_REQUEST).unwrap()
389+
struct EquivalentMessage<T> {
390+
pub serialized: Vec<u8>,
391+
pub deserialized: T,
392+
}
393+
394+
impl EquivalentMessage<TcActionMessage> {
395+
pub fn assert_serialized_parses_to_deserialized(&self) {
396+
let parsed = TcActionMessage::parse(
397+
&TcActionMessageBuffer::new_checked(&self.serialized)
398+
.unwrap(),
399+
)
400+
.unwrap();
401+
assert_eq!(parsed, self.deserialized);
402+
}
403+
404+
pub fn assert_deserialized_serializes_to_serialized(&self) {
405+
let mut buf = vec![0; self.serialized.len()];
406+
self.deserialized.emit(&mut buf);
407+
assert_eq!(self.serialized, buf);
408+
}
478409
}
479-
fn list_request() -> TcActionMessage {
480-
TcActionMessage {
410+
411+
fn reference_message_list_request() -> EquivalentMessage<TcActionMessage>
412+
{
413+
const LIST_REQUEST: &str = "0000000018000100140001000f00010074756e6e656c5f6b657900000c0002000100000001000000";
414+
let serialized = hex::decode(LIST_REQUEST).unwrap();
415+
let deserialized = TcActionMessage {
481416
header: TcActionMessageHeader {
482417
family: AddressFamily::Unspec,
483418
},
@@ -493,15 +428,18 @@ mod tests {
493428
},
494429
),
495430
],
431+
};
432+
EquivalentMessage {
433+
serialized,
434+
deserialized,
496435
}
497436
}
498437

499-
const LIST_RESPONSE: &str = "000000000800030001000000dc000100d80000000f00010074756e6e656c5f6b6579000044000400140001000000000000000000000000000000000014000700000000000000000000000000000000001800030000000000000000000000000000000000000000000c000900000000000300000008000a00000000006c0002001c0002000100000000000000030000000100000000000000010000000800070000000bb808000300ac12010108000400ac1201040600090012b5000005000a000100000024000100e3a5800000000000e3a580000000000000000000000000000000000000000000";
500-
fn reference_list_response_serialized() -> Vec<u8> {
501-
hex::decode(LIST_RESPONSE).unwrap()
502-
}
503-
fn list_response() -> TcActionMessage {
504-
TcActionMessage {
438+
fn reference_message_list_response(
439+
) -> EquivalentMessage<TcActionMessage> {
440+
const LIST_RESPONSE: &str = "000000000800030001000000dc000100d80000000f00010074756e6e656c5f6b6579000044000400140001000000000000000000000000000000000014000700000000000000000000000000000000001800030000000000000000000000000000000000000000000c000900000000000300000008000a00000000006c0002001c0002000100000000000000030000000100000000000000010000000800070000000bb808000300ac12010108000400ac1201040600090012b5000005000a000100000024000100e3a5800000000000e3a580000000000000000000000000000000000000000000";
441+
let serialized = hex::decode(LIST_RESPONSE).unwrap();
442+
let deserialized = TcActionMessage {
505443
header: TcActionMessageHeader {
506444
family: AddressFamily::Unspec,
507445
},
@@ -580,83 +518,42 @@ mod tests {
580518
],
581519
}]),
582520
],
521+
};
522+
EquivalentMessage {
523+
serialized,
524+
deserialized,
583525
}
584526
}
585527

586528
#[test]
587529
fn parses_reference_request() {
588-
list_request()
589-
.assert_parses_from(reference_list_request_serialized());
530+
reference_message_list_request()
531+
.assert_serialized_parses_to_deserialized();
590532
}
591533

592534
#[test]
593535
fn serializes_to_reference_request() {
594-
list_request()
595-
.assert_serializes_to(reference_list_request_serialized());
536+
reference_message_list_request()
537+
.assert_deserialized_serializes_to_serialized();
596538
}
597539

598540
#[test]
599541
fn parses_reference_response() {
600-
list_response()
601-
.assert_parses_from(reference_list_response_serialized());
542+
reference_message_list_response()
543+
.assert_serialized_parses_to_deserialized();
602544
}
603545

604546
#[test]
605547
fn serializes_to_reference_response() {
606-
list_response()
607-
.assert_serializes_to(reference_list_response_serialized());
608-
}
609-
610-
#[test]
611-
fn ser_then_parse_reference_request() {
612-
list_request().assert_ser_then_parse();
613-
}
614-
615-
#[test]
616-
fn parse_then_ser_reference_request() {
617-
TcActionMessage::assert_parse_then_ser(
618-
reference_list_request_serialized(),
619-
);
548+
reference_message_list_response()
549+
.assert_deserialized_serializes_to_serialized();
620550
}
621551
}
622552

623-
// #[test]
624-
// fn parse_reference_request() {
625-
// let serialized = list::Request.serialized();
626-
// let parsed = list::Request.parse_buffer(serialized);
627-
// assert_eq!(parsed, list::Request.deserialized());
628-
// }
629-
//
630-
// #[test]
631-
// fn serialize_reference_request() {
632-
// let deserialized = list::Request.deserialized();
633-
// let serialized = list::Request.serialized();
634-
// let mut buffer: Vec<u8> =
635-
// std::iter::repeat(0).take(serialized.len()).collect();
636-
// deserialized.emit(&mut buffer);
637-
// assert_eq!(buffer, serialized);
638-
// }
639-
//
640-
// #[test]
641-
// fn parse_reference_reply() {
642-
// use TcActionAttribute::*;
643-
// use TcActionMessageAttribute::*;
644-
// use TcActionTunnelKeyOption::*;
645-
// let data = list::Response.serialized();
646-
// let science = TcActionMessageBuffer::new_checked(&data).unwrap();
647-
// let parsed = TcActionMessage::parse_buffer(&science).unwrap();
648-
//
649-
// let expected = ;
650-
// assert_eq!(parsed, expected);
651-
// }
652-
653553
#[test]
654554
fn u32_from_tunnel_key_action_is_faithful_to_spec() {
655555
assert_eq!(TCA_TUNNEL_KEY_ACT_SET, u32::from(Set));
656-
assert_eq!(
657-
TCA_TUNNEL_KEY_ACT_RELEASE,
658-
u32::from(TcTunnelKeyAction::Release)
659-
);
556+
assert_eq!(TCA_TUNNEL_KEY_ACT_RELEASE, u32::from(Release));
660557
let arbitrary_value = 42;
661558
assert_eq!(
662559
arbitrary_value,
@@ -705,7 +602,7 @@ mod tests {
705602
index: 4,
706603
refcnt: 5,
707604
},
708-
tunnel_key_action: TcTunnelKeyAction::Release,
605+
tunnel_key_action: Release,
709606
};
710607
let mut bytes = vec![0; params.buffer_len()];
711608
params.emit(&mut bytes);

0 commit comments

Comments
 (0)