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
|
// generator is equal to something specific
|
||||||
|
|
||||||
var exampleProtocol = defaultProtocol()
|
var exampleProtocol = defaultProtocol()
|
||||||
|
var pingProtocol = defaultProtocol()
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
// example protocol
|
||||||
exampleProtocol.Messages[0x0000] = Message {
|
exampleProtocol.Messages[0x0000] = Message {
|
||||||
Name: "Connect",
|
Name: "Connect",
|
||||||
Type: TypeTableDefined {
|
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) {
|
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