package org.openrs2.protocol.js5 import io.netty.buffer.Unpooled import io.netty.channel.embedded.EmbeddedChannel import io.netty.handler.codec.DecoderException import org.openrs2.buffer.wrappedBuffer import org.openrs2.protocol.js5.upstream.Js5Request import org.openrs2.protocol.js5.upstream.Js5RequestDecoder import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith class Js5RequestDecoderTest { @Test fun testDecode() { testDecode(byteArrayOf(0, 2, 0, 3), Js5Request.Group(true, 2, 3)) testDecode(byteArrayOf(1, 2, 0, 3), Js5Request.Group(false, 2, 3)) testDecode(byteArrayOf(4, 0x55, 0, 0), Js5Request.Rekey(0x55)) testDecode(byteArrayOf(2, 0, 0, 0), Js5Request.LoggedIn) testDecode(byteArrayOf(3, 0, 0, 0), Js5Request.LoggedOut) testDecode(byteArrayOf(6, 0, 0, 3), Js5Request.Connected) testDecode(byteArrayOf(7, 0, 0, 0), Js5Request.Disconnect) } @Test fun testFragmented() { val channel = EmbeddedChannel(Js5RequestDecoder()) channel.writeInbound(wrappedBuffer(0, 2)) channel.writeInbound(wrappedBuffer(0, 3)) assertEquals(Js5Request.Group(true, 2, 3), channel.readInbound()) } @Test fun testUnknownOpcode() { val channel = EmbeddedChannel(Js5RequestDecoder()) assertFailsWith { channel.writeInbound(wrappedBuffer(8, 0, 0, 0)) } } private fun testDecode(bytes: ByteArray, expected: Js5Request) { val channel = EmbeddedChannel(Js5RequestDecoder()) channel.writeInbound(Unpooled.wrappedBuffer(bytes)) assertEquals(expected, channel.readInbound()) } }