2022-11-05 16:48:47 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-11-05 16:04:42 +00:00
|
|
|
require_relative '../lib/chunk'
|
|
|
|
|
|
|
|
describe 'NetChunk', :net_chunk do
|
|
|
|
context 'Create vital header' do
|
|
|
|
it 'Should set the vital flag' do
|
2022-11-12 09:13:29 +00:00
|
|
|
expect(NetChunk.create_header(vital: true, size: 20, seq: 5)).to eq([64, 20, 5])
|
2022-11-05 16:04:42 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'BigChungusTheChunkGetter', :chunk_getter do
|
|
|
|
context 'Single chunk' do
|
|
|
|
it 'Should count one motd chunk correctly' do
|
|
|
|
# handcrafted fake packet
|
|
|
|
# one empty motd chunks
|
|
|
|
data = [
|
|
|
|
0x40, 0x02, 0x02, 0x02, 0x00
|
2022-11-05 16:19:05 +00:00
|
|
|
].pack('C*')
|
2022-11-05 16:04:42 +00:00
|
|
|
chunks = BigChungusTheChunkGetter.get_chunks(data)
|
|
|
|
expect(chunks.size).to eq(1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'Multiple chunks' do
|
|
|
|
it 'Should parse two motd chunks correctly' do
|
|
|
|
# handcrafted fake packet
|
|
|
|
# two empty motd chunks
|
|
|
|
data = [
|
|
|
|
0x40, 0x02, 0x02, 0x02, 0x00,
|
|
|
|
0x40, 0x02, 0x02, 0x02, 0x00
|
2022-11-05 16:19:05 +00:00
|
|
|
].pack('C*')
|
2022-11-05 16:04:42 +00:00
|
|
|
chunks = BigChungusTheChunkGetter.get_chunks(data)
|
|
|
|
expect(chunks.size).to eq(2)
|
|
|
|
expect(chunks[0].msg).to eq(NETMSGTYPE_SV_MOTD)
|
|
|
|
expect(chunks[1].msg).to eq(NETMSGTYPE_SV_MOTD)
|
|
|
|
expect(chunks[0].sys).to eq(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'Should parse motd + server settings' do
|
|
|
|
# actual packet server sends
|
|
|
|
data = [
|
|
|
|
0x40, 0x02, 0x02, 0x02, 0x00, # motd
|
|
|
|
0x40, 0x07, 0x03, 0x22, 0x01, 0x00, 0x01, 0x00, 0x01, 0x08, # server settings
|
|
|
|
0x40, 0x01, 0x04, 0x0b # ready
|
2022-11-05 16:19:05 +00:00
|
|
|
].pack('C*')
|
2022-11-05 16:04:42 +00:00
|
|
|
chunks = BigChungusTheChunkGetter.get_chunks(data)
|
|
|
|
expect(chunks.size).to eq(3)
|
|
|
|
expect(chunks[0].msg).to eq(NETMSGTYPE_SV_MOTD)
|
|
|
|
expect(chunks[1].msg).to eq(NETMSGTYPE_SV_SERVERSETTINGS)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'Should parse map change packet' do
|
|
|
|
# actual mapchange the server sends
|
|
|
|
map_change = [
|
|
|
|
0x40, 0x32, 0x01, 0x05, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x00,
|
|
|
|
0xee, 0xcb, 0xd0, 0xd7, 0x02, 0x9c, 0x0e, 0x08, 0xa8, 0x15, 0x1a, 0xb3, 0xbb, 0xb1, 0xd4, 0x04,
|
|
|
|
0x75, 0x68, 0xec, 0xe3, 0x41, 0x6e, 0x83, 0x20, 0xaf, 0x97, 0x0f, 0x49, 0xbe, 0x4f, 0x3c, 0x61,
|
|
|
|
0x04, 0xf4, 0xbe, 0x60, 0xd2, 0x87, 0x39, 0x91, 0x59, 0xab
|
2022-11-05 16:19:05 +00:00
|
|
|
].pack('C*')
|
2022-11-05 16:04:42 +00:00
|
|
|
chunks = BigChungusTheChunkGetter.get_chunks(map_change)
|
|
|
|
expect(chunks.size).to eq(1)
|
|
|
|
expect(chunks[0].sys).to eq(true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|