From d6f6a3485cb54e6460f39f38464a737dfd1a0262 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 21 Aug 2025 06:25:55 -0400 Subject: [PATCH] generate: Run encoder output through decoder in tests --- generate/generate_test.go | 141 ++------------------------------------ generate/misc_test.go | 36 ++++++++++ 2 files changed, 42 insertions(+), 135 deletions(-) diff --git a/generate/generate_test.go b/generate/generate_test.go index e8bdbc6..8f1575c 100644 --- a/generate/generate_test.go +++ b/generate/generate_test.go @@ -71,136 +71,7 @@ func init() { } } -func TestGenerateRunEncode(test *testing.T) { - testGenerateRun(test, &exampleProtocol, "encode", ` - // imports - `, ` - // test case - log.Println("MessageConnect") - messageConnect := MessageConnect { - Name: "rarity", - Password: "gems", - } - testEncode( - &messageConnect, - tu.S(0xE1, 0x02).AddVar( - []byte { 0x00, 0x00, 0x86, 'r', 'a', 'r', 'i', 't', 'y' }, - []byte { 0x00, 0x01, 0x84, 'g', 'e', 'm', 's' }, - )) - log.Println("MessageUserList") - messageUserList := MessageUserList { - Users: []User { - User { - Name: "rarity", - Bio: "asdjads", - Followers: 0x324, - }, - User { - Name: "deez nuts", - Bio: "logy", - Followers: 0x8000, - }, - User { - Name: "creekflow", - Bio: "im creekflow", - Followers: 0x3894, - }, - }, - } - testEncode( - &messageUserList, - tu.S(0xE1, 0x01, 0x00, 0x00, - 0xC1, 0x03, 0xE1, - ).Add(0x03).AddVar( - []byte { 0x00, 0x00, 0x86, 'r', 'a', 'r', 'i', 't', 'y' }, - []byte { 0x00, 0x01, 0x87, 'a', 's', 'd', 'j', 'a', 'd', 's' }, - []byte { 0x00, 0x02, 0x23, 0x00, 0x00, 0x03, 0x24 }, - ).Add(0x03).AddVar( - []byte { 0x00, 0x00, 0x89, 'd', 'e', 'e', 'z', ' ', 'n', 'u', 't', 's' }, - []byte { 0x00, 0x01, 0x84, 'l', 'o', 'g', 'y' }, - []byte { 0x00, 0x02, 0x23, 0x00, 0x00, 0x80, 0x00 }, - ).Add(0x03).AddVar( - []byte { 0x00, 0x00, 0x89, 'c', 'r', 'e', 'e', 'k', 'f', 'l', 'o', 'w' }, - []byte { 0x00, 0x01, 0x8C, 'i', 'm', ' ', 'c', 'r', 'e', 'e', 'k', 'f', - 'l', 'o', 'w' }, - []byte { 0x00, 0x02, 0x23, 0x00, 0x00, 0x38, 0x94 }, - )) - log.Println("MessagePulse") - messagePulse := MessagePulse { - Index: 9, - Offset: -0x3521, - X: 45.389, - Y: 294.1, - Z: 384729384.234892034, - } - testEncode( - &messagePulse, - tu.S(0xE1, 0x05).AddVar( - []byte { 0x00, 0x00, 0x09 }, - []byte { 0x00, 0x01, 0x41, 0xCA, 0xDF }, - []byte { 0x00, 0x02, 0x61, 0x51, 0xAC }, - []byte { 0x00, 0x03, 0x63, 0x43, 0x93, 0x0C, 0xCD }, - []byte { 0x00, 0x04, 0x67, 0x41, 0xB6, 0xEE, 0x81, 0x28, 0x3C, 0x21, 0xE2 }, - )) - log.Println("MessageNestedArray") - uint8s := func(n int) []uint8 { - array := make([]uint8, n) - for index := range array { - array[index] = uint8(index + 1) | 0xF0 - } - return array - } - messageNestedArray := MessageNestedArray { - uint8s(6), - uint8s(35), - } - testEncode( - &messageNestedArray, - tu.S(0xC1, 0x02, 0xC1, - 0x06, 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, - 35, 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, - 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, - 0xFD, 0xFE, 0xFF, 0xF0, 0xF1, 0xF2, - 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, - 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, - 0xFF, 0xF0, 0xF1, 0xF2, 0xF3)) - log.Println("MessageIntegers") - messageIntegers := MessageIntegers { - U5: 0x13, - U8: 0xC9, - U16: 0x34C9, - U32: 0x10E134C9, - U64: 0x639109BC10E134C9, - I8: 0x35, - I16: 0x34C9, - I32: 0x10E134C9, - I64: 0x639109BC10E134C9, - NI8: -0x35, - NI16: -0x34C9, - NI32: -0x10E134C9, - NI64: -0x639109BC10E134C9, - } - testEncode( - &messageIntegers, - tu.S(0xE1, 13).AddVar( - []byte { 0x00, 0x00, 0x13 }, - []byte { 0x00, 0x01, 0x20, 0xC9 }, - []byte { 0x00, 0x02, 0x21, 0x34, 0xC9 }, - []byte { 0x00, 0x03, 0x23, 0x10, 0xE1, 0x34, 0xC9 }, - []byte { 0x00, 0x04, 0x27, 0x63, 0x91, 0x09, 0xBC, 0x10, 0xE1, 0x34, 0xC9 }, - []byte { 0x00, 0x06, 0x40, 0x35 }, - []byte { 0x00, 0x07, 0x41, 0x34, 0xC9 }, - []byte { 0x00, 0x08, 0x43, 0x10, 0xE1, 0x34, 0xC9 }, - []byte { 0x00, 0x09, 0x47, 0x63, 0x91, 0x09, 0xBC, 0x10, 0xE1, 0x34, 0xC9 }, - []byte { 0x00, 0x0B, 0x40, 0xCB }, - []byte { 0x00, 0x0C, 0x41, 0xCB, 0x37 }, - []byte { 0x00, 0x0D, 0x43, 0xEF, 0x1E, 0xCB, 0x37 }, - []byte { 0x00, 0x0E, 0x47, 0x9C, 0x6E, 0xF6, 0x43, 0xEF, 0x1E, 0xCB, 0x37 }, - )) - `) -} - -func TestGenerateRunDecode(test *testing.T) { +func TestGenerateRunEncodeDecode(test *testing.T) { testGenerateRun(test, &exampleProtocol, "decode", ` // imports `, ` @@ -209,7 +80,7 @@ func TestGenerateRunDecode(test *testing.T) { Name: "rarity", Password: "gems", } - testDecode( + testEncodeDecode( &messageConnect, tu.S(0xE1, 0x02).AddVar( []byte { 0x00, 0x00, 0x86, 'r', 'a', 'r', 'i', 't', 'y' }, @@ -235,7 +106,7 @@ func TestGenerateRunDecode(test *testing.T) { }, }, } - testEncode( + testEncodeDecode( &messageUserList, tu.S(0xE1, 0x01, 0x00, 0x00, 0xC1, 0x03, 0xE1, @@ -261,7 +132,7 @@ func TestGenerateRunDecode(test *testing.T) { Y: 294.1, Z: 384729384.234892034, } - testEncode( + testEncodeDecode( &messagePulse, tu.S(0xE1, 0x05).AddVar( []byte { 0x00, 0x00, 0x09 }, @@ -282,7 +153,7 @@ func TestGenerateRunDecode(test *testing.T) { uint8s(6), uint8s(35), } - testEncode( + testEncodeDecode( &messageNestedArray, tu.S(0xC1, 0x02, 0xC1, 0x06, 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, @@ -308,7 +179,7 @@ func TestGenerateRunDecode(test *testing.T) { NI32: -0x10E134C9, NI64: -0x639109BC10E134C9, } - testEncode( + testEncodeDecode( &messageIntegers, tu.S(0xE1, 13).AddVar( []byte { 0x00, 0x00, 0x13 }, diff --git a/generate/misc_test.go b/generate/misc_test.go index c4e293f..3e08fc8 100644 --- a/generate/misc_test.go +++ b/generate/misc_test.go @@ -78,6 +78,42 @@ func testGenerateRun(test *testing.T, protocol *Protocol, title, imports, testCa log.Fatalln("not equal") } } + + // TODO: possibly combine the two above functions into this one, + // also take a data parameter here (snake) + func testEncodeDecode(message Message, data tu.Snake) {buffer := bytes.Buffer { } + log.Println("encoding:") + encoder := tape.NewEncoder(&buffer) + n, err := message.Encode(encoder) + if err != nil { log.Fatalf("at %d: %v\n", n, err) } + encoder.Flush() + got := buffer.Bytes() + log.Printf("got: [%s]", tu.HexBytes(got)) + log.Println("correct:", data) + if n != len(got) { + log.Fatalf("n incorrect: %d != %d\n", n, len(got)) + } + if ok, n := data.Check(got); !ok { + log.Fatalln("not equal at", n) + } + + log.Println("decoding:") + destination := reflect.New(reflect.ValueOf(message).Elem().Type()).Interface().(Message) + flat := data.Flatten() + log.Println("before: ", destination) + decoder := tape.NewDecoder(bytes.NewBuffer(flat)) + n, err = destination.Decode(decoder) + if err != nil { log.Fatalf("at %d: %v\n", n, err) } + log.Println("got: ", destination) + log.Println("correct:", message) + if n != len(flat) { + log.Fatalf("n incorrect: %d != %d\n", n, len(flat)) + } + if !reflect.DeepEqual(destination, message) { + log.Fatalln("not equal") + } + + } ` fmt.Fprintf( mainFile, "package main\n%s\nfunc main() {\n%s\n%s\n%s\n}\n%s",