generate: Test send, receive functions
This commit is contained in:
parent
5e965def7c
commit
ad930144cf
@ -7,8 +7,10 @@ import "testing"
|
||||
// generator is equal to something specific
|
||||
|
||||
var exampleProtocol = defaultProtocol()
|
||||
var pingProtocol = defaultProtocol()
|
||||
|
||||
func init() {
|
||||
// example protocol
|
||||
exampleProtocol.Messages[0x0000] = Message {
|
||||
Name: "Connect",
|
||||
Type: TypeTableDefined {
|
||||
@ -121,6 +123,16 @@ func init() {
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// ping protocol
|
||||
pingProtocol.Messages[0x0000] = Message {
|
||||
Name: "Ping",
|
||||
Type: TypeInt { Bits: 32, Signed: true },
|
||||
}
|
||||
pingProtocol.Messages[0x0001] = Message {
|
||||
Name: "Pong",
|
||||
Type: TypeInt { Bits: 32, Signed: true },
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateRunEncodeDecode(test *testing.T) {
|
||||
@ -485,3 +497,101 @@ func TestGenerateRunDecodeWrongType(test *testing.T) {
|
||||
}
|
||||
`)
|
||||
}
|
||||
|
||||
func TestGenerateRunSendReceive(test *testing.T) {
|
||||
testGenerateRun(test, &pingProtocol, "send-receive", `
|
||||
// imports
|
||||
import "git.tebibyte.media/sashakoshka/hopp/internal/mock"
|
||||
`, `
|
||||
log.Println("Send"); {
|
||||
message := MessagePing(77)
|
||||
trans := mock.Trans { }
|
||||
_, err := Send(&trans, &message)
|
||||
if err != nil { log.Fatal(err) }
|
||||
gotMethod, gotPayload := trans.Methods[0], trans.Messages[0]
|
||||
log.Printf("method M%04X", gotMethod)
|
||||
log.Println("payload", tu.HexBytes(gotPayload))
|
||||
if gotMethod != 0x0000 {
|
||||
log.Fatalln("wrong method")
|
||||
}
|
||||
if ok, n := snake.L(0x43, 0x00, 0x00, 0x00, 0x4D).Check(gotPayload); !ok {
|
||||
log.Fatalln("not equal at:", n)
|
||||
}
|
||||
}
|
||||
|
||||
log.Println("Receive"); {
|
||||
trans := mock.Trans {
|
||||
Methods: []uint16 { 1 },
|
||||
Messages: [][]byte { []byte { 0x43, 0x00, 0x00, 0x00, 0x4E } },
|
||||
}
|
||||
gotMessage, n, err := Receive(&trans)
|
||||
if err != nil { log.Fatal(err) }
|
||||
log.Println("message", gotMessage)
|
||||
log.Println("n", n)
|
||||
casted, ok := gotMessage.(MessagePong)
|
||||
if !ok { log.Fatalln("expected MessagePong") }
|
||||
if casted != 78 { log.Fatalln("wrong message value") }
|
||||
if n != 5 { log.Fatalln("wrong n value") }
|
||||
}
|
||||
`)
|
||||
}
|
||||
|
||||
func TestGenerateRunConn(test *testing.T) {
|
||||
testGenerateRun(test, &pingProtocol, "send-receive", `
|
||||
// imports
|
||||
import "sync"
|
||||
import "context"
|
||||
import "git.tebibyte.media/sashakoshka/hopp"
|
||||
`, `
|
||||
group := sync.WaitGroup { }
|
||||
group.Add(2)
|
||||
|
||||
// server
|
||||
listener, err := hopp.Listen("tcp", "localhost:9999", nil)
|
||||
if err != nil { log.Fatalln("SERVER listen:", err) }
|
||||
go func() {
|
||||
defer listener.Close()
|
||||
defer group.Done()
|
||||
|
||||
conn, err := listener.Accept()
|
||||
if err != nil { log.Fatalln("SERVER accept:", err) }
|
||||
trans, err := conn.AcceptTrans()
|
||||
if err != nil { log.Fatalln("SERVER accept trans:", err) }
|
||||
message, n, err := Receive(trans)
|
||||
if err != nil { log.Fatalln("SERVER receive:", err) }
|
||||
log.Println("SERVER got message", message)
|
||||
log.Println("SERVER got n", n)
|
||||
casted, ok := message.(MessagePing)
|
||||
if !ok { log.Fatalln("SERVER expected MessagePong") }
|
||||
if casted != 77 { log.Fatalln("SERVER wrong message value") }
|
||||
if n != 5 { log.Fatalln("SERVER wrong n value") }
|
||||
}()
|
||||
|
||||
// client
|
||||
go func() {
|
||||
defer group.Done()
|
||||
|
||||
log.Println("CLIENT dialing")
|
||||
conn, err := hopp.Dial(
|
||||
context.Background(),
|
||||
"tcp", "localhost:9999",
|
||||
nil)
|
||||
if err != nil { log.Fatalln("CLIENT dial:", err) }
|
||||
defer conn.Close()
|
||||
log.Println("CLIENT connected")
|
||||
|
||||
log.Println("CLIENT opening trans")
|
||||
trans, err := conn.OpenTrans()
|
||||
if err != nil { log.Fatalln("CLIENT open trans:", err) }
|
||||
message := MessagePing(77)
|
||||
log.Println("CLIENT sending message")
|
||||
n, err := Send(trans, &message)
|
||||
if err != nil { log.Fatalln("CLIENT send:", err) }
|
||||
log.Println("CLIENT sent n", n)
|
||||
if n != 5 { log.Fatalln("CLIENT wrong n value") }
|
||||
}()
|
||||
|
||||
group.Wait()
|
||||
`)
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user