package birdwhisperer import ( "testing" ) func TestPruningChunkRecord(t *testing.T) { bw := NewBirdWhisperer() incompleteMessageNotExpired := ReconstructedMessage{ ReceivedTime: 195_000, // "Just started" CompletedTime: 0, NumChunks: 2, ReceivedChunks: 1, } incompleteMessageExpired := ReconstructedMessage{ ReceivedTime: 100, // Started a long time ago CompletedTime: 0, NumChunks: 2, ReceivedChunks: 1, } completeMessageNotExpired := ReconstructedMessage{ ReceivedTime: 100, CompletedTime: 199_000, // "Just finished" NumChunks: 2, ReceivedChunks: 2, } completeMessageExpired := ReconstructedMessage{ ReceivedTime: 100, CompletedTime: 10_000, // Finished a long time ago NumChunks: 2, ReceivedChunks: 2, } bw.ChunkRecord[0] = incompleteMessageNotExpired bw.ChunkRecord[1] = incompleteMessageExpired bw.ChunkRecord[2] = completeMessageNotExpired bw.ChunkRecord[3] = completeMessageExpired bw.PruneChunkRecord(200_000) if _, exists := bw.ChunkRecord[0]; !exists { t.Errorf("Pruned an incomplete message that hasn't expired yet") } if _, exists := bw.ChunkRecord[1]; exists { t.Errorf("Didn't prune an incomplete message that expired") } if _, exists := bw.ChunkRecord[2]; !exists { t.Errorf("Pruned an complete message that hasn't expired yet") } if _, exists := bw.ChunkRecord[3]; exists { t.Errorf("Didn't prune an incomplete message that expired") } } func TestChunkMessageSingleChunk(t *testing.T) { messageId := uint16(123) message := make([]byte, CHUNK_MAX_LENGTH-1) chunks := ChunkMessage(message, messageId) if len(chunks) != 1 { t.Errorf("A message that should be 1 chunk is actually %d chunks", len(chunks)) } } func TestChunkMessageMultipleChunks(t *testing.T) { messageId := uint16(123) message := make([]byte, CHUNK_MAX_LENGTH*2) chunks := ChunkMessage(message, messageId) if len(chunks) != 2 { t.Errorf("A message that should be 2 chunks is actually %d chunks", len(chunks)) } } func TestChunkMessageMultipleChunksAndSome(t *testing.T) { messageId := uint16(123) extraDataLen := 1 message := make([]byte, CHUNK_MAX_LENGTH*2+extraDataLen) chunks := ChunkMessage(message, messageId) if len(chunks) != 3 { t.Errorf("A message that should be 3 chunks is actually %d chunks", len(chunks)) } const expectedChunkLength = CHUNK_MAX_LENGTH + CHUNK_V1_HEADER_LENGTH if len(chunks[0]) != expectedChunkLength { t.Errorf("Chunk 0 should be %d, is %d", expectedChunkLength, len(chunks[0])) } if len(chunks[1]) != expectedChunkLength { t.Errorf("Chunk 1 should be %d, is %d", expectedChunkLength, len(chunks[1])) } if len(chunks[2]) != extraDataLen+CHUNK_V1_HEADER_LENGTH { t.Errorf("Chunk 2 should be %d, is %d", extraDataLen+CHUNK_V1_HEADER_LENGTH, len(chunks[2])) } }