in internal/mock/alloydb.go [339:385]
func metadataExchange(conn net.Conn) error {
msgSize := make([]byte, 4)
n, err := conn.Read(msgSize)
if err != nil {
return err
}
if n != 4 {
return fmt.Errorf("read %d bytes, want = 4", n)
}
size := binary.BigEndian.Uint32(msgSize)
buf := make([]byte, size)
n, err = conn.Read(buf)
if err != nil {
return err
}
if n != int(size) {
return fmt.Errorf("read %d bytes, want = %d", n, size)
}
m := &connectorspb.MetadataExchangeRequest{}
err = proto.Unmarshal(buf, m)
if err != nil {
return err
}
resp := &connectorspb.MetadataExchangeResponse{
ResponseCode: connectorspb.MetadataExchangeResponse_OK,
}
data, err := proto.Marshal(resp)
if err != nil {
return err
}
respSize := proto.Size(resp)
buf = make([]byte, 4)
binary.BigEndian.PutUint32(buf, uint32(respSize))
buf = append(buf, data...)
n, err = conn.Write(buf)
if err != nil {
return err
}
if n != len(buf) {
return fmt.Errorf("write %d bytes, want = %d", n, len(buf))
}
return nil
}